blob: d1e029abbefae2ba1cfcc12168d968016e4f8856 [file] [log] [blame]
Paul Bakkerc7bb02b2013-09-15 14:54:56 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/pk.h"
3#include "mbedtls/pem.h"
4#include "mbedtls/oid.h"
Paul Bakkerc7bb02b2013-09-15 14:54:56 +02005/* END_HEADER */
6
7/* BEGIN_DEPENDENCIES
Hanno Becker19d858e2018-10-16 13:46:25 +01008 * depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_PK_WRITE_C:MBEDTLS_BIGNUM_C:MBEDTLS_FS_IO
Paul Bakkerc7bb02b2013-09-15 14:54:56 +02009 * END_DEPENDENCIES
10 */
11
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020012/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
Azim Khanf1aaec92017-05-30 14:23:15 +010013void pk_write_pubkey_check( char * key_file )
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020014{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020015 mbedtls_pk_context key;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020016 unsigned char buf[5000];
17 unsigned char check_buf[5000];
18 int ret;
19 FILE *f;
Paul Elliott557b8d62020-11-19 09:46:56 +000020 size_t ilen, pem_len, buf_index;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020021
22 memset( buf, 0, sizeof( buf ) );
23 memset( check_buf, 0, sizeof( check_buf ) );
24
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020025 mbedtls_pk_init( &key );
26 TEST_ASSERT( mbedtls_pk_parse_public_keyfile( &key, key_file ) == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020027
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020028 ret = mbedtls_pk_write_pubkey_pem( &key, buf, sizeof( buf ));
29 TEST_ASSERT( ret == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020030
Paul Elliott557b8d62020-11-19 09:46:56 +000031 pem_len = strlen( (char *) buf );
32
33 // check that the rest of the buffer remains clear
34 for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index )
35 {
36 TEST_ASSERT( buf[buf_index] == 0 );
37 }
38
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020039 f = fopen( key_file, "r" );
40 TEST_ASSERT( f != NULL );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020041 ilen = fread( check_buf, 1, sizeof( check_buf ), f );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020042 fclose( f );
43
Paul Elliott557b8d62020-11-19 09:46:56 +000044 TEST_ASSERT( ilen == pem_len );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020045 TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020046
Paul Bakkerbd51b262014-07-10 15:26:12 +020047exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020048 mbedtls_pk_free( &key );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020049}
50/* END_CASE */
51
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020052/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
Azim Khanf1aaec92017-05-30 14:23:15 +010053void pk_write_key_check( char * key_file )
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020054{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055 mbedtls_pk_context key;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020056 unsigned char buf[5000];
57 unsigned char check_buf[5000];
58 int ret;
59 FILE *f;
Paul Elliott557b8d62020-11-19 09:46:56 +000060 size_t ilen, pem_len, buf_index;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020061
62 memset( buf, 0, sizeof( buf ) );
63 memset( check_buf, 0, sizeof( check_buf ) );
64
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020065 mbedtls_pk_init( &key );
Manuel Pégourié-Gonnard84dea012021-06-15 11:29:26 +020066 TEST_ASSERT( mbedtls_pk_parse_keyfile( &key, key_file, NULL,
67 mbedtls_test_rnd_std_rand, NULL ) == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020068
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020069 ret = mbedtls_pk_write_key_pem( &key, buf, sizeof( buf ));
Manuel Pégourié-Gonnard38db0062015-08-19 10:24:34 +020070 TEST_ASSERT( ret == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020071
Paul Elliott557b8d62020-11-19 09:46:56 +000072 pem_len = strlen( (char *) buf );
73
74 // check that the rest of the buffer remains clear
75 for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index )
76 {
77 TEST_ASSERT( buf[buf_index] == 0 );
78 }
79
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020080 f = fopen( key_file, "r" );
81 TEST_ASSERT( f != NULL );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020082 ilen = fread( check_buf, 1, sizeof( check_buf ), f );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020083 fclose( f );
84
Paul Bakker8a0c0a92014-04-17 16:08:20 +020085 TEST_ASSERT( ilen == strlen( (char *) buf ) );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020086 TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020087
Paul Bakkerbd51b262014-07-10 15:26:12 +020088exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020089 mbedtls_pk_free( &key );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020090}
91/* END_CASE */