1818from .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
2323from .ellipticcurve import Point
2424from . import der
2525from . 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