Skip to content

Commit e36576b

Browse files
committed
test_ecdsa: clean up the tests from X9.62
1 parent da6b9f6 commit e36576b

File tree

1 file changed

+42
-56
lines changed

1 file changed

+42
-56
lines changed

src/ecdsa/test_ecdsa.py

Lines changed: 42 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
import sys
33
import hypothesis.strategies as st
44
from hypothesis import given, settings, note
5+
try:
6+
import unittest2 as unittest
7+
except ImportError:
8+
import unittest
59
import pytest
610
from .ecdsa import Private_key, Public_key, Signature, \
711
generator_192, digest_integer, ellipticcurve, point_is_valid, \
@@ -16,62 +20,44 @@
1620
HYP_SETTINGS["deadline"] = 5000
1721

1822

19-
def test_ecdsa():
20-
class TestFailure(Exception):
21-
pass
22-
23-
print("NIST Curve P-192:")
24-
25-
p192 = generator_192
26-
27-
# From X9.62:
28-
29-
d = 651056770906015076056810763456358567190100156695615665659
30-
Q = d * p192
31-
if Q.x() != 0x62B12D60690CDCF330BABAB6E69763B471F994DD702D16A5:
32-
raise TestFailure("*** p192 * d came out wrong.")
33-
else:
34-
print("p192 * d came out right.")
35-
36-
k = 6140507067065001063065065565667405560006161556565665656654
37-
R = k * p192
38-
if R.x() != 0x885052380FF147B734C330C43D39B2C4A89F29B0F749FEAD \
39-
or R.y() != 0x9CF9FA1CBEFEFB917747A3BB29C072B9289C2547884FD835:
40-
raise TestFailure("*** k * p192 came out wrong.")
41-
else:
42-
print("k * p192 came out right.")
43-
44-
u1 = 2563697409189434185194736134579731015366492496392189760599
45-
u2 = 6266643813348617967186477710235785849136406323338782220568
46-
temp = u1 * p192 + u2 * Q
47-
if temp.x() != 0x885052380FF147B734C330C43D39B2C4A89F29B0F749FEAD \
48-
or temp.y() != 0x9CF9FA1CBEFEFB917747A3BB29C072B9289C2547884FD835:
49-
raise TestFailure("*** u1 * p192 + u2 * Q came out wrong.")
50-
else:
51-
print("u1 * p192 + u2 * Q came out right.")
52-
53-
e = 968236873715988614170569073515315707566766479517
54-
pubk = Public_key(generator_192, generator_192 * d)
55-
privk = Private_key(pubk, d)
56-
sig = privk.sign(e, k)
57-
r, s = sig.r, sig.s
58-
if r != 3342403536405981729393488334694600415596881826869351677613 \
59-
or s != 5735822328888155254683894997897571951568553642892029982342:
60-
raise TestFailure("*** r or s came out wrong.")
61-
else:
62-
print("r and s came out right.")
63-
64-
valid = pubk.verifies(e, sig)
65-
if valid:
66-
print("Signature verified OK.")
67-
else:
68-
raise TestFailure("*** Signature failed verification.")
69-
70-
valid = pubk.verifies(e - 1, sig)
71-
if not valid:
72-
print("Forgery was correctly rejected.")
73-
else:
74-
raise TestFailure("*** Forgery was erroneously accepted.")
23+
class TestP192FromX9_62(unittest.TestCase):
24+
"""Check test vectors from X9.62"""
25+
@classmethod
26+
def setUpClass(cls):
27+
cls.d = 651056770906015076056810763456358567190100156695615665659
28+
cls.Q = cls.d * generator_192
29+
cls.k = 6140507067065001063065065565667405560006161556565665656654
30+
cls.R = cls.k * generator_192
31+
32+
cls.msg = 968236873715988614170569073515315707566766479517
33+
cls.pubk = Public_key(generator_192, generator_192 * cls.d)
34+
cls.privk = Private_key(cls.pubk, cls.d)
35+
cls.sig = cls.privk.sign(cls.msg, cls.k)
36+
37+
def test_point_multiplication(self):
38+
assert self.Q.x() == 0x62B12D60690CDCF330BABAB6E69763B471F994DD702D16A5
39+
40+
def test_point_multiplication_2(self):
41+
assert self.R.x() == 0x885052380FF147B734C330C43D39B2C4A89F29B0F749FEAD
42+
assert self.R.y() == 0x9CF9FA1CBEFEFB917747A3BB29C072B9289C2547884FD835
43+
44+
def test_mult_and_addition(self):
45+
u1 = 2563697409189434185194736134579731015366492496392189760599
46+
u2 = 6266643813348617967186477710235785849136406323338782220568
47+
temp = u1 * generator_192 + u2 * self.Q
48+
assert temp.x() == 0x885052380FF147B734C330C43D39B2C4A89F29B0F749FEAD
49+
assert temp.y() == 0x9CF9FA1CBEFEFB917747A3BB29C072B9289C2547884FD835
50+
51+
def test_signature(self):
52+
r, s = self.sig.r, self.sig.s
53+
assert r == 3342403536405981729393488334694600415596881826869351677613
54+
assert s == 5735822328888155254683894997897571951568553642892029982342
55+
56+
def test_verification(self):
57+
assert self.pubk.verifies(self.msg, self.sig)
58+
59+
def test_rejection(self):
60+
assert not self.pubk.verifies(self.msg - 1, self.sig)
7561

7662

7763
# Testing point validity, as per ECDSAVS.pdf B.2.2:

0 commit comments

Comments
 (0)