From 9439f93ea44f71539c2bf3c0e08732ff92fdab43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Fri, 21 Nov 2014 09:49:43 +0100 Subject: [PATCH] Use pk_load_file() in X509 Saves a bit of ROM. X509 depends on PK anyway. --- include/polarssl/pk.h | 8 ++++++++ include/polarssl/x509.h | 1 - library/pkparse.c | 6 +++--- library/x509.c | 44 ----------------------------------------- library/x509_crl.c | 2 +- library/x509_crt.c | 2 +- library/x509_csr.c | 2 +- 7 files changed, 14 insertions(+), 51 deletions(-) diff --git a/include/polarssl/pk.h b/include/polarssl/pk.h index 0ff5f1e6c..b29eb74f5 100644 --- a/include/polarssl/pk.h +++ b/include/polarssl/pk.h @@ -638,6 +638,14 @@ int pk_write_pubkey( unsigned char **p, unsigned char *start, const pk_context *key ); #endif /* POLARSSL_PK_WRITE_C */ +/* + * Internal module functions. You probably do not want to use these unless you + * know you do. + */ +#if defined(POLARSSL_FS_IO) +int pk_load_file( const char *path, unsigned char **buf, size_t *n ); +#endif + #ifdef __cplusplus } #endif diff --git a/include/polarssl/x509.h b/include/polarssl/x509.h index 3fe682039..5f7188140 100644 --- a/include/polarssl/x509.h +++ b/include/polarssl/x509.h @@ -307,7 +307,6 @@ int x509_get_serial( unsigned char **p, const unsigned char *end, x509_buf *serial ); int x509_get_ext( unsigned char **p, const unsigned char *end, x509_buf *ext, int tag ); -int x509_load_file( const char *path, unsigned char **buf, size_t *n ); int x509_sig_alg_gets( char *buf, size_t size, const x509_buf *sig_oid, pk_type_t pk_alg, md_type_t md_alg, const void *sig_opts ); diff --git a/library/pkparse.c b/library/pkparse.c index 29217a28a..6cfab8b39 100644 --- a/library/pkparse.c +++ b/library/pkparse.c @@ -71,7 +71,7 @@ static void polarssl_zeroize( void *v, size_t n ) { /* * Load all data from a file into a given buffer. */ -static int load_file( const char *path, unsigned char **buf, size_t *n ) +int pk_load_file( const char *path, unsigned char **buf, size_t *n ) { FILE *f; long size; @@ -120,7 +120,7 @@ int pk_parse_keyfile( pk_context *ctx, size_t n; unsigned char *buf; - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) + if( ( ret = pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); if( pwd == NULL ) @@ -144,7 +144,7 @@ int pk_parse_public_keyfile( pk_context *ctx, const char *path ) size_t n; unsigned char *buf; - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) + if( ( ret = pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); ret = pk_parse_public_key( ctx, buf, n ); diff --git a/library/x509.c b/library/x509.c index 89ba7633d..78cf02dee 100644 --- a/library/x509.c +++ b/library/x509.c @@ -636,50 +636,6 @@ int x509_get_ext( unsigned char **p, const unsigned char *end, return( 0 ); } -#if defined(POLARSSL_FS_IO) -/* - * Load all data from a file into a given buffer. - */ -int x509_load_file( const char *path, unsigned char **buf, size_t *n ) -{ - FILE *f; - long size; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { - fclose( f ); - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - } - fseek( f, 0, SEEK_SET ); - - *n = (size_t) size; - - if( *n + 1 == 0 || - ( *buf = (unsigned char *) polarssl_malloc( *n + 1 ) ) == NULL ) - { - fclose( f ); - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - } - - if( fread( *buf, 1, *n, f ) != *n ) - { - fclose( f ); - polarssl_free( *buf ); - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - } - - fclose( f ); - - (*buf)[*n] = '\0'; - - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - #if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ !defined(EFI32) #include diff --git a/library/x509_crl.c b/library/x509_crl.c index c8101b546..a0bf9f47c 100644 --- a/library/x509_crl.c +++ b/library/x509_crl.c @@ -549,7 +549,7 @@ int x509_crl_parse_file( x509_crl *chain, const char *path ) size_t n; unsigned char *buf; - if( ( ret = x509_load_file( path, &buf, &n ) ) != 0 ) + if( ( ret = pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); ret = x509_crl_parse( chain, buf, n ); diff --git a/library/x509_crt.c b/library/x509_crt.c index 4d20889b8..aba9c696d 100644 --- a/library/x509_crt.c +++ b/library/x509_crt.c @@ -953,7 +953,7 @@ int x509_crt_parse_file( x509_crt *chain, const char *path ) size_t n; unsigned char *buf; - if( ( ret = x509_load_file( path, &buf, &n ) ) != 0 ) + if( ( ret = pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); ret = x509_crt_parse( chain, buf, n ); diff --git a/library/x509_csr.c b/library/x509_csr.c index 0b4f771f9..583112115 100644 --- a/library/x509_csr.c +++ b/library/x509_csr.c @@ -310,7 +310,7 @@ int x509_csr_parse_file( x509_csr *csr, const char *path ) size_t n; unsigned char *buf; - if( ( ret = x509_load_file( path, &buf, &n ) ) != 0 ) + if( ( ret = pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); ret = x509_csr_parse( csr, buf, n );