30 #if defined(POLARSSL_OID_C)
35 #if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C)
44 #define ADD_LEN(s) s, OID_SIZE(s)
50 #define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST ) \
51 static const TYPE_T * oid_ ## NAME ## _from_asn1( const asn1_buf *oid ) \
52 { return (const TYPE_T *) oid_descriptor_from_buf(LIST, sizeof(TYPE_T), oid->p, oid->len ); }
58 #define FN_OID_GET_DESCRIPTOR_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \
59 int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \
61 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \
62 if( data == NULL ) return ( POLARSSL_ERR_OID_NOT_FOUND ); \
63 *ATTR1 = data->descriptor.ATTR1; \
71 #define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \
72 int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \
74 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \
75 if( data == NULL ) return ( POLARSSL_ERR_OID_NOT_FOUND ); \
76 *ATTR1 = data->ATTR1; \
84 #define FN_OID_GET_ATTR2(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1, \
86 int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1, ATTR2_TYPE * ATTR2 ) \
88 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \
89 if( data == NULL ) return ( POLARSSL_ERR_OID_NOT_FOUND ); \
90 *ATTR1 = data->ATTR1; \
91 *ATTR2 = data->ATTR2; \
99 #define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \
100 int FN_NAME( ATTR1_TYPE ATTR1, const char **oid, size_t *olen ) \
102 const TYPE_T *cur = LIST; \
103 while( cur->descriptor.asn1 != NULL ) { \
104 if( cur->ATTR1 == ATTR1 ) { \
105 *oid = cur->descriptor.asn1; \
106 *olen = cur->descriptor.asn1_len; \
111 return( POLARSSL_ERR_OID_NOT_FOUND ); \
118 #define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \
120 int FN_NAME( ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid , \
123 const TYPE_T *cur = LIST; \
124 while( cur->descriptor.asn1 != NULL ) { \
125 if( cur->ATTR1 == ATTR1 && cur->ATTR2 == ATTR2 ) { \
126 *oid = cur->descriptor.asn1; \
127 *olen = cur->descriptor.asn1_len; \
132 return( POLARSSL_ERR_OID_NOT_FOUND ); \
138 static const oid_descriptor_t *oid_descriptor_from_buf(
const void *struct_set,
139 size_t struct_size,
const unsigned char *oid,
size_t len )
141 const unsigned char *p = (
const unsigned char *) struct_set;
144 if( struct_set == NULL || oid == NULL )
148 while( cur->
asn1 != NULL )
151 memcmp( cur->
asn1, oid, len ) == 0 )
168 const char *short_name;
171 static const oid_x520_attr_t oid_x520_attr_type[] =
174 { ADD_LEN(
OID_AT_CN ),
"id-at-commonName",
"Common Name" },
194 { ADD_LEN(
OID_AT_ORG_UNIT ),
"id-at-organizationalUnitName",
"Org Unit" },
202 { NULL, 0, NULL, NULL },
207 FN_OID_TYPED_FROM_ASN1(oid_x520_attr_t, x520_attr, oid_x520_attr_type);
210 #if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C)
219 static const oid_x509_ext_t oid_x509_ext[] =
238 { ADD_LEN(
OID_NS_CERT_TYPE ),
"id-netscape-certtype",
"Netscape Certificate Type" },
242 { NULL, 0, NULL, NULL },
247 FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext);
252 { ADD_LEN(
OID_SERVER_AUTH ),
"id-kp-serverAuth",
"TLS Web Server Authentication" },
253 { ADD_LEN(
OID_CLIENT_AUTH ),
"id-kp-clientAuth",
"TLS Web Client Authentication" },
258 { NULL, 0, NULL, NULL },
265 #if defined(POLARSSL_MD_C)
275 static const oid_sig_alg_t oid_sig_alg[] =
278 { ADD_LEN(
OID_PKCS1_MD2 ),
"md2WithRSAEncryption",
"RSA with MD2" },
282 { ADD_LEN(
OID_PKCS1_MD4 ),
"md4WithRSAEncryption",
"RSA with MD4" },
286 { ADD_LEN(
OID_PKCS1_MD5 ),
"md5WithRSAEncryption",
"RSA with MD5" },
290 { ADD_LEN(
OID_PKCS1_SHA1 ),
"sha-1WithRSAEncryption",
"RSA with SHA1" },
294 { ADD_LEN(
OID_PKCS1_SHA224 ),
"sha224WithRSAEncryption",
"RSA with SHA-224" },
298 { ADD_LEN(
OID_PKCS1_SHA256 ),
"sha256WithRSAEncryption",
"RSA with SHA-256" },
302 { ADD_LEN(
OID_PKCS1_SHA384 ),
"sha384WithRSAEncryption",
"RSA with SHA-384" },
306 { ADD_LEN(
OID_PKCS1_SHA512 ),
"sha512WithRSAEncryption",
"RSA with SHA-512" },
310 { ADD_LEN(
OID_RSA_SHA_OBS ),
"sha-1WithRSAEncryption",
"RSA with SHA1" },
314 { ADD_LEN(
OID_ECDSA_SHA1 ),
"ecdsa-with-SHA1",
"ECDSA with SHA1" },
334 { NULL, 0, NULL, NULL },
339 FN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg);
340 FN_OID_GET_DESCRIPTOR_ATTR1(
oid_get_sig_alg_desc, oid_sig_alg_t, sig_alg,
const char *, description);
353 static const oid_pk_alg_t oid_pk_alg[] =
368 { NULL, 0, NULL, NULL },
373 FN_OID_TYPED_FROM_ASN1(oid_pk_alg_t, pk_alg, oid_pk_alg);
377 #if defined(POLARSSL_ECP_C)
386 static const oid_ecp_grp_t oid_ecp_grp[] =
421 { NULL, 0, NULL, NULL },
426 FN_OID_TYPED_FROM_ASN1(oid_ecp_grp_t, grp_id, oid_ecp_grp);
431 #if defined(POLARSSL_CIPHER_C)
440 static const oid_cipher_alg_t oid_cipher_alg[] =
451 { NULL, 0, NULL, NULL },
456 FN_OID_TYPED_FROM_ASN1(oid_cipher_alg_t, cipher_alg, oid_cipher_alg);
460 #if defined(POLARSSL_MD_C)
469 static const oid_md_alg_t oid_md_alg[] =
508 { NULL, 0, NULL, NULL },
513 FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg);
518 #if defined(POLARSSL_PKCS12_C)
526 } oid_pkcs12_pbe_alg_t;
528 static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] =
539 { NULL, 0, NULL, NULL },
544 FN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg);
548 #if defined _MSC_VER && !defined snprintf
551 #if !defined vsnprintf
552 #define vsnprintf _vsnprintf
562 static int compat_snprintf(
char *str,
size_t size,
const char *format, ...)
567 va_start( ap, format );
569 res = vsnprintf( str, size, format, ap );
575 return( (
int) size + 20 );
580 #define snprintf compat_snprintf
583 #define POLARSSL_ERR_DEBUG_BUF_TOO_SMALL -2
585 #define SAFE_SNPRINTF() \
590 if ( (unsigned int) ret > n ) { \
592 return POLARSSL_ERR_DEBUG_BUF_TOO_SMALL;\
595 n -= (unsigned int) ret; \
596 p += (unsigned int) ret; \
614 ret = snprintf( p, n,
"%d.%d", oid->
p[0] / 40, oid->
p[0] % 40 );
619 for( i = 1; i < oid->
len; i++ )
622 if ( ( ( value << 7 ) >> 7 ) != value )
623 return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL );
626 value += oid->
p[i] & 0x7F;
628 if( !( oid->
p[i] & 0x80 ) )
631 ret = snprintf( p, n,
".%d", value );
637 return( (
int) ( size - n ) );