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