blob: 1c98bd143d0f08df20c559a6206e827eeb2e9342 [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
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02008 * depends_on: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 */
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020013void pk_write_pubkey_check( char *key_file )
14{
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 Bakker8a0c0a92014-04-17 16:08:20 +020020 size_t ilen;
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
31 f = fopen( key_file, "r" );
32 TEST_ASSERT( f != NULL );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020033 ilen = fread( check_buf, 1, sizeof( check_buf ), f );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020034 fclose( f );
35
Paul Bakker8a0c0a92014-04-17 16:08:20 +020036 TEST_ASSERT( ilen == strlen( (char *) buf ) );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020037 TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020038
Paul Bakkerbd51b262014-07-10 15:26:12 +020039exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020040 mbedtls_pk_free( &key );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020041}
42/* END_CASE */
43
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020044/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020045void pk_write_key_check( char *key_file )
46{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047 mbedtls_pk_context key;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020048 unsigned char buf[5000];
49 unsigned char check_buf[5000];
50 int ret;
51 FILE *f;
Paul Bakker8a0c0a92014-04-17 16:08:20 +020052 size_t ilen;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020053
54 memset( buf, 0, sizeof( buf ) );
55 memset( check_buf, 0, sizeof( check_buf ) );
56
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020057 mbedtls_pk_init( &key );
58 TEST_ASSERT( mbedtls_pk_parse_keyfile( &key, key_file, NULL ) == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020059
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020060 ret = mbedtls_pk_write_key_pem( &key, buf, sizeof( buf ));
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020061 TEST_ASSERT( ret >= 0 );
62
63 f = fopen( key_file, "r" );
64 TEST_ASSERT( f != NULL );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020065 ilen = fread( check_buf, 1, sizeof( check_buf ), f );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020066 fclose( f );
67
Paul Bakker8a0c0a92014-04-17 16:08:20 +020068 TEST_ASSERT( ilen == strlen( (char *) buf ) );
Manuel Pégourié-Gonnard04b7eec2015-08-18 19:49:40 +020069 TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020070
Paul Bakkerbd51b262014-07-10 15:26:12 +020071exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020072 mbedtls_pk_free( &key );
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020073}
74/* END_CASE */