def test_schnorr_proofs_invalid_public_key(self, keypair: ElGamalKeyPair, nonce: ElementModQ, other: ElementModP) -> None: proof = make_schnorr_proof(keypair, nonce) assume(other != proof.k) proof2 = SchnorrProof(other, proof.h, proof.u) self.assertFalse(proof2.is_valid())
def test_schnorr_proofs_bounds_checking(self, keypair: ElGamalKeyPair, nonce: ElementModQ) -> None: proof = make_schnorr_proof(keypair, nonce) proof2 = SchnorrProof(ZERO_MOD_P, proof.h, proof.u) proof3 = SchnorrProof(int_to_p_unchecked(P), proof.h, proof.u) self.assertFalse(proof2.is_valid()) self.assertFalse(proof3.is_valid())
def test_schnorr_proofs_invalid_public_key(self, keypair: ElGamalKeyPair, nonce: ElementModQ, other: ElementModP) -> None: proof = make_schnorr_proof(keypair, nonce) assume(other != proof.public_key) proof2 = SchnorrProof(other, proof.commitment, proof.challenge, proof.response) self.assertFalse(proof2.is_valid())
def test_schnorr_proofs_invalid_h( self, keypair: ElGamalKeyPair, nonce: ElementModQ, other: ElementModP ) -> None: proof = make_schnorr_proof(keypair, nonce) (k, h, u) = proof assume(other != h) proof_bad = proof._replace(h=other) self.assertFalse(proof_bad.is_valid())
def test_schnorr_proofs_invalid_u( self, keypair: ElGamalKeyPair, nonce: ElementModQ, other: ElementModQ ) -> None: proof = make_schnorr_proof(keypair, nonce) (k, h, u) = proof assume(other != u) proof2 = SchnorrProof(k, h, other) self.assertFalse(proof2.is_valid())
def test_schnorr_proofs_valid(self, keypair: ElGamalKeyPair, nonce: ElementModQ) -> None: proof = make_schnorr_proof(keypair, nonce) self.assertTrue(proof.is_valid())
def test_schnorr_proofs_simple(self) -> None: # doesn't get any simpler than this keypair = get_optional(elgamal_keypair_from_secret(TWO_MOD_Q)) nonce = ONE_MOD_Q proof = make_schnorr_proof(keypair, nonce) self.assertTrue(proof.is_valid())