Support for serialNumber, postalAddress and postalCode in X509 names
diff --git a/library/x509_create.c b/library/x509_create.c index cc7f954..1cb88c7 100644 --- a/library/x509_create.c +++ b/library/x509_create.c
@@ -31,6 +31,10 @@ #include "polarssl/asn1write.h" #include "polarssl/oid.h" +#if defined(_MSC_VER) && !defined strncasecmp +#define strncasecmp _strnicmp +#endif + int x509_string_to_names( asn1_named_data **head, const char *name ) { int ret = 0; @@ -47,20 +51,26 @@ { if( in_tag && *c == '=' ) { - if( memcmp( s, "CN", 2 ) == 0 && c - s == 2 ) + if( c - s == 2 && strncasecmp( s, "CN", 2 ) == 0 ) oid = OID_AT_CN; - else if( memcmp( s, "C", 1 ) == 0 && c - s == 1 ) + else if( c - s == 1 && strncasecmp( s, "C", 1 ) == 0 ) oid = OID_AT_COUNTRY; - else if( memcmp( s, "O", 1 ) == 0 && c - s == 1 ) + else if( c - s == 1 && strncasecmp( s, "O", 1 ) == 0 ) oid = OID_AT_ORGANIZATION; - else if( memcmp( s, "L", 1 ) == 0 && c - s == 1 ) + else if( c - s == 1 && strncasecmp( s, "L", 1 ) == 0 ) oid = OID_AT_LOCALITY; - else if( memcmp( s, "R", 1 ) == 0 && c - s == 1 ) + else if( c - s == 1 && strncasecmp( s, "R", 1 ) == 0 ) oid = OID_PKCS9_EMAIL; - else if( memcmp( s, "OU", 2 ) == 0 && c - s == 2 ) + else if( c - s == 2 && strncasecmp( s, "OU", 2 ) == 0 ) oid = OID_AT_ORG_UNIT; - else if( memcmp( s, "ST", 2 ) == 0 && c - s == 2 ) + else if( c - s == 2 && strncasecmp( s, "ST", 2 ) == 0 ) oid = OID_AT_STATE; + else if( c - s == 12 && strncasecmp( s, "serialNumber", 12 ) == 0 ) + oid = OID_AT_SERIAL_NUMBER; + else if( c - s == 13 && strncasecmp( s, "postalAddress", 13 ) == 0 ) + oid = OID_AT_POSTAL_ADDRESS; + else if( c - s == 10 && strncasecmp( s, "postalCode", 10 ) == 0 ) + oid = OID_AT_POSTAL_CODE; else { ret = POLARSSL_ERR_X509_UNKNOWN_OID;