@@ -1385,8 +1385,7 @@ def test_brainpoolP512r1(self):
13851385 "2BE6A26680A2" , 16 ))
13861386
13871387
1388- class RFC7027 (unittest .TestCase ):
1389- # https://tools.ietf.org/html/rfc7027#appendix-A
1388+ class ECDH (unittest .TestCase ):
13901389 def _do (self , curve , generator , dA , x_qA , y_qA , dB , x_qB , y_qB , x_Z , y_Z ):
13911390 qA = dA * generator
13921391 qB = dB * generator
@@ -1396,6 +1395,66 @@ def _do(self, curve, generator, dA, x_qA, y_qA, dB, x_qB, y_qB, x_Z, y_Z):
13961395 self .assertTrue ((dA * qB ) == (dA * dB * generator ) == (dB * dA * generator ) == (dB * qA ))
13971396 self .assertEqual (Point (curve , x_Z , y_Z ), Z )
13981397
1398+
1399+ class RFC6932 (ECDH ):
1400+ # https://tools.ietf.org/html/rfc6932#appendix-A.1
1401+
1402+ def test_brainpoolP224r1 (self ):
1403+ self ._do (
1404+ curve = curve_brainpoolp224r1 ,
1405+ generator = BRAINPOOLP224r1 .generator ,
1406+ dA = int ("7C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495E" , 16 ),
1407+ x_qA = int ("B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2" , 16 ),
1408+ y_qA = int ("46D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94" , 16 ),
1409+ dB = int ("63976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FB" , 16 ),
1410+ x_qB = int ("2A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874E" , 16 ),
1411+ y_qB = int ("9B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25B" , 16 ),
1412+ x_Z = int ("312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EB" , 16 ),
1413+ y_Z = int ("6F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98" , 16 ))
1414+
1415+ def test_brainpoolP256r1 (self ):
1416+ self ._do (
1417+ curve = curve_brainpoolp256r1 ,
1418+ generator = BRAINPOOLP256r1 .generator ,
1419+ dA = int ("041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699" , 16 ),
1420+ x_qA = int ("78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206" , 16 ),
1421+ y_qA = int ("A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92B" , 16 ),
1422+ dB = int ("06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3" , 16 ),
1423+ x_qB = int ("8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DB" , 16 ),
1424+ y_qB = int ("148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40D" , 16 ),
1425+ x_Z = int ("05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708" , 16 ),
1426+ y_Z = int ("6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134C" , 16 ))
1427+
1428+ def test_brainpoolP384r1 (self ):
1429+ self ._do (
1430+ curve = curve_brainpoolp384r1 ,
1431+ generator = BRAINPOOLP384r1 .generator ,
1432+ dA = int ("014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76A" , 16 ),
1433+ x_qA = int ("45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4E" , 16 ),
1434+ y_qA = int ("8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859" , 16 ),
1435+ dB = int ("6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54" , 16 ),
1436+ x_qB = int ("01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8" , 16 ),
1437+ y_qB = int ("3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347AC" , 16 ),
1438+ x_Z = int ("04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423EC" , 16 ),
1439+ y_Z = int ("7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64E" , 16 ))
1440+
1441+ def test_brainpoolP512r1 (self ):
1442+ self ._do (
1443+ curve = curve_brainpoolp512r1 ,
1444+ generator = BRAINPOOLP512r1 .generator ,
1445+ dA = int ("636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333" , 16 ),
1446+ x_qA = int ("0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDA" , 16 ),
1447+ y_qA = int ("A7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642E" , 16 ),
1448+ dB = int ("0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8B" , 16 ),
1449+ x_qB = int ("5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323" , 16 ),
1450+ y_qB = int ("96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BE" , 16 ),
1451+ x_Z = int ("1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191E" , 16 ),
1452+ y_Z = int ("2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6" , 16 ))
1453+
1454+
1455+ class RFC7027 (ECDH ):
1456+ # https://tools.ietf.org/html/rfc7027#appendix-A
1457+
13991458 def test_brainpoolP256r1 (self ):
14001459 self ._do (
14011460 curve = curve_brainpoolp256r1 ,
0 commit comments