func Sha256WithRsa(privateRaw string, msg string) (string, error) {
privateRaw = strings.Trim(privateRaw, "\n")
if !strings.HasPrefix(privateRaw, "-----BEGIN RSA PRIVATE KEY-----") {
privateRaw = fmt.Sprintf("%s\n%s\n%s", "-----BEGIN RSA PRIVATE KEY-----", privateRaw, "-----END RSA PRIVATE KEY-----")
}
blockPri, _ := pem.Decode([]byte(privateRaw))
if blockPri == nil {
return "", fmt.Errorf("blockPri is nil")
}
rsaPri, e := genPriKey(blockPri.Bytes, PKCS8)
if e != nil {
panic(e)
}
h := sha256.New()
h.Write([]byte(msg))
d := h.Sum(nil)
signature, err := rsa.SignPKCS1v15(rand.Reader, rsaPri, crypto.SHA256, d)
if err != nil {
return "", errorx.Wrap(err)
}
encodedSig := base64.StdEncoding.EncodeToString(signature)
return encodedSig, nil
}
const (
PKCS1 int64 = iota
PKCS8
)
func genPriKey(privateKey []byt