Releases
v0.44.0
Compare
Sorry, something went wrong.
No results found
⚠️ Breaking Changes
sm2 移除 legacy 实现 (#525 ):删除旧的 SM2 实现路径,统一走 internal/sm2 核心实现。
sm2 移除 key exchange early 实现 (#524 ):删除早期的密钥交换实现,相关 API 不再可用。
sm2 核心下沉到 internal/sm2 (#526 ):重构模块结构,核心实现移入 internal/sm2,internal/sm2ec 错误信息对齐。外部公开 API 保持兼容,但引用内部路径的代码需调整。
pkcs7 / cfca 迁移到 smx509 类型 :x509.SignatureAlgorithm → smx509.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-platform、010-sm2-pqc-core、020-pkcs-keys、030-sm4-pem、100-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-stub、020-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
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 采样。
Loong64(LASX)NTT / 逆 NTT :完整实现 LA464 架构的 16 系数/寄存器向量化 NTT 与逆 NTT,复用 AVX2 的 twiddle 表,XVMUH.H 提供精确 16 位有符号乘高。
polyInfinityNorm LASX 变体 :polyInfinityNormLASX 与 polyInfinityNormSignedLASX。
SM2 椭圆曲线
internal/sm2ec POWER9 优化 :补充栈帧布局说明,优化 POWER9 上的 SM2 椭圆曲线运算汇编。
Loong64 LSX/LASX优化。
GCM-SIV
amd64和arm64 上 POLYVAL 通过 CLMUL实现;批量加密复用底层 block cipher 的 EncryptBlocks 路径,长数据吞吐显著优于逐块调用。
SM3/SM9
SM4
🔧 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 测试矩阵。
📦 升级指南
Go 版本 :建议使用 Go 1.25+。
smx509 类型迁移 :pkcs7/cfca 调用方需将 x509.SignatureAlgorithm 替换为 smx509.SignatureAlgorithm。总之,不再支持与Go标准库x509中类型的混用 。
SHA1 策略 :smx509 CheckSignatureWithDigest 不再接受 SHA1;若业务仍依赖 SHA1 签名验证,需在调用前显式处理或降级。
ZUC 新能力 :若需 HTTP Range 友好的加密流,使用新增的无状态分块 cipher(XORKeyStreamAt);可寻址流可通过 NewCipherWithBucketSizeAndCapacity 预分配以获得更优 seek 性能。
后量子算法跨平台 :ML-KEM 现支持 amd64(AVX2)、arm64(NEON)、loong64(LASX)、ppc64le(VMX);ML-DSA 现支持 amd64(AVX2)、arm64(NEON)、loong64(LASX)。
GCM-SIV :对 nonce 唯一性难以保证的场景,可用 cipher 包新增的 GCM-SIV AEAD 替代 SM4-GCM;注意其加密性能略低于 SM4-GCM(未做 SM4+CMUL 融合),解密性能基本持平;相同 (明文, AAD) 对会产生相同密文,天然支持内容去重但不宜用于需明文不可链接的场景。
You can’t perform that action at this time.