1a8e1175bSopenharmony_ci/** 2a8e1175bSopenharmony_ci * \file oid.c 3a8e1175bSopenharmony_ci * 4a8e1175bSopenharmony_ci * \brief Object Identifier (OID) database 5a8e1175bSopenharmony_ci * 6a8e1175bSopenharmony_ci * Copyright The Mbed TLS Contributors 7a8e1175bSopenharmony_ci * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 8a8e1175bSopenharmony_ci */ 9a8e1175bSopenharmony_ci 10a8e1175bSopenharmony_ci#include "common.h" 11a8e1175bSopenharmony_ci 12a8e1175bSopenharmony_ci#if defined(MBEDTLS_OID_C) 13a8e1175bSopenharmony_ci 14a8e1175bSopenharmony_ci#include "mbedtls/oid.h" 15a8e1175bSopenharmony_ci#include "mbedtls/rsa.h" 16a8e1175bSopenharmony_ci#include "mbedtls/error.h" 17a8e1175bSopenharmony_ci#include "mbedtls/pk.h" 18a8e1175bSopenharmony_ci 19a8e1175bSopenharmony_ci#include <stdio.h> 20a8e1175bSopenharmony_ci#include <string.h> 21a8e1175bSopenharmony_ci 22a8e1175bSopenharmony_ci#include "mbedtls/platform.h" 23a8e1175bSopenharmony_ci 24a8e1175bSopenharmony_ci/* 25a8e1175bSopenharmony_ci * Macro to automatically add the size of #define'd OIDs 26a8e1175bSopenharmony_ci */ 27a8e1175bSopenharmony_ci#define ADD_LEN(s) s, MBEDTLS_OID_SIZE(s) 28a8e1175bSopenharmony_ci 29a8e1175bSopenharmony_ci/* 30a8e1175bSopenharmony_ci * Macro to generate mbedtls_oid_descriptor_t 31a8e1175bSopenharmony_ci */ 32a8e1175bSopenharmony_ci#if !defined(MBEDTLS_X509_REMOVE_INFO) 33a8e1175bSopenharmony_ci#define OID_DESCRIPTOR(s, name, description) { ADD_LEN(s), name, description } 34a8e1175bSopenharmony_ci#define NULL_OID_DESCRIPTOR { NULL, 0, NULL, NULL } 35a8e1175bSopenharmony_ci#else 36a8e1175bSopenharmony_ci#define OID_DESCRIPTOR(s, name, description) { ADD_LEN(s) } 37a8e1175bSopenharmony_ci#define NULL_OID_DESCRIPTOR { NULL, 0 } 38a8e1175bSopenharmony_ci#endif 39a8e1175bSopenharmony_ci 40a8e1175bSopenharmony_ci/* 41a8e1175bSopenharmony_ci * Macro to generate an internal function for oid_XXX_from_asn1() (used by 42a8e1175bSopenharmony_ci * the other functions) 43a8e1175bSopenharmony_ci */ 44a8e1175bSopenharmony_ci#define FN_OID_TYPED_FROM_ASN1(TYPE_T, NAME, LIST) \ 45a8e1175bSopenharmony_ci static const TYPE_T *oid_ ## NAME ## _from_asn1( \ 46a8e1175bSopenharmony_ci const mbedtls_asn1_buf *oid) \ 47a8e1175bSopenharmony_ci { \ 48a8e1175bSopenharmony_ci const TYPE_T *p = (LIST); \ 49a8e1175bSopenharmony_ci const mbedtls_oid_descriptor_t *cur = \ 50a8e1175bSopenharmony_ci (const mbedtls_oid_descriptor_t *) p; \ 51a8e1175bSopenharmony_ci if (p == NULL || oid == NULL) return NULL; \ 52a8e1175bSopenharmony_ci while (cur->asn1 != NULL) { \ 53a8e1175bSopenharmony_ci if (cur->asn1_len == oid->len && \ 54a8e1175bSopenharmony_ci memcmp(cur->asn1, oid->p, oid->len) == 0) { \ 55a8e1175bSopenharmony_ci return p; \ 56a8e1175bSopenharmony_ci } \ 57a8e1175bSopenharmony_ci p++; \ 58a8e1175bSopenharmony_ci cur = (const mbedtls_oid_descriptor_t *) p; \ 59a8e1175bSopenharmony_ci } \ 60a8e1175bSopenharmony_ci return NULL; \ 61a8e1175bSopenharmony_ci } 62a8e1175bSopenharmony_ci 63a8e1175bSopenharmony_ci#if !defined(MBEDTLS_X509_REMOVE_INFO) 64a8e1175bSopenharmony_ci/* 65a8e1175bSopenharmony_ci * Macro to generate a function for retrieving a single attribute from the 66a8e1175bSopenharmony_ci * descriptor of an mbedtls_oid_descriptor_t wrapper. 67a8e1175bSopenharmony_ci */ 68a8e1175bSopenharmony_ci#define FN_OID_GET_DESCRIPTOR_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ 69a8e1175bSopenharmony_ci int FN_NAME(const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1) \ 70a8e1175bSopenharmony_ci { \ 71a8e1175bSopenharmony_ci const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1(oid); \ 72a8e1175bSopenharmony_ci if (data == NULL) return MBEDTLS_ERR_OID_NOT_FOUND; \ 73a8e1175bSopenharmony_ci *ATTR1 = data->descriptor.ATTR1; \ 74a8e1175bSopenharmony_ci return 0; \ 75a8e1175bSopenharmony_ci } 76a8e1175bSopenharmony_ci#endif /* MBEDTLS_X509_REMOVE_INFO */ 77a8e1175bSopenharmony_ci 78a8e1175bSopenharmony_ci/* 79a8e1175bSopenharmony_ci * Macro to generate a function for retrieving a single attribute from an 80a8e1175bSopenharmony_ci * mbedtls_oid_descriptor_t wrapper. 81a8e1175bSopenharmony_ci */ 82a8e1175bSopenharmony_ci#define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ 83a8e1175bSopenharmony_ci int FN_NAME(const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1) \ 84a8e1175bSopenharmony_ci { \ 85a8e1175bSopenharmony_ci const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1(oid); \ 86a8e1175bSopenharmony_ci if (data == NULL) return MBEDTLS_ERR_OID_NOT_FOUND; \ 87a8e1175bSopenharmony_ci *ATTR1 = data->ATTR1; \ 88a8e1175bSopenharmony_ci return 0; \ 89a8e1175bSopenharmony_ci } 90a8e1175bSopenharmony_ci 91a8e1175bSopenharmony_ci/* 92a8e1175bSopenharmony_ci * Macro to generate a function for retrieving two attributes from an 93a8e1175bSopenharmony_ci * mbedtls_oid_descriptor_t wrapper. 94a8e1175bSopenharmony_ci */ 95a8e1175bSopenharmony_ci#define FN_OID_GET_ATTR2(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1, \ 96a8e1175bSopenharmony_ci ATTR2_TYPE, ATTR2) \ 97a8e1175bSopenharmony_ci int FN_NAME(const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1, \ 98a8e1175bSopenharmony_ci ATTR2_TYPE * ATTR2) \ 99a8e1175bSopenharmony_ci { \ 100a8e1175bSopenharmony_ci const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1(oid); \ 101a8e1175bSopenharmony_ci if (data == NULL) return MBEDTLS_ERR_OID_NOT_FOUND; \ 102a8e1175bSopenharmony_ci *(ATTR1) = data->ATTR1; \ 103a8e1175bSopenharmony_ci *(ATTR2) = data->ATTR2; \ 104a8e1175bSopenharmony_ci return 0; \ 105a8e1175bSopenharmony_ci } 106a8e1175bSopenharmony_ci 107a8e1175bSopenharmony_ci/* 108a8e1175bSopenharmony_ci * Macro to generate a function for retrieving the OID based on a single 109a8e1175bSopenharmony_ci * attribute from a mbedtls_oid_descriptor_t wrapper. 110a8e1175bSopenharmony_ci */ 111a8e1175bSopenharmony_ci#define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \ 112a8e1175bSopenharmony_ci int FN_NAME(ATTR1_TYPE ATTR1, const char **oid, size_t *olen) \ 113a8e1175bSopenharmony_ci { \ 114a8e1175bSopenharmony_ci const TYPE_T *cur = (LIST); \ 115a8e1175bSopenharmony_ci while (cur->descriptor.asn1 != NULL) { \ 116a8e1175bSopenharmony_ci if (cur->ATTR1 == (ATTR1)) { \ 117a8e1175bSopenharmony_ci *oid = cur->descriptor.asn1; \ 118a8e1175bSopenharmony_ci *olen = cur->descriptor.asn1_len; \ 119a8e1175bSopenharmony_ci return 0; \ 120a8e1175bSopenharmony_ci } \ 121a8e1175bSopenharmony_ci cur++; \ 122a8e1175bSopenharmony_ci } \ 123a8e1175bSopenharmony_ci return MBEDTLS_ERR_OID_NOT_FOUND; \ 124a8e1175bSopenharmony_ci } 125a8e1175bSopenharmony_ci 126a8e1175bSopenharmony_ci/* 127a8e1175bSopenharmony_ci * Macro to generate a function for retrieving the OID based on two 128a8e1175bSopenharmony_ci * attributes from a mbedtls_oid_descriptor_t wrapper. 129a8e1175bSopenharmony_ci */ 130a8e1175bSopenharmony_ci#define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \ 131a8e1175bSopenharmony_ci ATTR2_TYPE, ATTR2) \ 132a8e1175bSopenharmony_ci int FN_NAME(ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid, \ 133a8e1175bSopenharmony_ci size_t *olen) \ 134a8e1175bSopenharmony_ci { \ 135a8e1175bSopenharmony_ci const TYPE_T *cur = (LIST); \ 136a8e1175bSopenharmony_ci while (cur->descriptor.asn1 != NULL) { \ 137a8e1175bSopenharmony_ci if (cur->ATTR1 == (ATTR1) && cur->ATTR2 == (ATTR2)) { \ 138a8e1175bSopenharmony_ci *oid = cur->descriptor.asn1; \ 139a8e1175bSopenharmony_ci *olen = cur->descriptor.asn1_len; \ 140a8e1175bSopenharmony_ci return 0; \ 141a8e1175bSopenharmony_ci } \ 142a8e1175bSopenharmony_ci cur++; \ 143a8e1175bSopenharmony_ci } \ 144a8e1175bSopenharmony_ci return MBEDTLS_ERR_OID_NOT_FOUND; \ 145a8e1175bSopenharmony_ci } 146a8e1175bSopenharmony_ci 147a8e1175bSopenharmony_ci/* 148a8e1175bSopenharmony_ci * For X520 attribute types 149a8e1175bSopenharmony_ci */ 150a8e1175bSopenharmony_citypedef struct { 151a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 152a8e1175bSopenharmony_ci const char *short_name; 153a8e1175bSopenharmony_ci} oid_x520_attr_t; 154a8e1175bSopenharmony_ci 155a8e1175bSopenharmony_cistatic const oid_x520_attr_t oid_x520_attr_type[] = 156a8e1175bSopenharmony_ci{ 157a8e1175bSopenharmony_ci { 158a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_CN, "id-at-commonName", "Common Name"), 159a8e1175bSopenharmony_ci "CN", 160a8e1175bSopenharmony_ci }, 161a8e1175bSopenharmony_ci { 162a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_COUNTRY, "id-at-countryName", "Country"), 163a8e1175bSopenharmony_ci "C", 164a8e1175bSopenharmony_ci }, 165a8e1175bSopenharmony_ci { 166a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_LOCALITY, "id-at-locality", "Locality"), 167a8e1175bSopenharmony_ci "L", 168a8e1175bSopenharmony_ci }, 169a8e1175bSopenharmony_ci { 170a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_STATE, "id-at-state", "State"), 171a8e1175bSopenharmony_ci "ST", 172a8e1175bSopenharmony_ci }, 173a8e1175bSopenharmony_ci { 174a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_ORGANIZATION, "id-at-organizationName", 175a8e1175bSopenharmony_ci "Organization"), 176a8e1175bSopenharmony_ci "O", 177a8e1175bSopenharmony_ci }, 178a8e1175bSopenharmony_ci { 179a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_ORG_UNIT, "id-at-organizationalUnitName", "Org Unit"), 180a8e1175bSopenharmony_ci "OU", 181a8e1175bSopenharmony_ci }, 182a8e1175bSopenharmony_ci { 183a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS9_EMAIL, 184a8e1175bSopenharmony_ci "emailAddress", 185a8e1175bSopenharmony_ci "E-mail address"), 186a8e1175bSopenharmony_ci "emailAddress", 187a8e1175bSopenharmony_ci }, 188a8e1175bSopenharmony_ci { 189a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_SERIAL_NUMBER, 190a8e1175bSopenharmony_ci "id-at-serialNumber", 191a8e1175bSopenharmony_ci "Serial number"), 192a8e1175bSopenharmony_ci "serialNumber", 193a8e1175bSopenharmony_ci }, 194a8e1175bSopenharmony_ci { 195a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_POSTAL_ADDRESS, 196a8e1175bSopenharmony_ci "id-at-postalAddress", 197a8e1175bSopenharmony_ci "Postal address"), 198a8e1175bSopenharmony_ci "postalAddress", 199a8e1175bSopenharmony_ci }, 200a8e1175bSopenharmony_ci { 201a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_POSTAL_CODE, "id-at-postalCode", "Postal code"), 202a8e1175bSopenharmony_ci "postalCode", 203a8e1175bSopenharmony_ci }, 204a8e1175bSopenharmony_ci { 205a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_SUR_NAME, "id-at-surName", "Surname"), 206a8e1175bSopenharmony_ci "SN", 207a8e1175bSopenharmony_ci }, 208a8e1175bSopenharmony_ci { 209a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_GIVEN_NAME, "id-at-givenName", "Given name"), 210a8e1175bSopenharmony_ci "GN", 211a8e1175bSopenharmony_ci }, 212a8e1175bSopenharmony_ci { 213a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_INITIALS, "id-at-initials", "Initials"), 214a8e1175bSopenharmony_ci "initials", 215a8e1175bSopenharmony_ci }, 216a8e1175bSopenharmony_ci { 217a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_GENERATION_QUALIFIER, 218a8e1175bSopenharmony_ci "id-at-generationQualifier", 219a8e1175bSopenharmony_ci "Generation qualifier"), 220a8e1175bSopenharmony_ci "generationQualifier", 221a8e1175bSopenharmony_ci }, 222a8e1175bSopenharmony_ci { 223a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_TITLE, "id-at-title", "Title"), 224a8e1175bSopenharmony_ci "title", 225a8e1175bSopenharmony_ci }, 226a8e1175bSopenharmony_ci { 227a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_DN_QUALIFIER, 228a8e1175bSopenharmony_ci "id-at-dnQualifier", 229a8e1175bSopenharmony_ci "Distinguished Name qualifier"), 230a8e1175bSopenharmony_ci "dnQualifier", 231a8e1175bSopenharmony_ci }, 232a8e1175bSopenharmony_ci { 233a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_PSEUDONYM, "id-at-pseudonym", "Pseudonym"), 234a8e1175bSopenharmony_ci "pseudonym", 235a8e1175bSopenharmony_ci }, 236a8e1175bSopenharmony_ci { 237a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_UID, "id-uid", "User Id"), 238a8e1175bSopenharmony_ci "uid", 239a8e1175bSopenharmony_ci }, 240a8e1175bSopenharmony_ci { 241a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DOMAIN_COMPONENT, 242a8e1175bSopenharmony_ci "id-domainComponent", 243a8e1175bSopenharmony_ci "Domain component"), 244a8e1175bSopenharmony_ci "DC", 245a8e1175bSopenharmony_ci }, 246a8e1175bSopenharmony_ci { 247a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AT_UNIQUE_IDENTIFIER, 248a8e1175bSopenharmony_ci "id-at-uniqueIdentifier", 249a8e1175bSopenharmony_ci "Unique Identifier"), 250a8e1175bSopenharmony_ci "uniqueIdentifier", 251a8e1175bSopenharmony_ci }, 252a8e1175bSopenharmony_ci { 253a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 254a8e1175bSopenharmony_ci NULL, 255a8e1175bSopenharmony_ci } 256a8e1175bSopenharmony_ci}; 257a8e1175bSopenharmony_ci 258a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_x520_attr_t, x520_attr, oid_x520_attr_type) 259a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_attr_short_name, 260a8e1175bSopenharmony_ci oid_x520_attr_t, 261a8e1175bSopenharmony_ci x520_attr, 262a8e1175bSopenharmony_ci const char *, 263a8e1175bSopenharmony_ci short_name) 264a8e1175bSopenharmony_ci 265a8e1175bSopenharmony_ci/* 266a8e1175bSopenharmony_ci * For X509 extensions 267a8e1175bSopenharmony_ci */ 268a8e1175bSopenharmony_citypedef struct { 269a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 270a8e1175bSopenharmony_ci int ext_type; 271a8e1175bSopenharmony_ci} oid_x509_ext_t; 272a8e1175bSopenharmony_ci 273a8e1175bSopenharmony_cistatic const oid_x509_ext_t oid_x509_ext[] = 274a8e1175bSopenharmony_ci{ 275a8e1175bSopenharmony_ci { 276a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_BASIC_CONSTRAINTS, 277a8e1175bSopenharmony_ci "id-ce-basicConstraints", 278a8e1175bSopenharmony_ci "Basic Constraints"), 279a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_BASIC_CONSTRAINTS, 280a8e1175bSopenharmony_ci }, 281a8e1175bSopenharmony_ci { 282a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_KEY_USAGE, "id-ce-keyUsage", "Key Usage"), 283a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_KEY_USAGE, 284a8e1175bSopenharmony_ci }, 285a8e1175bSopenharmony_ci { 286a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EXTENDED_KEY_USAGE, 287a8e1175bSopenharmony_ci "id-ce-extKeyUsage", 288a8e1175bSopenharmony_ci "Extended Key Usage"), 289a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_EXTENDED_KEY_USAGE, 290a8e1175bSopenharmony_ci }, 291a8e1175bSopenharmony_ci { 292a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_SUBJECT_ALT_NAME, 293a8e1175bSopenharmony_ci "id-ce-subjectAltName", 294a8e1175bSopenharmony_ci "Subject Alt Name"), 295a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_SUBJECT_ALT_NAME, 296a8e1175bSopenharmony_ci }, 297a8e1175bSopenharmony_ci { 298a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_NS_CERT_TYPE, 299a8e1175bSopenharmony_ci "id-netscape-certtype", 300a8e1175bSopenharmony_ci "Netscape Certificate Type"), 301a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_NS_CERT_TYPE, 302a8e1175bSopenharmony_ci }, 303a8e1175bSopenharmony_ci { 304a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_CERTIFICATE_POLICIES, 305a8e1175bSopenharmony_ci "id-ce-certificatePolicies", 306a8e1175bSopenharmony_ci "Certificate Policies"), 307a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_CERTIFICATE_POLICIES, 308a8e1175bSopenharmony_ci }, 309a8e1175bSopenharmony_ci { 310a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER, 311a8e1175bSopenharmony_ci "id-ce-subjectKeyIdentifier", 312a8e1175bSopenharmony_ci "Subject Key Identifier"), 313a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_SUBJECT_KEY_IDENTIFIER, 314a8e1175bSopenharmony_ci }, 315a8e1175bSopenharmony_ci { 316a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER, 317a8e1175bSopenharmony_ci "id-ce-authorityKeyIdentifier", 318a8e1175bSopenharmony_ci "Authority Key Identifier"), 319a8e1175bSopenharmony_ci MBEDTLS_OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER, 320a8e1175bSopenharmony_ci }, 321a8e1175bSopenharmony_ci { 322a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 323a8e1175bSopenharmony_ci 0, 324a8e1175bSopenharmony_ci }, 325a8e1175bSopenharmony_ci}; 326a8e1175bSopenharmony_ci 327a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext) 328a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type) 329a8e1175bSopenharmony_ci 330a8e1175bSopenharmony_ci#if !defined(MBEDTLS_X509_REMOVE_INFO) 331a8e1175bSopenharmony_cistatic const mbedtls_oid_descriptor_t oid_ext_key_usage[] = 332a8e1175bSopenharmony_ci{ 333a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_SERVER_AUTH, 334a8e1175bSopenharmony_ci "id-kp-serverAuth", 335a8e1175bSopenharmony_ci "TLS Web Server Authentication"), 336a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_CLIENT_AUTH, 337a8e1175bSopenharmony_ci "id-kp-clientAuth", 338a8e1175bSopenharmony_ci "TLS Web Client Authentication"), 339a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_CODE_SIGNING, "id-kp-codeSigning", "Code Signing"), 340a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EMAIL_PROTECTION, "id-kp-emailProtection", "E-mail Protection"), 341a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_TIME_STAMPING, "id-kp-timeStamping", "Time Stamping"), 342a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_OCSP_SIGNING, "id-kp-OCSPSigning", "OCSP Signing"), 343a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_WISUN_FAN, 344a8e1175bSopenharmony_ci "id-kp-wisun-fan-device", 345a8e1175bSopenharmony_ci "Wi-SUN Alliance Field Area Network (FAN)"), 346a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 347a8e1175bSopenharmony_ci}; 348a8e1175bSopenharmony_ci 349a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(mbedtls_oid_descriptor_t, ext_key_usage, oid_ext_key_usage) 350a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_extended_key_usage, 351a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t, 352a8e1175bSopenharmony_ci ext_key_usage, 353a8e1175bSopenharmony_ci const char *, 354a8e1175bSopenharmony_ci description) 355a8e1175bSopenharmony_ci 356a8e1175bSopenharmony_cistatic const mbedtls_oid_descriptor_t oid_certificate_policies[] = 357a8e1175bSopenharmony_ci{ 358a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_ANY_POLICY, "anyPolicy", "Any Policy"), 359a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 360a8e1175bSopenharmony_ci}; 361a8e1175bSopenharmony_ci 362a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(mbedtls_oid_descriptor_t, certificate_policies, oid_certificate_policies) 363a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_certificate_policies, 364a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t, 365a8e1175bSopenharmony_ci certificate_policies, 366a8e1175bSopenharmony_ci const char *, 367a8e1175bSopenharmony_ci description) 368a8e1175bSopenharmony_ci#endif /* MBEDTLS_X509_REMOVE_INFO */ 369a8e1175bSopenharmony_ci 370a8e1175bSopenharmony_ci/* 371a8e1175bSopenharmony_ci * For SignatureAlgorithmIdentifier 372a8e1175bSopenharmony_ci */ 373a8e1175bSopenharmony_citypedef struct { 374a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 375a8e1175bSopenharmony_ci mbedtls_md_type_t md_alg; 376a8e1175bSopenharmony_ci mbedtls_pk_type_t pk_alg; 377a8e1175bSopenharmony_ci} oid_sig_alg_t; 378a8e1175bSopenharmony_ci 379a8e1175bSopenharmony_cistatic const oid_sig_alg_t oid_sig_alg[] = 380a8e1175bSopenharmony_ci{ 381a8e1175bSopenharmony_ci#if defined(MBEDTLS_RSA_C) 382a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_MD5) 383a8e1175bSopenharmony_ci { 384a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS1_MD5, "md5WithRSAEncryption", "RSA with MD5"), 385a8e1175bSopenharmony_ci MBEDTLS_MD_MD5, MBEDTLS_PK_RSA, 386a8e1175bSopenharmony_ci }, 387a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_MD5 */ 388a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA1) 389a8e1175bSopenharmony_ci { 390a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS1_SHA1, "sha-1WithRSAEncryption", "RSA with SHA1"), 391a8e1175bSopenharmony_ci MBEDTLS_MD_SHA1, MBEDTLS_PK_RSA, 392a8e1175bSopenharmony_ci }, 393a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA1 */ 394a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA224) 395a8e1175bSopenharmony_ci { 396a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS1_SHA224, "sha224WithRSAEncryption", 397a8e1175bSopenharmony_ci "RSA with SHA-224"), 398a8e1175bSopenharmony_ci MBEDTLS_MD_SHA224, MBEDTLS_PK_RSA, 399a8e1175bSopenharmony_ci }, 400a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA224 */ 401a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA256) 402a8e1175bSopenharmony_ci { 403a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS1_SHA256, "sha256WithRSAEncryption", 404a8e1175bSopenharmony_ci "RSA with SHA-256"), 405a8e1175bSopenharmony_ci MBEDTLS_MD_SHA256, MBEDTLS_PK_RSA, 406a8e1175bSopenharmony_ci }, 407a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA256 */ 408a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA384) 409a8e1175bSopenharmony_ci { 410a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS1_SHA384, "sha384WithRSAEncryption", 411a8e1175bSopenharmony_ci "RSA with SHA-384"), 412a8e1175bSopenharmony_ci MBEDTLS_MD_SHA384, MBEDTLS_PK_RSA, 413a8e1175bSopenharmony_ci }, 414a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA384 */ 415a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA512) 416a8e1175bSopenharmony_ci { 417a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS1_SHA512, "sha512WithRSAEncryption", 418a8e1175bSopenharmony_ci "RSA with SHA-512"), 419a8e1175bSopenharmony_ci MBEDTLS_MD_SHA512, MBEDTLS_PK_RSA, 420a8e1175bSopenharmony_ci }, 421a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA512 */ 422a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA1) 423a8e1175bSopenharmony_ci { 424a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_RSA_SHA_OBS, "sha-1WithRSAEncryption", "RSA with SHA1"), 425a8e1175bSopenharmony_ci MBEDTLS_MD_SHA1, MBEDTLS_PK_RSA, 426a8e1175bSopenharmony_ci }, 427a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA1 */ 428a8e1175bSopenharmony_ci#endif /* MBEDTLS_RSA_C */ 429a8e1175bSopenharmony_ci#if defined(MBEDTLS_PK_CAN_ECDSA_SOME) 430a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA1) 431a8e1175bSopenharmony_ci { 432a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_ECDSA_SHA1, "ecdsa-with-SHA1", "ECDSA with SHA1"), 433a8e1175bSopenharmony_ci MBEDTLS_MD_SHA1, MBEDTLS_PK_ECDSA, 434a8e1175bSopenharmony_ci }, 435a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA1 */ 436a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA224) 437a8e1175bSopenharmony_ci { 438a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_ECDSA_SHA224, "ecdsa-with-SHA224", "ECDSA with SHA224"), 439a8e1175bSopenharmony_ci MBEDTLS_MD_SHA224, MBEDTLS_PK_ECDSA, 440a8e1175bSopenharmony_ci }, 441a8e1175bSopenharmony_ci#endif 442a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA256) 443a8e1175bSopenharmony_ci { 444a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_ECDSA_SHA256, "ecdsa-with-SHA256", "ECDSA with SHA256"), 445a8e1175bSopenharmony_ci MBEDTLS_MD_SHA256, MBEDTLS_PK_ECDSA, 446a8e1175bSopenharmony_ci }, 447a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA256 */ 448a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA384) 449a8e1175bSopenharmony_ci { 450a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_ECDSA_SHA384, "ecdsa-with-SHA384", "ECDSA with SHA384"), 451a8e1175bSopenharmony_ci MBEDTLS_MD_SHA384, MBEDTLS_PK_ECDSA, 452a8e1175bSopenharmony_ci }, 453a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA384 */ 454a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA512) 455a8e1175bSopenharmony_ci { 456a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_ECDSA_SHA512, "ecdsa-with-SHA512", "ECDSA with SHA512"), 457a8e1175bSopenharmony_ci MBEDTLS_MD_SHA512, MBEDTLS_PK_ECDSA, 458a8e1175bSopenharmony_ci }, 459a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA512 */ 460a8e1175bSopenharmony_ci#endif /* MBEDTLS_PK_CAN_ECDSA_SOME */ 461a8e1175bSopenharmony_ci#if defined(MBEDTLS_RSA_C) 462a8e1175bSopenharmony_ci { 463a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_RSASSA_PSS, "RSASSA-PSS", "RSASSA-PSS"), 464a8e1175bSopenharmony_ci MBEDTLS_MD_NONE, MBEDTLS_PK_RSASSA_PSS, 465a8e1175bSopenharmony_ci }, 466a8e1175bSopenharmony_ci#endif /* MBEDTLS_RSA_C */ 467a8e1175bSopenharmony_ci { 468a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 469a8e1175bSopenharmony_ci MBEDTLS_MD_NONE, MBEDTLS_PK_NONE, 470a8e1175bSopenharmony_ci }, 471a8e1175bSopenharmony_ci}; 472a8e1175bSopenharmony_ci 473a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg) 474a8e1175bSopenharmony_ci 475a8e1175bSopenharmony_ci#if !defined(MBEDTLS_X509_REMOVE_INFO) 476a8e1175bSopenharmony_ciFN_OID_GET_DESCRIPTOR_ATTR1(mbedtls_oid_get_sig_alg_desc, 477a8e1175bSopenharmony_ci oid_sig_alg_t, 478a8e1175bSopenharmony_ci sig_alg, 479a8e1175bSopenharmony_ci const char *, 480a8e1175bSopenharmony_ci description) 481a8e1175bSopenharmony_ci#endif 482a8e1175bSopenharmony_ci 483a8e1175bSopenharmony_ciFN_OID_GET_ATTR2(mbedtls_oid_get_sig_alg, 484a8e1175bSopenharmony_ci oid_sig_alg_t, 485a8e1175bSopenharmony_ci sig_alg, 486a8e1175bSopenharmony_ci mbedtls_md_type_t, 487a8e1175bSopenharmony_ci md_alg, 488a8e1175bSopenharmony_ci mbedtls_pk_type_t, 489a8e1175bSopenharmony_ci pk_alg) 490a8e1175bSopenharmony_ciFN_OID_GET_OID_BY_ATTR2(mbedtls_oid_get_oid_by_sig_alg, 491a8e1175bSopenharmony_ci oid_sig_alg_t, 492a8e1175bSopenharmony_ci oid_sig_alg, 493a8e1175bSopenharmony_ci mbedtls_pk_type_t, 494a8e1175bSopenharmony_ci pk_alg, 495a8e1175bSopenharmony_ci mbedtls_md_type_t, 496a8e1175bSopenharmony_ci md_alg) 497a8e1175bSopenharmony_ci 498a8e1175bSopenharmony_ci/* 499a8e1175bSopenharmony_ci * For PublicKeyInfo (PKCS1, RFC 5480) 500a8e1175bSopenharmony_ci */ 501a8e1175bSopenharmony_citypedef struct { 502a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 503a8e1175bSopenharmony_ci mbedtls_pk_type_t pk_alg; 504a8e1175bSopenharmony_ci} oid_pk_alg_t; 505a8e1175bSopenharmony_ci 506a8e1175bSopenharmony_cistatic const oid_pk_alg_t oid_pk_alg[] = 507a8e1175bSopenharmony_ci{ 508a8e1175bSopenharmony_ci { 509a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS1_RSA, "rsaEncryption", "RSA"), 510a8e1175bSopenharmony_ci MBEDTLS_PK_RSA, 511a8e1175bSopenharmony_ci }, 512a8e1175bSopenharmony_ci { 513a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_ALG_UNRESTRICTED, "id-ecPublicKey", "Generic EC key"), 514a8e1175bSopenharmony_ci MBEDTLS_PK_ECKEY, 515a8e1175bSopenharmony_ci }, 516a8e1175bSopenharmony_ci { 517a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_ALG_ECDH, "id-ecDH", "EC key for ECDH"), 518a8e1175bSopenharmony_ci MBEDTLS_PK_ECKEY_DH, 519a8e1175bSopenharmony_ci }, 520a8e1175bSopenharmony_ci { 521a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 522a8e1175bSopenharmony_ci MBEDTLS_PK_NONE, 523a8e1175bSopenharmony_ci }, 524a8e1175bSopenharmony_ci}; 525a8e1175bSopenharmony_ci 526a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_pk_alg_t, pk_alg, oid_pk_alg) 527a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_pk_alg, oid_pk_alg_t, pk_alg, mbedtls_pk_type_t, pk_alg) 528a8e1175bSopenharmony_ciFN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_pk_alg, 529a8e1175bSopenharmony_ci oid_pk_alg_t, 530a8e1175bSopenharmony_ci oid_pk_alg, 531a8e1175bSopenharmony_ci mbedtls_pk_type_t, 532a8e1175bSopenharmony_ci pk_alg) 533a8e1175bSopenharmony_ci 534a8e1175bSopenharmony_ci#if defined(MBEDTLS_PK_HAVE_ECC_KEYS) 535a8e1175bSopenharmony_ci/* 536a8e1175bSopenharmony_ci * For elliptic curves that use namedCurve inside ECParams (RFC 5480) 537a8e1175bSopenharmony_ci */ 538a8e1175bSopenharmony_citypedef struct { 539a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 540a8e1175bSopenharmony_ci mbedtls_ecp_group_id grp_id; 541a8e1175bSopenharmony_ci} oid_ecp_grp_t; 542a8e1175bSopenharmony_ci 543a8e1175bSopenharmony_cistatic const oid_ecp_grp_t oid_ecp_grp[] = 544a8e1175bSopenharmony_ci{ 545a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP192R1) 546a8e1175bSopenharmony_ci { 547a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP192R1, "secp192r1", "secp192r1"), 548a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP192R1, 549a8e1175bSopenharmony_ci }, 550a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP192R1 */ 551a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP224R1) 552a8e1175bSopenharmony_ci { 553a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP224R1, "secp224r1", "secp224r1"), 554a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP224R1, 555a8e1175bSopenharmony_ci }, 556a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP224R1 */ 557a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP256R1) 558a8e1175bSopenharmony_ci { 559a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP256R1, "secp256r1", "secp256r1"), 560a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP256R1, 561a8e1175bSopenharmony_ci }, 562a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP256R1 */ 563a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP384R1) 564a8e1175bSopenharmony_ci { 565a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP384R1, "secp384r1", "secp384r1"), 566a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP384R1, 567a8e1175bSopenharmony_ci }, 568a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP384R1 */ 569a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP521R1) 570a8e1175bSopenharmony_ci { 571a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP521R1, "secp521r1", "secp521r1"), 572a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP521R1, 573a8e1175bSopenharmony_ci }, 574a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP521R1 */ 575a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP192K1) 576a8e1175bSopenharmony_ci { 577a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP192K1, "secp192k1", "secp192k1"), 578a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP192K1, 579a8e1175bSopenharmony_ci }, 580a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP192K1 */ 581a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP224K1) 582a8e1175bSopenharmony_ci { 583a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP224K1, "secp224k1", "secp224k1"), 584a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP224K1, 585a8e1175bSopenharmony_ci }, 586a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP224K1 */ 587a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_SECP256K1) 588a8e1175bSopenharmony_ci { 589a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_SECP256K1, "secp256k1", "secp256k1"), 590a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_SECP256K1, 591a8e1175bSopenharmony_ci }, 592a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_SECP256K1 */ 593a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_BP256R1) 594a8e1175bSopenharmony_ci { 595a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_BP256R1, "brainpoolP256r1", "brainpool256r1"), 596a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_BP256R1, 597a8e1175bSopenharmony_ci }, 598a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_BP256R1 */ 599a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_BP384R1) 600a8e1175bSopenharmony_ci { 601a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_BP384R1, "brainpoolP384r1", "brainpool384r1"), 602a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_BP384R1, 603a8e1175bSopenharmony_ci }, 604a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_BP384R1 */ 605a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_BP512R1) 606a8e1175bSopenharmony_ci { 607a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_EC_GRP_BP512R1, "brainpoolP512r1", "brainpool512r1"), 608a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_BP512R1, 609a8e1175bSopenharmony_ci }, 610a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_BP512R1 */ 611a8e1175bSopenharmony_ci { 612a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 613a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_NONE, 614a8e1175bSopenharmony_ci }, 615a8e1175bSopenharmony_ci}; 616a8e1175bSopenharmony_ci 617a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_ecp_grp_t, grp_id, oid_ecp_grp) 618a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_ec_grp, oid_ecp_grp_t, grp_id, mbedtls_ecp_group_id, grp_id) 619a8e1175bSopenharmony_ciFN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_ec_grp, 620a8e1175bSopenharmony_ci oid_ecp_grp_t, 621a8e1175bSopenharmony_ci oid_ecp_grp, 622a8e1175bSopenharmony_ci mbedtls_ecp_group_id, 623a8e1175bSopenharmony_ci grp_id) 624a8e1175bSopenharmony_ci 625a8e1175bSopenharmony_ci/* 626a8e1175bSopenharmony_ci * For Elliptic Curve algorithms that are directly 627a8e1175bSopenharmony_ci * encoded in the AlgorithmIdentifier (RFC 8410) 628a8e1175bSopenharmony_ci */ 629a8e1175bSopenharmony_citypedef struct { 630a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 631a8e1175bSopenharmony_ci mbedtls_ecp_group_id grp_id; 632a8e1175bSopenharmony_ci} oid_ecp_grp_algid_t; 633a8e1175bSopenharmony_ci 634a8e1175bSopenharmony_cistatic const oid_ecp_grp_algid_t oid_ecp_grp_algid[] = 635a8e1175bSopenharmony_ci{ 636a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_CURVE25519) 637a8e1175bSopenharmony_ci { 638a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_X25519, "X25519", "X25519"), 639a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_CURVE25519, 640a8e1175bSopenharmony_ci }, 641a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_CURVE25519 */ 642a8e1175bSopenharmony_ci#if defined(MBEDTLS_ECP_HAVE_CURVE448) 643a8e1175bSopenharmony_ci { 644a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_X448, "X448", "X448"), 645a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_CURVE448, 646a8e1175bSopenharmony_ci }, 647a8e1175bSopenharmony_ci#endif /* MBEDTLS_ECP_HAVE_CURVE448 */ 648a8e1175bSopenharmony_ci { 649a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 650a8e1175bSopenharmony_ci MBEDTLS_ECP_DP_NONE, 651a8e1175bSopenharmony_ci }, 652a8e1175bSopenharmony_ci}; 653a8e1175bSopenharmony_ci 654a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_ecp_grp_algid_t, grp_id_algid, oid_ecp_grp_algid) 655a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_ec_grp_algid, 656a8e1175bSopenharmony_ci oid_ecp_grp_algid_t, 657a8e1175bSopenharmony_ci grp_id_algid, 658a8e1175bSopenharmony_ci mbedtls_ecp_group_id, 659a8e1175bSopenharmony_ci grp_id) 660a8e1175bSopenharmony_ciFN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_ec_grp_algid, 661a8e1175bSopenharmony_ci oid_ecp_grp_algid_t, 662a8e1175bSopenharmony_ci oid_ecp_grp_algid, 663a8e1175bSopenharmony_ci mbedtls_ecp_group_id, 664a8e1175bSopenharmony_ci grp_id) 665a8e1175bSopenharmony_ci#endif /* MBEDTLS_PK_HAVE_ECC_KEYS */ 666a8e1175bSopenharmony_ci 667a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_C) 668a8e1175bSopenharmony_ci/* 669a8e1175bSopenharmony_ci * For PKCS#5 PBES2 encryption algorithm 670a8e1175bSopenharmony_ci */ 671a8e1175bSopenharmony_citypedef struct { 672a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 673a8e1175bSopenharmony_ci mbedtls_cipher_type_t cipher_alg; 674a8e1175bSopenharmony_ci} oid_cipher_alg_t; 675a8e1175bSopenharmony_ci 676a8e1175bSopenharmony_cistatic const oid_cipher_alg_t oid_cipher_alg[] = 677a8e1175bSopenharmony_ci{ 678a8e1175bSopenharmony_ci { 679a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DES_CBC, "desCBC", "DES-CBC"), 680a8e1175bSopenharmony_ci MBEDTLS_CIPHER_DES_CBC, 681a8e1175bSopenharmony_ci }, 682a8e1175bSopenharmony_ci { 683a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DES_EDE3_CBC, "des-ede3-cbc", "DES-EDE3-CBC"), 684a8e1175bSopenharmony_ci MBEDTLS_CIPHER_DES_EDE3_CBC, 685a8e1175bSopenharmony_ci }, 686a8e1175bSopenharmony_ci { 687a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AES_128_CBC, "aes128-cbc", "AES128-CBC"), 688a8e1175bSopenharmony_ci MBEDTLS_CIPHER_AES_128_CBC, 689a8e1175bSopenharmony_ci }, 690a8e1175bSopenharmony_ci { 691a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AES_192_CBC, "aes192-cbc", "AES192-CBC"), 692a8e1175bSopenharmony_ci MBEDTLS_CIPHER_AES_192_CBC, 693a8e1175bSopenharmony_ci }, 694a8e1175bSopenharmony_ci { 695a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_AES_256_CBC, "aes256-cbc", "AES256-CBC"), 696a8e1175bSopenharmony_ci MBEDTLS_CIPHER_AES_256_CBC, 697a8e1175bSopenharmony_ci }, 698a8e1175bSopenharmony_ci { 699a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 700a8e1175bSopenharmony_ci MBEDTLS_CIPHER_NONE, 701a8e1175bSopenharmony_ci }, 702a8e1175bSopenharmony_ci}; 703a8e1175bSopenharmony_ci 704a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_cipher_alg_t, cipher_alg, oid_cipher_alg) 705a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_cipher_alg, 706a8e1175bSopenharmony_ci oid_cipher_alg_t, 707a8e1175bSopenharmony_ci cipher_alg, 708a8e1175bSopenharmony_ci mbedtls_cipher_type_t, 709a8e1175bSopenharmony_ci cipher_alg) 710a8e1175bSopenharmony_ci#endif /* MBEDTLS_CIPHER_C */ 711a8e1175bSopenharmony_ci 712a8e1175bSopenharmony_ci/* 713a8e1175bSopenharmony_ci * For digestAlgorithm 714a8e1175bSopenharmony_ci */ 715a8e1175bSopenharmony_citypedef struct { 716a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 717a8e1175bSopenharmony_ci mbedtls_md_type_t md_alg; 718a8e1175bSopenharmony_ci} oid_md_alg_t; 719a8e1175bSopenharmony_ci 720a8e1175bSopenharmony_cistatic const oid_md_alg_t oid_md_alg[] = 721a8e1175bSopenharmony_ci{ 722a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_MD5) 723a8e1175bSopenharmony_ci { 724a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_MD5, "id-md5", "MD5"), 725a8e1175bSopenharmony_ci MBEDTLS_MD_MD5, 726a8e1175bSopenharmony_ci }, 727a8e1175bSopenharmony_ci#endif 728a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA1) 729a8e1175bSopenharmony_ci { 730a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA1, "id-sha1", "SHA-1"), 731a8e1175bSopenharmony_ci MBEDTLS_MD_SHA1, 732a8e1175bSopenharmony_ci }, 733a8e1175bSopenharmony_ci#endif 734a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA224) 735a8e1175bSopenharmony_ci { 736a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA224, "id-sha224", "SHA-224"), 737a8e1175bSopenharmony_ci MBEDTLS_MD_SHA224, 738a8e1175bSopenharmony_ci }, 739a8e1175bSopenharmony_ci#endif 740a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA256) 741a8e1175bSopenharmony_ci { 742a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA256, "id-sha256", "SHA-256"), 743a8e1175bSopenharmony_ci MBEDTLS_MD_SHA256, 744a8e1175bSopenharmony_ci }, 745a8e1175bSopenharmony_ci#endif 746a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA384) 747a8e1175bSopenharmony_ci { 748a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA384, "id-sha384", "SHA-384"), 749a8e1175bSopenharmony_ci MBEDTLS_MD_SHA384, 750a8e1175bSopenharmony_ci }, 751a8e1175bSopenharmony_ci#endif 752a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA512) 753a8e1175bSopenharmony_ci { 754a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA512, "id-sha512", "SHA-512"), 755a8e1175bSopenharmony_ci MBEDTLS_MD_SHA512, 756a8e1175bSopenharmony_ci }, 757a8e1175bSopenharmony_ci#endif 758a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_RIPEMD160) 759a8e1175bSopenharmony_ci { 760a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_RIPEMD160, "id-ripemd160", "RIPEMD-160"), 761a8e1175bSopenharmony_ci MBEDTLS_MD_RIPEMD160, 762a8e1175bSopenharmony_ci }, 763a8e1175bSopenharmony_ci#endif 764a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_224) 765a8e1175bSopenharmony_ci { 766a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA3_224, "id-sha3-224", "SHA-3-224"), 767a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_224, 768a8e1175bSopenharmony_ci }, 769a8e1175bSopenharmony_ci#endif 770a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_256) 771a8e1175bSopenharmony_ci { 772a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA3_256, "id-sha3-256", "SHA-3-256"), 773a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_256, 774a8e1175bSopenharmony_ci }, 775a8e1175bSopenharmony_ci#endif 776a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_384) 777a8e1175bSopenharmony_ci { 778a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA3_384, "id-sha3-384", "SHA-3-384"), 779a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_384, 780a8e1175bSopenharmony_ci }, 781a8e1175bSopenharmony_ci#endif 782a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_512) 783a8e1175bSopenharmony_ci { 784a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_DIGEST_ALG_SHA3_512, "id-sha3-512", "SHA-3-512"), 785a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_512, 786a8e1175bSopenharmony_ci }, 787a8e1175bSopenharmony_ci#endif 788a8e1175bSopenharmony_ci { 789a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 790a8e1175bSopenharmony_ci MBEDTLS_MD_NONE, 791a8e1175bSopenharmony_ci }, 792a8e1175bSopenharmony_ci}; 793a8e1175bSopenharmony_ci 794a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg) 795a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_md_alg, oid_md_alg_t, md_alg, mbedtls_md_type_t, md_alg) 796a8e1175bSopenharmony_ciFN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_md, 797a8e1175bSopenharmony_ci oid_md_alg_t, 798a8e1175bSopenharmony_ci oid_md_alg, 799a8e1175bSopenharmony_ci mbedtls_md_type_t, 800a8e1175bSopenharmony_ci md_alg) 801a8e1175bSopenharmony_ci 802a8e1175bSopenharmony_ci/* 803a8e1175bSopenharmony_ci * For HMAC digestAlgorithm 804a8e1175bSopenharmony_ci */ 805a8e1175bSopenharmony_citypedef struct { 806a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 807a8e1175bSopenharmony_ci mbedtls_md_type_t md_hmac; 808a8e1175bSopenharmony_ci} oid_md_hmac_t; 809a8e1175bSopenharmony_ci 810a8e1175bSopenharmony_cistatic const oid_md_hmac_t oid_md_hmac[] = 811a8e1175bSopenharmony_ci{ 812a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA1) 813a8e1175bSopenharmony_ci { 814a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA1, "hmacSHA1", "HMAC-SHA-1"), 815a8e1175bSopenharmony_ci MBEDTLS_MD_SHA1, 816a8e1175bSopenharmony_ci }, 817a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA1 */ 818a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA224) 819a8e1175bSopenharmony_ci { 820a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA224, "hmacSHA224", "HMAC-SHA-224"), 821a8e1175bSopenharmony_ci MBEDTLS_MD_SHA224, 822a8e1175bSopenharmony_ci }, 823a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA224 */ 824a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA256) 825a8e1175bSopenharmony_ci { 826a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA256, "hmacSHA256", "HMAC-SHA-256"), 827a8e1175bSopenharmony_ci MBEDTLS_MD_SHA256, 828a8e1175bSopenharmony_ci }, 829a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA256 */ 830a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA384) 831a8e1175bSopenharmony_ci { 832a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA384, "hmacSHA384", "HMAC-SHA-384"), 833a8e1175bSopenharmony_ci MBEDTLS_MD_SHA384, 834a8e1175bSopenharmony_ci }, 835a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA384 */ 836a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA512) 837a8e1175bSopenharmony_ci { 838a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA512, "hmacSHA512", "HMAC-SHA-512"), 839a8e1175bSopenharmony_ci MBEDTLS_MD_SHA512, 840a8e1175bSopenharmony_ci }, 841a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA512 */ 842a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_224) 843a8e1175bSopenharmony_ci { 844a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA3_224, "hmacSHA3-224", "HMAC-SHA3-224"), 845a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_224, 846a8e1175bSopenharmony_ci }, 847a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA3_224 */ 848a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_256) 849a8e1175bSopenharmony_ci { 850a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA3_256, "hmacSHA3-256", "HMAC-SHA3-256"), 851a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_256, 852a8e1175bSopenharmony_ci }, 853a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA3_256 */ 854a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_384) 855a8e1175bSopenharmony_ci { 856a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA3_384, "hmacSHA3-384", "HMAC-SHA3-384"), 857a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_384, 858a8e1175bSopenharmony_ci }, 859a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA3_384 */ 860a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_SHA3_512) 861a8e1175bSopenharmony_ci { 862a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_SHA3_512, "hmacSHA3-512", "HMAC-SHA3-512"), 863a8e1175bSopenharmony_ci MBEDTLS_MD_SHA3_512, 864a8e1175bSopenharmony_ci }, 865a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_SHA3_512 */ 866a8e1175bSopenharmony_ci#if defined(MBEDTLS_MD_CAN_RIPEMD160) 867a8e1175bSopenharmony_ci { 868a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_HMAC_RIPEMD160, "hmacRIPEMD160", "HMAC-RIPEMD160"), 869a8e1175bSopenharmony_ci MBEDTLS_MD_RIPEMD160, 870a8e1175bSopenharmony_ci }, 871a8e1175bSopenharmony_ci#endif /* MBEDTLS_MD_CAN_RIPEMD160 */ 872a8e1175bSopenharmony_ci { 873a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 874a8e1175bSopenharmony_ci MBEDTLS_MD_NONE, 875a8e1175bSopenharmony_ci }, 876a8e1175bSopenharmony_ci}; 877a8e1175bSopenharmony_ci 878a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_md_hmac_t, md_hmac, oid_md_hmac) 879a8e1175bSopenharmony_ciFN_OID_GET_ATTR1(mbedtls_oid_get_md_hmac, oid_md_hmac_t, md_hmac, mbedtls_md_type_t, md_hmac) 880a8e1175bSopenharmony_ci 881a8e1175bSopenharmony_ci#if defined(MBEDTLS_PKCS12_C) && defined(MBEDTLS_CIPHER_C) 882a8e1175bSopenharmony_ci/* 883a8e1175bSopenharmony_ci * For PKCS#12 PBEs 884a8e1175bSopenharmony_ci */ 885a8e1175bSopenharmony_citypedef struct { 886a8e1175bSopenharmony_ci mbedtls_oid_descriptor_t descriptor; 887a8e1175bSopenharmony_ci mbedtls_md_type_t md_alg; 888a8e1175bSopenharmony_ci mbedtls_cipher_type_t cipher_alg; 889a8e1175bSopenharmony_ci} oid_pkcs12_pbe_alg_t; 890a8e1175bSopenharmony_ci 891a8e1175bSopenharmony_cistatic const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = 892a8e1175bSopenharmony_ci{ 893a8e1175bSopenharmony_ci { 894a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC, 895a8e1175bSopenharmony_ci "pbeWithSHAAnd3-KeyTripleDES-CBC", 896a8e1175bSopenharmony_ci "PBE with SHA1 and 3-Key 3DES"), 897a8e1175bSopenharmony_ci MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE3_CBC, 898a8e1175bSopenharmony_ci }, 899a8e1175bSopenharmony_ci { 900a8e1175bSopenharmony_ci OID_DESCRIPTOR(MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC, 901a8e1175bSopenharmony_ci "pbeWithSHAAnd2-KeyTripleDES-CBC", 902a8e1175bSopenharmony_ci "PBE with SHA1 and 2-Key 3DES"), 903a8e1175bSopenharmony_ci MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE_CBC, 904a8e1175bSopenharmony_ci }, 905a8e1175bSopenharmony_ci { 906a8e1175bSopenharmony_ci NULL_OID_DESCRIPTOR, 907a8e1175bSopenharmony_ci MBEDTLS_MD_NONE, MBEDTLS_CIPHER_NONE, 908a8e1175bSopenharmony_ci }, 909a8e1175bSopenharmony_ci}; 910a8e1175bSopenharmony_ci 911a8e1175bSopenharmony_ciFN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg) 912a8e1175bSopenharmony_ciFN_OID_GET_ATTR2(mbedtls_oid_get_pkcs12_pbe_alg, 913a8e1175bSopenharmony_ci oid_pkcs12_pbe_alg_t, 914a8e1175bSopenharmony_ci pkcs12_pbe_alg, 915a8e1175bSopenharmony_ci mbedtls_md_type_t, 916a8e1175bSopenharmony_ci md_alg, 917a8e1175bSopenharmony_ci mbedtls_cipher_type_t, 918a8e1175bSopenharmony_ci cipher_alg) 919a8e1175bSopenharmony_ci#endif /* MBEDTLS_PKCS12_C && MBEDTLS_CIPHER_C */ 920a8e1175bSopenharmony_ci 921a8e1175bSopenharmony_ci/* Return the x.y.z.... style numeric string for the given OID */ 922a8e1175bSopenharmony_ciint mbedtls_oid_get_numeric_string(char *buf, size_t size, 923a8e1175bSopenharmony_ci const mbedtls_asn1_buf *oid) 924a8e1175bSopenharmony_ci{ 925a8e1175bSopenharmony_ci int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; 926a8e1175bSopenharmony_ci char *p = buf; 927a8e1175bSopenharmony_ci size_t n = size; 928a8e1175bSopenharmony_ci unsigned int value = 0; 929a8e1175bSopenharmony_ci 930a8e1175bSopenharmony_ci if (size > INT_MAX) { 931a8e1175bSopenharmony_ci /* Avoid overflow computing return value */ 932a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_INVALID_LENGTH; 933a8e1175bSopenharmony_ci } 934a8e1175bSopenharmony_ci 935a8e1175bSopenharmony_ci if (oid->len <= 0) { 936a8e1175bSopenharmony_ci /* OID must not be empty */ 937a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_OUT_OF_DATA; 938a8e1175bSopenharmony_ci } 939a8e1175bSopenharmony_ci 940a8e1175bSopenharmony_ci for (size_t i = 0; i < oid->len; i++) { 941a8e1175bSopenharmony_ci /* Prevent overflow in value. */ 942a8e1175bSopenharmony_ci if (value > (UINT_MAX >> 7)) { 943a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_INVALID_DATA; 944a8e1175bSopenharmony_ci } 945a8e1175bSopenharmony_ci if ((value == 0) && ((oid->p[i]) == 0x80)) { 946a8e1175bSopenharmony_ci /* Overlong encoding is not allowed */ 947a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_INVALID_DATA; 948a8e1175bSopenharmony_ci } 949a8e1175bSopenharmony_ci 950a8e1175bSopenharmony_ci value <<= 7; 951a8e1175bSopenharmony_ci value |= oid->p[i] & 0x7F; 952a8e1175bSopenharmony_ci 953a8e1175bSopenharmony_ci if (!(oid->p[i] & 0x80)) { 954a8e1175bSopenharmony_ci /* Last byte */ 955a8e1175bSopenharmony_ci if (n == size) { 956a8e1175bSopenharmony_ci int component1; 957a8e1175bSopenharmony_ci unsigned int component2; 958a8e1175bSopenharmony_ci /* First subidentifier contains first two OID components */ 959a8e1175bSopenharmony_ci if (value >= 80) { 960a8e1175bSopenharmony_ci component1 = '2'; 961a8e1175bSopenharmony_ci component2 = value - 80; 962a8e1175bSopenharmony_ci } else if (value >= 40) { 963a8e1175bSopenharmony_ci component1 = '1'; 964a8e1175bSopenharmony_ci component2 = value - 40; 965a8e1175bSopenharmony_ci } else { 966a8e1175bSopenharmony_ci component1 = '0'; 967a8e1175bSopenharmony_ci component2 = value; 968a8e1175bSopenharmony_ci } 969a8e1175bSopenharmony_ci ret = mbedtls_snprintf(p, n, "%c.%u", component1, component2); 970a8e1175bSopenharmony_ci } else { 971a8e1175bSopenharmony_ci ret = mbedtls_snprintf(p, n, ".%u", value); 972a8e1175bSopenharmony_ci } 973a8e1175bSopenharmony_ci if (ret < 2 || (size_t) ret >= n) { 974a8e1175bSopenharmony_ci return MBEDTLS_ERR_OID_BUF_TOO_SMALL; 975a8e1175bSopenharmony_ci } 976a8e1175bSopenharmony_ci n -= (size_t) ret; 977a8e1175bSopenharmony_ci p += ret; 978a8e1175bSopenharmony_ci value = 0; 979a8e1175bSopenharmony_ci } 980a8e1175bSopenharmony_ci } 981a8e1175bSopenharmony_ci 982a8e1175bSopenharmony_ci if (value != 0) { 983a8e1175bSopenharmony_ci /* Unterminated subidentifier */ 984a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_OUT_OF_DATA; 985a8e1175bSopenharmony_ci } 986a8e1175bSopenharmony_ci 987a8e1175bSopenharmony_ci return (int) (size - n); 988a8e1175bSopenharmony_ci} 989a8e1175bSopenharmony_ci 990a8e1175bSopenharmony_cistatic int oid_parse_number(unsigned int *num, const char **p, const char *bound) 991a8e1175bSopenharmony_ci{ 992a8e1175bSopenharmony_ci int ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 993a8e1175bSopenharmony_ci 994a8e1175bSopenharmony_ci *num = 0; 995a8e1175bSopenharmony_ci 996a8e1175bSopenharmony_ci while (*p < bound && **p >= '0' && **p <= '9') { 997a8e1175bSopenharmony_ci ret = 0; 998a8e1175bSopenharmony_ci if (*num > (UINT_MAX / 10)) { 999a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_INVALID_DATA; 1000a8e1175bSopenharmony_ci } 1001a8e1175bSopenharmony_ci *num *= 10; 1002a8e1175bSopenharmony_ci *num += **p - '0'; 1003a8e1175bSopenharmony_ci (*p)++; 1004a8e1175bSopenharmony_ci } 1005a8e1175bSopenharmony_ci return ret; 1006a8e1175bSopenharmony_ci} 1007a8e1175bSopenharmony_ci 1008a8e1175bSopenharmony_cistatic size_t oid_subidentifier_num_bytes(unsigned int value) 1009a8e1175bSopenharmony_ci{ 1010a8e1175bSopenharmony_ci size_t num_bytes = 0; 1011a8e1175bSopenharmony_ci 1012a8e1175bSopenharmony_ci do { 1013a8e1175bSopenharmony_ci value >>= 7; 1014a8e1175bSopenharmony_ci num_bytes++; 1015a8e1175bSopenharmony_ci } while (value != 0); 1016a8e1175bSopenharmony_ci 1017a8e1175bSopenharmony_ci return num_bytes; 1018a8e1175bSopenharmony_ci} 1019a8e1175bSopenharmony_ci 1020a8e1175bSopenharmony_cistatic int oid_subidentifier_encode_into(unsigned char **p, 1021a8e1175bSopenharmony_ci unsigned char *bound, 1022a8e1175bSopenharmony_ci unsigned int value) 1023a8e1175bSopenharmony_ci{ 1024a8e1175bSopenharmony_ci size_t num_bytes = oid_subidentifier_num_bytes(value); 1025a8e1175bSopenharmony_ci 1026a8e1175bSopenharmony_ci if ((size_t) (bound - *p) < num_bytes) { 1027a8e1175bSopenharmony_ci return MBEDTLS_ERR_OID_BUF_TOO_SMALL; 1028a8e1175bSopenharmony_ci } 1029a8e1175bSopenharmony_ci (*p)[num_bytes - 1] = (unsigned char) (value & 0x7f); 1030a8e1175bSopenharmony_ci value >>= 7; 1031a8e1175bSopenharmony_ci 1032a8e1175bSopenharmony_ci for (size_t i = 2; i <= num_bytes; i++) { 1033a8e1175bSopenharmony_ci (*p)[num_bytes - i] = 0x80 | (unsigned char) (value & 0x7f); 1034a8e1175bSopenharmony_ci value >>= 7; 1035a8e1175bSopenharmony_ci } 1036a8e1175bSopenharmony_ci *p += num_bytes; 1037a8e1175bSopenharmony_ci 1038a8e1175bSopenharmony_ci return 0; 1039a8e1175bSopenharmony_ci} 1040a8e1175bSopenharmony_ci 1041a8e1175bSopenharmony_ci/* Return the OID for the given x.y.z.... style numeric string */ 1042a8e1175bSopenharmony_ciint mbedtls_oid_from_numeric_string(mbedtls_asn1_buf *oid, 1043a8e1175bSopenharmony_ci const char *oid_str, size_t size) 1044a8e1175bSopenharmony_ci{ 1045a8e1175bSopenharmony_ci int ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 1046a8e1175bSopenharmony_ci const char *str_ptr = oid_str; 1047a8e1175bSopenharmony_ci const char *str_bound = oid_str + size; 1048a8e1175bSopenharmony_ci unsigned int val = 0; 1049a8e1175bSopenharmony_ci unsigned int component1, component2; 1050a8e1175bSopenharmony_ci size_t encoded_len; 1051a8e1175bSopenharmony_ci unsigned char *resized_mem; 1052a8e1175bSopenharmony_ci 1053a8e1175bSopenharmony_ci /* Count the number of dots to get a worst-case allocation size. */ 1054a8e1175bSopenharmony_ci size_t num_dots = 0; 1055a8e1175bSopenharmony_ci for (size_t i = 0; i < size; i++) { 1056a8e1175bSopenharmony_ci if (oid_str[i] == '.') { 1057a8e1175bSopenharmony_ci num_dots++; 1058a8e1175bSopenharmony_ci } 1059a8e1175bSopenharmony_ci } 1060a8e1175bSopenharmony_ci /* Allocate maximum possible required memory: 1061a8e1175bSopenharmony_ci * There are (num_dots + 1) integer components, but the first 2 share the 1062a8e1175bSopenharmony_ci * same subidentifier, so we only need num_dots subidentifiers maximum. */ 1063a8e1175bSopenharmony_ci if (num_dots == 0 || (num_dots > MBEDTLS_OID_MAX_COMPONENTS - 1)) { 1064a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_INVALID_DATA; 1065a8e1175bSopenharmony_ci } 1066a8e1175bSopenharmony_ci /* Each byte can store 7 bits, calculate number of bytes for a 1067a8e1175bSopenharmony_ci * subidentifier: 1068a8e1175bSopenharmony_ci * 1069a8e1175bSopenharmony_ci * bytes = ceil(subidentifer_size * 8 / 7) 1070a8e1175bSopenharmony_ci */ 1071a8e1175bSopenharmony_ci size_t bytes_per_subidentifier = (((sizeof(unsigned int) * 8) - 1) / 7) 1072a8e1175bSopenharmony_ci + 1; 1073a8e1175bSopenharmony_ci size_t max_possible_bytes = num_dots * bytes_per_subidentifier; 1074a8e1175bSopenharmony_ci oid->p = mbedtls_calloc(max_possible_bytes, 1); 1075a8e1175bSopenharmony_ci if (oid->p == NULL) { 1076a8e1175bSopenharmony_ci return MBEDTLS_ERR_ASN1_ALLOC_FAILED; 1077a8e1175bSopenharmony_ci } 1078a8e1175bSopenharmony_ci unsigned char *out_ptr = oid->p; 1079a8e1175bSopenharmony_ci unsigned char *out_bound = oid->p + max_possible_bytes; 1080a8e1175bSopenharmony_ci 1081a8e1175bSopenharmony_ci ret = oid_parse_number(&component1, &str_ptr, str_bound); 1082a8e1175bSopenharmony_ci if (ret != 0) { 1083a8e1175bSopenharmony_ci goto error; 1084a8e1175bSopenharmony_ci } 1085a8e1175bSopenharmony_ci if (component1 > 2) { 1086a8e1175bSopenharmony_ci /* First component can't be > 2 */ 1087a8e1175bSopenharmony_ci ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 1088a8e1175bSopenharmony_ci goto error; 1089a8e1175bSopenharmony_ci } 1090a8e1175bSopenharmony_ci if (str_ptr >= str_bound || *str_ptr != '.') { 1091a8e1175bSopenharmony_ci ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 1092a8e1175bSopenharmony_ci goto error; 1093a8e1175bSopenharmony_ci } 1094a8e1175bSopenharmony_ci str_ptr++; 1095a8e1175bSopenharmony_ci 1096a8e1175bSopenharmony_ci ret = oid_parse_number(&component2, &str_ptr, str_bound); 1097a8e1175bSopenharmony_ci if (ret != 0) { 1098a8e1175bSopenharmony_ci goto error; 1099a8e1175bSopenharmony_ci } 1100a8e1175bSopenharmony_ci if ((component1 < 2) && (component2 > 39)) { 1101a8e1175bSopenharmony_ci /* Root nodes 0 and 1 may have up to 40 children, numbered 0-39 */ 1102a8e1175bSopenharmony_ci ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 1103a8e1175bSopenharmony_ci goto error; 1104a8e1175bSopenharmony_ci } 1105a8e1175bSopenharmony_ci if (str_ptr < str_bound) { 1106a8e1175bSopenharmony_ci if (*str_ptr == '.') { 1107a8e1175bSopenharmony_ci str_ptr++; 1108a8e1175bSopenharmony_ci } else { 1109a8e1175bSopenharmony_ci ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 1110a8e1175bSopenharmony_ci goto error; 1111a8e1175bSopenharmony_ci } 1112a8e1175bSopenharmony_ci } 1113a8e1175bSopenharmony_ci 1114a8e1175bSopenharmony_ci if (component2 > (UINT_MAX - (component1 * 40))) { 1115a8e1175bSopenharmony_ci ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 1116a8e1175bSopenharmony_ci goto error; 1117a8e1175bSopenharmony_ci } 1118a8e1175bSopenharmony_ci ret = oid_subidentifier_encode_into(&out_ptr, out_bound, 1119a8e1175bSopenharmony_ci (component1 * 40) + component2); 1120a8e1175bSopenharmony_ci if (ret != 0) { 1121a8e1175bSopenharmony_ci goto error; 1122a8e1175bSopenharmony_ci } 1123a8e1175bSopenharmony_ci 1124a8e1175bSopenharmony_ci while (str_ptr < str_bound) { 1125a8e1175bSopenharmony_ci ret = oid_parse_number(&val, &str_ptr, str_bound); 1126a8e1175bSopenharmony_ci if (ret != 0) { 1127a8e1175bSopenharmony_ci goto error; 1128a8e1175bSopenharmony_ci } 1129a8e1175bSopenharmony_ci if (str_ptr < str_bound) { 1130a8e1175bSopenharmony_ci if (*str_ptr == '.') { 1131a8e1175bSopenharmony_ci str_ptr++; 1132a8e1175bSopenharmony_ci } else { 1133a8e1175bSopenharmony_ci ret = MBEDTLS_ERR_ASN1_INVALID_DATA; 1134a8e1175bSopenharmony_ci goto error; 1135a8e1175bSopenharmony_ci } 1136a8e1175bSopenharmony_ci } 1137a8e1175bSopenharmony_ci 1138a8e1175bSopenharmony_ci ret = oid_subidentifier_encode_into(&out_ptr, out_bound, val); 1139a8e1175bSopenharmony_ci if (ret != 0) { 1140a8e1175bSopenharmony_ci goto error; 1141a8e1175bSopenharmony_ci } 1142a8e1175bSopenharmony_ci } 1143a8e1175bSopenharmony_ci 1144a8e1175bSopenharmony_ci encoded_len = (size_t) (out_ptr - oid->p); 1145a8e1175bSopenharmony_ci resized_mem = mbedtls_calloc(encoded_len, 1); 1146a8e1175bSopenharmony_ci if (resized_mem == NULL) { 1147a8e1175bSopenharmony_ci ret = MBEDTLS_ERR_ASN1_ALLOC_FAILED; 1148a8e1175bSopenharmony_ci goto error; 1149a8e1175bSopenharmony_ci } 1150a8e1175bSopenharmony_ci memcpy(resized_mem, oid->p, encoded_len); 1151a8e1175bSopenharmony_ci mbedtls_free(oid->p); 1152a8e1175bSopenharmony_ci oid->p = resized_mem; 1153a8e1175bSopenharmony_ci oid->len = encoded_len; 1154a8e1175bSopenharmony_ci 1155a8e1175bSopenharmony_ci oid->tag = MBEDTLS_ASN1_OID; 1156a8e1175bSopenharmony_ci 1157a8e1175bSopenharmony_ci return 0; 1158a8e1175bSopenharmony_ci 1159a8e1175bSopenharmony_cierror: 1160a8e1175bSopenharmony_ci mbedtls_free(oid->p); 1161a8e1175bSopenharmony_ci oid->p = NULL; 1162a8e1175bSopenharmony_ci oid->len = 0; 1163a8e1175bSopenharmony_ci return ret; 1164a8e1175bSopenharmony_ci} 1165a8e1175bSopenharmony_ci 1166a8e1175bSopenharmony_ci#endif /* MBEDTLS_OID_C */ 1167