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