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

99 lines
2.2 KiB
Go

package sm2m
import (
"fmt"
"testing"
"xdx.jelly/xgcl/grand"
"xdx.jelly/xgcl/sm/sm2"
)
func TestSign(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.Println("clientKey:", clientKey)
fmt.Println("serverKey:", serverKey)
// c := NewClientSignContext(pk, grand.Reader)
c := new(ClientSignContext)
e := make([]byte, 32)
out, err := c.Initial(e)
if err != nil {
t.Fatal(err)
}
fmt.Printf("clientData: %x\n", out)
out, err = ServerSign(serverKey, out, grand.Reader)
if err != nil {
t.Fatal(err)
}
fmt.Printf("serverData: %x\n", out)
sig, err := c.Final(clientKey, out)
if err != nil {
t.Fatal(err)
}
fmt.Println(sig)
if !sm2.Verify(e, publicKey, sig) {
t.Fatal("verify failed")
}
}
func TestSignFuzz(t *testing.T) {
rnd := make([]byte, 32)
_, _ = grand.GenerateRandom(rnd)
clientKey, clientTempKey, _ := ClientGenSignKey_one(rnd)
_, _ = 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.")
}
fmt.Println("clientKey:", clientKey)
fmt.Println("serverKey:", serverKey)
for i := 0; i < 10000000; i++ {
// c := NewClientSignContext(pk, grand.Reader)
c := new(ClientSignContext)
e := make([]byte, 32)
_, _ = grand.GenerateRandom(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)
}
if !sm2.Verify(e, publicKey, sig) {
fmt.Printf("e=%x\n", e)
t.Fatal("verify failed")
}
if i > 0 && i%1000 == 0 {
fmt.Println(i, " pass")
}
}
}