Giter Site home page Giter Site logo

Comments (18)

entarohydralisk avatar entarohydralisk commented on September 3, 2024 1

图片
图片
图片
图片
图片

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

感谢你的关注!

对于 SM2 的密文顺序,在 SM2Core.encrypt 中返回以三个单独的密文对象返回,实际上并不规定顺序,代码中的顺序为 C1,C2,C3;但是在返回字节流密文的 SM2.encrypt 中是按照 C1,C3,C2 的顺序构造的密文内容。

对于文档中说明的默认 ID 串 "1234567812345678",若不在构造函数 SM2 指定 ID,则认为没有提供 ID,如果要使用默认 ID,调用方可以自行指定。

from gmalg.

entarohydralisk avatar entarohydralisk commented on September 3, 2024

我测试过了,如果在调用的时候指定ID值为国标给的默认值或者不传入id值,签名出来的数据在其他工具里面验签验不过,不管是免费的工具,还是经过国密局认证过的工具都验不过。
我个人认为sign函数的id默认值应该设置成b'31323334353637383132333435363738',对应的ENTL为0080,在实例化SM2类的时候,如果传入了id参数就用传入的参数,如果没有传入id参数就用默认值。否则,针对不指定id的签名计算出来的签名值是错的,因为现在的实现如果不指定id,id是NoneType。

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

如果要使用默认的 ID 值,参数的写法应当是以下两种之一:

  • b"1234567812345678"
  • b"\x31\x32\x33\x34\x35\x36\x37\x38\x31\x32\x33\x34\x35\x36\x37\x38"

如果不提供 ID,会报错提示无法进行签名。

代码是能通过国标SM2的测试用例的,如仍然存在问题,是否能够提供一下你的签名数据与验签工具?

from gmalg.

entarohydralisk avatar entarohydralisk commented on September 3, 2024

ID值默认的情况,Za的前两串应该是'0080'+'31323334353637383132333435363738'

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

似乎是 SM3 算的有问题,已经在改了

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

问题已经修复,可以重新试一下问题是否还存在。

目前由于 PyPI 的安全问题,暂时无法上传,可以去 Release 下载 v1.0.3 的安装包离线安装。

也可以直接点击链接: gmalg-1.0.3-py3-none-any.whl

from gmalg.

entarohydralisk avatar entarohydralisk commented on September 3, 2024

签名依然验不过
图片
我看了GMSSL的实现,他把默认ID写死了,不过这样实现不了传入ID值后的签名,虽然目前还没见过传入ID值的场景。
图片

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

未压缩公钥的第一字节应当是 04

from gmalg.

entarohydralisk avatar entarohydralisk commented on September 3, 2024

04是标识符,不参与运算

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

gmalg 的参数需要按完整格式提供公钥,因为支持解析三种格式的公钥

from gmalg.

entarohydralisk avatar entarohydralisk commented on September 3, 2024

还是验不过,是我函数调用没搞对吗?
图片

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

可以贴一下代码及运行结果的文本吗

from gmalg.

entarohydralisk avatar entarohydralisk commented on September 3, 2024

签名验签

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.

ww-rm avatar ww-rm commented on September 3, 2024

确实是调用出错了,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.

entarohydralisk avatar entarohydralisk commented on September 3, 2024

可以了,需要把uid=b"1234567812345678"这个默认值传进去,我想的是在实例化SM2的,如果不传ID值,用默认ID计算签名,如果传了ID值就用传入的ID计算签名。
传其他ID的也测试比对了一下,能验签成功了。

from gmalg.

ww-rm avatar ww-rm commented on September 3, 2024

感谢你的关注,目前暂不打算提供默认值,因为需要判断调用者”是否提供了某一参数“,所以即使用默认 ID 也需要显式指定。

from gmalg.

pergrand avatar pergrand commented on September 3, 2024

图片 图片 图片 图片 图片

你这个可视化 好啊, 开源不 兄弟

from gmalg.

Related Issues (9)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.