From 9852d00de6083b3d695b883377adc06d11218a87 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Mon, 26 Aug 2013 17:56:37 +0200 Subject: [PATCH] Moved asn1write funtions to use asn1_write_raw_buffer() --- include/polarssl/asn1write.h | 29 +++++++-------- library/asn1write.c | 71 +++++++++++------------------------- 2 files changed, 36 insertions(+), 64 deletions(-) diff --git a/include/polarssl/asn1write.h b/include/polarssl/asn1write.h index 43408e29d..4659b24c1 100644 --- a/include/polarssl/asn1write.h +++ b/include/polarssl/asn1write.h @@ -59,6 +59,20 @@ int asn1_write_len( unsigned char **p, unsigned char *start, size_t len ); */ int asn1_write_tag( unsigned char **p, unsigned char *start, unsigned char tag ); +/** + * \brief Write raw buffer data + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param buf data buffer to write + * \param size length of the data buffer + * + * \return the length written or a negative error code + */ +int asn1_write_raw_buffer( unsigned char **p, unsigned char *start, + const unsigned char *buf, size_t size ); + #if defined(POLARSSL_BIGNUM_C) /** * \brief Write a big number (ASN1_INTEGER) in ASN.1 format @@ -179,21 +193,6 @@ int asn1_write_bitstring( unsigned char **p, unsigned char *start, */ int asn1_write_octet_string( unsigned char **p, unsigned char *start, const unsigned char *buf, size_t size ); - -/** - * \brief Write raw buffer data - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param buf data buffer to write - * \param size length of the data buffer - * - * \return the length written or a negative error code - */ -int asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ); - #ifdef __cplusplus } #endif diff --git a/library/asn1write.c b/library/asn1write.c index 07a3fbb4c..463c730fb 100644 --- a/library/asn1write.c +++ b/library/asn1write.c @@ -72,6 +72,21 @@ int asn1_write_tag( unsigned char **p, unsigned char *start, unsigned char tag ) return( 1 ); } +int asn1_write_raw_buffer( unsigned char **p, unsigned char *start, + const unsigned char *buf, size_t size ) +{ + size_t len = 0; + + if( *p - start < (int) size ) + return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); + + len = size; + (*p) -= len; + memcpy( *p, buf, len ); + + return( len ); +} + #if defined(POLARSSL_BIGNUM_C) int asn1_write_mpi( unsigned char **p, unsigned char *start, mpi *X ) { @@ -125,15 +140,8 @@ int asn1_write_oid( unsigned char **p, unsigned char *start, const char *oid ) int ret; size_t len = 0; - // Write OID - // - len = strlen( oid ); - - if( *p - start < (int) len ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - (*p) -= len; - memcpy( *p, oid, len ); + ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, + (const unsigned char *) oid, strlen( oid ) ) ); ASN1_CHK_ADD( len , asn1_write_len( p, start, len ) ); ASN1_CHK_ADD( len , asn1_write_tag( p, start, ASN1_OID ) ); @@ -201,15 +209,8 @@ int asn1_write_printable_string( unsigned char **p, unsigned char *start, int ret; size_t len = 0; - // Write string - // - len = strlen( text ); - - if( *p - start < (int) len ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - (*p) -= len; - memcpy( *p, text, len ); + ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, + (const unsigned char *) text, strlen( text ) ) ); ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_PRINTABLE_STRING ) ); @@ -223,15 +224,8 @@ int asn1_write_ia5_string( unsigned char **p, unsigned char *start, int ret; size_t len = 0; - // Write string - // - len = strlen( text ); - - if( *p - start < (int) len ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - (*p) -= len; - memcpy( *p, text, len ); + ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, + (const unsigned char *) text, strlen( text ) ) ); ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_IA5_STRING ) ); @@ -272,32 +266,11 @@ int asn1_write_octet_string( unsigned char **p, unsigned char *start, int ret; size_t len = 0; - if( *p - start < (int) size ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len = size; - (*p) -= len; - memcpy( *p, buf, len ); + ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, buf, size ) ); ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_OCTET_STRING ) ); return( len ); } - -int asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) -{ - size_t len = 0; - - if( *p - start < (int) size ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len = size; - (*p) -= len; - memcpy( *p, buf, len ); - - return( len ); -} - #endif