Comments (18)
from gmalg.
感谢你的关注!
对于 SM2 的密文顺序,在 SM2Core.encrypt 中返回以三个单独的密文对象返回,实际上并不规定顺序,代码中的顺序为 C1,C2,C3;但是在返回字节流密文的 SM2.encrypt 中是按照 C1,C3,C2 的顺序构造的密文内容。
对于文档中说明的默认 ID 串 "1234567812345678",若不在构造函数 SM2 指定 ID,则认为没有提供 ID,如果要使用默认 ID,调用方可以自行指定。
from gmalg.
我测试过了,如果在调用的时候指定ID值为国标给的默认值或者不传入id值,签名出来的数据在其他工具里面验签验不过,不管是免费的工具,还是经过国密局认证过的工具都验不过。
我个人认为sign函数的id默认值应该设置成b'31323334353637383132333435363738',对应的ENTL为0080,在实例化SM2类的时候,如果传入了id参数就用传入的参数,如果没有传入id参数就用默认值。否则,针对不指定id的签名计算出来的签名值是错的,因为现在的实现如果不指定id,id是NoneType。
from gmalg.
如果要使用默认的 ID 值,参数的写法应当是以下两种之一:
b"1234567812345678"
b"\x31\x32\x33\x34\x35\x36\x37\x38\x31\x32\x33\x34\x35\x36\x37\x38"
如果不提供 ID,会报错提示无法进行签名。
代码是能通过国标SM2的测试用例的,如仍然存在问题,是否能够提供一下你的签名数据与验签工具?
from gmalg.
ID值默认的情况,Za的前两串应该是'0080'+'31323334353637383132333435363738'
from gmalg.
似乎是 SM3 算的有问题,已经在改了
from gmalg.
问题已经修复,可以重新试一下问题是否还存在。
目前由于 PyPI 的安全问题,暂时无法上传,可以去 Release 下载 v1.0.3 的安装包离线安装。
也可以直接点击链接: gmalg-1.0.3-py3-none-any.whl
from gmalg.
签名依然验不过
我看了GMSSL的实现,他把默认ID写死了,不过这样实现不了传入ID值后的签名,虽然目前还没见过传入ID值的场景。
from gmalg.
未压缩公钥的第一字节应当是 04
from gmalg.
04是标识符,不参与运算
from gmalg.
gmalg 的参数需要按完整格式提供公钥,因为支持解析三种格式的公钥
from gmalg.
from gmalg.
可以贴一下代码及运行结果的文本吗
from gmalg.
签名验签
sk = bytes.fromhex('1c87c99c7ff9e74fa9d52f9744f48a7ed9ee99aceefceb288b40dcb2fde30067')
pk = bytes.fromhex('040b1e69193b9681ff9a62aebb466667226e2aba7bdff70544e21aabb38ebd6e2f0235339f63be6ee4d0f93af01b86b99c33a216fec2e716b3ec219307c6d2203e')
sm2 = gmalg.SM2(sk, pk)
msg = b'haha123'
r, s = sm2.sign(msg)
verify_result = sm2.verify(msg, r, s)
print('签名R值:', r.hex())
print('签名S值:', s.hex())
print('验签结果:', verify_result)
签名R值: a92bb2888c2e2c17d7d0aaee6e7e10ccb7ac639f5f51a1318871a7399683d5b2
签名S值: 8054261d13784f94eb57d28c47ea3d0a57930e3ef74ab1b17f8683ea736fba89
验签结果: True
from gmalg.
确实是调用出错了,gmalg.sm2.SM2(sk=None, uid=None, pk=None, *, rnd_fn=None, pc_mode=PC_MODE.RAW)
,可以参考一下 API 文档,第一参数是私钥,第二参数是 ID,第三参数是公钥
如果不好记忆,可以使用关键字进行传参
sk = bytes.fromhex('1c87c99c7ff9e74fa9d52f9744f48a7ed9ee99aceefceb288b40dcb2fde30067')
pk = bytes.fromhex('040b1e69193b9681ff9a62aebb466667226e2aba7bdff70544e21aabb38ebd6e2f0235339f63be6ee4d0f93af01b86b99c33a216fec2e716b3ec219307c6d2203e')
sm2 = gmalg.SM2(sk=sk, uid=b"1234567812345678", pk=pk)
from gmalg.
可以了,需要把uid=b"1234567812345678"这个默认值传进去,我想的是在实例化SM2的,如果不传ID值,用默认ID计算签名,如果传了ID值就用传入的ID计算签名。
传其他ID的也测试比对了一下,能验签成功了。
from gmalg.
感谢你的关注,目前暂不打算提供默认值,因为需要判断调用者”是否提供了某一参数“,所以即使用默认 ID 也需要显式指定。
from gmalg.
你这个可视化 好啊, 开源不 兄弟
from gmalg.
Related Issues (9)
- SM2由私钥计算公钥的实现不对 HOT 3
- SM2解密相关 HOT 1
- SM9密文顺序问题 HOT 8
- SM2密钥交换 HOT 1
- sm9加密明文的方法结合密钥派生函数的分组密码算法 HOT 1
- sm2密钥交换问题
- sm2私钥计算公钥问题 HOT 2
- 当SM9签名和验签分开在不同请求时,验签失败,请问是什么原因呢? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gmalg.