Skip to content

Commit aed84bb

Browse files
committed
add vectors from RFC4754
1 parent 7cf99f0 commit aed84bb

File tree

1 file changed

+66
-1
lines changed

1 file changed

+66
-1
lines changed

src/ecdsa/test_pyecdsa.py

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import subprocess
1111
import pytest
1212
from binascii import hexlify, unhexlify
13-
from hashlib import sha1, sha256, sha512
13+
from hashlib import sha1, sha256, sha384, sha512
1414
import hashlib
1515
from functools import partial
1616

@@ -1378,3 +1378,68 @@ def test_brainpoolP512r1(self):
13781378
y_Z=int("7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8"
13791379
"B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A83"
13801380
"2BE6A26680A2", 16))
1381+
1382+
1383+
# https://tools.ietf.org/html/rfc4754#page-5
1384+
@pytest.mark.parametrize("w, gwx, gwy, k, msg, md, r, s, curve",
1385+
[pytest.param(
1386+
"DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F",
1387+
"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970",
1388+
"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D",
1389+
"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECE",
1390+
b"abc",
1391+
sha256,
1392+
"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C",
1393+
"86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315",
1394+
NIST256p,
1395+
id="ECDSA-256"),
1396+
pytest.param(
1397+
"0BEB646634BA87735D77AE4809A0EBEA865535DE4C1E1DCB692E84708E81A5AF"
1398+
"62E528C38B2A81B35309668D73524D9F",
1399+
"96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA"
1400+
"5CE10C9DFEC21797415710721F437922",
1401+
"447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD"
1402+
"3D383B91C5E7EDAA2B714CC99D5743CA",
1403+
"B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B"
1404+
"854D7FA992F934D927376285E63414FA",
1405+
b'abc',
1406+
sha384,
1407+
"FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E"
1408+
"08E07C9C63F2D21A07DCB56A6AF56EB3",
1409+
"B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1"
1410+
"CBB9F516CE0FA7D2FF630863A00E8B9F",
1411+
NIST384p,
1412+
id="ECDSA-384"),
1413+
pytest.param(
1414+
"0065FDA3409451DCAB0A0EAD45495112A3D813C17BFD34BDF8C1209D7DF58491"
1415+
"20597779060A7FF9D704ADF78B570FFAD6F062E95C7E0C5D5481C5B153B48B37"
1416+
"5FA1",
1417+
"0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F"
1418+
"7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD190"
1419+
"52A8",
1420+
"006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317"
1421+
"D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEA"
1422+
"E643",
1423+
"00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9"
1424+
"373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B95"
1425+
"6C2F",
1426+
b'abc',
1427+
sha512,
1428+
"0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339"
1429+
"B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE54432055"
1430+
"2251",
1431+
"017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4"
1432+
"975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F86647"
1433+
"2660",
1434+
NIST521p,
1435+
id="ECDSA-521")
1436+
])
1437+
def test_RFC4754_vectors(w, gwx, gwy, k, msg, md, r, s, curve):
1438+
sk = SigningKey.from_string(unhexlify(w), curve)
1439+
vk = VerifyingKey.from_string(unhexlify(gwx + gwy), curve)
1440+
assert sk.verifying_key == vk
1441+
sig = sk.sign(msg, hashfunc=md, sigencode=sigencode_strings, k=int(k, 16))
1442+
1443+
assert sig == (unhexlify(r), unhexlify(s))
1444+
1445+
assert vk.verify(sig, msg, md, sigdecode_strings)

0 commit comments

Comments
 (0)