diff --git a/encryption/encryption.go b/encryption/encryption.go index cda03b47ea8d3c7802c44c2fdcbd9d6a2655bf3d..2a0dfc0269e21ab5a7f556d4d0dce4c3b5d2bc7b 100644 --- a/encryption/encryption.go +++ b/encryption/encryption.go @@ -1,6 +1,7 @@ package encryption import ( + "bytes" "crypto/aes" "crypto/cipher" "crypto/hmac" @@ -21,6 +22,24 @@ func Hash(input string, key string) string { return base64.StdEncoding.EncodeToString(h.Sum(nil)) } +// GenerateHashFromObject using HMAC with SHA-256 +func GenerateHashFromObject(obejct any, secret string) (string, error) { + // Base64 Encode body + var buf bytes.Buffer + encoder := base64.NewEncoder(base64.StdEncoding, &buf) + defer encoder.Close() + + err := json.NewEncoder(encoder).Encode(obejct) + if err != nil { + return "", err + } + encodedBody := buf.String() + + // Sign encoded body with secret + hashedObject := Hash(encodedBody, secret) + return hashedObject, nil +} + func Md5HashString(bytesToHash []byte) string { hash := md5.Sum(bytesToHash) hashString := fmt.Sprintf("%X", hash)