| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package main
- import (
- "crypto"
- "crypto/rand"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "github.com/golang/protobuf/ptypes"
- "github.com/tjfoc/gmsm/sm2"
- "log"
- "math/big"
- "standard/json/pb"
- )
- func main() {
- pubkey := "02e04ceeee7c25240de0d510ac1977ee50633d3494ac9a08481daeca3f288c8c50"
- privkey := "7785e7029108b80f2d8d0576bdac3bf554bb756aa523a42c3a62996089b91f6b"
- ichain := &pb.Body{ChainId: "zx00001", ChainName: "zx", ChainIntro: "test for zx"}
- body, err := ptypes.MarshalAny(ichain)
- pk := &pb.PublicKey{Type: "sm2", Key: pubkey}
- signerInfo := pb.SignerInfos{PublicKey: pk}
- signerInfos := []*pb.SignerInfos{&signerInfo}
- authinfo := pb.AuthInfo{SignerInfos: signerInfos,Uuid:"100000",ChainId:"zx00001"}
- unsignchain, _ := json.Marshal(pb.Request{Body: body, AuthInfo: &authinfo})
- sign, err := Sign(unsignchain, privkey, pubkey)
- if err != nil {
- log.Fatalf("sign err : %s", err)
- }
- signatures := []string{sign}
- b,err := json.Marshal(pb.Request{Body: body, AuthInfo: &authinfo, Signatures: signatures})
- fmt.Println(string(b))
- resp := &pb.Response{Code:"000000",Msg:"success"}
- b,err = json.Marshal(resp)
- fmt.Println(string(b))
- res := &pb.GetAllChainsReq{Page:1,Size:10,Sort:"chain_id",Order:pb.OrderType_DESC}
- b,err = json.Marshal(res)
- fmt.Println(string(b))
- }
- //签名
- func Sign(unsign []byte, privKey string, pubkey string) (string, error) {
- privKeyBytes, err2 := hex.DecodeString(privKey)
- if err2 != nil {
- return "", err2
- }
- d := &big.Int{}
- d = d.SetBytes(privKeyBytes)
- priv := &sm2.PrivateKey{D: d}
- pubkeyBytes, err2 := hex.DecodeString(pubkey)
- if err2 != nil {
- return "", err2
- }
- publicKey := sm2.Decompress(pubkeyBytes)
- priv.PublicKey = *publicKey
- //fmt.Println("privkey: ", hex.EncodeToString(priv.D.Bytes()))
- //fmt.Println("原文:", string(unsign))
- sign, err := priv.Sign(rand.Reader, unsign, crypto.BLAKE2b_256)
- if err != nil {
- return "", err
- }
- pubkeyBytes = sm2.Compress(&priv.PublicKey)
- //fmt.Println("sign: ", hex.EncodeToString(sign))
- //fmt.Println("pubkey: ", hex.EncodeToString(pubkeyBytes))
- return hex.EncodeToString(sign), nil
- }
|