1/* BEGIN_HEADER */ 2#include "mbedtls/base64.h" 3/* END_HEADER */ 4 5/* BEGIN_DEPENDENCIES 6 * depends_on:MBEDTLS_BASE64_C 7 * END_DEPENDENCIES 8 */ 9 10/* BEGIN_CASE */ 11void mbedtls_base64_encode( char * src_string, char * dst_string, 12 int dst_buf_size, int result ) 13{ 14 unsigned char src_str[1000]; 15 unsigned char dst_str[1000]; 16 size_t len, src_len; 17 18 memset(src_str, 0x00, 1000); 19 memset(dst_str, 0x00, 1000); 20 21 strncpy( (char *) src_str, src_string, sizeof(src_str) - 1 ); 22 src_len = strlen( (char *) src_str ); 23 24 TEST_CF_SECRET( src_str, sizeof( src_str ) ); 25 TEST_ASSERT( mbedtls_base64_encode( dst_str, dst_buf_size, &len, src_str, src_len) == result ); 26 TEST_CF_PUBLIC( src_str, sizeof( src_str ) ); 27 28 /* dest_str will have had tainted data copied to it, prevent the TEST_ASSERT below from triggering 29 CF failures by unmarking it. */ 30 TEST_CF_PUBLIC( dst_str, len ); 31 32 if( result == 0 ) 33 { 34 TEST_ASSERT( strcmp( (char *) dst_str, dst_string ) == 0 ); 35 } 36} 37/* END_CASE */ 38 39/* BEGIN_CASE */ 40void mbedtls_base64_decode( char * src_string, char * dst_string, int result ) 41{ 42 unsigned char src_str[1000]; 43 unsigned char dst_str[1000]; 44 size_t len; 45 int res; 46 47 memset(src_str, 0x00, 1000); 48 memset(dst_str, 0x00, 1000); 49 50 strncpy( (char *) src_str, src_string, sizeof(src_str) - 1 ); 51 res = mbedtls_base64_decode( dst_str, sizeof( dst_str ), &len, src_str, strlen( (char *) src_str ) ); 52 TEST_ASSERT( res == result ); 53 if( result == 0 ) 54 { 55 TEST_ASSERT( strcmp( (char *) dst_str, dst_string ) == 0 ); 56 } 57} 58/* END_CASE */ 59 60/* BEGIN_CASE */ 61void base64_encode_hex( data_t * src, char * dst, int dst_buf_size, 62 int result ) 63{ 64 unsigned char *res = NULL; 65 size_t len; 66 67 res = zero_alloc( dst_buf_size ); 68 69 TEST_CF_SECRET( src->x, src->len ); 70 TEST_ASSERT( mbedtls_base64_encode( res, dst_buf_size, &len, src->x, src->len ) == result ); 71 TEST_CF_PUBLIC( src->x, src->len ); 72 73 /* res will have had tainted data copied to it, prevent the TEST_ASSERT below from triggering 74 CF failures by unmarking it. */ 75 TEST_CF_PUBLIC( res, len ); 76 77 if( result == 0 ) 78 { 79 TEST_ASSERT( len == strlen( dst ) ); 80 TEST_ASSERT( memcmp( dst, res, len ) == 0 ); 81 } 82 83exit: 84 mbedtls_free( res ); 85} 86/* END_CASE */ 87 88/* BEGIN_CASE */ 89void base64_decode_hex( char * src, data_t * dst, int dst_buf_size, 90 int result ) 91{ 92 unsigned char *res = NULL; 93 size_t len; 94 95 res = zero_alloc( dst_buf_size ); 96 97 TEST_ASSERT( mbedtls_base64_decode( res, dst_buf_size, &len, (unsigned char *) src, 98 strlen( src ) ) == result ); 99 if( result == 0 ) 100 { 101 TEST_ASSERT( len == dst->len ); 102 TEST_ASSERT( memcmp( dst->x, res, len ) == 0 ); 103 } 104 105exit: 106 mbedtls_free( res ); 107} 108/* END_CASE */ 109 110/* BEGIN_CASE */ 111void base64_decode_hex_src( data_t * src, char * dst_ref, int result ) 112{ 113 unsigned char dst[1000] = { 0 }; 114 size_t len; 115 116 TEST_ASSERT( mbedtls_base64_decode( dst, sizeof( dst ), &len, src->x, src->len ) == result ); 117 if( result == 0 ) 118 { 119 TEST_ASSERT( len == strlen( dst_ref ) ); 120 TEST_ASSERT( memcmp( dst, dst_ref, len ) == 0 ); 121 } 122 123exit: 124 ;; 125} 126/* END_CASE */ 127 128/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ 129void base64_selftest( ) 130{ 131 TEST_ASSERT( mbedtls_base64_self_test( 1 ) == 0 ); 132} 133/* END_CASE */ 134