99 lines
2.2 KiB
Go
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")
|
|
}
|
|
}
|
|
}
|