test_suite_chacha20.function 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/chacha20.h"
  3. /* END_HEADER */
  4. /* BEGIN_DEPENDENCIES
  5. * depends_on:MBEDTLS_CHACHA20_C
  6. * END_DEPENDENCIES
  7. */
  8. /* BEGIN_CASE */
  9. void chacha20_crypt(data_t *key_str,
  10. data_t *nonce_str,
  11. int counter,
  12. data_t *src_str,
  13. data_t *expected_output_str)
  14. {
  15. unsigned char output[375];
  16. mbedtls_chacha20_context ctx;
  17. memset(output, 0x00, sizeof(output));
  18. TEST_ASSERT(src_str->len == expected_output_str->len);
  19. TEST_ASSERT(key_str->len == 32U);
  20. TEST_ASSERT(nonce_str->len == 12U);
  21. /*
  22. * Test the integrated API
  23. */
  24. TEST_ASSERT(mbedtls_chacha20_crypt(key_str->x, nonce_str->x, counter, src_str->len, src_str->x,
  25. output) == 0);
  26. ASSERT_COMPARE(output, expected_output_str->len,
  27. expected_output_str->x, expected_output_str->len);
  28. /*
  29. * Test the streaming API
  30. */
  31. mbedtls_chacha20_init(&ctx);
  32. TEST_ASSERT(mbedtls_chacha20_setkey(&ctx, key_str->x) == 0);
  33. TEST_ASSERT(mbedtls_chacha20_starts(&ctx, nonce_str->x, counter) == 0);
  34. memset(output, 0x00, sizeof(output));
  35. TEST_ASSERT(mbedtls_chacha20_update(&ctx, src_str->len, src_str->x, output) == 0);
  36. ASSERT_COMPARE(output, expected_output_str->len,
  37. expected_output_str->x, expected_output_str->len);
  38. /*
  39. * Test the streaming API again, piecewise
  40. */
  41. /* Don't free/init the context nor set the key again,
  42. * in order to test that starts() does the right thing. */
  43. TEST_ASSERT(mbedtls_chacha20_starts(&ctx, nonce_str->x, counter) == 0);
  44. memset(output, 0x00, sizeof(output));
  45. TEST_ASSERT(mbedtls_chacha20_update(&ctx, 1, src_str->x, output) == 0);
  46. TEST_ASSERT(mbedtls_chacha20_update(&ctx, src_str->len - 1,
  47. src_str->x + 1, output + 1) == 0);
  48. ASSERT_COMPARE(output, expected_output_str->len,
  49. expected_output_str->x, expected_output_str->len);
  50. mbedtls_chacha20_free(&ctx);
  51. }
  52. /* END_CASE */
  53. /* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
  54. void chacha20_self_test()
  55. {
  56. TEST_ASSERT(mbedtls_chacha20_self_test(1) == 0);
  57. }
  58. /* END_CASE */