|
10 | 10 | import subprocess |
11 | 11 | import pytest |
12 | 12 | from binascii import hexlify, unhexlify |
13 | | -from hashlib import sha1, sha256, sha512 |
| 13 | +from hashlib import sha1, sha256, sha384, sha512 |
14 | 14 | import hashlib |
15 | 15 | from functools import partial |
16 | 16 |
|
@@ -1378,3 +1378,68 @@ def test_brainpoolP512r1(self): |
1378 | 1378 | y_Z=int("7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8" |
1379 | 1379 | "B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A83" |
1380 | 1380 | "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