diff options
Diffstat (limited to 'test/ec/test_signature.py')
| -rw-r--r-- | test/ec/test_signature.py | 74 |
1 files changed, 43 insertions, 31 deletions
diff --git a/test/ec/test_signature.py b/test/ec/test_signature.py index 06b6123..b7cccec 100644 --- a/test/ec/test_signature.py +++ b/test/ec/test_signature.py @@ -4,7 +4,7 @@ from unittest import TestCase from pyecsca.ec.curves import get_curve from pyecsca.ec.mult import LTRMultiplier from pyecsca.ec.signature import * - +from parameterized import parameterized class SignatureTests(TestCase): @@ -12,55 +12,67 @@ class SignatureTests(TestCase): self.secp128r1 = get_curve("secp128r1", "projective") self.add = self.secp128r1.curve.coordinate_model.formulas["add-2007-bl"] self.dbl = self.secp128r1.curve.coordinate_model.formulas["dbl-2007-bl"] - self.mult = LTRMultiplier(self.secp128r1, self.add, self.dbl) + self.mult = LTRMultiplier(self.add, self.dbl) self.msg = 0xcafebabe.to_bytes(4, byteorder="big") self.priv = 0xdeadbeef - self.pub = self.mult.multiply(self.priv, self.secp128r1.generator) - self.algos = [ECDSA_SHA1, ECDSA_SHA224, ECDSA_SHA256, ECDSA_SHA384, ECDSA_SHA512] + self.mult.init(self.secp128r1, self.secp128r1.generator) + self.pub = self.mult.multiply(self.priv) - def test_all(self): - for algo in self.algos: - signer = algo(self.mult, privkey=self.priv) - assert signer.can_sign - sig = signer.sign_data(self.msg) - verifier = algo(self.mult, add=self.add, pubkey=self.pub) - assert verifier.can_verify - assert verifier.verify_data(sig, self.msg) - none = ECDSA_NONE(self.mult, add=self.add, pubkey=self.pub, privkey=self.priv) - digest = sha1(self.msg).digest() - sig = none.sign_hash(digest) - assert none.verify_hash(sig, digest) - sig = none.sign_data(digest) - assert none.verify_data(sig, digest) + @parameterized.expand([ + ("SHA1", ECDSA_SHA1), + ("SHA224", ECDSA_SHA224), + ("SHA256", ECDSA_SHA256), + ("SHA384", ECDSA_SHA384), + ("SHA512", ECDSA_SHA512) + ]) + def test_all(self, name, algo): + signer = algo(self.mult, self.secp128r1, privkey=self.priv) + assert signer.can_sign + sig = signer.sign_data(self.msg) + verifier = algo(self.mult, self.secp128r1, add=self.add, pubkey=self.pub) + assert verifier.can_verify + assert verifier.verify_data(sig, self.msg) + # none = ECDSA_NONE(self.mult, add=self.add, pubkey=self.pub, privkey=self.priv) + # digest = sha1(self.msg).digest() + # sig = none.sign_hash(digest) + # assert none.verify_hash(sig, digest) + # sig = none.sign_data(digest) + # assert none.verify_data(sig, digest) def test_cannot(self): - ok = ECDSA_NONE(self.mult, add=self.add, pubkey=self.pub, privkey=self.priv) + ok = ECDSA_NONE(self.mult, self.secp128r1, add=self.add, pubkey=self.pub, privkey=self.priv) data = b"aaaa" sig = ok.sign_data(data) - no_priv = ECDSA_NONE(self.mult, pubkey=self.pub) + no_priv = ECDSA_NONE(self.mult, self.secp128r1, pubkey=self.pub) with self.assertRaises(RuntimeError): no_priv.sign_data(data) with self.assertRaises(RuntimeError): no_priv.sign_hash(data) - no_pubadd = ECDSA_NONE(self.mult, privkey=self.priv) + no_pubadd = ECDSA_NONE(self.mult, self.secp128r1, privkey=self.priv) with self.assertRaises(RuntimeError): no_pubadd.verify_data(sig, data) with self.assertRaises(RuntimeError): no_pubadd.verify_hash(sig, data) with self.assertRaises(ValueError): - Signature(self.mult) + Signature(self.mult, self.secp128r1) - def test_fixed_nonce(self): - for algo in self.algos: - signer = algo(self.mult, privkey=self.priv) - sig_one = signer.sign_data(self.msg, nonce=0xabcdef) - sig_other = signer.sign_data(self.msg, nonce=0xabcdef) - verifier = algo(self.mult, add=self.add, pubkey=self.pub) - assert verifier.verify_data(sig_one, self.msg) - assert verifier.verify_data(sig_other, self.msg) - self.assertEqual(sig_one, sig_other) + @parameterized.expand([ + ("SHA1", ECDSA_SHA1), + ("SHA224", ECDSA_SHA224), + ("SHA256", ECDSA_SHA256), + ("SHA384", ECDSA_SHA384), + ("SHA512", ECDSA_SHA512) + ]) + def test_fixed_nonce(self, name, algo): + signer = algo(self.mult, self.secp128r1, privkey=self.priv) + sig_one = signer.sign_data(self.msg, nonce=0xabcdef) + sig_other = signer.sign_data(self.msg, nonce=0xabcdef) + verifier = algo(self.mult, self.secp128r1, add=self.add, pubkey=self.pub) + assert verifier.verify_data(sig_one, self.msg) + assert verifier.verify_data(sig_other, self.msg) + self.assertEqual(sig_one, sig_other) def test_der(self): sig = SignatureResult(0xaaaaa, 0xbbbbb) |
