Skip to content

v0.44.0 (2026-6-26)

Choose a tag to compare

@emmansun emmansun released this 26 Jun 06:33
· 61 commits to main since this release
6a28894

⚠️ Breaking Changes

  • sm2 移除 legacy 实现#525):删除旧的 SM2 实现路径,统一走 internal/sm2 核心实现。
  • sm2 移除 key exchange early 实现#524):删除早期的密钥交换实现,相关 API 不再可用。
  • sm2 核心下沉到 internal/sm2#526):重构模块结构,核心实现移入 internal/sm2internal/sm2ec 错误信息对齐。外部公开 API 保持兼容,但引用内部路径的代码需调整。
  • pkcs7 / cfca 迁移到 smx509 类型x509.SignatureAlgorithmsmx509.SignatureAlgorithm,依赖 pkcs7/cfca 的项目需同步更新类型引用。
  • smx509 CheckSignatureWithDigest 拒绝 SHA1:与 checkSignature 行为对齐,不再接受 SHA1 摘要签名。
  • pkcs7 移除不安全算法测试#527):清理 SHA1 及不安全算法相关测试与代码路径。

✨ New Features

smx509 — 全新架构

  • 从寄生式补丁架构迁移为 Go 1.25 stdlib crypto/x509 的干净 fork:以独立 smx509 包形式存在,通过 5 个声明式 patch 描述与 stdlib 基线的全部偏差(001-root-platform010-sm2-pqc-core020-pkcs-keys030-sm4-pem100-extensions)。
  • SM2 / PQC 签名算法:集成 ML-DSA(44/65/87)与 SLH-DSA-SHA2-128s 后量子签名算法;SM4 PEM 加密;PKCS#8 密钥编码;verify_digest.go 提供 CheckSignatureWithDigest 供 pkcs7 兼容使用。
  • 声明式测试补丁系统scripts/smx509/gen_test_patches.go 从 stdlib 测试文件(含包名重命名)与 smx509 测试文件的差异生成测试补丁;test-patches/ 下含 010-testenv-stub020-envvars-abs-path 两个补丁。
  • smx509 升级 Skill.github/skills/smx509-upgrade/skill.md 提供从 Go 1.N 升级到 1.N+1 的完整工作流(baseline 更新、补丁冲突分析、测试文件同步、补丁重生成)。
  • CI 补丁一致性检查:新增 smx509-patch-consistency CI job,验证补丁与 stdlib baseline 同步。

cipher — GCM-SIV 认证加密模式(#523

  • RFC 8452 实现:在 cipher 包中新增通用 GCM-SIV(Synthetic Initialization Vector)AEAD 模式,适用于任何满足 cipher.Block 接口的分组密码(含 SM4、AES)。相比传统 GCM,GCM-SIV 采用"先认证后加密"的 SIV 范式:先用 POLYVAL 对明文与 AAD 生成 128 位认证标签,再与 nonce 组合成合成 IV 驱动 CTR 加密,在 nonce 误用(重复)场景下仍保持机密性与完整性,仅泄露相同明文是否相等这一信息,不会像 GCM 那样灾难性泄露认证密钥。
  • 三项子能力(Issue #523 勾选项全部完成):
    • Generic GCM SIV —— 纯 Go 通用实现,覆盖所有架构与所有分组密码;
    • Batch encryption —— 复用底层密码的批量 EncryptBlocks 能力(与 gmsm 已有的 SM4/AES batch 路径一致),提升长数据吞吐;
    • Optimize POLYVAL with CLMUL —— 在 amd64, arm64 上使用CLMUL指令加速 POLYVAL 多项式求值,与 AES-GCM 的 GHASH 优化思路对齐。

ZUC

  • 无状态分块加密(ref #277):每个 chunk 使用独立 ZUC 实例加密,子密钥由 SM3(masterKey || chunkIndex) 派生,提供 XORKeyStreamAt 支持任意字节范围解密,适用于加密视频的 HTTP Range 请求场景。
  • 可寻址流 bucketing 优化states[]*zucState32 改为 []zucState32(寻址速度提升 1.7×,bucket 命中时 seek 约 2ns,无 bucket 时 1.87ms);新增 NewCipherWithBucketSizeAndCapacity 预分配;修复 32 位平台 int(c.used) 溢出问题。

SM2

  • 确定性 SM2 签名#520):支持 RFC 6979 风格的确定性签名,避免随机数质量依赖。

CPU 特性检测

  • GFNI 独立检测:GFNI 作为独立特性(CPUID.07H:ECX[bit 8]),不再绑定 AVX-512,可与 VEX 编码(AVX/AVX2)配合使用。
  • SM3 / SM4 硬件指令检测:通过 CPUID.07H:ECX(AVX10 子叶)检测 SM3(bit 1)与 SM4(bit 2)硬件支持。

keccakx4(新增内部包)

  • 4 路 Keccak-f[1600] 置换internal/keccakx4 提供 AVX2、LASX(Loong64)SIMD 实现,并提供纯 Go 回退(permute4Generic),用于并行哈希场景。

🚀 Performance

ML-KEM(#503#507

  • ppc64le(VMX/VSX)支持:新增 POWER8+ 的 VMX 向量化实现,采用 Barrett 归约(shift-4 trick)替代 Montgomery,8 系数/指令。NTT 前向约 3×、polyAddAssign 约 4×(相对 generic Go)。
  • CBD2/3 采样优化VSPLTISW 常量生成优化,常量表从 128 字节压缩到 96 字节。
  • sampleNTTx4:4 路并行 NTT 采样。

ML-DSA(#500#501

  • Loong64(LASX)NTT / 逆 NTT:完整实现 LA464 架构的 16 系数/寄存器向量化 NTT 与逆 NTT,复用 AVX2 的 twiddle 表,XVMUH.H 提供精确 16 位有符号乘高。
  • polyInfinityNorm LASX 变体polyInfinityNormLASXpolyInfinityNormSignedLASX

SM2 椭圆曲线

  • internal/sm2ec POWER9 优化:补充栈帧布局说明,优化 POWER9 上的 SM2 椭圆曲线运算汇编。
  • Loong64 LSX/LASX优化。

GCM-SIV

  • amd64和arm64 上 POLYVAL 通过 CLMUL实现;批量加密复用底层 block cipher 的 EncryptBlocks 路径,长数据吞吐显著优于逐块调用。

SM3/SM9

  • Loong64 LSX/LASX优化。

SM4

  • Loong64 查表法优化

🔧 CI / Dependencies

  • StepSecurity 加固 GitHub Actions#512):全仓库 workflow 注入 step-security/harden-runner。
  • golang.org/x/crypto:0.51.0 → 0.52.0(#506)。
  • github/codeql-action:4.35.5 → 4.36.0 → 4.36.1(#504#515)。
  • docker/setup-qemu-action:4.0.0 → 4.1.0(#508)。
  • actions/checkout:5.0.1 → 6.0.3(#518)。
  • actions/cache:4.3.0 → 5.0.5(#516)。
  • step-security/harden-runner:2.19.3 → 2.19.4(#517)。
  • 新增 Loong64 ML-DSA CI 测试矩阵。

📦 升级指南

  1. Go 版本:建议使用 Go 1.25+。
  2. smx509 类型迁移pkcs7/cfca 调用方需将 x509.SignatureAlgorithm 替换为 smx509.SignatureAlgorithm总之,不再支持与Go标准库x509中类型的混用
  3. SHA1 策略:smx509 CheckSignatureWithDigest 不再接受 SHA1;若业务仍依赖 SHA1 签名验证,需在调用前显式处理或降级。
  4. ZUC 新能力:若需 HTTP Range 友好的加密流,使用新增的无状态分块 cipher(XORKeyStreamAt);可寻址流可通过 NewCipherWithBucketSizeAndCapacity 预分配以获得更优 seek 性能。
  5. 后量子算法跨平台:ML-KEM 现支持 amd64(AVX2)、arm64(NEON)、loong64(LASX)、ppc64le(VMX);ML-DSA 现支持 amd64(AVX2)、arm64(NEON)、loong64(LASX)。
  6. GCM-SIV:对 nonce 唯一性难以保证的场景,可用 cipher 包新增的 GCM-SIV AEAD 替代 SM4-GCM;注意其加密性能略低于 SM4-GCM(未做 SM4+CMUL 融合),解密性能基本持平;相同 (明文, AAD) 对会产生相同密文,天然支持内容去重但不宜用于需明文不可链接的场景。