From 9ff31583a34f8a38210692e4275c9d537672708b Mon Sep 17 00:00:00 2001 From: charlie <3140647@qq.com> Date: Wed, 13 Apr 2022 10:39:40 +0800 Subject: [PATCH] hash by name --- hash/hash.go | 22 ++++++++++++++++++++++ hmac/hmac.go | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/hash/hash.go b/hash/hash.go index 93e3ba6..975749f 100644 --- a/hash/hash.go +++ b/hash/hash.go @@ -5,8 +5,10 @@ import ( "crypto/sha1" "crypto/sha256" "crypto/sha512" + "errors" "hash" "hash/fnv" + "strings" "github.com/cespare/xxhash/v2" "github.com/charlienet/go-mixed/bytesconv" @@ -14,6 +16,26 @@ import ( "github.com/tjfoc/gmsm/sm3" ) +type HashFunc func([]byte) bytesconv.BytesResult + +var hashFuncs = map[string]HashFunc{ + "MD5": Md5, + "SHA1": Sha1, + "SHA224": Sha224, + "SHA256": Sha256, + "SHA384": Sha384, + "SHA512": Sha512, + "SM3": Sm3, +} + +func ByName(name string) (HashFunc, error) { + if f, ok := hashFuncs[strings.ToUpper(name)]; ok { + return f, nil + } + + return nil, errors.New("Unsupported hash functions") +} + func Md5(msg []byte) bytesconv.BytesResult { return sum(md5.New, msg) } func Sha1(msg []byte) bytesconv.BytesResult { return sum(sha1.New, msg) } diff --git a/hmac/hmac.go b/hmac/hmac.go index 03a3d38..d625b1b 100644 --- a/hmac/hmac.go +++ b/hmac/hmac.go @@ -6,12 +6,34 @@ import ( "crypto/sha1" "crypto/sha256" "crypto/sha512" + "errors" "hash" + "strings" "github.com/charlienet/go-mixed/bytesconv" "github.com/tjfoc/gmsm/sm3" ) +type HMacFunc func(key, msg []byte) bytesconv.BytesResult + +var hmacFuncs = map[string]HMacFunc{ + "MD5": Md5, + "SHA1": Sha1, + "SHA224": Sha224, + "SHA256": Sha256, + "SHA384": Sha384, + "SHA512": Sha512, + "SM3": Sm3, +} + +func ByName(name string) (HMacFunc, error) { + if f, ok := hmacFuncs[strings.ToUpper(name)]; ok { + return f, nil + } + + return nil, errors.New("Unsupported hash functions") +} + func Md5(key, msg []byte) bytesconv.BytesResult { return sum(md5.New, key, msg) } func Sha1(key, msg []byte) bytesconv.BytesResult { return sum(sha1.New, key, msg) }