Skip to content

Commit cd39c8a

Browse files
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.
1 parent 74c4330 commit cd39c8a

File tree

2 files changed

+196
-0
lines changed

2 files changed

+196
-0
lines changed

tests/suites/test_suite_asn1write.data

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,87 @@
1+
ASN.1 Write BOOLEAN FALSE
2+
mbedtls_asn1_write_bool:0:"010100"
3+
4+
ASN.1 Write BOOLEAN TRUE
5+
mbedtls_asn1_write_bool:1:"0101ff"
6+
7+
ASN.1 Write int 0
8+
mbedtls_asn1_write_int:0:"020100"
9+
10+
ASN.1 Write int 1
11+
mbedtls_asn1_write_int:1:"020101"
12+
13+
ASN.1 Write int 127
14+
mbedtls_asn1_write_int:0x7f:"02017f"
15+
16+
ASN.1 Write int 128
17+
mbedtls_asn1_write_int:0x80:"02020080"
18+
19+
ASN.1 Write int 255
20+
mbedtls_asn1_write_int:0xff:"020200ff"
21+
22+
ASN.1 Write int 256
23+
mbedtls_asn1_write_int:0x100:"02020100"
24+
25+
ASN.1 Write int 32767
26+
mbedtls_asn1_write_int:0x7fff:"02027fff"
27+
28+
ASN.1 Write int 32768
29+
mbedtls_asn1_write_int:0x8000:"0203008000"
30+
31+
ASN.1 Write int 65535
32+
mbedtls_asn1_write_int:0xffff:"020300ffff"
33+
34+
ASN.1 Write int 65536
35+
mbedtls_asn1_write_int:0x10000:"0203010000"
36+
37+
ASN.1 Write int 8388607
38+
mbedtls_asn1_write_int:0x7fffff:"02037fffff"
39+
40+
ASN.1 Write int 8388608
41+
mbedtls_asn1_write_int:0x800000:"020400800000"
42+
43+
ASN.1 Write int 0x12345678
44+
mbedtls_asn1_write_int:0x12345678:"020412345678"
45+
46+
ASN.1 Write int 2147483647
47+
mbedtls_asn1_write_int:0x7fffffff:"02047fffffff"
48+
49+
#ASN.1 Write mpi 0
50+
#mbedtls_asn1_write_mpi:"00":"020100"
51+
52+
ASN.1 Write mpi 1
53+
mbedtls_asn1_write_mpi:"01":"020101"
54+
55+
ASN.1 Write mpi 0x7f
56+
mbedtls_asn1_write_mpi:"7f":"02017f"
57+
58+
#ASN.1 Write mpi 0x80
59+
#mbedtls_asn1_write_mpi:"7f":"02020080"
60+
61+
#ASN.1 Write mpi 0xff
62+
#mbedtls_asn1_write_mpi:"7f":"020200ff"
63+
64+
ASN.1 Write mpi 0x100
65+
mbedtls_asn1_write_mpi:"0100":"02020100"
66+
67+
ASN.1 Write mpi, 127*8-1 bits
68+
mbedtls_asn1_write_mpi:"7f7b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8":"027f7f7b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8"
69+
70+
#ASN.1 Write mpi, 127*8 bits
71+
#mbedtls_asn1_write_mpi:"e77b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8":"028180e77b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8"
72+
73+
ASN.1 Write mpi, 127*8+1 bits
74+
mbedtls_asn1_write_mpi:"108446d68934cc1af23c4cd909884d4bd737a1890e12f5ef8bf3d807d72feffa63c0bf2633345f8b8418d144617c871a7a0277ac0150eed4b3db7f9dff21114cd0d7f282400f03c931cb00c367550e374a1ed3762a1801ca714cfc8d5aac69707ca81e0661400ed0014d97cba48f94d835dd681fc3053c51958afbf7583cf49c":"028180108446d68934cc1af23c4cd909884d4bd737a1890e12f5ef8bf3d807d72feffa63c0bf2633345f8b8418d144617c871a7a0277ac0150eed4b3db7f9dff21114cd0d7f282400f03c931cb00c367550e374a1ed3762a1801ca714cfc8d5aac69707ca81e0661400ed0014d97cba48f94d835dd681fc3053c51958afbf7583cf49c"
75+
76+
ASN.1 Write mpi, 255*8-1 bits
77+
mbedtls_asn1_write_mpi:"7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c":"0281ff7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c"
78+
79+
#ASN.1 Write mpi, 255*8 bits
80+
#mbedtls_asn1_write_mpi:"fbd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c":"0282010000fbd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c"
81+
82+
ASN.1 Write mpi, 256*8-1 bits
83+
mbedtls_asn1_write_mpi:"7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c89":"028201007bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c89"
84+
185
ASN.1 Write Octet String #0 (Empty string)
286
mbedtls_asn1_write_octet_string:"":"0400":2:2
387

tests/suites/test_suite_asn1write.function

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,125 @@
33

44
#define GUARD_LEN 4
55
#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+
653
/* END_HEADER */
754

855
/* BEGIN_DEPENDENCIES
956
* depends_on:MBEDTLS_ASN1_WRITE_C
1057
* END_DEPENDENCIES
1158
*/
1259

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+
13125
/* BEGIN_CASE */
14126
void mbedtls_asn1_write_octet_string( data_t * str, data_t * asn1,
15127
int buf_len, int result )

0 commit comments

Comments
 (0)