| /* BEGIN_HEADER */ |
| #include "mbedtls/hkdf.h" |
| /* END_HEADER */ |
| |
| /* BEGIN_DEPENDENCIES |
| * depends_on:MBEDTLS_HKDF_C |
| * END_DEPENDENCIES |
| */ |
| |
| /* BEGIN_CASE */ |
| void test_hkdf(int md_alg, char *hex_ikm_string, char *hex_salt_string, |
| char *hex_info_string, char *hex_okm_string) |
| { |
| int ret; |
| size_t ikm_len, salt_len, info_len, okm_len; |
| unsigned char ikm[1024] = {'\0'}; |
| unsigned char salt[1024] = {'\0'}; |
| unsigned char info[1024] = {'\0'}; |
| unsigned char expected_okm[1024] = {'\0'}; |
| unsigned char okm[1024] = {'\0'}; |
| unsigned char okm_string[1000] = {'\0'}; |
| |
| const mbedtls_md_info_t *md = mbedtls_md_info_from_type(md_alg); |
| TEST_ASSERT(md != NULL); |
| |
| ikm_len = unhexify(ikm, hex_ikm_string); |
| salt_len = unhexify(salt, hex_salt_string); |
| info_len = unhexify(info, hex_info_string); |
| okm_len = unhexify(expected_okm, hex_okm_string); |
| |
| ret = mbedtls_hkdf(md, salt, salt_len, ikm, ikm_len, info, info_len, okm, |
| okm_len); |
| TEST_ASSERT(ret == 0); |
| |
| // Run hexify on it so that it looks nicer if the assertion fails |
| hexify(okm_string, okm, okm_len); |
| TEST_ASSERT(!strcmp((char *)okm_string, hex_okm_string)); |
| } |
| /* END_CASE */ |