blob: fc5fd8a2ebbafc8fe76af67cb37c612852b1b027 [file] [log] [blame]
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/asn1write.h"
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +02003
4#define GUARD_LEN 4
5#define GUARD_VAL 0x2a
6/* END_HEADER */
7
8/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02009 * depends_on:MBEDTLS_ASN1_WRITE_C
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020010 * END_DEPENDENCIES
11 */
12
13/* BEGIN_CASE */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020014void mbedtls_asn1_write_octet_string( char *hex_str, char *hex_asn1,
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020015 int buf_len, int result )
16{
17 int ret;
18 unsigned char buf[150];
19 unsigned char str[150] = { 0 };
20 unsigned char asn1[150] = { 0 };
21 size_t str_len, asn1_len, i;
22 unsigned char *p;
23
24 memset( buf, GUARD_VAL, sizeof( buf ) );
25
26 str_len = unhexify( str, hex_str );
27 asn1_len = unhexify( asn1, hex_asn1 );
28
29 p = buf + GUARD_LEN + buf_len;
30
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020031 ret = mbedtls_asn1_write_octet_string( &p, buf + GUARD_LEN, str, str_len );
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020032
33 /* Check for buffer overwrite on both sides */
34 for( i = 0; i < GUARD_LEN; i++ )
35 {
36 TEST_ASSERT( buf[i] == GUARD_VAL );
37 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
38 }
39
40 if( result >= 0 )
41 {
42 TEST_ASSERT( (size_t) ret == asn1_len );
43 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
44
45 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
46 }
47}
48/* END_CASE */
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020049
50/* BEGIN_CASE */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020051void mbedtls_asn1_write_ia5_string( char *str, char *hex_asn1,
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020052 int buf_len, int result )
53{
54 int ret;
55 unsigned char buf[150];
56 unsigned char asn1[150] = { 0 };
57 size_t str_len, asn1_len, i;
58 unsigned char *p;
59
60 memset( buf, GUARD_VAL, sizeof( buf ) );
61
62 str_len = strlen( str );
63 asn1_len = unhexify( asn1, hex_asn1 );
64
65 p = buf + GUARD_LEN + buf_len;
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067 ret = mbedtls_asn1_write_ia5_string( &p, buf + GUARD_LEN, str, str_len );
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020068
69 /* Check for buffer overwrite on both sides */
70 for( i = 0; i < GUARD_LEN; i++ )
71 {
72 TEST_ASSERT( buf[i] == GUARD_VAL );
73 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
74 }
75
76 if( result >= 0 )
77 {
78 TEST_ASSERT( (size_t) ret == asn1_len );
79 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
80
81 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
82 }
83}
84/* END_CASE */
Paul Bakkere325db92016-07-14 10:27:36 +010085
86/* BEGIN_CASE */
Paul Bakker58bfb832016-07-14 11:02:31 +010087void mbedtls_asn1_write_len( int len, char *check_str, int buf_len,
88 int result )
Paul Bakkere325db92016-07-14 10:27:36 +010089{
90 int ret;
91 unsigned char buf[150];
92 unsigned char asn1[150];
93 unsigned char *p;
Paul Bakker5e8b77c2016-07-14 11:14:54 +010094 size_t asn1_len, i, read_len;
Paul Bakkere325db92016-07-14 10:27:36 +010095
96 memset( buf, GUARD_VAL, sizeof( buf ) );
97 memset( asn1, 0, sizeof( asn1 ) );
98 asn1_len = unhexify( asn1, check_str );
99
Paul Bakker58bfb832016-07-14 11:02:31 +0100100 p = buf + GUARD_LEN + buf_len;
Paul Bakkere325db92016-07-14 10:27:36 +0100101
102 ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len );
103
104 TEST_ASSERT( ret == result );
105
106 /* Check for buffer overwrite on both sides */
107 for( i = 0; i < GUARD_LEN; i++ )
108 {
109 TEST_ASSERT( buf[i] == GUARD_VAL );
Paul Bakker58bfb832016-07-14 11:02:31 +0100110 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
Paul Bakkere325db92016-07-14 10:27:36 +0100111 }
112
113 if( result >= 0 )
114 {
115 TEST_ASSERT( (size_t) ret == asn1_len );
Paul Bakker58bfb832016-07-14 11:02:31 +0100116 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
Paul Bakkere325db92016-07-14 10:27:36 +0100117
118 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
Paul Bakker5e8b77c2016-07-14 11:14:54 +0100119
120 /* Read back with mbedtls_asn1_get_len() to check */
121 ret = mbedtls_asn1_get_len( &p, buf + GUARD_LEN + buf_len, &read_len );
122
123 if( len == 0 )
124 {
125 TEST_ASSERT( ret == 0 );
126 }
127 else
128 {
129 /* Return will be MBEDTLS_ERR_ASN1_OUT_OF_DATA because the rest of
130 * the buffer is missing
131 */
132 TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_OUT_OF_DATA );
133 }
134 TEST_ASSERT( read_len == (size_t) len );
135 TEST_ASSERT( p == buf + GUARD_LEN + buf_len );
Paul Bakkere325db92016-07-14 10:27:36 +0100136 }
137}
138/* END_CASE */