toruneko / lua-resty-crypto

common crypto functions for OpenResty/LuaJIT (binding openssl 1.1.0/1.1.1)
MIT License
50 stars 11 forks source link

sm2签名出来的长度从70~72变化 #20

Closed Holy-Shine closed 11 months ago

Holy-Shine commented 11 months ago

作者好, 使用库来做签名的时候,拿到的签名长度从70-72变化 用的密钥是32字节的,理论上使用sm2signwithsm3得到的是固定64位长度的签名才对。 下面是代码:

local sm2, err = require("resty.sm2").new({
private_key=pri_key,
publick_key=pub_key,
algorithm="sm3"
})
ngx.say(tostring(#sm2:sign("ABC")))  -- 输出70
Holy-Shine commented 11 months ago

原因找到了,openssl的sm2签名会对r,s做asn1编码,所以字节会多几个

Holy-Shine commented 11 months ago

自己手动做了asn1解码后用java验签还是失败,是openssl做了额外的处理吗