Skip to content

这个Sm2Key的Sm2Point没有z值,但是C中是有这个z的,这导致测试实例程序结束时崩溃 #20

Open

Description

@TUTo-Y

这个Sm2Key的Sm2Point没有z值,但是C中是有这个z的,这导致测试实例程序结束时崩溃,我手动增加了这个Z后可以正常运行示例程序
image

Activity

  1. TUTo-Y commented on Aug 12, 2024

    @TUTo-Y
    Author

    除此之外还有很多地方也类似,python类中只有C结构体中一部分成员,这导致程序结束时产生了错误

  2. guanzhi commented on Jun 4, 2026

    @guanzhi
    Member

    已在当前代码中修复这个 ctypes 结构体布局问题:

    • Sm2Point 补齐了 C 侧 SM2_Z256_POINT 的 Z 坐标。
    • 坐标字段改为 uint64_t[4] 等价布局,保证大小和 8 字节对齐与 GmSSL 头文件一致。
    • Sm2Signature 也按 SM2_SIGN_CTX 补齐了 saved_sm3_ctx、预计算表和验签表,避免 sm2_sign_init() 写越界导致 Python 退出或 GC 阶段崩溃。
    • 增加了结构体大小回归测试:Sm2Point == 96、Sm2Key == 128、Sm2Signature == 3976。

    我本地已验证:

    python3 -X faulthandler -m unittest -v test.TestGmSSL.test_sm2_struct_sizes test.TestGmSSL.test_sm2_key test.TestGmSSL.test_sm2_sig test.TestGmSSL.test_sm3_pbkdf2

    上述测试通过,并且不再在进程退出时触发 segmentation fault。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions