signature/golang/client/client.go (102 lines of code) (raw):
// This file is auto-generated, don't edit it. Thanks.
/**
* Signature Util for Darabonba.
*/
package client
import (
"crypto"
"crypto/hmac"
"crypto/md5"
"crypto/rand"
"crypto/rsa"
"crypto/sha1"
"crypto/sha256"
"crypto/x509"
"encoding/pem"
"errors"
"strings"
"github.com/alibabacloud-go/tea/tea"
"github.com/tjfoc/gmsm/sm3"
)
const (
PEM_BEGIN = "-----BEGIN RSA PRIVATE KEY-----\n"
PEM_END = "\n-----END RSA PRIVATE KEY-----"
)
/**
* HmacSHA1 Signature
* @param stringToSign string
* @param secret string
* @return signed bytes
*/
func HmacSHA1Sign(stringToSign *string, secret *string) (_result []byte) {
return HmacSHA1SignByBytes(stringToSign, []byte(tea.StringValue(secret)))
}
/**
* HmacSHA1 Signature
* @param stringToSign string
* @param secret bytes
* @return signed bytes
*/
func HmacSHA1SignByBytes(stringToSign *string, secret []byte) (_result []byte) {
hmac := hmac.New(sha1.New, secret)
hmac.Write([]byte(tea.StringValue(stringToSign)))
return hmac.Sum(nil)
}
/**
* HmacSHA256 Signature
* @param stringToSign string
* @param secret string
* @return signed bytes
*/
func HmacSHA256Sign(stringToSign *string, secret *string) (_result []byte) {
return HmacSHA256SignByBytes(stringToSign, []byte(tea.StringValue(secret)))
}
/**
* HmacSHA256 Signature
* @param stringToSign string
* @param secret bytes
* @return signed bytes
*/
func HmacSHA256SignByBytes(stringToSign *string, secret []byte) (_result []byte) {
h := hmac.New(sha256.New, secret)
_, err := h.Write([]byte(tea.StringValue(stringToSign)))
if err != nil {
return nil
}
return h.Sum(nil)
}
/**
* HmacSM3 Signature
* @param stringToSign string
* @param secret string
* @return signed bytes
*/
func HmacSM3Sign(stringToSign *string, secret *string) (_result []byte) {
return HmacSM3SignByBytes(stringToSign, []byte(tea.StringValue(secret)))
}
/**
* HmacSM3 Signature
* @param stringToSign string
* @param secret bytes
* @return signed bytes
*/
func HmacSM3SignByBytes(stringToSign *string, secret []byte) (_result []byte) {
h := hmac.New(sm3.New, secret)
_, err := h.Write([]byte(tea.StringValue(stringToSign)))
if err != nil {
return nil
}
return h.Sum(nil)
}
/**
* SHA256withRSA Signature
* @param stringToSign string
* @param secret string
* @return signed bytes
*/
func SHA256withRSASign(stringToSign *string, secret *string) (_result []byte) {
byt := rsaSign(tea.StringValue(stringToSign), tea.StringValue(secret))
return byt
}
func rsaSign(content, secret string) []byte {
h := crypto.SHA256.New()
h.Write([]byte(content))
hashed := h.Sum(nil)
priv, err := parsePrivateKey(secret)
if err != nil {
return nil
}
sign, err := rsa.SignPKCS1v15(rand.Reader, priv, crypto.SHA256, hashed)
if err != nil {
return nil
}
return sign
}
func parsePrivateKey(privateKey string) (*rsa.PrivateKey, error) {
privateKey = formatPrivateKey(privateKey)
block, _ := pem.Decode([]byte(privateKey))
if block == nil {
return nil, errors.New("PrivateKey is invalid")
}
priKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
return nil, err
}
switch priKey.(type) {
case *rsa.PrivateKey:
return priKey.(*rsa.PrivateKey), nil
default:
return nil, nil
}
}
func formatPrivateKey(privateKey string) string {
if !strings.HasPrefix(privateKey, PEM_BEGIN) {
privateKey = PEM_BEGIN + privateKey
}
if !strings.HasSuffix(privateKey, PEM_END) {
privateKey += PEM_END
}
return privateKey
}
func MD5Sign(stringToSign *string) (_result []byte) {
return MD5SignForBytes([]byte(tea.StringValue(stringToSign)))
}
func MD5SignForBytes(bytesToSign []byte) (_result []byte) {
h := md5.New()
h.Write(bytesToSign)
return h.Sum(nil)
}