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

86 lines
2.1 KiB
Go

package sm2m
import (
"testing"
"xdx.jelly/xgcl/grand"
"xdx.jelly/xgcl/sm/sm2"
)
func TestAuthKey(t *testing.T) {
// Generate key
clientKey, clientTempKey, err := ClientGenSignKey_one(grand.GetRandom(sm2.ByteSize()))
if err != nil {
t.Log()
t.Fail()
return
}
serverKey, serverTempKey, publicKey, _ := ServerGenSignKey(clientTempKey, grand.GetRandom(sm2.ByteSize()))
if err != nil {
t.Log()
t.Fail()
return
}
if err := ClientGenSignKey_two(clientKey, serverTempKey, publicKey); err != nil {
t.Log()
t.Fail()
return
}
t.Log("======= 协同密钥 =========")
t.Logf("ClientKey=%v\nServerKey=%v\nPublicKey=%v", clientKey, serverKey, publicKey)
d := realPrivateKey(clientKey, serverKey)
t.Logf("Real private key: %v", d)
t.Logf("Real public key: %v", sm2.GenPublicKey(d))
t.Log("================ Signature Test==============")
c := NewClientSignContext(publicKey, grand.Reader)
e := grand.GetRandom(sm2.ByteSize())
out, _ := c.Initial(e)
out, _ = ServerSign(serverKey, out, grand.Reader)
sig, _ := c.Final(clientKey, out)
t.Logf("Signature: %v", sig)
isValid := sm2.Verify(e, publicKey, sig)
if !isValid {
t.Log("verify success")
t.Fail()
return
}
t.Logf("verify = %v", isValid)
t.Log("========== auth key ===========")
clientAuthKey, randomFactor, err := ClientGenAuthKey(clientKey, grand.Reader)
if err != nil {
t.Fatal(err)
}
serverAuthKey, err := ServerGenAuthKey(serverKey, randomFactor)
if err != nil {
t.Fatal(err)
}
ad := realPrivateKey(clientAuthKey, serverAuthKey)
if ad.D.Cmp(d.D) != 0 {
t.Log("auth key generate failed")
t.Fail()
return
}
t.Logf("Real auth private key: %v", ad)
t.Logf("Real auth public key: %v", sm2.GenPublicKey(ad))
t.Log("================ Signature Test (auth key)==============")
c = NewClientSignContext(publicKey, grand.Reader)
e = grand.GetRandom(sm2.ByteSize())
out, _ = c.Initial(e)
out, _ = ServerSign(serverAuthKey, out, grand.Reader)
sig, _ = c.Final(clientAuthKey, out)
t.Logf("Signature: %v", sig)
isValid = sm2.Verify(e, publicKey, sig)
if !isValid {
t.Log("verify success")
t.Fail()
return
}
t.Logf("verify = %v", isValid)
}