clear
debug = 00 // 01 固定特定值,00 全部动态值
_3 = 02
a1 = "Alice"
b1 = "Bob"
? "生成密钥 a1, 3->1,2,A2"
if $debug == 01
_1 = 2EFF1E0B58AA5CB75F6F378409E0321F11DB38A307B8579400F16554557433C0
_2 = 39139806EAE48FA2092AE50D3853E4BC24DFC89556985B0752411A43E4CB063835E77C515939AB1D751935BC84AA35AAD2589D8C7D748FC01317C8F5DE9E941A
else
x = new_sm9_gen_encrypt_master_key()
_1 = mid( $x, 0, 32 )
_2 = mid( $x, 32 )
endif
if $debug == 01
a2 = 0EB6B14792020DF851A3BC0DB195470C1EB80072E5525BB09AACA877515088938E3FD749E3E88D8F0FFA38D4BAD3916F0FE70806FE8954555DE956C5A19424C43D4A71E100D05DC4EB3EEBDD3E94675F0AE4FC0A0E82E96222B3D12389A52ED02132BD7C57A18AFAF3834C1D824D9FB209A3A58DD34C8133F6C6919B2FDA7E6C
else
a2 = new_sm9_gen_encrypt_pri_key( $a1, $_3, $_1 )
endif
? "生成己方临时密钥"
if $debug == 01
a3 = AA354D0748EFAC8F08E661DD0E404F60E1F8D40C6FD4EEF55197A21C51789E88
else
a3 = random ( 32 )
endif
p = B640000002A3A6F1D603AB4FF58EC74521F2934B1A7AEEDBE56F9B27E351457D
a = 0000000000000000000000000000000000000000000000000000000000000000
b = 0000000000000000000000000000000000000000000000000000000000000005
gx = 93DE051D62BF718FF5ED0704487D01D6E1E4086909DC3280E8C4E4817C66DDDD
gy = 21FE8DDA4F21E607631065125C395BBC1C1C00CBFA6024350C464CD70A3EA616
n = B640000002A3A6F1D603AB4FF58EC74449F2934B18EA8BEEE56EE19CD69ECF25
x = new_ecc_initialize( $p, $a, $b, $gx, $gy, $n, 01, 20 )
if $x != 00
?
pause
endif
tmp = new_sm9_h1( $b1 $_3, $n )
tmp = new_ecc_kp ( $tmp, $gx $gy )
tmp2 = new_ecc_point_add ( $tmp, $_2 )
a4 = new_ecc_kp( $a3, $tmp2 )
if $debug == 01
if $a4 != 1A3BA73EA8285B264C223B3A2725C8185F559D7045DF8D14FD28BF6008189179B44C9E8122A8FD6510A55A11910518441AE4D80ECB141B49C6127A85E04DAB6F
?
pause
endif
endif
? "计算对方临时密钥"
b2 = new_sm9_gen_encrypt_pri_key( $b1, $_3, $_1 )
if $debug == 01
if $b2 != 224E5669C209DC151B01C0495FAF753460F7E3FA3388184B01FA57FD0748B10764B1CEBCBC9213FE71380B2E15176CEECFF526ABDFE3D215162C69F37F0D30CA44696CBC0CE5A7E7D910BD63CBFC228016EAE6211E69965FD9EDDB6F52965DEA5A2B7EB0232B2C4EDF9CE93092EE762019B77379D59F9A38C8CF42408DEB57B3
?
pause
endif
endif
if $debug == 01
b3 = BD48D06CF08DA63CC57BDAEA226B30B49EAE87929E21166BBD01F6887201E049
else
b3 = random ( 32 )
endif
p = B640000002A3A6F1D603AB4FF58EC74521F2934B1A7AEEDBE56F9B27E351457D
a = 0000000000000000000000000000000000000000000000000000000000000000
b = 0000000000000000000000000000000000000000000000000000000000000005
gx = 93DE051D62BF718FF5ED0704487D01D6E1E4086909DC3280E8C4E4817C66DDDD
gy = 21FE8DDA4F21E607631065125C395BBC1C1C00CBFA6024350C464CD70A3EA616
n = B640000002A3A6F1D603AB4FF58EC74449F2934B18EA8BEEE56EE19CD69ECF25
x = new_ecc_initialize( $p, $a, $b, $gx, $gy, $n, 01, 20 )
if $x != 00
?
pause
endif
tmp = new_sm9_h1( $a1 $_3, $n )
tmp = new_ecc_kp ( $tmp, $gx $gy )
tmp2 = new_ecc_point_add ( $tmp, $_2 )
b4 = new_ecc_kp( $b3, $tmp2 )
if $debug == 01
if $b4 != 90371E3EDC600E1206957A5784A60615BBFBE16A7EF444D89D643FEAB403D63F5D9F50913A64968A7F87FDD15FBF2603DBD6C7DFD475968334A44B65265DB5C5
?
pause
endif
endif
? "交换密钥"
klen = 10
x1 = new_sm9_key_exchange(00, $a1, $_3, $b1, $_2, $a2, $a3, $a4, $b4, $klen )
x2 = new_sm9_key_exchange(01, $b1, $_3, $a1, $_2, $b2, $b3, $b4, $a4, $klen )
if $x1 != $x2
?
pause
endif
if $debug == 01
if $x1 != C125910F36181A1B565AD19E3B0BD971
?
pause
endif
endif