Add RSA2 signing and verification functions
This commit is contained in:
parent
6ca148d76c
commit
adc7d5f59d
3 changed files with 241 additions and 0 deletions
114
crypto/crypto.go
114
crypto/crypto.go
|
|
@ -3,8 +3,15 @@ package crypto
|
|||
import (
|
||||
"crypto"
|
||||
"crypto/hmac"
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"encoding/pem"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/crypto/md4"
|
||||
)
|
||||
|
|
@ -60,3 +67,110 @@ func Hmac(hash crypto.Hash, value string, key string, encoding ...string) (strin
|
|||
|
||||
return fmt.Sprintf("%x", mac.Sum(nil)), nil
|
||||
}
|
||||
|
||||
// RSA2Sign RSA2 Sign
|
||||
func RSA2Sign(prikey string, hash crypto.Hash, value string, encoding ...string) (string, error) {
|
||||
|
||||
privateKey, err := parsePrivateKey(prikey)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
h := hash.New()
|
||||
_, err = h.Write([]byte(value))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, h.Sum(nil))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(encoding) > 0 && encoding[0] == "base64" {
|
||||
return base64.StdEncoding.EncodeToString(signature), nil
|
||||
}
|
||||
|
||||
return hex.EncodeToString(signature), nil
|
||||
}
|
||||
|
||||
// RSA2Verify RSA2 Verify
|
||||
func RSA2Verify(pubkey string, hash crypto.Hash, value string, signatureString string, encoding ...string) (bool, error) {
|
||||
|
||||
publicKey, err := parsePublicKey(pubkey)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
h := hash.New()
|
||||
_, err = h.Write([]byte(value))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
var signature []byte
|
||||
if len(encoding) > 0 && encoding[0] == "base64" {
|
||||
signature, err = base64.StdEncoding.DecodeString(signatureString)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
} else {
|
||||
signature, err = hex.DecodeString(signatureString)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, h.Sum(nil), []byte(signature))
|
||||
return err == nil, nil
|
||||
}
|
||||
|
||||
func parsePrivateKey(privateKeyStr string) (*rsa.PrivateKey, error) {
|
||||
privateKeyStr = strings.TrimSpace(privateKeyStr)
|
||||
if !strings.HasPrefix(privateKeyStr, "-----BEGIN RSA PRIVATE KEY-----") {
|
||||
privateKeyStr = fmt.Sprintf("-----BEGIN RSA PRIVATE KEY-----\n%s\n-----END RSA PRIVATE KEY-----\n", privateKeyStr)
|
||||
}
|
||||
|
||||
block, _ := pem.Decode([]byte(privateKeyStr))
|
||||
if block == nil {
|
||||
return nil, fmt.Errorf("cannot decode PEM block")
|
||||
}
|
||||
|
||||
key, err := x509.ParsePKCS8PrivateKey(block.Bytes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
switch key := key.(type) {
|
||||
case *rsa.PrivateKey:
|
||||
return key, nil
|
||||
default:
|
||||
return nil, errors.New("private key error")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func parsePublicKey(publicKeyStr string) (*rsa.PublicKey, error) {
|
||||
|
||||
publicKeyStr = strings.TrimSpace(publicKeyStr)
|
||||
if !strings.HasPrefix(publicKeyStr, "-----BEGIN RSA PUBLIC KEY-----") {
|
||||
publicKeyStr = fmt.Sprintf("-----BEGIN RSA PUBLIC KEY-----\n%s\n-----END RSA PUBLIC KEY-----\n", publicKeyStr)
|
||||
}
|
||||
|
||||
block, _ := pem.Decode([]byte(publicKeyStr))
|
||||
if block == nil {
|
||||
return nil, fmt.Errorf("cannot decode PEM block")
|
||||
}
|
||||
|
||||
pub, err := x509.ParsePKIXPublicKey(block.Bytes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
switch pub := pub.(type) {
|
||||
case *rsa.PublicKey:
|
||||
return pub, nil
|
||||
default:
|
||||
return nil, errors.New("public key error")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,3 +66,71 @@ func TestSHA1Base64(t *testing.T) {
|
|||
res = process.New("crypto.Hmac", args...).Run()
|
||||
assert.Equal(t, "dLVbarK45DisgQQ142njBHs5UdA=", res)
|
||||
}
|
||||
|
||||
func TestRSA2Sign(t *testing.T) {
|
||||
prikey := `MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCHwr1gmVkw1pp4+DP74J+l4c9GUyySjIsBECspMDX83Au/OmZ5o1IxCg95rGzAC5W908J084seOvVJcLmFY5H2w6pHSyqho/OLTxupH0jN+wRQeLRIwDvyFZWIYODk8eAktpBpphgq3hL/NG7P87tuAoWIiJ1w8lNW85FqTLKpgvtfFmCL3jdSZwgLEbS3up7WM12hNU4pakKWdlPwse9rCFFTiR/Qm1eNzyzz4cGX5M1FMW8ByxXd5l6PSGR53wJPGiwv5kvsudjKXvRw4tqUgNIsmtzg/xBDMrbX6E6HqsB6UfTUQNM4FT3g7UhcT0D+BpvHNcCSupZcvYm9aN3LAgMBAAECggEADcLUlV0V6FhocgiepFJhfFwGOZemtfgfAu2TomornsTjP+/4gS3n3+aoKOosX88Mz6AOXvJs0JSjVl1hwL6WBhBRS0a4PIg04JMVN7BfHdnq1wlVJOavbNt5O8iuIybNVItY2gym+HloLYwwC04mWoFQ7cUDSHaXsgGgZMj/dyUUbio0KdLsWGot9ajDX4Det6D97pl+KpaT3Yz1JrOaen/iCpZ5tMRN7kDAyVzGJqn9++Hu0+lgVm7eVEF8ny6BALObKgEvhMT7U0O9/lVXgz2ZnyqOqAhzXsm9MeQfpgTAphnUOwPJDaDo9K7tM9PHYiwkbV7C05OEmSS9YTeOAQKBgQDbpuEjgGzcXp+6SSAkRmaVeAh+VUB/JIWbdY/6U+f7E/qM4UgnBJubjyMYCN7+uGICzCbBdXQk8zNZOTeuhD0yI46RXQyqlkhkzLWNuIBAph8L2dmxNhH1biVjvauPo2WLhIygn33Yd3eh/h73jmzFvbB3DL82Dp9JXrOIMRGKywKBgQCeOfm5mDbjb8UN3qoJ5oJjSyQ46RfPIbCmMt1h6TeB9XbztnuJVs7hn7DvkkcHVgtq3ipdyHL8fDTSbJ3Mek84wEYgyuXnPsMlwGyUiaCJLwrXSdh9/4KmjrfZw6vdciW8MPvExzNtYinSZIZ8yMKQmkLaGfMzN5kKJN8EcKyZAQKBgA16BrQ76/H1aE1wsSUooKCpFbRSnLtwTTZFl0jfnwsbpbLBG8ExGi8IMDoISU5Nl83eIr6Z6z9dIJhn10/A01RhNB0dHWrV/6kXmkgQuuW8i4kZm66wx5dMY8Tj3UPZ3aAayNoODxWZ9uAcjF/aADh9s/cJ9C1n5kQFKHTBtfbTAoGAY/HxGVfZy/5M9b7hn5FYaUoMnlo2bOM2BzV3+6HqKxAXTEjHbfBEi+ZoSFwYu7yRR7cAAe9dGrmGUCjF4GSd6BYj9hDT+ib987nBnG321tC9Q1JlCum76GOcJFTiGeZBicdTMXA2vvBTxI81GFtj8x1N/yCHK6IB7JNvwAlALQECgYAo5iMhlQk+IjuilQnzKH9r3pCyhu/MYKtlvQYu5cg1lVbyU8fpn0FHdnglxErWIXWz5w5E9Q0mtdtL9T/89DDXNM7eue6PvgHJVmUTTIUkl85gGKyefSHTT57L9h3elMGPVNAG14qfyCeDQ6vJg1+VLSUWXwQ5e3DTuZL9wDe/ZA==`
|
||||
hash := HashTypes["SHA256"]
|
||||
res, err := RSA2Sign(prikey, hash, "hello world")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pubKey := `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh8K9YJlZMNaaePgz++CfpeHPRlMskoyLARArKTA1/NwLvzpmeaNSMQoPeaxswAuVvdPCdPOLHjr1SXC5hWOR9sOqR0sqoaPzi08bqR9IzfsEUHi0SMA78hWViGDg5PHgJLaQaaYYKt4S/zRuz/O7bgKFiIidcPJTVvORakyyqYL7XxZgi943UmcICxG0t7qe1jNdoTVOKWpClnZT8LHvawhRU4kf0JtXjc8s8+HBl+TNRTFvAcsV3eZej0hked8CTxosL+ZL7LnYyl70cOLalIDSLJrc4P8QQzK21+hOh6rAelH01EDTOBU94O1IXE9A/gabxzXAkrqWXL2JvWjdywIDAQAB`
|
||||
valid, err := RSA2Verify(pubKey, hash, "hello world", res)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.True(t, valid)
|
||||
}
|
||||
|
||||
func TestRSA2SignBase64(t *testing.T) {
|
||||
prikey := `MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCHwr1gmVkw1pp4+DP74J+l4c9GUyySjIsBECspMDX83Au/OmZ5o1IxCg95rGzAC5W908J084seOvVJcLmFY5H2w6pHSyqho/OLTxupH0jN+wRQeLRIwDvyFZWIYODk8eAktpBpphgq3hL/NG7P87tuAoWIiJ1w8lNW85FqTLKpgvtfFmCL3jdSZwgLEbS3up7WM12hNU4pakKWdlPwse9rCFFTiR/Qm1eNzyzz4cGX5M1FMW8ByxXd5l6PSGR53wJPGiwv5kvsudjKXvRw4tqUgNIsmtzg/xBDMrbX6E6HqsB6UfTUQNM4FT3g7UhcT0D+BpvHNcCSupZcvYm9aN3LAgMBAAECggEADcLUlV0V6FhocgiepFJhfFwGOZemtfgfAu2TomornsTjP+/4gS3n3+aoKOosX88Mz6AOXvJs0JSjVl1hwL6WBhBRS0a4PIg04JMVN7BfHdnq1wlVJOavbNt5O8iuIybNVItY2gym+HloLYwwC04mWoFQ7cUDSHaXsgGgZMj/dyUUbio0KdLsWGot9ajDX4Det6D97pl+KpaT3Yz1JrOaen/iCpZ5tMRN7kDAyVzGJqn9++Hu0+lgVm7eVEF8ny6BALObKgEvhMT7U0O9/lVXgz2ZnyqOqAhzXsm9MeQfpgTAphnUOwPJDaDo9K7tM9PHYiwkbV7C05OEmSS9YTeOAQKBgQDbpuEjgGzcXp+6SSAkRmaVeAh+VUB/JIWbdY/6U+f7E/qM4UgnBJubjyMYCN7+uGICzCbBdXQk8zNZOTeuhD0yI46RXQyqlkhkzLWNuIBAph8L2dmxNhH1biVjvauPo2WLhIygn33Yd3eh/h73jmzFvbB3DL82Dp9JXrOIMRGKywKBgQCeOfm5mDbjb8UN3qoJ5oJjSyQ46RfPIbCmMt1h6TeB9XbztnuJVs7hn7DvkkcHVgtq3ipdyHL8fDTSbJ3Mek84wEYgyuXnPsMlwGyUiaCJLwrXSdh9/4KmjrfZw6vdciW8MPvExzNtYinSZIZ8yMKQmkLaGfMzN5kKJN8EcKyZAQKBgA16BrQ76/H1aE1wsSUooKCpFbRSnLtwTTZFl0jfnwsbpbLBG8ExGi8IMDoISU5Nl83eIr6Z6z9dIJhn10/A01RhNB0dHWrV/6kXmkgQuuW8i4kZm66wx5dMY8Tj3UPZ3aAayNoODxWZ9uAcjF/aADh9s/cJ9C1n5kQFKHTBtfbTAoGAY/HxGVfZy/5M9b7hn5FYaUoMnlo2bOM2BzV3+6HqKxAXTEjHbfBEi+ZoSFwYu7yRR7cAAe9dGrmGUCjF4GSd6BYj9hDT+ib987nBnG321tC9Q1JlCum76GOcJFTiGeZBicdTMXA2vvBTxI81GFtj8x1N/yCHK6IB7JNvwAlALQECgYAo5iMhlQk+IjuilQnzKH9r3pCyhu/MYKtlvQYu5cg1lVbyU8fpn0FHdnglxErWIXWz5w5E9Q0mtdtL9T/89DDXNM7eue6PvgHJVmUTTIUkl85gGKyefSHTT57L9h3elMGPVNAG14qfyCeDQ6vJg1+VLSUWXwQ5e3DTuZL9wDe/ZA==`
|
||||
hash := HashTypes["SHA256"]
|
||||
res, err := RSA2Sign(prikey, hash, "hello world", "base64")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pubKey := `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh8K9YJlZMNaaePgz++CfpeHPRlMskoyLARArKTA1/NwLvzpmeaNSMQoPeaxswAuVvdPCdPOLHjr1SXC5hWOR9sOqR0sqoaPzi08bqR9IzfsEUHi0SMA78hWViGDg5PHgJLaQaaYYKt4S/zRuz/O7bgKFiIidcPJTVvORakyyqYL7XxZgi943UmcICxG0t7qe1jNdoTVOKWpClnZT8LHvawhRU4kf0JtXjc8s8+HBl+TNRTFvAcsV3eZej0hked8CTxosL+ZL7LnYyl70cOLalIDSLJrc4P8QQzK21+hOh6rAelH01EDTOBU94O1IXE9A/gabxzXAkrqWXL2JvWjdywIDAQAB`
|
||||
valid, err := RSA2Verify(pubKey, hash, "hello world", res, "base64")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.True(t, valid)
|
||||
}
|
||||
|
||||
func TestRSA2SignProcess(t *testing.T) {
|
||||
|
||||
prikey := `MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCHwr1gmVkw1pp4+DP74J+l4c9GUyySjIsBECspMDX83Au/OmZ5o1IxCg95rGzAC5W908J084seOvVJcLmFY5H2w6pHSyqho/OLTxupH0jN+wRQeLRIwDvyFZWIYODk8eAktpBpphgq3hL/NG7P87tuAoWIiJ1w8lNW85FqTLKpgvtfFmCL3jdSZwgLEbS3up7WM12hNU4pakKWdlPwse9rCFFTiR/Qm1eNzyzz4cGX5M1FMW8ByxXd5l6PSGR53wJPGiwv5kvsudjKXvRw4tqUgNIsmtzg/xBDMrbX6E6HqsB6UfTUQNM4FT3g7UhcT0D+BpvHNcCSupZcvYm9aN3LAgMBAAECggEADcLUlV0V6FhocgiepFJhfFwGOZemtfgfAu2TomornsTjP+/4gS3n3+aoKOosX88Mz6AOXvJs0JSjVl1hwL6WBhBRS0a4PIg04JMVN7BfHdnq1wlVJOavbNt5O8iuIybNVItY2gym+HloLYwwC04mWoFQ7cUDSHaXsgGgZMj/dyUUbio0KdLsWGot9ajDX4Det6D97pl+KpaT3Yz1JrOaen/iCpZ5tMRN7kDAyVzGJqn9++Hu0+lgVm7eVEF8ny6BALObKgEvhMT7U0O9/lVXgz2ZnyqOqAhzXsm9MeQfpgTAphnUOwPJDaDo9K7tM9PHYiwkbV7C05OEmSS9YTeOAQKBgQDbpuEjgGzcXp+6SSAkRmaVeAh+VUB/JIWbdY/6U+f7E/qM4UgnBJubjyMYCN7+uGICzCbBdXQk8zNZOTeuhD0yI46RXQyqlkhkzLWNuIBAph8L2dmxNhH1biVjvauPo2WLhIygn33Yd3eh/h73jmzFvbB3DL82Dp9JXrOIMRGKywKBgQCeOfm5mDbjb8UN3qoJ5oJjSyQ46RfPIbCmMt1h6TeB9XbztnuJVs7hn7DvkkcHVgtq3ipdyHL8fDTSbJ3Mek84wEYgyuXnPsMlwGyUiaCJLwrXSdh9/4KmjrfZw6vdciW8MPvExzNtYinSZIZ8yMKQmkLaGfMzN5kKJN8EcKyZAQKBgA16BrQ76/H1aE1wsSUooKCpFbRSnLtwTTZFl0jfnwsbpbLBG8ExGi8IMDoISU5Nl83eIr6Z6z9dIJhn10/A01RhNB0dHWrV/6kXmkgQuuW8i4kZm66wx5dMY8Tj3UPZ3aAayNoODxWZ9uAcjF/aADh9s/cJ9C1n5kQFKHTBtfbTAoGAY/HxGVfZy/5M9b7hn5FYaUoMnlo2bOM2BzV3+6HqKxAXTEjHbfBEi+ZoSFwYu7yRR7cAAe9dGrmGUCjF4GSd6BYj9hDT+ib987nBnG321tC9Q1JlCum76GOcJFTiGeZBicdTMXA2vvBTxI81GFtj8x1N/yCHK6IB7JNvwAlALQECgYAo5iMhlQk+IjuilQnzKH9r3pCyhu/MYKtlvQYu5cg1lVbyU8fpn0FHdnglxErWIXWz5w5E9Q0mtdtL9T/89DDXNM7eue6PvgHJVmUTTIUkl85gGKyefSHTT57L9h3elMGPVNAG14qfyCeDQ6vJg1+VLSUWXwQ5e3DTuZL9wDe/ZA==`
|
||||
args := []interface{}{prikey, "SHA256", "hello world"}
|
||||
sign, err := process.New("crypto.RSA2Sign", args...).Exec()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pubKey := `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh8K9YJlZMNaaePgz++CfpeHPRlMskoyLARArKTA1/NwLvzpmeaNSMQoPeaxswAuVvdPCdPOLHjr1SXC5hWOR9sOqR0sqoaPzi08bqR9IzfsEUHi0SMA78hWViGDg5PHgJLaQaaYYKt4S/zRuz/O7bgKFiIidcPJTVvORakyyqYL7XxZgi943UmcICxG0t7qe1jNdoTVOKWpClnZT8LHvawhRU4kf0JtXjc8s8+HBl+TNRTFvAcsV3eZej0hked8CTxosL+ZL7LnYyl70cOLalIDSLJrc4P8QQzK21+hOh6rAelH01EDTOBU94O1IXE9A/gabxzXAkrqWXL2JvWjdywIDAQAB`
|
||||
args = []interface{}{pubKey, "SHA256", "hello world", sign}
|
||||
valid, err := process.New("crypto.RSA2Verify", args...).Exec()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.Equal(t, true, valid)
|
||||
}
|
||||
|
||||
func TestRSA2SignProcessBase64(t *testing.T) {
|
||||
|
||||
prikey := `MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCHwr1gmVkw1pp4+DP74J+l4c9GUyySjIsBECspMDX83Au/OmZ5o1IxCg95rGzAC5W908J084seOvVJcLmFY5H2w6pHSyqho/OLTxupH0jN+wRQeLRIwDvyFZWIYODk8eAktpBpphgq3hL/NG7P87tuAoWIiJ1w8lNW85FqTLKpgvtfFmCL3jdSZwgLEbS3up7WM12hNU4pakKWdlPwse9rCFFTiR/Qm1eNzyzz4cGX5M1FMW8ByxXd5l6PSGR53wJPGiwv5kvsudjKXvRw4tqUgNIsmtzg/xBDMrbX6E6HqsB6UfTUQNM4FT3g7UhcT0D+BpvHNcCSupZcvYm9aN3LAgMBAAECggEADcLUlV0V6FhocgiepFJhfFwGOZemtfgfAu2TomornsTjP+/4gS3n3+aoKOosX88Mz6AOXvJs0JSjVl1hwL6WBhBRS0a4PIg04JMVN7BfHdnq1wlVJOavbNt5O8iuIybNVItY2gym+HloLYwwC04mWoFQ7cUDSHaXsgGgZMj/dyUUbio0KdLsWGot9ajDX4Det6D97pl+KpaT3Yz1JrOaen/iCpZ5tMRN7kDAyVzGJqn9++Hu0+lgVm7eVEF8ny6BALObKgEvhMT7U0O9/lVXgz2ZnyqOqAhzXsm9MeQfpgTAphnUOwPJDaDo9K7tM9PHYiwkbV7C05OEmSS9YTeOAQKBgQDbpuEjgGzcXp+6SSAkRmaVeAh+VUB/JIWbdY/6U+f7E/qM4UgnBJubjyMYCN7+uGICzCbBdXQk8zNZOTeuhD0yI46RXQyqlkhkzLWNuIBAph8L2dmxNhH1biVjvauPo2WLhIygn33Yd3eh/h73jmzFvbB3DL82Dp9JXrOIMRGKywKBgQCeOfm5mDbjb8UN3qoJ5oJjSyQ46RfPIbCmMt1h6TeB9XbztnuJVs7hn7DvkkcHVgtq3ipdyHL8fDTSbJ3Mek84wEYgyuXnPsMlwGyUiaCJLwrXSdh9/4KmjrfZw6vdciW8MPvExzNtYinSZIZ8yMKQmkLaGfMzN5kKJN8EcKyZAQKBgA16BrQ76/H1aE1wsSUooKCpFbRSnLtwTTZFl0jfnwsbpbLBG8ExGi8IMDoISU5Nl83eIr6Z6z9dIJhn10/A01RhNB0dHWrV/6kXmkgQuuW8i4kZm66wx5dMY8Tj3UPZ3aAayNoODxWZ9uAcjF/aADh9s/cJ9C1n5kQFKHTBtfbTAoGAY/HxGVfZy/5M9b7hn5FYaUoMnlo2bOM2BzV3+6HqKxAXTEjHbfBEi+ZoSFwYu7yRR7cAAe9dGrmGUCjF4GSd6BYj9hDT+ib987nBnG321tC9Q1JlCum76GOcJFTiGeZBicdTMXA2vvBTxI81GFtj8x1N/yCHK6IB7JNvwAlALQECgYAo5iMhlQk+IjuilQnzKH9r3pCyhu/MYKtlvQYu5cg1lVbyU8fpn0FHdnglxErWIXWz5w5E9Q0mtdtL9T/89DDXNM7eue6PvgHJVmUTTIUkl85gGKyefSHTT57L9h3elMGPVNAG14qfyCeDQ6vJg1+VLSUWXwQ5e3DTuZL9wDe/ZA==`
|
||||
args := []interface{}{prikey, "SHA256", "hello world", "base64"}
|
||||
sign, err := process.New("crypto.RSA2Sign", args...).Exec()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pubKey := `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh8K9YJlZMNaaePgz++CfpeHPRlMskoyLARArKTA1/NwLvzpmeaNSMQoPeaxswAuVvdPCdPOLHjr1SXC5hWOR9sOqR0sqoaPzi08bqR9IzfsEUHi0SMA78hWViGDg5PHgJLaQaaYYKt4S/zRuz/O7bgKFiIidcPJTVvORakyyqYL7XxZgi943UmcICxG0t7qe1jNdoTVOKWpClnZT8LHvawhRU4kf0JtXjc8s8+HBl+TNRTFvAcsV3eZej0hked8CTxosL+ZL7LnYyl70cOLalIDSLJrc4P8QQzK21+hOh6rAelH01EDTOBU94O1IXE9A/gabxzXAkrqWXL2JvWjdywIDAQAB`
|
||||
args = []interface{}{pubKey, "SHA256", "hello world", sign, "base64"}
|
||||
valid, err := process.New("crypto.RSA2Verify", args...).Exec()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.Equal(t, true, valid)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,16 @@ func init() {
|
|||
|
||||
process.Alias("yao.crypto.hash", "crypto.Hash")
|
||||
process.Alias("yao.crypto.hmac", "crypto.Hmac")
|
||||
|
||||
process.Register("crypto.rsa2sign", ProcessRsa2Sign)
|
||||
process.Register("crypto.rsa2verify", ProcessRsa2Verify)
|
||||
}
|
||||
|
||||
// ProcessRSA2 yao.crypto.rsa Crypto RSA
|
||||
func ProcessRSA2(process *process.Process) interface{} {
|
||||
process.ValidateArgNums(3)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ProcessHash yao.crypto.hash Crypto Hash
|
||||
|
|
@ -60,3 +70,52 @@ func ProcessHmac(process *process.Process) interface{} {
|
|||
}
|
||||
return res
|
||||
}
|
||||
|
||||
// ProcessRsa2Sign crypto.rsa2sign
|
||||
// Args[0] string: the private key
|
||||
// Args[1] string: the hash function name. MD4/MD5/SHA1/SHA224/SHA256/SHA384/SHA512/MD5SHA1/RIPEMD160/SHA3_224/SHA3_256/SHA3_384/SHA3_512/SHA512_224/SHA512_256/BLAKE2s_256/BLAKE2b_256/BLAKE2b_384/BLAKE2b_512
|
||||
// Args[2] string: value
|
||||
// Args[3] string: "base64" (optional)
|
||||
func ProcessRsa2Sign(process *process.Process) interface{} {
|
||||
process.ValidateArgNums(3)
|
||||
pri := process.ArgsString(0)
|
||||
typ := process.ArgsString(1)
|
||||
value := process.ArgsString(2)
|
||||
base64 := process.ArgsString(3)
|
||||
|
||||
h, has := HashTypes[typ]
|
||||
if !has {
|
||||
exception.New("%s does not support", 400, typ).Throw()
|
||||
}
|
||||
|
||||
res, err := RSA2Sign(pri, h, value, base64)
|
||||
if err != nil {
|
||||
exception.New("%s error: %s value: %s", 400, typ, err, value).Throw()
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
// ProcessRsa2Verify crypto.rsa2verify
|
||||
// Args[0] string: the public key
|
||||
// Args[1] string: the hash function name. MD4/MD5/SHA1/SHA224/SHA256/SHA384/SHA512/MD5SHA1/RIPEMD160/SHA3_224/SHA3_256/SHA3_384/SHA3_512/SHA512_224/SHA512_256/BLAKE2s_256/BLAKE2b_256/BLAKE2b_384/BLAKE2b_512
|
||||
// Args[2] string: value
|
||||
// Args[3] string: sign
|
||||
func ProcessRsa2Verify(process *process.Process) interface{} {
|
||||
process.ValidateArgNums(4)
|
||||
pub := process.ArgsString(0)
|
||||
typ := process.ArgsString(1)
|
||||
value := process.ArgsString(2)
|
||||
sign := process.ArgsString(3)
|
||||
base64 := process.ArgsString(4)
|
||||
|
||||
h, has := HashTypes[typ]
|
||||
if !has {
|
||||
exception.New("%s does not support", 400, typ).Throw()
|
||||
}
|
||||
|
||||
res, err := RSA2Verify(pub, h, value, sign, base64)
|
||||
if err != nil {
|
||||
exception.New("%s error: %s value: %s", 400, typ, err, value).Throw()
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue