sha256withrsa_signer.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // Copyright 2021 Tencent Inc. All rights reserved.
  2. // Package signers 微信支付 API v3 Go SDK 数字签名生成器
  3. package signers
  4. import (
  5. "context"
  6. "crypto/rsa"
  7. "fmt"
  8. "strings"
  9. "git.nanodreamtech.com/sg/wechatpay-go/core/auth"
  10. "git.nanodreamtech.com/sg/wechatpay-go/utils"
  11. )
  12. // SHA256WithRSASigner Sha256WithRSA 数字签名生成器
  13. type SHA256WithRSASigner struct {
  14. MchID string // 商户号
  15. CertificateSerialNo string // 商户证书序列号
  16. PrivateKey *rsa.PrivateKey // 商户私钥
  17. }
  18. // Sign 对信息使用 SHA256WithRSA 算法进行签名
  19. func (s *SHA256WithRSASigner) Sign(_ context.Context, message string) (*auth.SignatureResult, error) {
  20. if s.PrivateKey == nil {
  21. return nil, fmt.Errorf("you must set privatekey to use SHA256WithRSASigner")
  22. }
  23. if strings.TrimSpace(s.CertificateSerialNo) == "" {
  24. return nil, fmt.Errorf("you must set mch certificate serial no to use SHA256WithRSASigner")
  25. }
  26. signature, err := utils.SignSHA256WithRSA(message, s.PrivateKey)
  27. if err != nil {
  28. return nil, err
  29. }
  30. return &auth.SignatureResult{MchID: s.MchID, CertificateSerialNo: s.CertificateSerialNo, Signature: signature}, nil
  31. }
  32. // Algorithm 返回使用的签名算法:SHA256-RSA2048
  33. func (s *SHA256WithRSASigner) Algorithm() string {
  34. return "SHA256-RSA2048"
  35. }