yao/crypto/process.go
2023-02-09 19:19:33 +08:00

106 lines
3.1 KiB
Go

package crypto
import (
"github.com/yaoapp/gou"
"github.com/yaoapp/kun/exception"
)
func init() {
gou.RegisterProcessHandler("yao.crypto.hash", ProcessHash) // deprecated → crypto.Hash
gou.RegisterProcessHandler("yao.crypto.hmac", ProcessHmac) // deprecated → crypto.Hash
gou.RegisterProcessHandler("yao.crypto.AESBase64Encode", processBase64AESEncode)
gou.RegisterProcessHandler("yao.crypto.AESBase64Decode", processBase64AESDecode)
gou.RegisterProcessHandler("yao.crypto.WeworkDecrypt", processWeworkDecrypt)
gou.AliasProcess("yao.crypto.hash", "crypto.Hash")
gou.AliasProcess("yao.crypto.hmac", "crypto.Hmac")
}
// ProcessHash yao.crypto.hash Crypto Hash
// Args[0] 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[1] string: value
func ProcessHash(process *gou.Process) interface{} {
process.ValidateArgNums(2)
typ := process.ArgsString(0)
value := process.ArgsString(1)
h, has := HashTypes[typ]
if !has {
exception.New("%s does not support", 400, typ).Throw()
}
res, err := Hash(h, value)
if err != nil {
exception.New("%s error: %s value: %s", 400, typ, err, value).Throw()
}
return res
}
// ProcessHmac yao.crypto.hmac Crypto the Keyed-Hash Message Authentication Code (HMAC) Hash
// Args[0] 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[1] string: value
// Args[2] string: key
// Args[3] string: base64
func ProcessHmac(process *gou.Process) interface{} {
process.ValidateArgNums(3)
typ := process.ArgsString(0)
value := process.ArgsString(1)
key := process.ArgsString(2)
h, has := HashTypes[typ]
if !has {
exception.New("%s does not support", 400, typ).Throw()
}
encoding := ""
if process.NumOfArgs() > 3 {
encoding = process.ArgsString(3)
}
res, err := Hmac(h, value, key, encoding)
if err != nil {
exception.New("%s error: %s value: %s", 400, typ, err, value).Throw()
}
return res
}
func processBase64AESEncode(process *gou.Process) interface{} {
process.ValidateArgNums(2)
key := process.ArgsString(0)
value := process.ArgsString(1)
res, err := Base64AESEncode([]byte(key), value)
if err != nil {
exception.New("error: %s value: %s", 400, err, value).Throw()
}
return res
}
func processBase64AESDecode(process *gou.Process) interface{} {
process.ValidateArgNums(2)
key := process.ArgsString(0)
value := process.ArgsString(1)
res, err := Base64AESDecode([]byte(key), value)
if err != nil {
exception.New("error: %s value: %s", 400, err, value).Throw()
}
return res
}
func processWeworkDecrypt(process *gou.Process) interface{} {
process.ValidateArgNums(2)
encodingAESKey := process.ArgsString(0)
msgEncrypt := process.ArgsString(1)
parseXML := false
if process.NumOfArgsIs(3) {
parseXML = process.ArgsBool(2)
}
res, err := WeworkDecrypt(encodingAESKey, msgEncrypt, parseXML)
if err != nil {
exception.New("error: %s msgEncrypt: %s", 400, err, msgEncrypt).Throw()
}
return res
}