def test_invalid_or_composition(): r = Secret(10) g1, g2, g3 = make_generators(3) st1 = DLRep(10 * g1, r * g1) st21 = DLRep(10 * g2, r * g2) st22 = DLRep(12 * g3, r * g3) st22.set_simulated() st2 = st21 | st22 st = st1 & st2 with pytest.raises(InvalidSecretsError): st.prove()
def test_dlrep_or_rangeproof(group): g, h = make_generators(2) x = Secret(9) y = Secret(42) z = Secret(40) c = x.value * g + y.value * h c2 = z.value * g + y.value * h stmt1 = DLRep(c, x * g + y * h) & RangeStmt(c, g, h, 0, 50, x, y) stmt2 = DLRep(c2, z * g + y * h) & RangeStmt(c2, g, h, 0, 50, z, y) stmt1.set_simulated() or_stmt = OrProofStmt(stmt1, stmt2) nizk = or_stmt.prove() assert or_stmt.verify(nizk)
def test_invalid_or_composition_inside_two_or(): r = Secret(10) g1, g2, g3, g4 = make_generators(4) st11 = DLRep(r.value * g1, r * g1) st12 = DLRep(2 * g2, r * g2) st12.set_simulated() st1 = st11 | st12 st21 = DLRep(7 * g3, r * g3) st21.simluation = True st22 = DLRep(r.value * g4, r * g4) st2 = st21 | st22 st = st1 & st2 with pytest.raises(InvalidSecretsError): st.prove()
# Set up the proof statement. # First, compute the values, "left-hand side". y0 = x0.value * g0 y1 = x1.value * g1 # Next, create the proof statement. stmt = DLRep(y0, x0 * g0) | DLRep(y1, x1 * g1) # Set the first clause as simulated. stmt.subproofs[0].set_simulated() # This is an equivalent way to define the proof statement above. stmt_1 = DLRep(y0, x0 * g0) stmt_2 = DLRep(y1, x1 * g1) stmt_1.set_simulated() equivalent_stmt = OrProofStmt(stmt_1, stmt_2) assert stmt.get_proof_id() == equivalent_stmt.get_proof_id() # Another equivalent way. stmt_1 = DLRep(y0, x0 * g0, simulated=True) stmt_2 = DLRep(y1, x1 * g1) equivalent_stmt = OrProofStmt(stmt_1, stmt_2) assert stmt.get_proof_id() == equivalent_stmt.get_proof_id() # Execute the protocol. prover = stmt.get_prover()