86 lines
2.1 KiB
Go
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)
|
|
|
|
}
|