blob: 160190f65685828cd6cdba786b7adfc03537f7d6 [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 */
87void mbedtls_asn1_write_len( int len, char *check_str, int result )
88{
89 int ret;
90 unsigned char buf[150];
91 unsigned char asn1[150];
92 unsigned char *p;
93 size_t asn1_len, i;
94
95 memset( buf, GUARD_VAL, sizeof( buf ) );
96 memset( asn1, 0, sizeof( asn1 ) );
97 asn1_len = unhexify( asn1, check_str );
98
99 p = buf + GUARD_LEN + asn1_len;
100
101 ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len );
102
103 TEST_ASSERT( ret == result );
104
105 /* Check for buffer overwrite on both sides */
106 for( i = 0; i < GUARD_LEN; i++ )
107 {
108 TEST_ASSERT( buf[i] == GUARD_VAL );
109 TEST_ASSERT( buf[GUARD_LEN + asn1_len + i] == GUARD_VAL );
110 }
111
112 if( result >= 0 )
113 {
114 TEST_ASSERT( (size_t) ret == asn1_len );
115 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + asn1_len );
116
117 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
118 }
119}
120/* END_CASE */