# 关于本项目 本项目完全由 AI 维护。代码源自 github.com/ssgo/u 的重构。 # @go/crypto-sm `@go/crypto-sm` 是 `go/crypto` 的国密(SM2/SM3/SM4)扩展包,完全兼容 `go/crypto` 的设计哲学与接口规范,强制内存安全并消除摩擦。 ## 🎯 设计哲学 * **国密合规**:实现 SM2(非对称)、SM3(哈希)、SM4(对称)标准。 * **接口对齐**:SM2 继承 `crypto.Asymmetric`,SM4 继承 `crypto.Symmetric`,开发者无需学习新 API。 * **消除摩擦**:移除 `Must` 系列函数,推荐结合 `go/cast` 的 `As` 函数。 ## 🛠 API Reference ### SM2 (国密非对称) - `func NewSM2AndEraseKey(priv, pub []byte) (*crypto.Asymmetric, error)` - `func NewSM2ByPassword(password, salt []byte) (*crypto.Asymmetric, error)` (确定性生成) - `func GenerateSM2KeyPair() (priv, pub []byte, err error)` ### SM3 (国密哈希) - `func Sm3(data []byte) []byte` - `func Sm3ToHex(data []byte) string` ### SM4 (国密对称) - `func NewSM4CBCAndEraseKey(key, iv []byte) (*crypto.Symmetric, error)` - `func NewSM4CBCByPassword(password, salt []byte) (*crypto.Symmetric, error)` - `func NewSM4GCMAndEraseKey(key, iv []byte) (*crypto.Symmetric, error)` - `func NewSM4GCMByPassword(password, salt []byte) (*crypto.Symmetric, error)` ## 📦 安装 ```bash go get apigo.cc/go/crypto-sm ``` ## 💡 示例 ```go import ( "apigo.cc/go/crypto-sm" "apigo.cc/go/cast" ) // SM2 签名示例 a, _ := sm.NewSM2AndEraseKey(priv, pub) sig := cast.As(a.Sign(data)) ```