1/* BEGIN_HEADER */ 2#include "mbedtls/asn1write.h" 3 4#define GUARD_LEN 4 5#define GUARD_VAL 0x2a 6/* END_HEADER */ 7 8/* BEGIN_DEPENDENCIES 9 * depends_on:MBEDTLS_ASN1_WRITE_C 10 * END_DEPENDENCIES 11 */ 12 13/* BEGIN_CASE */ 14void mbedtls_asn1_write_octet_string( data_t * str, data_t * asn1, 15 int buf_len, int result ) 16{ 17 int ret; 18 unsigned char buf[150]; 19 size_t i; 20 unsigned char *p; 21 22 memset( buf, GUARD_VAL, sizeof( buf ) ); 23 24 25 p = buf + GUARD_LEN + buf_len; 26 27 ret = mbedtls_asn1_write_octet_string( &p, buf + GUARD_LEN, str->x, str->len ); 28 29 /* Check for buffer overwrite on both sides */ 30 for( i = 0; i < GUARD_LEN; i++ ) 31 { 32 TEST_ASSERT( buf[i] == GUARD_VAL ); 33 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL ); 34 } 35 36 if( result >= 0 ) 37 { 38 TEST_ASSERT( (size_t) ret == asn1->len ); 39 TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len ); 40 41 TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 ); 42 } 43} 44/* END_CASE */ 45 46/* BEGIN_CASE */ 47void mbedtls_asn1_write_ia5_string( char * str, data_t * asn1, 48 int buf_len, int result ) 49{ 50 int ret; 51 unsigned char buf[150]; 52 size_t str_len; 53 size_t i; 54 unsigned char *p; 55 56 memset( buf, GUARD_VAL, sizeof( buf ) ); 57 58 str_len = strlen( str ); 59 60 p = buf + GUARD_LEN + buf_len; 61 62 ret = mbedtls_asn1_write_ia5_string( &p, buf + GUARD_LEN, str, str_len ); 63 64 /* Check for buffer overwrite on both sides */ 65 for( i = 0; i < GUARD_LEN; i++ ) 66 { 67 TEST_ASSERT( buf[i] == GUARD_VAL ); 68 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL ); 69 } 70 71 if( result >= 0 ) 72 { 73 TEST_ASSERT( (size_t) ret == asn1->len ); 74 TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len ); 75 76 TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 ); 77 } 78} 79/* END_CASE */ 80 81/* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */ 82void mbedtls_asn1_write_len( int len, data_t * asn1, int buf_len, 83 int result ) 84{ 85 int ret; 86 unsigned char buf[150]; 87 unsigned char *p; 88 size_t i; 89 size_t read_len; 90 91 memset( buf, GUARD_VAL, sizeof( buf ) ); 92 93 p = buf + GUARD_LEN + buf_len; 94 95 ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len ); 96 97 TEST_ASSERT( ret == result ); 98 99 /* Check for buffer overwrite on both sides */ 100 for( i = 0; i < GUARD_LEN; i++ ) 101 { 102 TEST_ASSERT( buf[i] == GUARD_VAL ); 103 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL ); 104 } 105 106 if( result >= 0 ) 107 { 108 TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len ); 109 110 TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 ); 111 112 /* Read back with mbedtls_asn1_get_len() to check */ 113 ret = mbedtls_asn1_get_len( &p, buf + GUARD_LEN + buf_len, &read_len ); 114 115 if( len == 0 ) 116 { 117 TEST_ASSERT( ret == 0 ); 118 } 119 else 120 { 121 /* Return will be MBEDTLS_ERR_ASN1_OUT_OF_DATA because the rest of 122 * the buffer is missing 123 */ 124 TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_OUT_OF_DATA ); 125 } 126 TEST_ASSERT( read_len == (size_t) len ); 127 TEST_ASSERT( p == buf + GUARD_LEN + buf_len ); 128 } 129} 130/* END_CASE */ 131