120 lines
3.5 KiB
Go
120 lines
3.5 KiB
Go
package gcltests
|
|
|
|
import (
|
|
"bytes"
|
|
|
|
"xdx.jelly/xgcl/grand"
|
|
"xdx.jelly/xgcl/sm/sm2"
|
|
"xdx.jelly/xgcl/tpc/sm2/sm2a"
|
|
)
|
|
|
|
// SM2协同签名密钥生成
|
|
func SM2TPCKeyGenTest() bool {
|
|
// 先进行SM2签名验证测试
|
|
if !SM2VerifyTest() {
|
|
return false
|
|
}
|
|
// 生成签名密钥分量和公钥
|
|
serverKeyCtx := sm2a.NewServerSignKeyGenContext()
|
|
clientKeyCtx := sm2a.NewClientSignKeyGenContext(grand.Reader)
|
|
|
|
buf, err := serverKeyCtx.ServerGenKey_one(grand.Reader)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
buf, err = clientKeyCtx.ClientKeyGen_one(buf)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
buf, err = serverKeyCtx.ServerGenKey_two(buf, grand.Reader)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
buf, err = clientKeyCtx.ClientKeyGen_two(buf)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
err = serverKeyCtx.ServerGenKey_three(buf)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
dc, _ := clientKeyCtx.GetClientKey() // 客户端私钥分量
|
|
ds, _ := serverKeyCtx.GetServerKey() // 服务端私钥分量
|
|
pkc, _ := clientKeyCtx.GetPublicKey() // 客户端公钥
|
|
pks, _ := serverKeyCtx.GetPublicKey() // 服务端公钥
|
|
if !pkc.Equals(pks) {
|
|
return false
|
|
}
|
|
pk := pkc
|
|
|
|
// 协同计算签名
|
|
e := hexDecode("6F18CAF30D3E0C2F1C59DE6080BA23AF2F4DD49DE5173C4579B8A7FE03A57096")
|
|
clientSign := sm2a.NewClientSignContext(pk, grand.Reader)
|
|
buf, _ = clientSign.Initial(e)
|
|
buf, _ = sm2a.ServerSign(ds, pk, buf, grand.Reader)
|
|
sig, _ := clientSign.Final(dc, buf)
|
|
|
|
// 签名验证
|
|
if !sm2.Verify(e, pk, sig) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// SM2协同签名验证
|
|
func SM2TPCSignTest() bool {
|
|
// 先进行SM2签名验证测试
|
|
if !SM2VerifyTest() {
|
|
return false
|
|
}
|
|
dc := &sm2.PrivateKey{}
|
|
dc.SetBytes(hexDecode("5F16B93817200830863BB55A523E131563C639880DA8D5F663C9CA32E872C621"))
|
|
|
|
ds := &sm2.PrivateKey{}
|
|
ds.SetBytes(hexDecode("5749BD354348F66F9905254E784C97BDE700DB7968219829F2DB5EC80D0AB0DF"))
|
|
pk := &sm2.PublicKey{}
|
|
pk.SetBytes(hexDecode("C31ED61795626AA8D8D26BB17359160F3CCB63786D50DF2C350C9DD27539DBDA5C2D7FAE4D9360CC77F9C0F7E66DB80ED35CF9969E68A0496BE1120020A4396A"))
|
|
|
|
// 协同计算签名
|
|
e := hexDecode("6F18CAF30D3E0C2F1C59DE6080BA23AF2F4DD49DE5173C4579B8A7FE03A57096")
|
|
clientSign := sm2a.NewClientSignContext(pk, grand.Reader)
|
|
buf, _ := clientSign.Initial(e)
|
|
buf, _ = sm2a.ServerSign(ds, pk, buf, grand.Reader)
|
|
sig, _ := clientSign.Final(dc, buf)
|
|
|
|
// 签名验证
|
|
if !sm2.Verify(e, pk, sig) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// SM2协同解密验证
|
|
func SM2TPCDecTest() bool {
|
|
if !SM2EncryptionTest() {
|
|
return false
|
|
}
|
|
dc := &sm2.PrivateKey{}
|
|
dc.SetBytes(hexDecode("A17EE7749FC8882D876A1CCE1BCAB13A4F42E28E7EA30B6E81CD068806FE943C"))
|
|
|
|
ds := &sm2.PrivateKey{}
|
|
ds.SetBytes(hexDecode("566760699576E8B3882489B7FB9ED0DE4B467260665156EC131665D929684309"))
|
|
pk := &sm2.PublicKey{}
|
|
pk.SetBytes(hexDecode("2B2E90C71D9B16CC4F33D1775E76F5D7C0F283F2D7123504B718788FA38FDB2BBF7F7D94683C498947F365C91C42D7BDC10159E092C158B97BE7B035868949F8"))
|
|
|
|
stdPlain := hexDecode("31323334353637383132333435363738")
|
|
cipher := &sm2.Cipher{}
|
|
cipher.SetBytes(hexDecode("A098DB078468335D160DCE7A8876B88D56E16173421E96D455FED5039BB3A2F9E4E940F2BA4644C230E63087974EDA8B9C22B0FB116809395060FA73F970D5B3BB43CEDBABC75E8F4F925DC1B58DC9243B4A92668FBA980E4C73DA579B360479A1EEEAEE29BFBD171821EAECBECE675B"))
|
|
|
|
// 协同解密
|
|
clientDecCtx := sm2a.NewClientDecContext()
|
|
buf, _ := clientDecCtx.Decrypt_one(cipher)
|
|
buf, _ = sm2a.ServerDecrypt(buf, ds)
|
|
plain, _ := clientDecCtx.Decrypt_two(buf, dc)
|
|
|
|
if !bytes.Equal(plain, stdPlain) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|