Files
xgcl/tpc/sm2/sm2m/audit_test.go
T
2026-05-27 23:03:00 +08:00

89 lines
2.4 KiB
Go

package sm2m
import (
"fmt"
"testing"
"xdx.jelly/xgcl/grand"
"xdx.jelly/xgcl/sm/sm2"
)
func TestAuditSign(t *testing.T) {
rnd := make([]byte, 32)
clientKey, clientTempKey, _ := ClientGenSignKey_one(nil)
_, _ = grand.GenerateRandom(rnd)
serverKey, serverTempKey, publicKey, _ := ServerGenSignKey(clientTempKey, rnd)
err := ClientGenSignKey_two(clientKey, serverTempKey, publicKey)
if err != nil {
t.Fatal("client's public key and server's public key are not equal.")
}
d := realPrivateKey(serverKey, clientKey)
if !publicKey.Equals(&d.PublicKey) {
t.Fatal("client's public key and server's public key are not equal.")
}
fmt.Printf("客户端密钥分量: %x\n", clientKey.Bytes())
fmt.Printf("服务端密钥分量: %x\n", serverKey.Bytes())
fmt.Printf("公钥: %x\n", publicKey.Bytes())
c := new(ClientSignContext)
e := make([]byte, 32)
grand.GenerateRandom(e)
fmt.Printf("签名数据e: %x\n", e)
out, err := c.Initial(e)
if err != nil {
t.Fatal(err)
}
out, err = ServerSign(serverKey, out, grand.Reader)
if err != nil {
t.Fatal(err)
}
sig, err := c.Final(clientKey, out)
if err != nil {
t.Fatal(err)
}
fmt.Printf("签名结果: %x\n", sig.Bytes())
if !sm2.Verify(e, publicKey, sig) {
t.Fatal("verify failed")
}
}
func TestAuditDec(t *testing.T) {
rnd := make([]byte, 32)
grand.ReaderOne.Read(rnd)
clientKey, clientTempKey, _ := ClientGenSignKey_one(rnd)
// _, _ = grand.GenerateRandom(rnd)
grand.ReaderTwo.Read(rnd)
serverKey, serverTempKey, publicKey, _ := ServerGenSignKey(clientTempKey, rnd)
err := ClientGenSignKey_two(clientKey, serverTempKey, publicKey)
if err != nil {
t.Fatal("client's public key and server's public key are not equal.")
}
d := realPrivateKey(serverKey, clientKey)
if !publicKey.Equals(&d.PublicKey) {
t.Fatal("client's public key and server's public key are not equal.")
}
fmt.Printf("客户端密钥分量: %x\n", clientKey.Bytes())
fmt.Printf("服务端密钥分量: %x\n", serverKey.Bytes())
fmt.Printf("公钥: %x\n", publicKey.Bytes())
msg := []byte("1234567890123456")
fmt.Printf("明文数据: %x\n", msg)
grand.ReaderOne.Read(rnd)
c, _ := sm2.Encrypt(publicKey, msg, rnd)
fmt.Printf("密文数据: %x\n", c.Bytes())
clientCTX := NewClientDecContext()
out, _ := clientCTX.Initial(c)
out, _ = ServerImportKey(serverKey, out)
plain, _ := clientCTX.Final(clientKey, out)
fmt.Printf("解密数据: %x\n", plain)
}