trailofbits/go-slh-dsa

GitHub: trailofbits/go-slh-dsa

一个用 Go 语言实现的 FIPS 205 无状态哈希数字签名算法库,提供抗量子计算的数字签名能力。

Stars: 8 | Forks: 1

# 无状态哈希数字签名算法 (SLH-DSA, FIPS 205) 本仓库使用 Go 实现了 [FIPS 205](https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.205.pdf)。 [![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f4f512164c212839.svg)](https://github.com/trailofbits/go-slh-dsa/actions/workflows/ci.yml) ## 安装 ``` go get https://github.com/trailofbits/go-slh-dsa ``` ## 用法 ``` import ( "crypto/rand" "github.com/trailofbits/go-slh-dsa/slh_dsa" ) // First, specify the desired parameter set by name parameterSet, err := slh_dsa.GetParamSet("SLH-DSA-SHA2-128f") // Alternatively, `parameterSet := slh_dsa.SlhDsaSha2_128f()` // To generate a key sk, pk, err := slh_dsa.SLHKeygen(parameterSet) // To save/load keys sk_bytes := sk.Bytes() pk_bytes := pk.Bytes() loaded_sk, err := slh_dsa.LoadSecretKey(parameterSet, sk_bytes) loaded_pk, err := slh_dsa.LoadPublicKey(parameterSet, pk_bytes) // To sign a message. The library implements crypto.Signer // Note: message should be a []byte sig_bytes, err := sk.Sign(rand.Reader, message, nil) // To verify a message // First, deserialize the signature sig, err := slh_dsa.LoadSignature(parameterSet, sig_bytes) if pk.Verify(sig, message, []byte{}) { // ok } // Serialize the signature as bytes sig_bytes = sig.Bytes() // Deserialize bytes to a Signature object loaded_sig, err := slh_dsa.LoadSignature(parameterSet, sig_bytes) ``` ## 测试 本项目包含模糊测试和变异测试,以确保实现的质量和稳健性。 ### 模糊测试 要运行模糊测试,请使用以下命令: ``` go test -fuzz=FuzzSignAndVerify -fuzztime 60s ./slh_dsa go test -fuzz=FuzzLoaders -fuzztime 60s ./slh_dsa ``` 这将运行模糊测试 60 秒。 ### 变异测试 要运行变异测试,首先需要安装 `go-gremlins`: ``` go install github.com/go-gremlins/gremlins@latest ``` 然后,运行以下命令: ``` gremlins -v ./... ```
标签:CVE, EVTX分析, EVTX分析, FIPS 205, Go语言, NIST标准, SHA-2, SLH-DSA, SPHINCS+, 变异测试, 后量子密码学, 密码学库, 密钥生成, 抗量子计算, 数字签名, 无状态哈希数字签名, 日志审计, 程序破解, 签名验证