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