a8fa8b8f96
Also fix two validation bugs found while adding the tests. Also handle test dependencies the right way while at it.
120 lines
3.7 KiB
Text
120 lines
3.7 KiB
Text
/* BEGIN_HEADER */
|
|
#include "mbedtls/poly1305.h"
|
|
#include <stddef.h>
|
|
/* END_HEADER */
|
|
|
|
/* BEGIN_DEPENDENCIES
|
|
* depends_on:MBEDTLS_POLY1305_C
|
|
* END_DEPENDENCIES
|
|
*/
|
|
|
|
/* BEGIN_CASE */
|
|
void mbedtls_poly1305( char *hex_key_string, char *hex_mac_string, char *hex_src_string )
|
|
{
|
|
unsigned char src_str[375]; /* max size of binary input */
|
|
unsigned char key[32]; /* size set by the standard */
|
|
unsigned char mac[16]; /* size set by the standard */
|
|
unsigned char mac_str[33]; /* hex expansion of the above */
|
|
size_t src_len;
|
|
mbedtls_poly1305_context ctx;
|
|
|
|
memset( src_str, 0x00, sizeof( src_str ) );
|
|
memset( mac_str, 0x00, sizeof( mac_str ) );
|
|
memset( key, 0x00, sizeof( key ) );
|
|
memset( mac, 0x00, sizeof( mac ) );
|
|
|
|
src_len = unhexify( src_str, hex_src_string );
|
|
unhexify( key, hex_key_string );
|
|
|
|
/*
|
|
* Test the integrated API
|
|
*/
|
|
TEST_ASSERT( mbedtls_poly1305_mac( key, src_str, src_len, mac ) == 0 );
|
|
|
|
hexify( mac_str, mac, 16 );
|
|
TEST_ASSERT( strcmp( (char *) mac_str, hex_mac_string ) == 0 );
|
|
|
|
/*
|
|
* Test the streaming API
|
|
*/
|
|
mbedtls_poly1305_init( &ctx );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_starts( &ctx, key ) == 0 );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str, src_len ) == 0 );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_finish( &ctx, mac ) == 0 );
|
|
|
|
hexify( mac_str, mac, 16 );
|
|
TEST_ASSERT( strcmp( (char *) mac_str, hex_mac_string ) == 0 );
|
|
|
|
/*
|
|
* Test the streaming API again, piecewise
|
|
*/
|
|
|
|
/* Don't free/init the context, in order to test that starts() does the
|
|
* right thing. */
|
|
TEST_ASSERT( mbedtls_poly1305_starts( &ctx, key ) == 0 );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str, 1 ) == 0 );
|
|
TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str + 1, src_len - 1) == 0 );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_finish( &ctx, mac ) == 0 );
|
|
|
|
hexify( mac_str, mac, 16 );
|
|
TEST_ASSERT( strcmp( (char *) mac_str, hex_mac_string ) == 0 );
|
|
|
|
mbedtls_poly1305_free( &ctx );
|
|
}
|
|
/* END_CASE */
|
|
|
|
/* BEGIN_CASE */
|
|
void poly1305_bad_params()
|
|
{
|
|
unsigned char src[1];
|
|
unsigned char key[32];
|
|
unsigned char mac[16];
|
|
size_t src_len = sizeof( src );
|
|
mbedtls_poly1305_context ctx;
|
|
|
|
mbedtls_poly1305_init( NULL );
|
|
mbedtls_poly1305_free( NULL );
|
|
|
|
mbedtls_poly1305_init( &ctx );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_starts( NULL, key )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
TEST_ASSERT( mbedtls_poly1305_starts( &ctx, NULL )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_update( NULL, src, 0 )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
TEST_ASSERT( mbedtls_poly1305_update( &ctx, NULL, src_len )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
TEST_ASSERT( mbedtls_poly1305_update( &ctx, NULL, 0 )
|
|
== 0 );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_finish( NULL, mac )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
TEST_ASSERT( mbedtls_poly1305_finish( &ctx, NULL )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
|
|
TEST_ASSERT( mbedtls_poly1305_mac( NULL, src, 0, mac )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
TEST_ASSERT( mbedtls_poly1305_mac( key, NULL, src_len, mac )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
TEST_ASSERT( mbedtls_poly1305_mac( key, src, 0, NULL )
|
|
== MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
|
|
TEST_ASSERT( mbedtls_poly1305_mac( key, NULL, 0, mac )
|
|
== 0 );
|
|
|
|
mbedtls_poly1305_free( &ctx );
|
|
}
|
|
/* END_CASE */
|
|
|
|
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
|
|
void poly1305_selftest()
|
|
{
|
|
TEST_ASSERT( mbedtls_poly1305_self_test( 1 ) == 0 );
|
|
}
|
|
/* END_CASE */
|