test_suite_hkdf.function 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/hkdf.h"
  3. #include "md_wrap.h"
  4. /* END_HEADER */
  5. /* BEGIN_DEPENDENCIES
  6. * depends_on:MBEDTLS_HKDF_C
  7. * END_DEPENDENCIES
  8. */
  9. /* BEGIN_CASE */
  10. void test_hkdf(int md_alg, data_t *ikm, data_t *salt, data_t *info,
  11. data_t *expected_okm)
  12. {
  13. int ret;
  14. unsigned char okm[128] = { '\0' };
  15. const mbedtls_md_info_t *md = mbedtls_md_info_from_type(md_alg);
  16. TEST_ASSERT(md != NULL);
  17. TEST_ASSERT(expected_okm->len <= sizeof(okm));
  18. ret = mbedtls_hkdf(md, salt->x, salt->len, ikm->x, ikm->len,
  19. info->x, info->len, okm, expected_okm->len);
  20. TEST_ASSERT(ret == 0);
  21. ASSERT_COMPARE(okm, expected_okm->len,
  22. expected_okm->x, expected_okm->len);
  23. }
  24. /* END_CASE */
  25. /* BEGIN_CASE */
  26. void test_hkdf_extract(int md_alg,
  27. data_t *ikm,
  28. data_t *salt,
  29. data_t *prk)
  30. {
  31. int ret;
  32. unsigned char *output_prk = NULL;
  33. size_t output_prk_len;
  34. const mbedtls_md_info_t *md = mbedtls_md_info_from_type(md_alg);
  35. TEST_ASSERT(md != NULL);
  36. output_prk_len = mbedtls_md_get_size(md);
  37. ASSERT_ALLOC(output_prk, output_prk_len);
  38. ret = mbedtls_hkdf_extract(md, salt->x, salt->len,
  39. ikm->x, ikm->len, output_prk);
  40. TEST_ASSERT(ret == 0);
  41. ASSERT_COMPARE(output_prk, output_prk_len, prk->x, prk->len);
  42. exit:
  43. mbedtls_free(output_prk);
  44. }
  45. /* END_CASE */
  46. /* BEGIN_CASE */
  47. void test_hkdf_expand(int md_alg,
  48. data_t *info,
  49. data_t *prk,
  50. data_t *okm)
  51. {
  52. enum { OKM_LEN = 1024 };
  53. int ret;
  54. unsigned char *output_okm = NULL;
  55. const mbedtls_md_info_t *md = mbedtls_md_info_from_type(md_alg);
  56. TEST_ASSERT(md != NULL);
  57. ASSERT_ALLOC(output_okm, OKM_LEN);
  58. TEST_ASSERT(prk->len == mbedtls_md_get_size(md));
  59. TEST_ASSERT(okm->len < OKM_LEN);
  60. ret = mbedtls_hkdf_expand(md, prk->x, prk->len,
  61. info->x, info->len,
  62. output_okm, OKM_LEN);
  63. TEST_ASSERT(ret == 0);
  64. ASSERT_COMPARE(output_okm, okm->len, okm->x, okm->len);
  65. exit:
  66. mbedtls_free(output_okm);
  67. }
  68. /* END_CASE */
  69. /* BEGIN_CASE */
  70. void test_hkdf_extract_ret(int hash_len, int ret)
  71. {
  72. int output_ret;
  73. unsigned char *salt = NULL;
  74. unsigned char *ikm = NULL;
  75. unsigned char *prk = NULL;
  76. size_t salt_len, ikm_len;
  77. struct mbedtls_md_info_t fake_md_info;
  78. memset(&fake_md_info, 0, sizeof(fake_md_info));
  79. fake_md_info.type = MBEDTLS_MD_NONE;
  80. fake_md_info.size = hash_len;
  81. ASSERT_ALLOC(prk, MBEDTLS_MD_MAX_SIZE);
  82. salt_len = 0;
  83. ikm_len = 0;
  84. output_ret = mbedtls_hkdf_extract(&fake_md_info, salt, salt_len,
  85. ikm, ikm_len, prk);
  86. TEST_ASSERT(output_ret == ret);
  87. exit:
  88. mbedtls_free(prk);
  89. }
  90. /* END_CASE */
  91. /* BEGIN_CASE */
  92. void test_hkdf_expand_ret(int hash_len, int prk_len, int okm_len, int ret)
  93. {
  94. int output_ret;
  95. unsigned char *info = NULL;
  96. unsigned char *prk = NULL;
  97. unsigned char *okm = NULL;
  98. size_t info_len;
  99. struct mbedtls_md_info_t fake_md_info;
  100. memset(&fake_md_info, 0, sizeof(fake_md_info));
  101. fake_md_info.type = MBEDTLS_MD_NONE;
  102. fake_md_info.size = hash_len;
  103. info_len = 0;
  104. if (prk_len > 0) {
  105. ASSERT_ALLOC(prk, prk_len);
  106. }
  107. if (okm_len > 0) {
  108. ASSERT_ALLOC(okm, okm_len);
  109. }
  110. output_ret = mbedtls_hkdf_expand(&fake_md_info, prk, prk_len,
  111. info, info_len, okm, okm_len);
  112. TEST_ASSERT(output_ret == ret);
  113. exit:
  114. mbedtls_free(prk);
  115. mbedtls_free(okm);
  116. }
  117. /* END_CASE */