blob: 3befa44d26e37eb85f36fb54215eacb97acfac4a [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 */
Azim Khanf1aaec92017-05-30 14:23:15 +010014void mbedtls_asn1_write_octet_string( uint8_t * str, uint32_t str_len,
15 uint8_t * asn1, uint32_t asn1_len,
16 int buf_len, int result )
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020017{
18 int ret;
19 unsigned char buf[150];
Azim Khan90791702017-05-30 00:57:11 +010020 size_t i;
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020021 unsigned char *p;
22
23 memset( buf, GUARD_VAL, sizeof( buf ) );
24
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020025
26 p = buf + GUARD_LEN + buf_len;
27
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020028 ret = mbedtls_asn1_write_octet_string( &p, buf + GUARD_LEN, str, str_len );
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020029
30 /* Check for buffer overwrite on both sides */
31 for( i = 0; i < GUARD_LEN; i++ )
32 {
33 TEST_ASSERT( buf[i] == GUARD_VAL );
34 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
35 }
36
37 if( result >= 0 )
38 {
Manuel Pégourié-Gonnard36178ff2014-05-29 14:26:03 +020039 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
40
41 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
42 }
43}
44/* END_CASE */
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020045
46/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010047void mbedtls_asn1_write_ia5_string( char * str, uint8_t * asn1,
48 uint32_t asn1_len, int buf_len, int result
49 )
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020050{
51 int ret;
52 unsigned char buf[150];
Azim Khan90791702017-05-30 00:57:11 +010053 size_t str_len;
Azim Khan90791702017-05-30 00:57:11 +010054 size_t i;
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020055 unsigned char *p;
56
57 memset( buf, GUARD_VAL, sizeof( buf ) );
58
59 str_len = strlen( str );
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020060
61 p = buf + GUARD_LEN + buf_len;
62
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020063 ret = mbedtls_asn1_write_ia5_string( &p, buf + GUARD_LEN, str, str_len );
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020064
65 /* Check for buffer overwrite on both sides */
66 for( i = 0; i < GUARD_LEN; i++ )
67 {
68 TEST_ASSERT( buf[i] == GUARD_VAL );
69 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
70 }
71
72 if( result >= 0 )
73 {
Manuel Pégourié-Gonnardc22bb492014-05-29 17:16:45 +020074 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
75
76 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
77 }
78}
79/* END_CASE */
Paul Bakkere325db92016-07-14 10:27:36 +010080
81/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010082void mbedtls_asn1_write_len( int len, uint8_t * asn1, uint32_t asn1_len,
83 int buf_len, int result )
Paul Bakkere325db92016-07-14 10:27:36 +010084{
85 int ret;
86 unsigned char buf[150];
Paul Bakkere325db92016-07-14 10:27:36 +010087 unsigned char *p;
Azim Khan90791702017-05-30 00:57:11 +010088 size_t i;
89 size_t read_len;
Paul Bakkere325db92016-07-14 10:27:36 +010090
91 memset( buf, GUARD_VAL, sizeof( buf ) );
Paul Bakkere325db92016-07-14 10:27:36 +010092
Paul Bakker58bfb832016-07-14 11:02:31 +010093 p = buf + GUARD_LEN + buf_len;
Paul Bakkere325db92016-07-14 10:27:36 +010094
95 ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len );
96
97 TEST_ASSERT( ret == result );
98
99 /* Check for buffer overwrite on both sides */
100 for( i = 0; i < GUARD_LEN; i++ )
101 {
102 TEST_ASSERT( buf[i] == GUARD_VAL );
Paul Bakker58bfb832016-07-14 11:02:31 +0100103 TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
Paul Bakkere325db92016-07-14 10:27:36 +0100104 }
105
106 if( result >= 0 )
107 {
Paul Bakker58bfb832016-07-14 11:02:31 +0100108 TEST_ASSERT( p + asn1_len == buf + GUARD_LEN + buf_len );
Paul Bakkere325db92016-07-14 10:27:36 +0100109
110 TEST_ASSERT( memcmp( p, asn1, asn1_len ) == 0 );
Paul Bakker5e8b77c2016-07-14 11:14:54 +0100111
112 /* Read back with mbedtls_asn1_get_len() to check */
113 ret = mbedtls_asn1_get_len( &p, buf + GUARD_LEN + buf_len, &read_len );
114
115 if( len == 0 )
116 {
117 TEST_ASSERT( ret == 0 );
118 }
119 else
120 {
121 /* Return will be MBEDTLS_ERR_ASN1_OUT_OF_DATA because the rest of
122 * the buffer is missing
123 */
124 TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_OUT_OF_DATA );
125 }
126 TEST_ASSERT( read_len == (size_t) len );
127 TEST_ASSERT( p == buf + GUARD_LEN + buf_len );
Paul Bakkere325db92016-07-14 10:27:36 +0100128 }
129}
130/* END_CASE */