48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
package sm9
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"xdx.jelly/xgcl/sm/sm3"
|
|
)
|
|
|
|
// 生成GBT 38635附录签名示例数据
|
|
func TestGBT38635Sign(t *testing.T) {
|
|
|
|
uid := []byte("Alice")
|
|
msg := []byte("Chinese IBS standard")
|
|
digest := sm3.Sum(msg)
|
|
msg = digest[:]
|
|
fmt.Printf("待签名消息的杂凑M: %s\n", strings.ToUpper(hex.EncodeToString(msg)))
|
|
|
|
rnd, _ := hex.DecodeString("000130E78459D78545CB54C587E02CF480CE0B66340F319F348A1D5B1F2DC5F4")
|
|
ks, pubs, _ := GenerateMastSignPrivateKey(bytes.NewReader(rnd))
|
|
ds, err := ks.GenerateUserSignKey(uid)
|
|
assert.Nil(t, err)
|
|
|
|
// 打印
|
|
fmt.Printf("签名主私钥ks:%s\n", strings.ToUpper(ks.String()))
|
|
fmt.Printf("签名主公钥Pubs:%s\n", strings.ToUpper(pubs.G2.String()))
|
|
|
|
fmt.Printf("实体A的标识:%s\n", string(uid))
|
|
fmt.Printf("实体A的签名私钥ds:%s\n", ds.G1.String())
|
|
|
|
if PrintIntermediaDataForSTD38635 {
|
|
fmt.Printf("\n================= 签名步骤中的相关值 ===================\n")
|
|
}
|
|
rnd, _ = hex.DecodeString("00033C8616B06704813203DFD00965022ED15975C662337AED648835DC4B1CBE")
|
|
signature, _ := Sign(msg, ds, pubs, rnd)
|
|
|
|
if PrintIntermediaDataForSTD38635 {
|
|
fmt.Printf("\n================= 验证步骤中的相关值 ===================\n")
|
|
}
|
|
if !Verify(signature, uid, msg, pubs) {
|
|
t.Fatal()
|
|
}
|
|
}
|