- Certificate Requests written now have the Email address written in IA5String

This commit is contained in:
Paul Bakker 2012-02-16 10:26:57 +00:00
parent bdb912db69
commit 058881547f
4 changed files with 35 additions and 4 deletions

View File

@ -53,6 +53,8 @@
#define POLARSSL_ERR_ASN1_LENGTH_MISMATCH -0x0066 /**< Actual length differs from expected length. */ #define POLARSSL_ERR_ASN1_LENGTH_MISMATCH -0x0066 /**< Actual length differs from expected length. */
#define POLARSSL_ERR_ASN1_INVALID_DATA -0x0068 /**< Data is invalid. (not used) */ #define POLARSSL_ERR_ASN1_INVALID_DATA -0x0068 /**< Data is invalid. (not used) */
#define POLARSSL_ERR_ASN1_MALLOC_FAILED -0x006A /**< Memory allocation failed */ #define POLARSSL_ERR_ASN1_MALLOC_FAILED -0x006A /**< Memory allocation failed */
#define POLARSSL_ERR_ASN1_BUF_TOO_SMALL -0x006C /**< Buffer too small when writing ASN.1 data structure. */
/* \} name */ /* \} name */
/** /**

View File

@ -29,8 +29,6 @@
#include "asn1.h" #include "asn1.h"
#define POLARSSL_ERR_ASN1_BUF_TOO_SMALL -0x006C /**< Buffer too small when writing ASN.1 data structure. */
#define ASN1_CHK_ADD(g, f) if( ( ret = f ) < 0 ) return( ret ); else g += ret #define ASN1_CHK_ADD(g, f) if( ( ret = f ) < 0 ) return( ret ); else g += ret
int asn1_write_len( unsigned char **p, unsigned char *start, size_t len ); int asn1_write_len( unsigned char **p, unsigned char *start, size_t len );
@ -42,5 +40,7 @@ int asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, ch
int asn1_write_int( unsigned char **p, unsigned char *start, int val ); int asn1_write_int( unsigned char **p, unsigned char *start, int val );
int asn1_write_printable_string( unsigned char **p, unsigned char *start, int asn1_write_printable_string( unsigned char **p, unsigned char *start,
char *text ); char *text );
int asn1_write_ia5_string( unsigned char **p, unsigned char *start,
char *text );
#endif /* POLARSSL_ASN1_WRITE_H */ #endif /* POLARSSL_ASN1_WRITE_H */

View File

@ -215,4 +215,27 @@ int asn1_write_printable_string( unsigned char **p, unsigned char *start,
return( len ); return( len );
} }
int asn1_write_ia5_string( unsigned char **p, unsigned char *start,
char *text )
{
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_len( p, start, len ) );
ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_IA5_STRING ) );
return( len );
}
#endif #endif

View File

@ -116,9 +116,15 @@ int x509_write_name( unsigned char **p, unsigned char *start, char *oid,
size_t oid_len = 0; size_t oid_len = 0;
size_t len = 0; size_t len = 0;
// Write PrintableString // Write PrintableString for all except OID_PKCS9_EMAIL
// //
ASN1_CHK_ADD( string_len, asn1_write_printable_string( p, start, name ) ); if( OID_SIZE( OID_PKCS9_EMAIL ) == strlen( oid ) &&
memcmp( oid, OID_PKCS9_EMAIL, strlen( oid ) ) == 0 )
{
ASN1_CHK_ADD( string_len, asn1_write_ia5_string( p, start, name ) );
}
else
ASN1_CHK_ADD( string_len, asn1_write_printable_string( p, start, name ) );
// Write OID // Write OID
// //