func Signature(payload string, privateKey string) (interface{}, error) {
decoded, _ := pem.Decode([]byte(privateKey))
if decoded == nil {
return nil, errors.New("decoded private key error")
}
hash := md5.New()
hash.Write([]byte(payload))
hashed := hash.Sum(nil)
rsaPrivateKey, err := x509.ParsePKCS1PrivateKey(decoded.Bytes)
if err != nil {
return nil, err
}
signature, err := rsa.SignPKCS1v15(rand.Reader, rsaPrivateKey, crypto.MD5, hashed)
if err != nil {
return nil, err
}
if err := rsa.VerifyPKCS1v15(&rsaPrivateKey.PublicKey, crypto.MD5, hashed, signature); err != nil {
return nil, err
}
encoded := hex.EncodeToString(signature)
return encoded, nil
}