Skip to content

Commit 8952c43

Browse files
committed
Add RFC 6932 test vectors
1 parent d9e44ca commit 8952c43

File tree

1 file changed

+63
-4
lines changed

1 file changed

+63
-4
lines changed

src/ecdsa/test_pyecdsa.py

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
from .curves import NIST192p, NIST224p, NIST256p, NIST384p, NIST521p, SECP256k1, \
1919
BRAINPOOLP160r1, BRAINPOOLP192r1, BRAINPOOLP224r1, BRAINPOOLP256r1, \
2020
BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1
21-
from .ecdsa import curve_brainpoolp256r1, curve_brainpoolp384r1, \
22-
curve_brainpoolp512r1
21+
from .ecdsa import curve_brainpoolp224r1, curve_brainpoolp256r1, \
22+
curve_brainpoolp384r1, curve_brainpoolp512r1
2323
from .ellipticcurve import Point
2424
from . import der
2525
from . import rfc6979
@@ -776,8 +776,7 @@ def test_10(self):
776776
expected=int("16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56D", 16))
777777

778778

779-
class RFC7027(unittest.TestCase):
780-
# https://tools.ietf.org/html/rfc7027#appendix-A
779+
class ECDH(unittest.TestCase):
781780
def _do(self, curve, generator, dA, x_qA, y_qA, dB, x_qB, y_qB, x_Z, y_Z):
782781
qA = dA * generator
783782
qB = dB * generator
@@ -787,6 +786,66 @@ def _do(self, curve, generator, dA, x_qA, y_qA, dB, x_qB, y_qB, x_Z, y_Z):
787786
self.assertTrue((dA * qB) == (dA * dB * generator) == (dB * dA * generator) == (dB * qA))
788787
self.assertEqual(Point(curve, x_Z, y_Z), Z)
789788

789+
790+
class RFC6932(ECDH):
791+
# https://tools.ietf.org/html/rfc6932#appendix-A.1
792+
793+
def test_brainpoolP224r1(self):
794+
self._do(
795+
curve=curve_brainpoolp224r1,
796+
generator=BRAINPOOLP224r1.generator,
797+
dA=int("7C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495E", 16),
798+
x_qA=int("B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2", 16),
799+
y_qA=int("46D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94", 16),
800+
dB=int("63976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FB", 16),
801+
x_qB=int("2A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874E", 16),
802+
y_qB=int("9B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25B", 16),
803+
x_Z=int("312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EB", 16),
804+
y_Z=int("6F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98", 16))
805+
806+
def test_brainpoolP256r1(self):
807+
self._do(
808+
curve=curve_brainpoolp256r1,
809+
generator=BRAINPOOLP256r1.generator,
810+
dA=int("041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699", 16),
811+
x_qA=int("78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206", 16),
812+
y_qA=int("A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92B", 16),
813+
dB=int("06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3", 16),
814+
x_qB=int("8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DB", 16),
815+
y_qB=int("148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40D", 16),
816+
x_Z=int("05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708", 16),
817+
y_Z=int("6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134C", 16))
818+
819+
def test_brainpoolP384r1(self):
820+
self._do(
821+
curve=curve_brainpoolp384r1,
822+
generator=BRAINPOOLP384r1.generator,
823+
dA=int("014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76A", 16),
824+
x_qA=int("45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4E", 16),
825+
y_qA=int("8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859", 16),
826+
dB=int("6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54", 16),
827+
x_qB=int("01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8", 16),
828+
y_qB=int("3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347AC", 16),
829+
x_Z=int("04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423EC", 16),
830+
y_Z=int("7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64E", 16))
831+
832+
def test_brainpoolP512r1(self):
833+
self._do(
834+
curve=curve_brainpoolp512r1,
835+
generator=BRAINPOOLP512r1.generator,
836+
dA=int("636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333", 16),
837+
x_qA=int("0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDA", 16),
838+
y_qA=int("A7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642E", 16),
839+
dB=int("0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8B", 16),
840+
x_qB=int("5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323", 16),
841+
y_qB=int("96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BE", 16),
842+
x_Z=int("1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191E", 16),
843+
y_Z=int("2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6", 16))
844+
845+
846+
class RFC7027(ECDH):
847+
# https://tools.ietf.org/html/rfc7027#appendix-A
848+
790849
def test_brainpoolP256r1(self):
791850
self._do(
792851
curve=curve_brainpoolp256r1,

0 commit comments

Comments
 (0)