blob: 40f1fed0fcb0ad017e5da3c2a9b30dcd30ad7c32 [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 };
Azim Khan90791702017-05-30 00:57:11 +010021 size_t str_len;
22 size_t asn1_len;
23 size_t i;
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020024 unsigned char *p;
25
26 memset( buf, GUARD_VAL, sizeof( buf ) );
27
28 str_len = unhexify( str, hex_str );
29 asn1_len = unhexify( asn1, hex_asn1 );
30
31 p = buf + GUARD_LEN + buf_len;
32
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020033 ret = mbedtls_asn1_write_octet_string( &p, buf + GUARD_LEN, str, str_len );
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020034
35 /* Check for buffer overwrite on both sides */
36 for( i = 0; i < GUARD_LEN; i++ )
37 {
38 TEST_ASSERT( buf[i] == GUARD_VAL );
39 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
40 }
41
42 if( result >= 0 )
43 {
44 TEST_ASSERT( (size_t) ret == asn1_len );
45 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
46
47 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
48 }
49}
50/* END_CASE */
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020051
52/* BEGIN_CASE */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020053void mbedtls_asn1_write_ia5_string( char *str, char *hex_asn1,
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020054 int buf_len, int result )
55{
56 int ret;
57 unsigned char buf[150];
58 unsigned char asn1[150] = { 0 };
Azim Khan90791702017-05-30 00:57:11 +010059 size_t str_len;
60 size_t asn1_len;
61 size_t i;
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020062 unsigned char *p;
63
64 memset( buf, GUARD_VAL, sizeof( buf ) );
65
66 str_len = strlen( str );
67 asn1_len = unhexify( asn1, hex_asn1 );
68
69 p = buf + GUARD_LEN + buf_len;
70
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020071 ret = mbedtls_asn1_write_ia5_string( &p, buf + GUARD_LEN, str, str_len );
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020072
73 /* Check for buffer overwrite on both sides */
74 for( i = 0; i < GUARD_LEN; i++ )
75 {
76 TEST_ASSERT( buf[i] == GUARD_VAL );
77 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
78 }
79
80 if( result >= 0 )
81 {
82 TEST_ASSERT( (size_t) ret == asn1_len );
83 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
84
85 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
86 }
87}
88/* END_CASE */
Paul Bakkere325db92016-07-14 10:27:36 +010089
90/* BEGIN_CASE */
Paul Bakker58bfb832016-07-14 11:02:31 +010091void mbedtls_asn1_write_len( int len, char *check_str, int buf_len,
92 int result )
Paul Bakkere325db92016-07-14 10:27:36 +010093{
94 int ret;
95 unsigned char buf[150];
96 unsigned char asn1[150];
97 unsigned char *p;
Azim Khan90791702017-05-30 00:57:11 +010098 size_t asn1_len;
99 size_t i;
100 size_t read_len;
Paul Bakkere325db92016-07-14 10:27:36 +0100101
102 memset( buf, GUARD_VAL, sizeof( buf ) );
103 memset( asn1, 0, sizeof( asn1 ) );
104 asn1_len = unhexify( asn1, check_str );
105
Paul Bakker58bfb832016-07-14 11:02:31 +0100106 p = buf + GUARD_LEN + buf_len;
Paul Bakkere325db92016-07-14 10:27:36 +0100107
108 ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len );
109
110 TEST_ASSERT( ret == result );
111
112 /* Check for buffer overwrite on both sides */
113 for( i = 0; i < GUARD_LEN; i++ )
114 {
115 TEST_ASSERT( buf[i] == GUARD_VAL );
Paul Bakker58bfb832016-07-14 11:02:31 +0100116 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
Paul Bakkere325db92016-07-14 10:27:36 +0100117 }
118
119 if( result >= 0 )
120 {
121 TEST_ASSERT( (size_t) ret == asn1_len );
Paul Bakker58bfb832016-07-14 11:02:31 +0100122 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
Paul Bakkere325db92016-07-14 10:27:36 +0100123
124 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
Paul Bakker5e8b77c2016-07-14 11:14:54 +0100125
126 /* Read back with mbedtls_asn1_get_len() to check */
127 ret = mbedtls_asn1_get_len( &p, buf + GUARD_LEN + buf_len, &read_len );
128
129 if( len == 0 )
130 {
131 TEST_ASSERT( ret == 0 );
132 }
133 else
134 {
135 /* Return will be MBEDTLS_ERR_ASN1_OUT_OF_DATA because the rest of
136 * the buffer is missing
137 */
138 TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_OUT_OF_DATA );
139 }
140 TEST_ASSERT( read_len == (size_t) len );
141 TEST_ASSERT( p == buf + GUARD_LEN + buf_len );
Paul Bakkere325db92016-07-14 10:27:36 +0100142 }
143}
144/* END_CASE */