@@ -776,9 +776,11 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t scrypt_test(void);
776776#endif
777777#ifdef HAVE_BLAKE2
778778 WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2b_test(void);
779+ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2b_hmac_test(void);
779780#endif
780781#ifdef HAVE_BLAKE2S
781782 WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2s_test(void);
783+ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2s_hmac_test(void);
782784#endif
783785#ifdef HAVE_LIBZ
784786 WOLFSSL_TEST_SUBROUTINE wc_test_ret_t compress_test(void);
@@ -2187,12 +2189,20 @@ options: [-s max_relative_stack_bytes] [-m max_relative_heap_memory_bytes]\n\
21872189 TEST_FAIL("BLAKE2b test failed!\n", ret);
21882190 else
21892191 TEST_PASS("BLAKE2b test passed!\n");
2192+ if ( (ret = blake2b_hmac_test()) != 0)
2193+ TEST_FAIL("HMAC-BLAKE2b test failed!\n", ret);
2194+ else
2195+ TEST_PASS("HMAC-BLAKE2b test passed!\n");
21902196#endif
21912197#ifdef HAVE_BLAKE2S
21922198 if ( (ret = blake2s_test()) != 0)
21932199 TEST_FAIL("BLAKE2s test failed!\n", ret);
21942200 else
21952201 TEST_PASS("BLAKE2s test passed!\n");
2202+ if ( (ret = blake2s_hmac_test()) != 0)
2203+ TEST_FAIL("HMAC-BLAKE2s test failed!\n", ret);
2204+ else
2205+ TEST_PASS("HMAC-BLAKE2s test passed!\n");
21962206#endif
21972207
21982208#ifndef NO_HMAC
@@ -4581,7 +4591,6 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ripemd_test(void)
45814591
45824592#ifdef HAVE_BLAKE2
45834593
4584-
45854594#define BLAKE2B_TESTS 3
45864595
45874596static const byte blake2b_vec[BLAKE2B_TESTS][BLAKE2B_OUTBYTES] =
@@ -4651,10 +4660,71 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2b_test(void)
46514660
46524661 return 0;
46534662}
4663+
4664+ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2b_hmac_test(void)
4665+ {
4666+ static const byte key1[] = {0x41, 0x42, 0x43, 0x44}; /* ABCD */
4667+ static const byte message1[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f}; /* Hello */
4668+ static const byte expected1[] = {
4669+ 0x46, 0x76, 0xbb, 0x0e, 0xf8, 0xa1, 0x56, 0x33,
4670+ 0xde, 0xdc, 0x44, 0xe3, 0x2b, 0xf3, 0xee, 0x5b,
4671+ 0x5f, 0x7f, 0x04, 0x00, 0x2c, 0xaa, 0xd4, 0x93,
4672+ 0xc6, 0xa6, 0xb4, 0xf3, 0x14, 0x8d, 0x6d, 0x9c,
4673+ 0x6a, 0x12, 0x02, 0x85, 0x66, 0xed, 0x9b, 0x5d,
4674+ 0x8d, 0x0e, 0x3d, 0xf4, 0x78, 0xee, 0x5a, 0xf6,
4675+ 0x2f, 0x97, 0xa5, 0x77, 0x88, 0x8c, 0xc4, 0x66,
4676+ 0x46, 0xb1, 0xba, 0x51, 0x29, 0x19, 0xd7, 0xaa,
4677+ };
4678+ static const byte key2[] = {
4679+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42,
4680+ 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
4681+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33,
4682+ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
4683+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42,
4684+ 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33
4685+ }; /* 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123 */
4686+ static const byte message2[] = {
4687+ 0x61, 0x62, 0x63, 0x64, 0x62, 0x63, 0x64, 0x65, 0x63, 0x64, 0x65, 0x66,
4688+ 0x64, 0x65, 0x66, 0x67, 0x65, 0x66, 0x67, 0x68, 0x66, 0x67, 0x68, 0x69,
4689+ 0x67, 0x68, 0x69, 0x6a, 0x68, 0x69, 0x6a, 0x6b, 0x69, 0x6a, 0x6b, 0x6c,
4690+ 0x6a, 0x6b, 0x6c, 0x6d, 0x6b, 0x6c, 0x6d, 0x6e, 0x6c, 0x6d, 0x6e, 0x6f,
4691+ 0x6d, 0x6e, 0x6f, 0x70, 0x6e, 0x6f, 0x70, 0x71
4692+ }; /* abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq */
4693+ static const byte expected2[] = {
4694+ 0x2a, 0xda, 0xf6, 0x94, 0x79, 0xce, 0xe2, 0xd2,
4695+ 0x5d, 0x89, 0x8b, 0xd7, 0x0d, 0xbc, 0x11, 0x1f,
4696+ 0x98, 0x99, 0xe0, 0x17, 0x7c, 0x5b, 0x8f, 0x94,
4697+ 0xf5, 0x95, 0xbc, 0x1b, 0xb1, 0x95, 0xe8, 0x60,
4698+ 0xbb, 0x29, 0xa4, 0xd9, 0x27, 0x2e, 0x00, 0xea,
4699+ 0xba, 0xc3, 0x3e, 0xe6, 0x9c, 0xc7, 0xd7, 0x8d,
4700+ 0x69, 0xc7, 0xb4, 0xf7, 0x31, 0x4a, 0xb1, 0xf0,
4701+ 0x3c, 0xed, 0x06, 0x49, 0x6f, 0x46, 0x99, 0xea,
4702+ };
4703+
4704+ byte out[BLAKE2B_OUTBYTES];
4705+
4706+ int ret;
4707+
4708+ ret = wc_Blake2bHmac(message1, sizeof(message1),
4709+ key1, sizeof(key1), out, sizeof(out));
4710+ if (ret != 0)
4711+ return WC_TEST_RET_ENC_EC(ret);
4712+ if (XMEMCMP(out, expected1, sizeof(out)) != 0)
4713+ return WC_TEST_RET_ENC_NC;
4714+
4715+ ret = wc_Blake2bHmac(message2, sizeof(message2),
4716+ key2, sizeof(key2), out, sizeof(out));
4717+ if (ret != 0)
4718+ return WC_TEST_RET_ENC_EC(ret);
4719+ if (XMEMCMP(out, expected2, sizeof(out)) != 0)
4720+ return WC_TEST_RET_ENC_NC;
4721+
4722+ return 0;
4723+ }
46544724#endif /* HAVE_BLAKE2 */
46554725
4656- #ifdef HAVE_BLAKE2S
46574726
4727+ #ifdef HAVE_BLAKE2S
46584728
46594729#define BLAKE2S_TESTS 3
46604730
@@ -4713,6 +4783,56 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2s_test(void)
47134783
47144784 return 0;
47154785}
4786+
4787+ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t blake2s_hmac_test(void)
4788+ {
4789+ static const byte key1[] = {0x41, 0x42, 0x43, 0x44}; /* ABCD */
4790+ static const byte message1[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f}; /* Hello */
4791+ static const byte expected1[] = {
4792+ 0x96, 0xca, 0x1d, 0xaa, 0x9a, 0x33, 0x97, 0x3d,
4793+ 0xc5, 0x95, 0x3e, 0xce, 0x49, 0x93, 0x75, 0xc1,
4794+ 0x2a, 0x7c, 0x8f, 0x5b, 0xf0, 0x28, 0xef, 0xc3,
4795+ 0xfb, 0xc5, 0x97, 0xcd, 0xcc, 0x74, 0x44, 0x68,
4796+ };
4797+ static const byte key2[] = {
4798+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42,
4799+ 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
4800+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33
4801+ }; /* 0123456789ABCDEF0123456789ABCDEF0123 */
4802+ static const byte message2[] = {
4803+ 0x61, 0x62, 0x63, 0x64, 0x62, 0x63, 0x64, 0x65, 0x63, 0x64, 0x65, 0x66,
4804+ 0x64, 0x65, 0x66, 0x67, 0x65, 0x66, 0x67, 0x68, 0x66, 0x67, 0x68, 0x69,
4805+ 0x67, 0x68, 0x69, 0x6a, 0x68, 0x69, 0x6a, 0x6b, 0x69, 0x6a, 0x6b, 0x6c,
4806+ 0x6a, 0x6b, 0x6c, 0x6d, 0x6b, 0x6c, 0x6d, 0x6e, 0x6c, 0x6d, 0x6e, 0x6f,
4807+ 0x6d, 0x6e, 0x6f, 0x70, 0x6e, 0x6f, 0x70, 0x71
4808+ }; /* abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq */
4809+ static const byte expected2[] = {
4810+ 0xc4, 0x63, 0xdb, 0x28, 0x97, 0x60, 0x6a, 0xa7,
4811+ 0x1e, 0xe6, 0xcf, 0x93, 0x85, 0x3c, 0x90, 0x71,
4812+ 0xea, 0x76, 0x7f, 0x6a, 0xa7, 0x20, 0x80, 0x35,
4813+ 0xe1, 0x68, 0x95, 0xfe, 0x65, 0x65, 0x43, 0x76,
4814+ };
4815+
4816+ byte out[BLAKE2S_OUTBYTES];
4817+
4818+ int ret;
4819+
4820+ ret = wc_Blake2sHmac(message1, sizeof(message1),
4821+ key1, sizeof(key1), out, sizeof(out));
4822+ if (ret != 0)
4823+ return WC_TEST_RET_ENC_EC(ret);
4824+ if (XMEMCMP(out, expected1, sizeof(out)) != 0)
4825+ return WC_TEST_RET_ENC_NC;
4826+
4827+ ret = wc_Blake2sHmac(message2, sizeof(message2),
4828+ key2, sizeof(key2), out, sizeof(out));
4829+ if (ret != 0)
4830+ return WC_TEST_RET_ENC_EC(ret);
4831+ if (XMEMCMP(out, expected2, sizeof(out)) != 0)
4832+ return WC_TEST_RET_ENC_NC;
4833+
4834+ return 0;
4835+ }
47164836#endif /* HAVE_BLAKE2S */
47174837
47184838
0 commit comments