|
3 | 3 |
|
4 | 4 | #define GUARD_LEN 4
|
5 | 5 | #define GUARD_VAL 0x2a
|
| 6 | + |
| 7 | +typedef struct |
| 8 | +{ |
| 9 | + unsigned char *output; |
| 10 | + unsigned char *start; |
| 11 | + unsigned char *end; |
| 12 | + unsigned char *p; |
| 13 | + size_t size; |
| 14 | +} generic_write_data_t; |
| 15 | + |
| 16 | +int generic_write_start_step( generic_write_data_t *data ) |
| 17 | +{ |
| 18 | + test_set_step( data->size ); |
| 19 | + ASSERT_ALLOC( data->output, data->size == 0 ? 1 : data->size ); |
| 20 | + data->end = data->output + data->size; |
| 21 | + data->p = data->end; |
| 22 | + data->start = data->end - data->size; |
| 23 | + return( 1 ); |
| 24 | +exit: |
| 25 | + return( 0 ); |
| 26 | +} |
| 27 | + |
| 28 | +int generic_write_finish_step( generic_write_data_t *data, |
| 29 | + const data_t *expected, int ret ) |
| 30 | +{ |
| 31 | + int ok = 0; |
| 32 | + |
| 33 | + if( data->size < expected->len ) |
| 34 | + { |
| 35 | + TEST_EQUAL( ret, MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); |
| 36 | + } |
| 37 | + else |
| 38 | + { |
| 39 | + TEST_EQUAL( ret, data->end - data->p ); |
| 40 | + TEST_ASSERT( data->p >= data->start ); |
| 41 | + TEST_ASSERT( data->p <= data->end ); |
| 42 | + ASSERT_COMPARE( data->p, data->end - data->p, |
| 43 | + expected->x, expected->len ); |
| 44 | + } |
| 45 | + ok = 1; |
| 46 | + |
| 47 | +exit: |
| 48 | + mbedtls_free( data->output ); |
| 49 | + data->output = NULL; |
| 50 | + return( ok ); |
| 51 | +} |
| 52 | + |
6 | 53 | /* END_HEADER */
|
7 | 54 |
|
8 | 55 | /* BEGIN_DEPENDENCIES
|
9 | 56 | * depends_on:MBEDTLS_ASN1_WRITE_C
|
10 | 57 | * END_DEPENDENCIES
|
11 | 58 | */
|
12 | 59 |
|
| 60 | +/* BEGIN_CASE */ |
| 61 | +void mbedtls_asn1_write_bool( int val, data_t *expected ) |
| 62 | +{ |
| 63 | + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; |
| 64 | + int ret; |
| 65 | + |
| 66 | + for( data.size = 0; data.size < expected->len + 1; data.size++ ) |
| 67 | + { |
| 68 | + if( ! generic_write_start_step( &data ) ) |
| 69 | + goto exit; |
| 70 | + ret = mbedtls_asn1_write_bool( &data.p, data.start, val ); |
| 71 | + if( ! generic_write_finish_step( &data, expected, ret ) ) |
| 72 | + goto exit; |
| 73 | + } |
| 74 | + |
| 75 | +exit: |
| 76 | + mbedtls_free( data.output ); |
| 77 | +} |
| 78 | +/* END_CASE */ |
| 79 | + |
| 80 | +/* BEGIN_CASE */ |
| 81 | +void mbedtls_asn1_write_int( int val, data_t *expected ) |
| 82 | +{ |
| 83 | + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; |
| 84 | + int ret; |
| 85 | + |
| 86 | + for( data.size = 0; data.size < expected->len + 1; data.size++ ) |
| 87 | + { |
| 88 | + if( ! generic_write_start_step( &data ) ) |
| 89 | + goto exit; |
| 90 | + ret = mbedtls_asn1_write_int( &data.p, data.start, val ); |
| 91 | + if( ! generic_write_finish_step( &data, expected, ret ) ) |
| 92 | + goto exit; |
| 93 | + } |
| 94 | + |
| 95 | +exit: |
| 96 | + mbedtls_free( data.output ); |
| 97 | +} |
| 98 | +/* END_CASE */ |
| 99 | + |
| 100 | +/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */ |
| 101 | +void mbedtls_asn1_write_mpi( data_t *val, data_t *expected ) |
| 102 | +{ |
| 103 | + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; |
| 104 | + mbedtls_mpi mpi; |
| 105 | + int ret; |
| 106 | + |
| 107 | + mbedtls_mpi_init( &mpi ); |
| 108 | + TEST_ASSERT( mbedtls_mpi_read_binary( &mpi, val->x, val->len ) == 0 ); |
| 109 | + |
| 110 | + for( data.size = 0; data.size < expected->len + 1; data.size++ ) |
| 111 | + { |
| 112 | + if( ! generic_write_start_step( &data ) ) |
| 113 | + goto exit; |
| 114 | + ret = mbedtls_asn1_write_mpi( &data.p, data.start, &mpi ); |
| 115 | + if( ! generic_write_finish_step( &data, expected, ret ) ) |
| 116 | + goto exit; |
| 117 | + } |
| 118 | + |
| 119 | +exit: |
| 120 | + mbedtls_mpi_free( &mpi ); |
| 121 | + mbedtls_free( data.output ); |
| 122 | +} |
| 123 | +/* END_CASE */ |
| 124 | + |
13 | 125 | /* BEGIN_CASE */
|
14 | 126 | void mbedtls_asn1_write_octet_string( data_t * str, data_t * asn1,
|
15 | 127 | int buf_len, int result )
|
|
0 commit comments