main.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package main
  2. import (
  3. "crypto"
  4. "crypto/rand"
  5. "encoding/hex"
  6. "encoding/json"
  7. "fmt"
  8. "github.com/golang/protobuf/ptypes"
  9. "github.com/tjfoc/gmsm/sm2"
  10. "log"
  11. "math/big"
  12. "standard/json/pb"
  13. )
  14. func main() {
  15. pubkey := "02e04ceeee7c25240de0d510ac1977ee50633d3494ac9a08481daeca3f288c8c50"
  16. privkey := "7785e7029108b80f2d8d0576bdac3bf554bb756aa523a42c3a62996089b91f6b"
  17. ichain := &pb.Body{ChainId: "zx00001", ChainName: "zx", ChainIntro: "test for zx"}
  18. body, err := ptypes.MarshalAny(ichain)
  19. pk := &pb.PublicKey{Type: "sm2", Key: pubkey}
  20. signerInfo := pb.SignerInfos{PublicKey: pk}
  21. signerInfos := []*pb.SignerInfos{&signerInfo}
  22. authinfo := pb.AuthInfo{SignerInfos: signerInfos,Uuid:"100000",ChainId:"zx00001"}
  23. unsignchain, _ := json.Marshal(pb.Request{Body: body, AuthInfo: &authinfo})
  24. sign, err := Sign(unsignchain, privkey, pubkey)
  25. if err != nil {
  26. log.Fatalf("sign err : %s", err)
  27. }
  28. signatures := []string{sign}
  29. b,err := json.Marshal(pb.Request{Body: body, AuthInfo: &authinfo, Signatures: signatures})
  30. fmt.Println(string(b))
  31. resp := &pb.Response{Code:"000000",Msg:"success"}
  32. b,err = json.Marshal(resp)
  33. fmt.Println(string(b))
  34. res := &pb.GetAllChainsReq{Page:1,Size:10,Sort:"chain_id",Order:pb.OrderType_DESC}
  35. b,err = json.Marshal(res)
  36. fmt.Println(string(b))
  37. }
  38. //签名
  39. func Sign(unsign []byte, privKey string, pubkey string) (string, error) {
  40. privKeyBytes, err2 := hex.DecodeString(privKey)
  41. if err2 != nil {
  42. return "", err2
  43. }
  44. d := &big.Int{}
  45. d = d.SetBytes(privKeyBytes)
  46. priv := &sm2.PrivateKey{D: d}
  47. pubkeyBytes, err2 := hex.DecodeString(pubkey)
  48. if err2 != nil {
  49. return "", err2
  50. }
  51. publicKey := sm2.Decompress(pubkeyBytes)
  52. priv.PublicKey = *publicKey
  53. //fmt.Println("privkey: ", hex.EncodeToString(priv.D.Bytes()))
  54. //fmt.Println("原文:", string(unsign))
  55. sign, err := priv.Sign(rand.Reader, unsign, crypto.BLAKE2b_256)
  56. if err != nil {
  57. return "", err
  58. }
  59. pubkeyBytes = sm2.Compress(&priv.PublicKey)
  60. //fmt.Println("sign: ", hex.EncodeToString(sign))
  61. //fmt.Println("pubkey: ", hex.EncodeToString(pubkeyBytes))
  62. return hex.EncodeToString(sign), nil
  63. }