test_secp_521r1:
// secp 521 r1
P = 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
A = 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FC
B = 00 51 95 3E B9 61 8E 1C 9A 1F 92 9A 21 A0 B6 85 40 EE A2 DA 72 5B 99 B3 15 F3 B8 B4 89 91 8E F1 09 E1 56 19 39 51 EC 7E 93 7B 16 52 C0 BD 3B B1 BF 07 35 73 DF 88 3D 2C 34 F1 EF 45 1F D4 6B 50 3F 00
GX = 00 C6 85 8E 06 B7 04 04 E9 CD 9E 3E CB 66 23 95 B4 42 9C 64 81 39 05 3F B5 21 F8 28 AF 60 6B 4D 3D BA A1 4B 5E 77 EF E7 59 28 FE 1D C1 27 A2 FF A8 DE 33 48 B3 C1 85 6A 42 9B F9 7E 7E 31 C2 E5 BD 66
GY = 01 18 39 29 6A 78 9A 3B C0 04 5C 8A 5F B4 2C 7D 1B D9 98 F5 44 49 57 9B 44 68 17 AF BD 17 27 3E 66 2C 97 EE 72 99 5E F4 26 40 C5 50 B9 01 3F AD 07 61 35 3C 70 86 A2 72 C2 40 88 BE 94 76 9F D1 66 50
N = 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FA 51 86 87 83 BF 2F 96 6B 7F CC 01 48 F7 09 A5 D0 3B B5 C9 B8 89 9C 47 AE BB 6F B7 1E 91 38 64 09
h = 01
hex_len_in_byte = datalen( $p )
r = new_ecc_initialize( $p, $a, $b, $gx, $gy, $n, $h, $hex_len_in_byte )
if $r != 00
?
pause
endif
keypair = new_ecc_generate_keypair()
len = datalen( $keypair )
prilen = big_div( $len, 03 )
if $len > 00
pri = hmid( $keypair, 00, $prilen )
pub = hmid( $keypair, $prilen )
else
// error
pause
endif
r = new_ecc_check_pubkey( $pub )
if $r != 00
?
pause
endif
pri = 00E5039272164B644F6D723911F051E322DE136079C1495C426D0EC92AAF5DF61A9457A810926B1F2EFB0F1A4A80512509AA3BE4739A4613386F736F18185DCD248B
pub = 01C231297EFC65D63D287A101B1B8F8E9A9580DBA30BF7F08FB610CA7BBC89EF601EB226344B51A53ACB400D10D0DAC1FD851A9A582FE145A374B5F742FAD828F49B01423E8B4A22085299AD3605829D0175359CA5F6CE992A75E5C6C1BC888BBF88E15597146DAAC1FE8042F05989A7B966039A08A5DDC51ACDCB6556EEF5751CA7CB05
x = new_ecc_get_pubkey( $pri )
if $x != $pub
?
pause
endif
r = new_ecc_check_pubkey( $pub )
if $r != 00
?
pause
endif
pri1 = hrandom( $prilen )
pri2 = hrandom( $prilen )
pub1 = new_ecc_get_pubkey( $pri1 )
pub2 = new_ecc_get_pubkey( $pri2 )
x = new_ecc_ecdh_agreement( $pri1, $pub2 )
y = new_ecc_ecdh_agreement( $pri2, $pub1 )
if $x != $y
?
pause
endif
pri1 = E4C14B390163BE1AED31E14EBDBA967B90750C681F02ED6296B4D9DEA34D145FCC087B9A05DDBDD88200C79DCAAB80870D1DB778B7E359F84556E8D45765280B0794
pri2 = 1CEB7A453078B436B80DB14C9946B18F461CD375EF52E563F5117B71A0CF3E6E1475872481C02DDC9BE79B254A7F25D2A29C9C42153A1FE4E7DB35F9E371199C4D7D
pub1 = 00F2DE1DAD55C80E364DD9ED91B5D38CB4DBCB43BD939452305E947A99DB20F2134B3F98C078734DDDBA2E284A5C61BF96BE8E2A754EB556C8D924C670602DBAEB9F014D16C8D0608E2C7E395778B1C3E1BB9D1BEDD5EA10704839DA6D7DB472CF36CBC47547C33EB4A98EB9A4930ACD69595A00358CFF51D4ADF087CBFE06DF5D92C22A
pub2 = 0075A95D42D899B93F50AF9C8172726ED2A295A8E84DFDFA6056A6AB6D82082C564BCB11E795BA2DE23385D1F42DEFBA1ABCC50B0A466388387E4DF2400BADC9FB61014B20988CF1363B7C04BDFC2654B8BAB547EC2F5093440A0B79F9377FA2971BD5348FCFC9D9DA0029631989EF542F20816ACC07AB226B7388CDEA399A39AF999027
stx = 0024679764CD489EA8B163B2E7639A65E2B614DECF7139F49772E866A46B2FA42501371B73A5C25FA6B35DE123613855CA30ED3311DD9CD7091D0BF2A209CA5104A900DDDD9300716165861C07052B40848FDAEBB937B2074F73C60AC40F63A4A79651443A132A90CA68836BCAAC42CED3E0F4AEE75076BD49791C5755453C9C5E8053FD
x = new_ecc_ecdh_agreement( $pri1, $pub2 )
y = new_ecc_ecdh_agreement( $pri2, $pub1 )
if $x != $stx
?
pause
endif
if $y != $stx
?
pause
endif
hash = hrandom( $prilen )
r_s = new_ecc_sign( $pri1, $hash )
kk = new_ecc_verify( $pub1, $hash, $r_s )
if $kk != 00
?
pause
endif
pub1 = 00F2DE1DAD55C80E364DD9ED91B5D38CB4DBCB43BD939452305E947A99DB20F2134B3F98C078734DDDBA2E284A5C61BF96BE8E2A754EB556C8D924C670602DBAEB9F014D16C8D0608E2C7E395778B1C3E1BB9D1BEDD5EA10704839DA6D7DB472CF36CBC47547C33EB4A98EB9A4930ACD69595A00358CFF51D4ADF087CBFE06DF5D92C22A
hash = 730B9C90ACA34F44643797A1F4D41D37FAAB1FDC436474A1EFB4CA05CF3233681266E0C221232B94C717DB1F95A1A4D585E2EE0DDD17D8FA56267BDE7E76737B5B04
r_s = 004024AE0A69CFCFF2F1B0D3D6C2EC16C7E0F96B4A11AB8C1C57AD876D45306E93B677CFB31046F2DA879B331D5C7F4DBD087D983C00D26463FAD64DCAFF30B08F320178D9909EF925E767FD23AC6E890C069740F18BF8A4E5222976892136ABEBBE5DA2AA972252D706F303D60715F4038D62E4A7D9753FA24889D493C747790EC7F659
kk = new_ecc_verify( $pub1, $hash, $r_s )
if $kk != 00
?
pause
endif
// 计算y值功能
keypair = new_ecc_generate_keypair()
len = datalen( $keypair )
prilen = big_div( $len, 03 )
if $len > 00
pri = hmid( $keypair, 00, $prilen )
pub = hmid( $keypair, $prilen )
else
// error
pause
endif
yflag = new_ecc_get_yflag( $pub )
pointy = new_ecc_computer_y( $yflag, $pub )
pub_y = hmid( $pub, $prilen )
if $pub_y != $pointy
?
pause
endif
pri = 006C74E62E9464CD6F30661A333A0D802A10380F6DF801B7643473DF38AC195D4D8E59375A811BF910355F7F34710B7F2000254722FA7B58656419F3311F5FAE7F91
pub = 01CD63D72C8C380E61C32CCF0CC7147A8DE44F0B945E0CECD85006D6274E69425E62754A10C989FB9FB594BD9A70A6D3845A0FB96CE02B3556872CAC125DC5BF0F2001DD778F8C1F0CD2F12320A4B320196698CC27D960E20A50F4FD759DAF180EE994D1609609D0C2CB9EC4F7A48F4BC37F91A12FD2326F9E1DAD7752A3DCA8F25F3E72
yflag = 02
pointy = new_ecc_computer_y( $yflag, $pub )
pub_y = hmid( $pub, $prilen )
if $pub_y != $pointy
?
pause
endif
yflag = new_ecc_get_yflag( $pub )
pointy = new_ecc_computer_y( $yflag, $pub )
pub_y = hmid( $pub, $prilen )
if $pub_y != $pointy
?
pause
endif
ecc_P1 = 01929B9AA9EDAB63359EE3D773E5679D2462C16A453E9D4A1BE66D18616D6043BADA278CB1221A7AE45EFAA04A08CE7D28DBA0711AD9AF947EAA157774D3DC6EAA2B00883F23885AD9468A27A75FD433D2FB15078870EA0235E82FACC71558C68F1A8A6FFF58C4750F96ED2746585F3E2E9B3A89BD1B48565D716CEFE1125F589A58CDB7
r = new_ecc_check_point( $ecc_p1 )
if $r != 00
?
pause
endif
ecc_P2 = 01808B7904F6C8BF951339285B1B784D652D24F9725C75DD00785150F18ECFD13E343E7F49D4733BEA8CF0D7C2959E0A5BD601FF4421BC940086A67142080E64F00B00A1F9C0C2E0B14A3F516D5F5BC6DDF55188222C9AA39E3B7FB7744562C2441DA15B2A12A3A4F9E77E4AC93405E77132561D39E5A01F6BCE0C47EF1B13B5BE1BFA3C
r = new_ecc_check_point( $ecc_p2 )
if $r != 00
?
pause
endif
ecc_P1_ADD_P2 = 00157A54FFDAC7F7725993A5777A4776793599389EB38BA890119CBCA5C76823AD7F177C309D99F79AA4EBC67F51596EE40D563DA733E1651E6C793F90BD061DA78300300164BAE716086A091685EE952EED37886857417D6CAF0C67EDD1545492DB66A182843C7FEB018C8FB8272F5F34D5432B3D6866FCE322EE5E3C00C72F10C7AB9E
a = new_ecc_point_add( $ecc_p1, $ecc_p2 )
if $a != $ecc_p1_add_p2
?
pause
endif
r = new_ecc_check_point( $ecc_P1_ADD_P2 )
if $r != 00
?
pause
endif
ecc_p1_double = 0008D4CC812DA3E15CFE4AA2F311DA6DCF0EE3FC5DFE8243B4564BEC3DF16D76EBBFCB393E706CFBCEC5F2D571408CD241B31A396A49AAE9FEBDB42A929F4FF2CF20002D2D27CAC065F1B085E0886FCDBD7982B9770526664F6D05D88D54427FC6C98E47DDE9C069F4ACDE15C09E0F27E56CB13287240D7DC94566A2E7D2ED9902E84B04
a = new_ecc_point_double( $ecc_p1 )
if $a != $ecc_p1_double
?
pause
endif
x = new_ecc_check_pubkey( $a )
if $x != 00
?
pause
endif
a = new_ecc_point_double( $pub1 )
if $a != 01168EAE3C6477471C8B2331A5478DA0F7DAF998FE87D7419ACEC9A3E45342E1AB613524CAAF7E95706C871D156CE69FA02DD5E920AA0627E88F404FA4C5E9C56D0B001A96C4D26E74355EC07DFD3D1A5269DC831F0131B3B375F4BAEBDD390E2F96B88656D0E37C2815B1108B267BDE6FB531D391C5C77E5814B7B10AB4BA06E57E0111
?
pause
endif
x = new_ecc_check_pubkey( $a )
if $x != 00
?
pause
endif
x = hrandom( $prilen )
a = new_ecc_kp( $x, $pub1 )
x = new_ecc_check_pubkey( $a )
if $x != 00
?
pause
endif
l = hrandom( $prilen )
k = hrandom( $prilen )
a = new_ecc_kp_add_lq( $k, $pub1, $l, $pub2 )
a1 = new_ecc_kp( $k, $pub1 )
a2 = new_ecc_kp( $l, $pub2 )
a3 = new_ecc_point_add( $a1, $a2 )
if $a3 != $a
?
pause
endif
x = new_ecc_check_point( $a )
if $x != 00
?
pause
endif
k = 5B4ECF30963493BCA1450C8DB9988412A4AC115A44A8C6796BE72A2CF1B3E9C00451CA2FC03FE18DFFB906A2738186D9F2E0185910E81271F3FDDC396394A5762139
h = 01E50AEAE7BF7C0FEFDC9B3A25291101C7318EF0B35E66DFE45939EEE919DF24B8C794864FDF262787FEFDEA7BA6107A253D1A761D63B4D8A872B3ACD8C12FB9316F010580D716B45ECFA52A3E2701E79AEBFFA181C33FAF666E62DAE8D3213E1809FFEFE73A528A4BDA6C291C5C42A346248EADFE31DB013994008547470835F609F675
z = 00D214D009D20B1637CB4338F854F2F50672CE82C48705D8F369281E2CCB9B3A02D86C6598D181B0A2EE81AC117ECD4D7D9A130F09538045DFAFF74A558667F244870034A84CD255D52421003125C8967ECA36693C0212ACE4D8B3BEABBECF8F68F29D27C080ADDFAF68ECC6BAFEDA355BF29F7D27407E769DEFBACD041F7065E5C9DD53
t = new_ecc_ecdh_gm_map( $k, $h )
if $z != $t
?
pause
endif
k = FFF3A31F73D09FAC889D4DA2EBE9521D15D29F5F15BF50219051D42706964F17
h = 3334C5922D7F14F3C29C52BC0F88014F2E65A52B1BC8C73A38254D99CE1B7B4FE38B126B602E41B11357DC96758C4B465CFF95CA25B2C25BDF26B7300A43AF7A
z = 9F84D746A33BF6ACAEAA9157D95161332AFBD00C5847001A49E00B72534CECF9B0EB79B512474B0B638AFE5C96F54C801679999814DB0071B0AB9DF5FA988E14
t = new_sm2_ecdh_gm_map( $k, $h )
if $z != $t
?
pause
endif
return