def test_and_proof_non_interactive_fails_when_wrong_secrets(params, group):
    p1, p2, secrets = params
    andp = AndProofStmt(p1, p2)

    bad_secrets = secrets.copy()
    u = list(bad_secrets.keys())
    bad_secrets[u[0]] = group.order().random()

    message = "whatever"
    tr = andp.prove(bad_secrets, message=message)
    assert not andp.verify(tr, message=message)
def test_and_proof_simulation_2(group):
    n = 3
    secret_values = [Bn(i) for i in range(n)]
    secrets = [Secret() for _ in range(n)]
    generators = make_generators(n, group)
    lhs = group.wsum(secret_values, generators)

    subproof1 = DLRep(lhs, wsum_secrets(secrets, generators))
    subproof2 = DLRep(lhs, wsum_secrets(secrets, generators))
    andp = AndProofStmt(subproof1, subproof2)
    tr = andp.simulate()
    assert andp.verify_simulation_consistency(tr)
    assert not andp.verify(tr)
def test_and_proof_non_interactive(params):
    p1, p2, secrets = params
    p = AndProofStmt(p1, p2)
    message = "whatever"
    tr = p.prove(secrets, message=message)
    assert p.verify(tr, message=message)