Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbedtls by
oid.c
00001 /** 00002 * \file oid.c 00003 * 00004 * \brief Object Identifier (OID) database 00005 * 00006 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved 00007 * SPDX-License-Identifier: Apache-2.0 00008 * 00009 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00010 * not use this file except in compliance with the License. 00011 * You may obtain a copy of the License at 00012 * 00013 * http://www.apache.org/licenses/LICENSE-2.0 00014 * 00015 * Unless required by applicable law or agreed to in writing, software 00016 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00017 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00018 * See the License for the specific language governing permissions and 00019 * limitations under the License. 00020 * 00021 * This file is part of mbed TLS (https://tls.mbed.org) 00022 */ 00023 00024 #if !defined(MBEDTLS_CONFIG_FILE) 00025 #include "mbedtls/config.h" 00026 #else 00027 #include MBEDTLS_CONFIG_FILE 00028 #endif 00029 00030 #if defined(MBEDTLS_OID_C) 00031 00032 #include "mbedtls/oid.h" 00033 #include "mbedtls/rsa.h" 00034 00035 #include <stdio.h> 00036 #include <string.h> 00037 00038 #if defined(MBEDTLS_PLATFORM_C) 00039 #include "mbedtls/platform.h" 00040 #else 00041 #define mbedtls_snprintf snprintf 00042 #endif 00043 00044 #if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) 00045 #include "mbedtls/x509.h" 00046 #endif 00047 00048 /* 00049 * Macro to automatically add the size of #define'd OIDs 00050 */ 00051 #define ADD_LEN(s) s, MBEDTLS_OID_SIZE(s) 00052 00053 /* 00054 * Macro to generate an internal function for oid_XXX_from_asn1() (used by 00055 * the other functions) 00056 */ 00057 #define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST ) \ 00058 static const TYPE_T * oid_ ## NAME ## _from_asn1( const mbedtls_asn1_buf *oid ) \ 00059 { \ 00060 const TYPE_T *p = LIST; \ 00061 const mbedtls_oid_descriptor_t *cur = (const mbedtls_oid_descriptor_t *) p; \ 00062 if( p == NULL || oid == NULL ) return( NULL ); \ 00063 while( cur->asn1 != NULL ) { \ 00064 if( cur->asn1_len == oid->len && \ 00065 memcmp( cur->asn1, oid->p, oid->len ) == 0 ) { \ 00066 return( p ); \ 00067 } \ 00068 p++; \ 00069 cur = (const mbedtls_oid_descriptor_t *) p; \ 00070 } \ 00071 return( NULL ); \ 00072 } 00073 00074 /* 00075 * Macro to generate a function for retrieving a single attribute from the 00076 * descriptor of an mbedtls_oid_descriptor_t wrapper. 00077 */ 00078 #define FN_OID_GET_DESCRIPTOR_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ 00079 int FN_NAME( const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \ 00080 { \ 00081 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ 00082 if( data == NULL ) return( MBEDTLS_ERR_OID_NOT_FOUND ); \ 00083 *ATTR1 = data->descriptor.ATTR1; \ 00084 return( 0 ); \ 00085 } 00086 00087 /* 00088 * Macro to generate a function for retrieving a single attribute from an 00089 * mbedtls_oid_descriptor_t wrapper. 00090 */ 00091 #define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ 00092 int FN_NAME( const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \ 00093 { \ 00094 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ 00095 if( data == NULL ) return( MBEDTLS_ERR_OID_NOT_FOUND ); \ 00096 *ATTR1 = data->ATTR1; \ 00097 return( 0 ); \ 00098 } 00099 00100 /* 00101 * Macro to generate a function for retrieving two attributes from an 00102 * mbedtls_oid_descriptor_t wrapper. 00103 */ 00104 #define FN_OID_GET_ATTR2(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1, \ 00105 ATTR2_TYPE, ATTR2) \ 00106 int FN_NAME( const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1, ATTR2_TYPE * ATTR2 ) \ 00107 { \ 00108 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ 00109 if( data == NULL ) return( MBEDTLS_ERR_OID_NOT_FOUND ); \ 00110 *ATTR1 = data->ATTR1; \ 00111 *ATTR2 = data->ATTR2; \ 00112 return( 0 ); \ 00113 } 00114 00115 /* 00116 * Macro to generate a function for retrieving the OID based on a single 00117 * attribute from a mbedtls_oid_descriptor_t wrapper. 00118 */ 00119 #define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \ 00120 int FN_NAME( ATTR1_TYPE ATTR1, const char **oid, size_t *olen ) \ 00121 { \ 00122 const TYPE_T *cur = LIST; \ 00123 while( cur->descriptor.asn1 != NULL ) { \ 00124 if( cur->ATTR1 == ATTR1 ) { \ 00125 *oid = cur->descriptor.asn1; \ 00126 *olen = cur->descriptor.asn1_len; \ 00127 return( 0 ); \ 00128 } \ 00129 cur++; \ 00130 } \ 00131 return( MBEDTLS_ERR_OID_NOT_FOUND ); \ 00132 } 00133 00134 /* 00135 * Macro to generate a function for retrieving the OID based on two 00136 * attributes from a mbedtls_oid_descriptor_t wrapper. 00137 */ 00138 #define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \ 00139 ATTR2_TYPE, ATTR2) \ 00140 int FN_NAME( ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid , \ 00141 size_t *olen ) \ 00142 { \ 00143 const TYPE_T *cur = LIST; \ 00144 while( cur->descriptor.asn1 != NULL ) { \ 00145 if( cur->ATTR1 == ATTR1 && cur->ATTR2 == ATTR2 ) { \ 00146 *oid = cur->descriptor.asn1; \ 00147 *olen = cur->descriptor.asn1_len; \ 00148 return( 0 ); \ 00149 } \ 00150 cur++; \ 00151 } \ 00152 return( MBEDTLS_ERR_OID_NOT_FOUND ); \ 00153 } 00154 00155 #if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) 00156 /* 00157 * For X520 attribute types 00158 */ 00159 typedef struct { 00160 mbedtls_oid_descriptor_t descriptor; 00161 const char *short_name; 00162 } oid_x520_attr_t; 00163 00164 static const oid_x520_attr_t oid_x520_attr_type[] = 00165 { 00166 { 00167 { ADD_LEN( MBEDTLS_OID_AT_CN ), "id-at-commonName", "Common Name" }, 00168 "CN", 00169 }, 00170 { 00171 { ADD_LEN( MBEDTLS_OID_AT_COUNTRY ), "id-at-countryName", "Country" }, 00172 "C", 00173 }, 00174 { 00175 { ADD_LEN( MBEDTLS_OID_AT_LOCALITY ), "id-at-locality", "Locality" }, 00176 "L", 00177 }, 00178 { 00179 { ADD_LEN( MBEDTLS_OID_AT_STATE ), "id-at-state", "State" }, 00180 "ST", 00181 }, 00182 { 00183 { ADD_LEN( MBEDTLS_OID_AT_ORGANIZATION ),"id-at-organizationName", "Organization" }, 00184 "O", 00185 }, 00186 { 00187 { ADD_LEN( MBEDTLS_OID_AT_ORG_UNIT ), "id-at-organizationalUnitName", "Org Unit" }, 00188 "OU", 00189 }, 00190 { 00191 { ADD_LEN( MBEDTLS_OID_PKCS9_EMAIL ), "emailAddress", "E-mail address" }, 00192 "emailAddress", 00193 }, 00194 { 00195 { ADD_LEN( MBEDTLS_OID_AT_SERIAL_NUMBER ),"id-at-serialNumber", "Serial number" }, 00196 "serialNumber", 00197 }, 00198 { 00199 { ADD_LEN( MBEDTLS_OID_AT_POSTAL_ADDRESS ),"id-at-postalAddress", "Postal address" }, 00200 "postalAddress", 00201 }, 00202 { 00203 { ADD_LEN( MBEDTLS_OID_AT_POSTAL_CODE ), "id-at-postalCode", "Postal code" }, 00204 "postalCode", 00205 }, 00206 { 00207 { ADD_LEN( MBEDTLS_OID_AT_SUR_NAME ), "id-at-surName", "Surname" }, 00208 "SN", 00209 }, 00210 { 00211 { ADD_LEN( MBEDTLS_OID_AT_GIVEN_NAME ), "id-at-givenName", "Given name" }, 00212 "GN", 00213 }, 00214 { 00215 { ADD_LEN( MBEDTLS_OID_AT_INITIALS ), "id-at-initials", "Initials" }, 00216 "initials", 00217 }, 00218 { 00219 { ADD_LEN( MBEDTLS_OID_AT_GENERATION_QUALIFIER ), "id-at-generationQualifier", "Generation qualifier" }, 00220 "generationQualifier", 00221 }, 00222 { 00223 { ADD_LEN( MBEDTLS_OID_AT_TITLE ), "id-at-title", "Title" }, 00224 "title", 00225 }, 00226 { 00227 { ADD_LEN( MBEDTLS_OID_AT_DN_QUALIFIER ),"id-at-dnQualifier", "Distinguished Name qualifier" }, 00228 "dnQualifier", 00229 }, 00230 { 00231 { ADD_LEN( MBEDTLS_OID_AT_PSEUDONYM ), "id-at-pseudonym", "Pseudonym" }, 00232 "pseudonym", 00233 }, 00234 { 00235 { ADD_LEN( MBEDTLS_OID_DOMAIN_COMPONENT ), "id-domainComponent", "Domain component" }, 00236 "DC", 00237 }, 00238 { 00239 { ADD_LEN( MBEDTLS_OID_AT_UNIQUE_IDENTIFIER ), "id-at-uniqueIdentifier", "Unique Identifier" }, 00240 "uniqueIdentifier", 00241 }, 00242 { 00243 { NULL, 0, NULL, NULL }, 00244 NULL, 00245 } 00246 }; 00247 00248 FN_OID_TYPED_FROM_ASN1(oid_x520_attr_t, x520_attr, oid_x520_attr_type) 00249 FN_OID_GET_ATTR1(mbedtls_oid_get_attr_short_name, oid_x520_attr_t, x520_attr, const char *, short_name) 00250 00251 /* 00252 * For X509 extensions 00253 */ 00254 typedef struct { 00255 mbedtls_oid_descriptor_t descriptor; 00256 int ext_type; 00257 } oid_x509_ext_t; 00258 00259 static const oid_x509_ext_t oid_x509_ext[] = 00260 { 00261 { 00262 { ADD_LEN( MBEDTLS_OID_BASIC_CONSTRAINTS ), "id-ce-basicConstraints", "Basic Constraints" }, 00263 MBEDTLS_X509_EXT_BASIC_CONSTRAINTS, 00264 }, 00265 { 00266 { ADD_LEN( MBEDTLS_OID_KEY_USAGE ), "id-ce-keyUsage", "Key Usage" }, 00267 MBEDTLS_X509_EXT_KEY_USAGE, 00268 }, 00269 { 00270 { ADD_LEN( MBEDTLS_OID_EXTENDED_KEY_USAGE ), "id-ce-extKeyUsage", "Extended Key Usage" }, 00271 MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE, 00272 }, 00273 { 00274 { ADD_LEN( MBEDTLS_OID_SUBJECT_ALT_NAME ), "id-ce-subjectAltName", "Subject Alt Name" }, 00275 MBEDTLS_X509_EXT_SUBJECT_ALT_NAME, 00276 }, 00277 { 00278 { ADD_LEN( MBEDTLS_OID_NS_CERT_TYPE ), "id-netscape-certtype", "Netscape Certificate Type" }, 00279 MBEDTLS_X509_EXT_NS_CERT_TYPE, 00280 }, 00281 { 00282 { NULL, 0, NULL, NULL }, 00283 0, 00284 }, 00285 }; 00286 00287 FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext) 00288 FN_OID_GET_ATTR1(mbedtls_oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type) 00289 00290 static const mbedtls_oid_descriptor_t oid_ext_key_usage[] = 00291 { 00292 { ADD_LEN( MBEDTLS_OID_SERVER_AUTH ), "id-kp-serverAuth", "TLS Web Server Authentication" }, 00293 { ADD_LEN( MBEDTLS_OID_CLIENT_AUTH ), "id-kp-clientAuth", "TLS Web Client Authentication" }, 00294 { ADD_LEN( MBEDTLS_OID_CODE_SIGNING ), "id-kp-codeSigning", "Code Signing" }, 00295 { ADD_LEN( MBEDTLS_OID_EMAIL_PROTECTION ), "id-kp-emailProtection", "E-mail Protection" }, 00296 { ADD_LEN( MBEDTLS_OID_TIME_STAMPING ), "id-kp-timeStamping", "Time Stamping" }, 00297 { ADD_LEN( MBEDTLS_OID_OCSP_SIGNING ), "id-kp-OCSPSigning", "OCSP Signing" }, 00298 { NULL, 0, NULL, NULL }, 00299 }; 00300 00301 FN_OID_TYPED_FROM_ASN1(mbedtls_oid_descriptor_t, ext_key_usage, oid_ext_key_usage) 00302 FN_OID_GET_ATTR1(mbedtls_oid_get_extended_key_usage, mbedtls_oid_descriptor_t, ext_key_usage, const char *, description) 00303 #endif /* MBEDTLS_X509_USE_C || MBEDTLS_X509_CREATE_C */ 00304 00305 #if defined(MBEDTLS_MD_C) 00306 /* 00307 * For SignatureAlgorithmIdentifier 00308 */ 00309 typedef struct { 00310 mbedtls_oid_descriptor_t descriptor; 00311 mbedtls_md_type_t md_alg; 00312 mbedtls_pk_type_t pk_alg; 00313 } oid_sig_alg_t; 00314 00315 static const oid_sig_alg_t oid_sig_alg[] = 00316 { 00317 #if defined(MBEDTLS_RSA_C) 00318 #if defined(MBEDTLS_MD2_C) 00319 { 00320 { ADD_LEN( MBEDTLS_OID_PKCS1_MD2 ), "md2WithRSAEncryption", "RSA with MD2" }, 00321 MBEDTLS_MD_MD2, MBEDTLS_PK_RSA, 00322 }, 00323 #endif /* MBEDTLS_MD2_C */ 00324 #if defined(MBEDTLS_MD4_C) 00325 { 00326 { ADD_LEN( MBEDTLS_OID_PKCS1_MD4 ), "md4WithRSAEncryption", "RSA with MD4" }, 00327 MBEDTLS_MD_MD4, MBEDTLS_PK_RSA, 00328 }, 00329 #endif /* MBEDTLS_MD4_C */ 00330 #if defined(MBEDTLS_MD5_C) 00331 { 00332 { ADD_LEN( MBEDTLS_OID_PKCS1_MD5 ), "md5WithRSAEncryption", "RSA with MD5" }, 00333 MBEDTLS_MD_MD5, MBEDTLS_PK_RSA, 00334 }, 00335 #endif /* MBEDTLS_MD5_C */ 00336 #if defined(MBEDTLS_SHA1_C) 00337 { 00338 { ADD_LEN( MBEDTLS_OID_PKCS1_SHA1 ), "sha-1WithRSAEncryption", "RSA with SHA1" }, 00339 MBEDTLS_MD_SHA1, MBEDTLS_PK_RSA, 00340 }, 00341 #endif /* MBEDTLS_SHA1_C */ 00342 #if defined(MBEDTLS_SHA256_C) 00343 { 00344 { ADD_LEN( MBEDTLS_OID_PKCS1_SHA224 ), "sha224WithRSAEncryption", "RSA with SHA-224" }, 00345 MBEDTLS_MD_SHA224, MBEDTLS_PK_RSA, 00346 }, 00347 { 00348 { ADD_LEN( MBEDTLS_OID_PKCS1_SHA256 ), "sha256WithRSAEncryption", "RSA with SHA-256" }, 00349 MBEDTLS_MD_SHA256, MBEDTLS_PK_RSA, 00350 }, 00351 #endif /* MBEDTLS_SHA256_C */ 00352 #if defined(MBEDTLS_SHA512_C) 00353 { 00354 { ADD_LEN( MBEDTLS_OID_PKCS1_SHA384 ), "sha384WithRSAEncryption", "RSA with SHA-384" }, 00355 MBEDTLS_MD_SHA384, MBEDTLS_PK_RSA, 00356 }, 00357 { 00358 { ADD_LEN( MBEDTLS_OID_PKCS1_SHA512 ), "sha512WithRSAEncryption", "RSA with SHA-512" }, 00359 MBEDTLS_MD_SHA512, MBEDTLS_PK_RSA, 00360 }, 00361 #endif /* MBEDTLS_SHA512_C */ 00362 #if defined(MBEDTLS_SHA1_C) 00363 { 00364 { ADD_LEN( MBEDTLS_OID_RSA_SHA_OBS ), "sha-1WithRSAEncryption", "RSA with SHA1" }, 00365 MBEDTLS_MD_SHA1, MBEDTLS_PK_RSA, 00366 }, 00367 #endif /* MBEDTLS_SHA1_C */ 00368 #endif /* MBEDTLS_RSA_C */ 00369 #if defined(MBEDTLS_ECDSA_C) 00370 #if defined(MBEDTLS_SHA1_C) 00371 { 00372 { ADD_LEN( MBEDTLS_OID_ECDSA_SHA1 ), "ecdsa-with-SHA1", "ECDSA with SHA1" }, 00373 MBEDTLS_MD_SHA1, MBEDTLS_PK_ECDSA, 00374 }, 00375 #endif /* MBEDTLS_SHA1_C */ 00376 #if defined(MBEDTLS_SHA256_C) 00377 { 00378 { ADD_LEN( MBEDTLS_OID_ECDSA_SHA224 ), "ecdsa-with-SHA224", "ECDSA with SHA224" }, 00379 MBEDTLS_MD_SHA224, MBEDTLS_PK_ECDSA, 00380 }, 00381 { 00382 { ADD_LEN( MBEDTLS_OID_ECDSA_SHA256 ), "ecdsa-with-SHA256", "ECDSA with SHA256" }, 00383 MBEDTLS_MD_SHA256, MBEDTLS_PK_ECDSA, 00384 }, 00385 #endif /* MBEDTLS_SHA256_C */ 00386 #if defined(MBEDTLS_SHA512_C) 00387 { 00388 { ADD_LEN( MBEDTLS_OID_ECDSA_SHA384 ), "ecdsa-with-SHA384", "ECDSA with SHA384" }, 00389 MBEDTLS_MD_SHA384, MBEDTLS_PK_ECDSA, 00390 }, 00391 { 00392 { ADD_LEN( MBEDTLS_OID_ECDSA_SHA512 ), "ecdsa-with-SHA512", "ECDSA with SHA512" }, 00393 MBEDTLS_MD_SHA512, MBEDTLS_PK_ECDSA, 00394 }, 00395 #endif /* MBEDTLS_SHA512_C */ 00396 #endif /* MBEDTLS_ECDSA_C */ 00397 #if defined(MBEDTLS_RSA_C) 00398 { 00399 { ADD_LEN( MBEDTLS_OID_RSASSA_PSS ), "RSASSA-PSS", "RSASSA-PSS" }, 00400 MBEDTLS_MD_NONE, MBEDTLS_PK_RSASSA_PSS, 00401 }, 00402 #endif /* MBEDTLS_RSA_C */ 00403 { 00404 { NULL, 0, NULL, NULL }, 00405 MBEDTLS_MD_NONE, MBEDTLS_PK_NONE, 00406 }, 00407 }; 00408 00409 FN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg) 00410 FN_OID_GET_DESCRIPTOR_ATTR1(mbedtls_oid_get_sig_alg_desc, oid_sig_alg_t, sig_alg, const char *, description) 00411 FN_OID_GET_ATTR2(mbedtls_oid_get_sig_alg, oid_sig_alg_t, sig_alg, mbedtls_md_type_t, md_alg, mbedtls_pk_type_t, pk_alg) 00412 FN_OID_GET_OID_BY_ATTR2(mbedtls_oid_get_oid_by_sig_alg, oid_sig_alg_t, oid_sig_alg, mbedtls_pk_type_t, pk_alg, mbedtls_md_type_t, md_alg) 00413 #endif /* MBEDTLS_MD_C */ 00414 00415 /* 00416 * For PublicKeyInfo (PKCS1, RFC 5480) 00417 */ 00418 typedef struct { 00419 mbedtls_oid_descriptor_t descriptor; 00420 mbedtls_pk_type_t pk_alg; 00421 } oid_pk_alg_t; 00422 00423 static const oid_pk_alg_t oid_pk_alg[] = 00424 { 00425 { 00426 { ADD_LEN( MBEDTLS_OID_PKCS1_RSA ), "rsaEncryption", "RSA" }, 00427 MBEDTLS_PK_RSA, 00428 }, 00429 { 00430 { ADD_LEN( MBEDTLS_OID_EC_ALG_UNRESTRICTED ), "id-ecPublicKey", "Generic EC key" }, 00431 MBEDTLS_PK_ECKEY, 00432 }, 00433 { 00434 { ADD_LEN( MBEDTLS_OID_EC_ALG_ECDH ), "id-ecDH", "EC key for ECDH" }, 00435 MBEDTLS_PK_ECKEY_DH, 00436 }, 00437 { 00438 { NULL, 0, NULL, NULL }, 00439 MBEDTLS_PK_NONE, 00440 }, 00441 }; 00442 00443 FN_OID_TYPED_FROM_ASN1(oid_pk_alg_t, pk_alg, oid_pk_alg) 00444 FN_OID_GET_ATTR1(mbedtls_oid_get_pk_alg, oid_pk_alg_t, pk_alg, mbedtls_pk_type_t, pk_alg) 00445 FN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_pk_alg, oid_pk_alg_t, oid_pk_alg, mbedtls_pk_type_t, pk_alg) 00446 00447 #if defined(MBEDTLS_ECP_C) 00448 /* 00449 * For namedCurve (RFC 5480) 00450 */ 00451 typedef struct { 00452 mbedtls_oid_descriptor_t descriptor; 00453 mbedtls_ecp_group_id grp_id; 00454 } oid_ecp_grp_t; 00455 00456 static const oid_ecp_grp_t oid_ecp_grp[] = 00457 { 00458 #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) 00459 { 00460 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP192R1 ), "secp192r1", "secp192r1" }, 00461 MBEDTLS_ECP_DP_SECP192R1 , 00462 }, 00463 #endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */ 00464 #if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) 00465 { 00466 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP224R1 ), "secp224r1", "secp224r1" }, 00467 MBEDTLS_ECP_DP_SECP224R1 , 00468 }, 00469 #endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ 00470 #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) 00471 { 00472 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP256R1 ), "secp256r1", "secp256r1" }, 00473 MBEDTLS_ECP_DP_SECP256R1 , 00474 }, 00475 #endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ 00476 #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) 00477 { 00478 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP384R1 ), "secp384r1", "secp384r1" }, 00479 MBEDTLS_ECP_DP_SECP384R1 , 00480 }, 00481 #endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ 00482 #if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) 00483 { 00484 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP521R1 ), "secp521r1", "secp521r1" }, 00485 MBEDTLS_ECP_DP_SECP521R1 , 00486 }, 00487 #endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */ 00488 #if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) 00489 { 00490 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP192K1 ), "secp192k1", "secp192k1" }, 00491 MBEDTLS_ECP_DP_SECP192K1 , 00492 }, 00493 #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ 00494 #if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) 00495 { 00496 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP224K1 ), "secp224k1", "secp224k1" }, 00497 MBEDTLS_ECP_DP_SECP224K1 , 00498 }, 00499 #endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */ 00500 #if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) 00501 { 00502 { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP256K1 ), "secp256k1", "secp256k1" }, 00503 MBEDTLS_ECP_DP_SECP256K1 , 00504 }, 00505 #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ 00506 #if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) 00507 { 00508 { ADD_LEN( MBEDTLS_OID_EC_GRP_BP256R1 ), "brainpoolP256r1","brainpool256r1" }, 00509 MBEDTLS_ECP_DP_BP256R1 , 00510 }, 00511 #endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ 00512 #if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) 00513 { 00514 { ADD_LEN( MBEDTLS_OID_EC_GRP_BP384R1 ), "brainpoolP384r1","brainpool384r1" }, 00515 MBEDTLS_ECP_DP_BP384R1 , 00516 }, 00517 #endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ 00518 #if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) 00519 { 00520 { ADD_LEN( MBEDTLS_OID_EC_GRP_BP512R1 ), "brainpoolP512r1","brainpool512r1" }, 00521 MBEDTLS_ECP_DP_BP512R1 , 00522 }, 00523 #endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ 00524 { 00525 { NULL, 0, NULL, NULL }, 00526 MBEDTLS_ECP_DP_NONE, 00527 }, 00528 }; 00529 00530 FN_OID_TYPED_FROM_ASN1(oid_ecp_grp_t, grp_id, oid_ecp_grp) 00531 FN_OID_GET_ATTR1(mbedtls_oid_get_ec_grp, oid_ecp_grp_t, grp_id, mbedtls_ecp_group_id, grp_id) 00532 FN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_ec_grp, oid_ecp_grp_t, oid_ecp_grp, mbedtls_ecp_group_id, grp_id) 00533 #endif /* MBEDTLS_ECP_C */ 00534 00535 #if defined(MBEDTLS_CIPHER_C) 00536 /* 00537 * For PKCS#5 PBES2 encryption algorithm 00538 */ 00539 typedef struct { 00540 mbedtls_oid_descriptor_t descriptor; 00541 mbedtls_cipher_type_t cipher_alg; 00542 } oid_cipher_alg_t; 00543 00544 static const oid_cipher_alg_t oid_cipher_alg[] = 00545 { 00546 { 00547 { ADD_LEN( MBEDTLS_OID_DES_CBC ), "desCBC", "DES-CBC" }, 00548 MBEDTLS_CIPHER_DES_CBC, 00549 }, 00550 { 00551 { ADD_LEN( MBEDTLS_OID_DES_EDE3_CBC ), "des-ede3-cbc", "DES-EDE3-CBC" }, 00552 MBEDTLS_CIPHER_DES_EDE3_CBC, 00553 }, 00554 { 00555 { NULL, 0, NULL, NULL }, 00556 MBEDTLS_CIPHER_NONE, 00557 }, 00558 }; 00559 00560 FN_OID_TYPED_FROM_ASN1(oid_cipher_alg_t, cipher_alg, oid_cipher_alg) 00561 FN_OID_GET_ATTR1(mbedtls_oid_get_cipher_alg, oid_cipher_alg_t, cipher_alg, mbedtls_cipher_type_t, cipher_alg) 00562 #endif /* MBEDTLS_CIPHER_C */ 00563 00564 #if defined(MBEDTLS_MD_C) 00565 /* 00566 * For digestAlgorithm 00567 */ 00568 typedef struct { 00569 mbedtls_oid_descriptor_t descriptor; 00570 mbedtls_md_type_t md_alg; 00571 } oid_md_alg_t; 00572 00573 static const oid_md_alg_t oid_md_alg[] = 00574 { 00575 #if defined(MBEDTLS_MD2_C) 00576 { 00577 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_MD2 ), "id-md2", "MD2" }, 00578 MBEDTLS_MD_MD2, 00579 }, 00580 #endif /* MBEDTLS_MD2_C */ 00581 #if defined(MBEDTLS_MD4_C) 00582 { 00583 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_MD4 ), "id-md4", "MD4" }, 00584 MBEDTLS_MD_MD4, 00585 }, 00586 #endif /* MBEDTLS_MD4_C */ 00587 #if defined(MBEDTLS_MD5_C) 00588 { 00589 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_MD5 ), "id-md5", "MD5" }, 00590 MBEDTLS_MD_MD5, 00591 }, 00592 #endif /* MBEDTLS_MD5_C */ 00593 #if defined(MBEDTLS_SHA1_C) 00594 { 00595 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_SHA1 ), "id-sha1", "SHA-1" }, 00596 MBEDTLS_MD_SHA1, 00597 }, 00598 #endif /* MBEDTLS_SHA1_C */ 00599 #if defined(MBEDTLS_SHA256_C) 00600 { 00601 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_SHA224 ), "id-sha224", "SHA-224" }, 00602 MBEDTLS_MD_SHA224, 00603 }, 00604 { 00605 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_SHA256 ), "id-sha256", "SHA-256" }, 00606 MBEDTLS_MD_SHA256, 00607 }, 00608 #endif /* MBEDTLS_SHA256_C */ 00609 #if defined(MBEDTLS_SHA512_C) 00610 { 00611 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_SHA384 ), "id-sha384", "SHA-384" }, 00612 MBEDTLS_MD_SHA384, 00613 }, 00614 { 00615 { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_SHA512 ), "id-sha512", "SHA-512" }, 00616 MBEDTLS_MD_SHA512, 00617 }, 00618 #endif /* MBEDTLS_SHA512_C */ 00619 { 00620 { NULL, 0, NULL, NULL }, 00621 MBEDTLS_MD_NONE, 00622 }, 00623 }; 00624 00625 FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg) 00626 FN_OID_GET_ATTR1(mbedtls_oid_get_md_alg, oid_md_alg_t, md_alg, mbedtls_md_type_t, md_alg) 00627 FN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_md, oid_md_alg_t, oid_md_alg, mbedtls_md_type_t, md_alg) 00628 #endif /* MBEDTLS_MD_C */ 00629 00630 #if defined(MBEDTLS_PKCS12_C) 00631 /* 00632 * For PKCS#12 PBEs 00633 */ 00634 typedef struct { 00635 mbedtls_oid_descriptor_t descriptor; 00636 mbedtls_md_type_t md_alg; 00637 mbedtls_cipher_type_t cipher_alg; 00638 } oid_pkcs12_pbe_alg_t; 00639 00640 static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = 00641 { 00642 { 00643 { ADD_LEN( MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC ), "pbeWithSHAAnd3-KeyTripleDES-CBC", "PBE with SHA1 and 3-Key 3DES" }, 00644 MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE3_CBC, 00645 }, 00646 { 00647 { ADD_LEN( MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC ), "pbeWithSHAAnd2-KeyTripleDES-CBC", "PBE with SHA1 and 2-Key 3DES" }, 00648 MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE_CBC, 00649 }, 00650 { 00651 { NULL, 0, NULL, NULL }, 00652 MBEDTLS_MD_NONE, MBEDTLS_CIPHER_NONE, 00653 }, 00654 }; 00655 00656 FN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg) 00657 FN_OID_GET_ATTR2(mbedtls_oid_get_pkcs12_pbe_alg, oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, mbedtls_md_type_t, md_alg, mbedtls_cipher_type_t, cipher_alg) 00658 #endif /* MBEDTLS_PKCS12_C */ 00659 00660 #define OID_SAFE_SNPRINTF \ 00661 do { \ 00662 if( ret < 0 || (size_t) ret >= n ) \ 00663 return( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); \ 00664 \ 00665 n -= (size_t) ret; \ 00666 p += (size_t) ret; \ 00667 } while( 0 ) 00668 00669 /* Return the x.y.z.... style numeric string for the given OID */ 00670 int mbedtls_oid_get_numeric_string( char *buf, size_t size, 00671 const mbedtls_asn1_buf *oid ) 00672 { 00673 int ret; 00674 size_t i, n; 00675 unsigned int value; 00676 char *p; 00677 00678 p = buf; 00679 n = size; 00680 00681 /* First byte contains first two dots */ 00682 if( oid->len > 0 ) 00683 { 00684 ret = mbedtls_snprintf( p, n, "%d.%d", oid->p[0] / 40, oid->p[0] % 40 ); 00685 OID_SAFE_SNPRINTF; 00686 } 00687 00688 value = 0; 00689 for( i = 1; i < oid->len; i++ ) 00690 { 00691 /* Prevent overflow in value. */ 00692 if( ( ( value << 7 ) >> 7 ) != value ) 00693 return( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); 00694 00695 value <<= 7; 00696 value += oid->p[i] & 0x7F; 00697 00698 if( !( oid->p[i] & 0x80 ) ) 00699 { 00700 /* Last byte */ 00701 ret = mbedtls_snprintf( p, n, ".%d", value ); 00702 OID_SAFE_SNPRINTF; 00703 value = 0; 00704 } 00705 } 00706 00707 return( (int) ( size - n ) ); 00708 } 00709 00710 #endif /* MBEDTLS_OID_C */
Generated on Tue Jul 12 2022 17:25:42 by
