1a8e1175bSopenharmony_ci/* BEGIN_HEADER */ 2a8e1175bSopenharmony_ci#include "mbedtls/poly1305.h" 3a8e1175bSopenharmony_ci#include <stddef.h> 4a8e1175bSopenharmony_ci/* END_HEADER */ 5a8e1175bSopenharmony_ci 6a8e1175bSopenharmony_ci/* BEGIN_DEPENDENCIES 7a8e1175bSopenharmony_ci * depends_on:MBEDTLS_POLY1305_C 8a8e1175bSopenharmony_ci * END_DEPENDENCIES 9a8e1175bSopenharmony_ci */ 10a8e1175bSopenharmony_ci 11a8e1175bSopenharmony_ci/* BEGIN_CASE */ 12a8e1175bSopenharmony_civoid mbedtls_poly1305(data_t *key, data_t *expected_mac, data_t *src_str) 13a8e1175bSopenharmony_ci{ 14a8e1175bSopenharmony_ci unsigned char mac[16]; /* size set by the standard */ 15a8e1175bSopenharmony_ci mbedtls_poly1305_context ctx; 16a8e1175bSopenharmony_ci 17a8e1175bSopenharmony_ci memset(mac, 0x00, sizeof(mac)); 18a8e1175bSopenharmony_ci 19a8e1175bSopenharmony_ci /* 20a8e1175bSopenharmony_ci * Test the integrated API 21a8e1175bSopenharmony_ci */ 22a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_mac(key->x, src_str->x, 23a8e1175bSopenharmony_ci src_str->len, mac) == 0); 24a8e1175bSopenharmony_ci 25a8e1175bSopenharmony_ci TEST_MEMORY_COMPARE(mac, expected_mac->len, 26a8e1175bSopenharmony_ci expected_mac->x, expected_mac->len); 27a8e1175bSopenharmony_ci 28a8e1175bSopenharmony_ci /* 29a8e1175bSopenharmony_ci * Test the streaming API 30a8e1175bSopenharmony_ci */ 31a8e1175bSopenharmony_ci mbedtls_poly1305_init(&ctx); 32a8e1175bSopenharmony_ci 33a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_starts(&ctx, key->x) == 0); 34a8e1175bSopenharmony_ci 35a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_update(&ctx, src_str->x, src_str->len) == 0); 36a8e1175bSopenharmony_ci 37a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_finish(&ctx, mac) == 0); 38a8e1175bSopenharmony_ci 39a8e1175bSopenharmony_ci TEST_MEMORY_COMPARE(mac, expected_mac->len, 40a8e1175bSopenharmony_ci expected_mac->x, expected_mac->len); 41a8e1175bSopenharmony_ci 42a8e1175bSopenharmony_ci /* 43a8e1175bSopenharmony_ci * Test the streaming API again, piecewise 44a8e1175bSopenharmony_ci */ 45a8e1175bSopenharmony_ci 46a8e1175bSopenharmony_ci /* Don't free/init the context, in order to test that starts() does the 47a8e1175bSopenharmony_ci * right thing. */ 48a8e1175bSopenharmony_ci if (src_str->len >= 1) { 49a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_starts(&ctx, key->x) == 0); 50a8e1175bSopenharmony_ci 51a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_update(&ctx, src_str->x, 1) == 0); 52a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_update(&ctx, src_str->x + 1, src_str->len - 1) == 0); 53a8e1175bSopenharmony_ci 54a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_finish(&ctx, mac) == 0); 55a8e1175bSopenharmony_ci 56a8e1175bSopenharmony_ci TEST_MEMORY_COMPARE(mac, expected_mac->len, 57a8e1175bSopenharmony_ci expected_mac->x, expected_mac->len); 58a8e1175bSopenharmony_ci } 59a8e1175bSopenharmony_ci 60a8e1175bSopenharmony_ci /* 61a8e1175bSopenharmony_ci * Again with more pieces 62a8e1175bSopenharmony_ci */ 63a8e1175bSopenharmony_ci if (src_str->len >= 2) { 64a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_starts(&ctx, key->x) == 0); 65a8e1175bSopenharmony_ci 66a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_update(&ctx, src_str->x, 1) == 0); 67a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_update(&ctx, src_str->x + 1, 1) == 0); 68a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_update(&ctx, src_str->x + 2, src_str->len - 2) == 0); 69a8e1175bSopenharmony_ci 70a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_finish(&ctx, mac) == 0); 71a8e1175bSopenharmony_ci 72a8e1175bSopenharmony_ci TEST_MEMORY_COMPARE(mac, expected_mac->len, 73a8e1175bSopenharmony_ci expected_mac->x, expected_mac->len); 74a8e1175bSopenharmony_ci } 75a8e1175bSopenharmony_ci 76a8e1175bSopenharmony_ci mbedtls_poly1305_free(&ctx); 77a8e1175bSopenharmony_ci} 78a8e1175bSopenharmony_ci/* END_CASE */ 79a8e1175bSopenharmony_ci 80a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ 81a8e1175bSopenharmony_civoid poly1305_selftest() 82a8e1175bSopenharmony_ci{ 83a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_poly1305_self_test(1) == 0); 84a8e1175bSopenharmony_ci} 85a8e1175bSopenharmony_ci/* END_CASE */ 86