summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2021-06-01 20:28:24 +0200
committerSébastien Helleu <flashcode@flashtux.org>2021-06-01 20:39:04 +0200
commit5cffb7179fee6d70d5c8cee5b5c18ec51f1272f6 (patch)
tree9ed26ffd6cfd3d0e1dadfb83322e10b5eca04fce /tests
parent6ac6cf729329559fa80ece1c057cb56fac81ff30 (diff)
downloadweechat-5cffb7179fee6d70d5c8cee5b5c18ec51f1272f6.zip
api: add function crypto_hmac (issue #1628)
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/core/test-core-crypto.cpp95
1 files changed, 92 insertions, 3 deletions
diff --git a/tests/unit/core/test-core-crypto.cpp b/tests/unit/core/test-core-crypto.cpp
index 625518426..2f360a884 100644
--- a/tests/unit/core/test-core-crypto.cpp
+++ b/tests/unit/core/test-core-crypto.cpp
@@ -29,7 +29,8 @@ extern "C"
#include "src/core/wee-crypto.h"
#include "src/core/wee-string.h"
-#define DATA_HASH "this is a test of hash function"
+/* Hash */
+#define DATA_HASH_MSG "this is a test of hash function"
#define DATA_HASH_CRC32 "ef26fe3e"
#define DATA_HASH_MD5 "1197d121af621ac6a63cb8ef6b5dfa30"
#define DATA_HASH_SHA1 "799d818061175b400dc5aaeb14b8d32cdef32ff0"
@@ -51,6 +52,8 @@ extern "C"
#define DATA_HASH_SHA3_512 "31dfb5fc8f30ac7007acddc4fce562d408706833d0d2af2" \
"e5f61a179099592927ff7d100e278406c7f98d42575001e26e153b135c21f7ef5b00c8" \
"cef93ca048d"
+
+/* Hash PBKDF2 */
#define DATA_HASH_SALT "this is a salt of 32 bytes xxxxx"
#define DATA_HASH_PBKDF2_SHA1_1000 "85ce23c8873830df8f0a96aa82ae7d7635dad12" \
"7"
@@ -60,6 +63,31 @@ extern "C"
"a402af301e1714c25467a32489c773c71eddf5aa39f42823ecc54c9e9b015517b5f3c0" \
"19bae9463a2d8fe527882"
+/* HMAC */
+#define DATA_HMAC_KEY "secret key"
+#define DATA_HMAC_MSG "this is a test of hmac function"
+#define DATA_HMAC_CRC32 "3c189d75"
+#define DATA_HMAC_MD5 "8148a8e01eb0c6ca42880ea58f50d045"
+#define DATA_HMAC_SHA1 "28dea5713c0d48c7638db31050a7ded4308f46fe"
+#define DATA_HMAC_SHA224 "f1cf0ccf287a2e35b98414346931396d47ca929c92c48edcc" \
+ "e8e0b9e"
+#define DATA_HMAC_SHA256 "7be1b4281c0d74d4a3838892b1512efa13a25c7a50d7dce47" \
+ "da070c7e7c65dee"
+#define DATA_HMAC_SHA384 "8cd5f4afc602e11f6b3032fd65e906da810ac51aeb7d30f4b" \
+ "7b495ae3dcc0eede0c5f63d7d2e3688fe658daf4852be67"
+#define DATA_HMAC_SHA512 "940e5c280c08cd858f79a6085b4bdc54710ed339dd1008fa2" \
+ "1643b7bbeea8a5f61c77f395708505461af62776c9cb7be1c263f39055eb8478190cd8" \
+ "0ea5b0850"
+#define DATA_HMAC_SHA3_224 "a08c7f1598ecc7ea54feeb920ef90b3748d59b3203caa74" \
+ "7316eb2d4"
+#define DATA_HMAC_SHA3_256 "21aca280bc1ac1fa261b1169a321eb7a49e38a8ddec66a8" \
+ "fa2ed9c43d7fae4c5"
+#define DATA_HMAC_SHA3_384 "cbf189e8cd31f3c1c5742e2688b13be8e62691952eee374" \
+ "9523b48bd7a7d1cdf38812cf9a3e52dbb1d0e32a11e478ce7"
+#define DATA_HMAC_SHA3_512 "b1eeb16dd18f66cc8886754ac9cf238deea24d9797ceecb" \
+ "9e0582148bfb6b88f7530d594e80a5a5e22e351a079855983da91b0011dff85ea4a895" \
+ "e8fde6fd41a"
+
#define TOTP_SECRET "secretpasswordbase32"
#define WEE_CHECK_HASH(__result_code, __result_hash, \
@@ -109,6 +137,30 @@ extern "C"
} \
LONGS_EQUAL(hash_size_expected, hash_size);
+#define WEE_CHECK_HMAC(__result_code, __result_hash, \
+ __key, __key_size, __message, __message_size, \
+ __hash_algo) \
+ if (__result_hash) \
+ { \
+ hash_size_expected = string_base16_decode (__result_hash, \
+ hash_expected); \
+ } \
+ else \
+ { \
+ hash_size_expected = 0; \
+ } \
+ hash_size = -1; \
+ LONGS_EQUAL(__result_code, \
+ weecrypto_hmac (__key, __key_size, \
+ __message, __message_size, \
+ __hash_algo, \
+ hash, &hash_size)); \
+ if (__result_hash) \
+ { \
+ MEMCMP_EQUAL(hash_expected, hash, hash_size); \
+ } \
+ LONGS_EQUAL(hash_size_expected, hash_size);
+
#define WEE_CHECK_TOTP_GENERATE(__result, __secret, __time, __digits) \
totp = weecrypto_totp_generate (__secret, __time, __digits); \
if (__result == NULL) \
@@ -165,7 +217,7 @@ TEST(CoreCrypto, GetHashAlgo)
TEST(CoreCrypto, Hash)
{
- const char *data = DATA_HASH;
+ const char *data = DATA_HASH_MSG;
char hash_expected[4096], hash[4096];
int data_size, hash_size_expected, hash_size;
@@ -199,7 +251,7 @@ TEST(CoreCrypto, Hash)
TEST(CoreCrypto, HashPbkdf2)
{
- const char *data = DATA_HASH, *salt = DATA_HASH_SALT;
+ const char *data = DATA_HASH_MSG, *salt = DATA_HASH_SALT;
char hash_expected[4096], hash[4096];
int data_size, salt_size, hash_size_expected, hash_size;
@@ -238,6 +290,43 @@ TEST(CoreCrypto, HashPbkdf2)
/*
* Tests functions:
+ * weecrypto_hmac
+ */
+
+TEST(CoreCrypto, Hmac)
+{
+ const char *key = DATA_HMAC_KEY, *msg = DATA_HMAC_MSG;
+ char hash_expected[4096], hash[4096];
+ int key_size, msg_size, hash_size_expected, hash_size;
+
+ key_size = strlen (key);
+ msg_size = strlen (msg);
+
+ WEE_CHECK_HMAC(0, NULL, NULL, 0, NULL, 0, 0);
+ WEE_CHECK_HMAC(0, NULL, "key", 0, NULL, 0, 0);
+ WEE_CHECK_HMAC(0, NULL, NULL, 0, "msg", 0, 0);
+ WEE_CHECK_HMAC(0, NULL, "key", 0, "msg", 0, 0);
+
+ LONGS_EQUAL (0, weecrypto_hmac (key, key_size, msg, msg_size,
+ GCRY_MD_SHA256, NULL, NULL));
+
+ WEE_CHECK_HMAC(1, DATA_HMAC_CRC32, key, key_size, msg, msg_size, GCRY_MD_CRC32);
+ WEE_CHECK_HMAC(1, DATA_HMAC_MD5, key, key_size, msg, msg_size, GCRY_MD_MD5);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA1, key, key_size, msg, msg_size, GCRY_MD_SHA1);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA224, key, key_size, msg, msg_size, GCRY_MD_SHA224);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA256, key, key_size, msg, msg_size, GCRY_MD_SHA256);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA384, key, key_size, msg, msg_size, GCRY_MD_SHA384);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA512, key, key_size, msg, msg_size, GCRY_MD_SHA512);
+#if GCRYPT_VERSION_NUMBER >= 0x010700
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA3_224, key, key_size, msg, msg_size, GCRY_MD_SHA3_224);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA3_256, key, key_size, msg, msg_size, GCRY_MD_SHA3_256);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA3_384, key, key_size, msg, msg_size, GCRY_MD_SHA3_384);
+ WEE_CHECK_HMAC(1, DATA_HMAC_SHA3_512, key, key_size, msg, msg_size, GCRY_MD_SHA3_512);
+#endif
+}
+
+/*
+ * Tests functions:
* weecrypto_totp_generate
*/