clear
r = 5B4E6D8A16CA2BC877C6B0CD434866CFDE5C553C759E88B353ABFE8EC2B4A6FC2F7E286B6023DDFB1FB6B6DCFFB6872912160A1514E250BAC22F73A4BD70C1BB080B1BFD9E91FA0BB9F8B2FF5D63E967DEC5462BD9A103365703DCAE6B155A490AE403DC7B1E401D972570AD4CB0FC6FD7CB33F194F5EC9828B5E2F2640429F3B987672F997BC2D870219C011953A93AC3B914B38B2AB7F2296B110532195550A17F78965C01C254C051E323904A83828557B6B2DACE8270D53ED7E66B39A7A6F810D47C526D8B13F95C158483137F0D71B491B5C8FE9A37FE10F7F469CBD7F8E15DDC6DE286D40A13C8BA061352B849B7C7C74936698EBA0F1C5F3BEE4EAEBC
// /* copy out the DB */
// i = 0;
// memcpy(DB, sig + i, modulus_len - shadigestlen - 1);
// i += modulus_len - shadigestlen - 1;
db = mid( $r, 0, int( 256 - 64 - 1 ) )
// /* copy out the hash */
// memcpy(hash, sig + i, shadigestlen);
// /* x += hLen; */
hash = mid( $r, int( 256 - 64 - 1 ), 64 )
// /* generate mask of length modulus_len - hLen - 1 from hash */
// pkcs_1_mgf1( digest_algo, hash, shadigestlen, mask, modulus_len - shadigestlen - 1);
mask = call pkcs_1_mgf1( $hash, hex( 256 - 64 - 1 ) )
// /* xor against DB */
db = xor( $db, $mask )
// /* now clear the first byte [make sure smaller than modulus] */
// DB[0] &= 0xFF >> ((modulus_len<<3) - (modulus_bitlen));
// 此处略
len = datalen( $db )
hfor i = 00 to hex( 0x$len - 1 )
x = hmid( $db, $i, 01 )
if $x != 00
off = $i
exit hfor
endif
hnext i
msghash = sha512_hash( 11 )
mask = 0000000000000000
dbi = hmid( $db, hex( 0x$off + 1 ) )
x = sha512_hash_init()
x = sha512_hash_update( $mask )
x = sha512_hash_update( $msghash )
x = sha512_hash_update( $dbi )
x = sha512_hash_dofinal()
if $x != $hash
? "验签失败"
?
pause
endif
? "验签成功"
end
pkcs_1_mgf1:
local seed
local masklen
local mask
local counter
local mask
local x
local times;
seed = getpara
masklen = getpara
mask = ""
times = hex( ( 0x$masklen + 63 ) / 64 )
counter = 00000000
hfor i = 01 to $times
x = sha512_hash_init()
x = sha512_hash_update( $seed )
x = sha512_hash_update( $counter )
x = sha512_hash_dofinal()
counter = big_add( $counter, 01 )
counter = leftpack( $counter, 4 )
mask = $mask $x
hnext i
mask = hmid( $mask, 00, $masklen )
return $mask