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$x032 )
    
_2  mid$x32 )
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$n0120 )
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$n0120 )
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