Add test cases for BOOLEANs and INTEGERs
Omit negative integers and MPIs that would result in values that look like negative INTEGERs, since the library doesn't respect the specifications there, but fixing it has a serious risk of breaking interoperability when ASN.1 is used in X.509 and other cryptography-related applications.
This commit is contained in:
parent
e40d1207eb
commit
3a032c36c1
2 changed files with 196 additions and 0 deletions
|
@ -1,3 +1,87 @@
|
|||
ASN.1 Write BOOLEAN FALSE
|
||||
mbedtls_asn1_write_bool:0:"010100"
|
||||
|
||||
ASN.1 Write BOOLEAN TRUE
|
||||
mbedtls_asn1_write_bool:1:"0101ff"
|
||||
|
||||
ASN.1 Write int 0
|
||||
mbedtls_asn1_write_int:0:"020100"
|
||||
|
||||
ASN.1 Write int 1
|
||||
mbedtls_asn1_write_int:1:"020101"
|
||||
|
||||
ASN.1 Write int 127
|
||||
mbedtls_asn1_write_int:0x7f:"02017f"
|
||||
|
||||
ASN.1 Write int 128
|
||||
mbedtls_asn1_write_int:0x80:"02020080"
|
||||
|
||||
ASN.1 Write int 255
|
||||
mbedtls_asn1_write_int:0xff:"020200ff"
|
||||
|
||||
ASN.1 Write int 256
|
||||
mbedtls_asn1_write_int:0x100:"02020100"
|
||||
|
||||
ASN.1 Write int 32767
|
||||
mbedtls_asn1_write_int:0x7fff:"02027fff"
|
||||
|
||||
ASN.1 Write int 32768
|
||||
mbedtls_asn1_write_int:0x8000:"0203008000"
|
||||
|
||||
ASN.1 Write int 65535
|
||||
mbedtls_asn1_write_int:0xffff:"020300ffff"
|
||||
|
||||
ASN.1 Write int 65536
|
||||
mbedtls_asn1_write_int:0x10000:"0203010000"
|
||||
|
||||
ASN.1 Write int 8388607
|
||||
mbedtls_asn1_write_int:0x7fffff:"02037fffff"
|
||||
|
||||
ASN.1 Write int 8388608
|
||||
mbedtls_asn1_write_int:0x800000:"020400800000"
|
||||
|
||||
ASN.1 Write int 0x12345678
|
||||
mbedtls_asn1_write_int:0x12345678:"020412345678"
|
||||
|
||||
ASN.1 Write int 2147483647
|
||||
mbedtls_asn1_write_int:0x7fffffff:"02047fffffff"
|
||||
|
||||
#ASN.1 Write mpi 0
|
||||
#mbedtls_asn1_write_mpi:"00":"020100"
|
||||
|
||||
ASN.1 Write mpi 1
|
||||
mbedtls_asn1_write_mpi:"01":"020101"
|
||||
|
||||
ASN.1 Write mpi 0x7f
|
||||
mbedtls_asn1_write_mpi:"7f":"02017f"
|
||||
|
||||
#ASN.1 Write mpi 0x80
|
||||
#mbedtls_asn1_write_mpi:"7f":"02020080"
|
||||
|
||||
#ASN.1 Write mpi 0xff
|
||||
#mbedtls_asn1_write_mpi:"7f":"020200ff"
|
||||
|
||||
ASN.1 Write mpi 0x100
|
||||
mbedtls_asn1_write_mpi:"0100":"02020100"
|
||||
|
||||
ASN.1 Write mpi, 127*8-1 bits
|
||||
mbedtls_asn1_write_mpi:"7f7b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8":"027f7f7b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8"
|
||||
|
||||
#ASN.1 Write mpi, 127*8 bits
|
||||
#mbedtls_asn1_write_mpi:"e77b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8":"028180e77b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8"
|
||||
|
||||
ASN.1 Write mpi, 127*8+1 bits
|
||||
mbedtls_asn1_write_mpi:"108446d68934cc1af23c4cd909884d4bd737a1890e12f5ef8bf3d807d72feffa63c0bf2633345f8b8418d144617c871a7a0277ac0150eed4b3db7f9dff21114cd0d7f282400f03c931cb00c367550e374a1ed3762a1801ca714cfc8d5aac69707ca81e0661400ed0014d97cba48f94d835dd681fc3053c51958afbf7583cf49c":"028180108446d68934cc1af23c4cd909884d4bd737a1890e12f5ef8bf3d807d72feffa63c0bf2633345f8b8418d144617c871a7a0277ac0150eed4b3db7f9dff21114cd0d7f282400f03c931cb00c367550e374a1ed3762a1801ca714cfc8d5aac69707ca81e0661400ed0014d97cba48f94d835dd681fc3053c51958afbf7583cf49c"
|
||||
|
||||
ASN.1 Write mpi, 255*8-1 bits
|
||||
mbedtls_asn1_write_mpi:"7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c":"0281ff7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c"
|
||||
|
||||
#ASN.1 Write mpi, 255*8 bits
|
||||
#mbedtls_asn1_write_mpi:"fbd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c":"0282010000fbd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c"
|
||||
|
||||
ASN.1 Write mpi, 256*8-1 bits
|
||||
mbedtls_asn1_write_mpi:"7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c89":"028201007bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c89"
|
||||
|
||||
ASN.1 Write Octet String #0 (Empty string)
|
||||
mbedtls_asn1_write_octet_string:"":"0400":2:2
|
||||
|
||||
|
|
|
@ -3,6 +3,53 @@
|
|||
|
||||
#define GUARD_LEN 4
|
||||
#define GUARD_VAL 0x2a
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char *output;
|
||||
unsigned char *start;
|
||||
unsigned char *end;
|
||||
unsigned char *p;
|
||||
size_t size;
|
||||
} generic_write_data_t;
|
||||
|
||||
int generic_write_start_step( generic_write_data_t *data )
|
||||
{
|
||||
test_set_step( data->size );
|
||||
ASSERT_ALLOC( data->output, data->size == 0 ? 1 : data->size );
|
||||
data->end = data->output + data->size;
|
||||
data->p = data->end;
|
||||
data->start = data->end - data->size;
|
||||
return( 1 );
|
||||
exit:
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
int generic_write_finish_step( generic_write_data_t *data,
|
||||
const data_t *expected, int ret )
|
||||
{
|
||||
int ok = 0;
|
||||
|
||||
if( data->size < expected->len )
|
||||
{
|
||||
TEST_EQUAL( ret, MBEDTLS_ERR_ASN1_BUF_TOO_SMALL );
|
||||
}
|
||||
else
|
||||
{
|
||||
TEST_EQUAL( ret, data->end - data->p );
|
||||
TEST_ASSERT( data->p >= data->start );
|
||||
TEST_ASSERT( data->p <= data->end );
|
||||
ASSERT_COMPARE( data->p, (size_t)( data->end - data->p ),
|
||||
expected->x, expected->len );
|
||||
}
|
||||
ok = 1;
|
||||
|
||||
exit:
|
||||
mbedtls_free( data->output );
|
||||
data->output = NULL;
|
||||
return( ok );
|
||||
}
|
||||
|
||||
/* END_HEADER */
|
||||
|
||||
/* BEGIN_DEPENDENCIES
|
||||
|
@ -10,6 +57,71 @@
|
|||
* END_DEPENDENCIES
|
||||
*/
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mbedtls_asn1_write_bool( int val, data_t *expected )
|
||||
{
|
||||
generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 };
|
||||
int ret;
|
||||
|
||||
for( data.size = 0; data.size < expected->len + 1; data.size++ )
|
||||
{
|
||||
if( ! generic_write_start_step( &data ) )
|
||||
goto exit;
|
||||
ret = mbedtls_asn1_write_bool( &data.p, data.start, val );
|
||||
if( ! generic_write_finish_step( &data, expected, ret ) )
|
||||
goto exit;
|
||||
}
|
||||
|
||||
exit:
|
||||
mbedtls_free( data.output );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mbedtls_asn1_write_int( int val, data_t *expected )
|
||||
{
|
||||
generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 };
|
||||
int ret;
|
||||
|
||||
for( data.size = 0; data.size < expected->len + 1; data.size++ )
|
||||
{
|
||||
if( ! generic_write_start_step( &data ) )
|
||||
goto exit;
|
||||
ret = mbedtls_asn1_write_int( &data.p, data.start, val );
|
||||
if( ! generic_write_finish_step( &data, expected, ret ) )
|
||||
goto exit;
|
||||
}
|
||||
|
||||
exit:
|
||||
mbedtls_free( data.output );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */
|
||||
void mbedtls_asn1_write_mpi( data_t *val, data_t *expected )
|
||||
{
|
||||
generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 };
|
||||
mbedtls_mpi mpi;
|
||||
int ret;
|
||||
|
||||
mbedtls_mpi_init( &mpi );
|
||||
TEST_ASSERT( mbedtls_mpi_read_binary( &mpi, val->x, val->len ) == 0 );
|
||||
|
||||
for( data.size = 0; data.size < expected->len + 1; data.size++ )
|
||||
{
|
||||
if( ! generic_write_start_step( &data ) )
|
||||
goto exit;
|
||||
ret = mbedtls_asn1_write_mpi( &data.p, data.start, &mpi );
|
||||
if( ! generic_write_finish_step( &data, expected, ret ) )
|
||||
goto exit;
|
||||
}
|
||||
|
||||
exit:
|
||||
mbedtls_mpi_free( &mpi );
|
||||
mbedtls_free( data.output );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mbedtls_asn1_write_octet_string( data_t * str, data_t * asn1,
|
||||
int buf_len, int result )
|
||||
|
|
Loading…
Reference in a new issue