From 6052760f4ca8eebd2639f338c1fa911b56951e6f Mon Sep 17 00:00:00 2001 From: Francis Dong Date: Thu, 16 Mar 2023 11:59:25 +0800 Subject: [PATCH] Support HMAC algorithm functions #470 --- .../com/fizzgate/fizz/function/CodecFunc.java | 34 ++++++++++++++++++- .../fizz/function/CodecFuncTests.java | 7 ++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/fizz-core/src/main/java/com/fizzgate/fizz/function/CodecFunc.java b/fizz-core/src/main/java/com/fizzgate/fizz/function/CodecFunc.java index 23ad4b1..8044e04 100644 --- a/fizz-core/src/main/java/com/fizzgate/fizz/function/CodecFunc.java +++ b/fizz-core/src/main/java/com/fizzgate/fizz/function/CodecFunc.java @@ -27,6 +27,8 @@ import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; +import org.apache.commons.codec.digest.HmacAlgorithms; +import org.apache.commons.codec.digest.HmacUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,7 +48,7 @@ public class CodecFunc implements IFunc { private static final String CHARSET_UTF8 = "UTF-8"; private static final String IV = "12345678"; - + private static CodecFunc singleton; public static CodecFunc getInstance() { @@ -77,6 +79,12 @@ public class CodecFunc implements IFunc { FuncExecutor.register(NAME_SPACE_PREFIX + "codec.aesDecrypt", this); FuncExecutor.register(NAME_SPACE_PREFIX + "codec.desEncrypt", this); FuncExecutor.register(NAME_SPACE_PREFIX + "codec.desDecrypt", this); + FuncExecutor.register(NAME_SPACE_PREFIX + "codec.hmacMd5", this); + FuncExecutor.register(NAME_SPACE_PREFIX + "codec.hmacSha1", this); + FuncExecutor.register(NAME_SPACE_PREFIX + "codec.hmacSha224", this); + FuncExecutor.register(NAME_SPACE_PREFIX + "codec.hmacSha256", this); + FuncExecutor.register(NAME_SPACE_PREFIX + "codec.hmacSha384", this); + FuncExecutor.register(NAME_SPACE_PREFIX + "codec.hmacSha512", this); } public String md5(String data) { @@ -180,5 +188,29 @@ public class CodecFunc implements IFunc { throw e; } } + + public String hmacMd5(String secretKey, String data) { + return new HmacUtils(HmacAlgorithms.HMAC_MD5, secretKey).hmacHex(data); + } + + public String hmacSha1(String secretKey, String data) { + return new HmacUtils(HmacAlgorithms.HMAC_SHA_1, secretKey).hmacHex(data); + } + + public String hmacSha224(String secretKey, String data) { + return new HmacUtils(HmacAlgorithms.HMAC_SHA_224, secretKey).hmacHex(data); + } + + public String hmacSha256(String secretKey, String data) { + return new HmacUtils(HmacAlgorithms.HMAC_SHA_256, secretKey).hmacHex(data); + } + + public String hmacSha384(String secretKey, String data) { + return new HmacUtils(HmacAlgorithms.HMAC_SHA_384, secretKey).hmacHex(data); + } + + public String hmacSha512(String secretKey, String data) { + return new HmacUtils(HmacAlgorithms.HMAC_SHA_512, secretKey).hmacHex(data); + } } diff --git a/fizz-core/src/test/java/com/fizzgate/fizz/function/CodecFuncTests.java b/fizz-core/src/test/java/com/fizzgate/fizz/function/CodecFuncTests.java index 750abc9..4c79872 100644 --- a/fizz-core/src/test/java/com/fizzgate/fizz/function/CodecFuncTests.java +++ b/fizz-core/src/test/java/com/fizzgate/fizz/function/CodecFuncTests.java @@ -122,5 +122,12 @@ class CodecFuncTests { Object result = FuncExecutor.getInstance().exec(null, funcExpression); assertEquals("abc", result.toString()); } + + @Test + void testHmacSha256() { + String funcExpression = "fn.codec.hmacSha256(\"635e8562b968bc05bb80cacf124ebd53285280ee6845df0000faa33acafc38f0\", \"12345678123456781234567812345678\")"; + Object result = FuncExecutor.getInstance().exec(null, funcExpression); + assertEquals("c61be0237ec186df1c5f51425e607093b260a76e5de43a62cb3e821103303990", result.toString()); + } } \ No newline at end of file