1
9
10
11
12
13
14
23
26
27
28
32
50
51
55
63
64
68
76
77
81
92
93
97
111
112
116
132
133
136
140
141
142
143
147
151
155
159
163
167
171
175
180
184
188
192
196
201
205
210
214
219
224
228
229
230
231
232
233
234
235
236
237
240
244
245
246
247
252
256
261
266
271
276
280
281
282
283
284
285
286
287
289
291
292
293
294
295
297
298
299
300
301
302
303
304
305
306
307
308
312
313
314
315
316
317
318
319
320
321
322
323
324
329
330
331
332
333
334
335
336
337
338
339
344
345
350
351
356
357
362
366
367
372
376
377
382
383
384
385
386
387
388
389
390
391
396
400
401
406
410
411
412
417
418
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
449
453
454
455
473
474
475
476
477
478
479
480
481
482
483
484
485
486
490
491
492
493
498
499
504
505
510
511
516
517
522
523
528
529
534
535
540
541
546
547
552
553
558
559
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
582
583
584
598
599
600
601
602
603
604
605
606
607
608
609
610
611
615
616
617
618
623
624
629
630
635
636
641
642
647
651
652
657
661
662
667
668
672
673
674
675
676
677
678
679
680
681
682
685
689
690
691
692
697
698
703
707
708
713
717
718
722
723
724
725
726
727
728
729
730
731
732
737
738
739
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
779
780
784
785
786
787
790
794
795
796
797
798
799
800
818
821
822
823
824
825
826
827
831
832
833
834
835
/* ... */
#include "common.h"
#if defined(MBEDTLS_OID_C)
#include "mbedtls/oid.h"
#include "mbedtls/rsa.h"
#include "mbedtls/error.h"
#include <stdio.h>
#include <string.h>
#include "mbedtls/platform.h"
6 includes
/* ... */
#define ADD_LEN(s) s, MBEDTLS_OID_SIZE(s)
/* ... */
#define FN_OID_TYPED_FROM_ASN1(TYPE_T, NAME, LIST) \
static const TYPE_T *oid_ ## NAME ## _from_asn1( \
const mbedtls_asn1_buf *oid) \
{ \
const TYPE_T *p = (LIST); \
const mbedtls_oid_descriptor_t *cur = \
(const mbedtls_oid_descriptor_t *) p; \
if (p == NULL || oid == NULL) return NULL; \
while (cur->asn1 != NULL) { \
if (cur->asn1_len == oid->len && \
memcmp(cur->asn1, oid->p, oid->len) == 0) { \
return p; \
}if (cur->asn1_len == oid->len && \ memcmp(cur->asn1, oid->p, oid->len) == 0) { ... } \
p++; \
cur = (const mbedtls_oid_descriptor_t *) p; \
}while (cur->asn1 != NULL) { ... } \
return NULL; \
...}...
/* ... */
#define FN_OID_GET_DESCRIPTOR_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \
int FN_NAME(const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1) \
{ \
const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1(oid); \
if (data == NULL) return MBEDTLS_ERR_OID_NOT_FOUND; \
*ATTR1 = data->descriptor.ATTR1; \
return 0; \
...}...
/* ... */
#define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \
int FN_NAME(const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1) \
{ \
const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1(oid); \
if (data == NULL) return MBEDTLS_ERR_OID_NOT_FOUND; \
*ATTR1 = data->ATTR1; \
return 0; \
...}...
/* ... */
#define FN_OID_GET_ATTR2(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1, \
ATTR2_TYPE, ATTR2) \
int FN_NAME(const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1, \
ATTR2_TYPE * ATTR2) \
{ \
const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1(oid); \
if (data == NULL) return MBEDTLS_ERR_OID_NOT_FOUND; \
*(ATTR1) = data->ATTR1; \
*(ATTR2) = data->ATTR2; \
return 0; \
...}...
/* ... */
#define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \
int FN_NAME(ATTR1_TYPE ATTR1, const char **oid, size_t *olen) \
{ \
const TYPE_T *cur = (LIST); \
while (cur->descriptor.asn1 != NULL) { \
if (cur->ATTR1 == (ATTR1)) { \
*oid = cur->descriptor.asn1; \
*olen = cur->descriptor.asn1_len; \
return 0; \
}if (cur->ATTR1 == (ATTR1)) { ... } \
cur++; \
}while (cur->descriptor.asn1 != NULL) { ... } \
return MBEDTLS_ERR_OID_NOT_FOUND; \
...}...
/* ... */
#define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \
ATTR2_TYPE, ATTR2) \
int FN_NAME(ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid, \
size_t *olen) \
{ \
const TYPE_T *cur = (LIST); \
while (cur->descriptor.asn1 != NULL) { \
if (cur->ATTR1 == (ATTR1) && cur->ATTR2 == (ATTR2)) { \
*oid = cur->descriptor.asn1; \
*olen = cur->descriptor.asn1_len; \
return 0; \
}if (cur->ATTR1 == (ATTR1) && cur->ATTR2 == (ATTR2)) { ... } \
cur++; \
}while (cur->descriptor.asn1 != NULL) { ... } \
return MBEDTLS_ERR_OID_NOT_FOUND; \
...}...
7 defines
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
const char *short_name;
...} oid_x520_attr_t;
static const oid_x520_attr_t oid_x520_attr_type[] =
{
{
{ ADD_LEN(MBEDTLS_OID_AT_CN), "id-at-commonName", "Common Name" },
"CN",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_COUNTRY), "id-at-countryName", "Country" },
"C",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_LOCALITY), "id-at-locality", "Locality" },
"L",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_STATE), "id-at-state", "State" },
"ST",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_ORGANIZATION), "id-at-organizationName", "Organization" },
"O",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_ORG_UNIT), "id-at-organizationalUnitName", "Org Unit" },
"OU",
...},
{
{ ADD_LEN(MBEDTLS_OID_PKCS9_EMAIL), "emailAddress", "E-mail address" },
"emailAddress",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_SERIAL_NUMBER), "id-at-serialNumber", "Serial number" },
"serialNumber",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_POSTAL_ADDRESS), "id-at-postalAddress",
"Postal address" ...},
"postalAddress",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_POSTAL_CODE), "id-at-postalCode", "Postal code" },
"postalCode",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_SUR_NAME), "id-at-surName", "Surname" },
"SN",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_GIVEN_NAME), "id-at-givenName", "Given name" },
"GN",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_INITIALS), "id-at-initials", "Initials" },
"initials",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_GENERATION_QUALIFIER), "id-at-generationQualifier",
"Generation qualifier" ...},
"generationQualifier",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_TITLE), "id-at-title", "Title" },
"title",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_DN_QUALIFIER), "id-at-dnQualifier",
"Distinguished Name qualifier" ...},
"dnQualifier",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_PSEUDONYM), "id-at-pseudonym", "Pseudonym" },
"pseudonym",
...},
{
{ ADD_LEN(MBEDTLS_OID_DOMAIN_COMPONENT), "id-domainComponent",
"Domain component" ...},
"DC",
...},
{
{ ADD_LEN(MBEDTLS_OID_AT_UNIQUE_IDENTIFIER), "id-at-uniqueIdentifier",
"Unique Identifier" ...},
"uniqueIdentifier",
...},
{
{ NULL, 0, NULL, NULL },
NULL,
...}
...};
FN_OID_TYPED_FROM_ASN1(oid_x520_attr_t, x520_attr, oid_x520_attr_type)
FN_OID_GET_ATTR1(mbedtls_oid_get_attr_short_name,
oid_x520_attr_t,
x520_attr,
const char *,
short_name)
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
int ext_type;
...} oid_x509_ext_t;
static const oid_x509_ext_t oid_x509_ext[] =
{
{
{ ADD_LEN(MBEDTLS_OID_BASIC_CONSTRAINTS), "id-ce-basicConstraints",
"Basic Constraints" ...},
MBEDTLS_OID_X509_EXT_BASIC_CONSTRAINTS,
...},
{
{ ADD_LEN(MBEDTLS_OID_KEY_USAGE), "id-ce-keyUsage", "Key Usage" },
MBEDTLS_OID_X509_EXT_KEY_USAGE,
...},
{
{ ADD_LEN(MBEDTLS_OID_EXTENDED_KEY_USAGE), "id-ce-extKeyUsage",
"Extended Key Usage" ...},
MBEDTLS_OID_X509_EXT_EXTENDED_KEY_USAGE,
...},
{
{ ADD_LEN(MBEDTLS_OID_SUBJECT_ALT_NAME), "id-ce-subjectAltName",
"Subject Alt Name" ...},
MBEDTLS_OID_X509_EXT_SUBJECT_ALT_NAME,
...},
{
{ ADD_LEN(MBEDTLS_OID_NS_CERT_TYPE), "id-netscape-certtype",
"Netscape Certificate Type" ...},
MBEDTLS_OID_X509_EXT_NS_CERT_TYPE,
...},
{
{ ADD_LEN(MBEDTLS_OID_CERTIFICATE_POLICIES), "id-ce-certificatePolicies",
"Certificate Policies" ...},
MBEDTLS_OID_X509_EXT_CERTIFICATE_POLICIES,
...},
{
{ NULL, 0, NULL, NULL },
0,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext)
FN_OID_GET_ATTR1(mbedtls_oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type)
static const mbedtls_oid_descriptor_t oid_ext_key_usage[] =
{
{ ADD_LEN(MBEDTLS_OID_SERVER_AUTH), "id-kp-serverAuth",
"TLS Web Server Authentication" ...},
{ ADD_LEN(MBEDTLS_OID_CLIENT_AUTH), "id-kp-clientAuth",
"TLS Web Client Authentication" ...},
{ ADD_LEN(MBEDTLS_OID_CODE_SIGNING), "id-kp-codeSigning", "Code Signing" },
{ ADD_LEN(MBEDTLS_OID_EMAIL_PROTECTION), "id-kp-emailProtection", "E-mail Protection" },
{ ADD_LEN(MBEDTLS_OID_TIME_STAMPING), "id-kp-timeStamping", "Time Stamping" },
{ ADD_LEN(MBEDTLS_OID_OCSP_SIGNING), "id-kp-OCSPSigning", "OCSP Signing" },
{ ADD_LEN(MBEDTLS_OID_WISUN_FAN), "id-kp-wisun-fan-device",
"Wi-SUN Alliance Field Area Network (FAN)" ...},
{ NULL, 0, NULL, NULL },
...};
FN_OID_TYPED_FROM_ASN1(mbedtls_oid_descriptor_t, ext_key_usage, oid_ext_key_usage)
FN_OID_GET_ATTR1(mbedtls_oid_get_extended_key_usage,
mbedtls_oid_descriptor_t,
ext_key_usage,
const char *,
description)
static const mbedtls_oid_descriptor_t oid_certificate_policies[] =
{
{ ADD_LEN(MBEDTLS_OID_ANY_POLICY), "anyPolicy", "Any Policy" },
{ NULL, 0, NULL, NULL },
...};
FN_OID_TYPED_FROM_ASN1(mbedtls_oid_descriptor_t, certificate_policies, oid_certificate_policies)
FN_OID_GET_ATTR1(mbedtls_oid_get_certificate_policies,
mbedtls_oid_descriptor_t,
certificate_policies,
const char *,
description)
#if defined(MBEDTLS_MD_C)
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
mbedtls_md_type_t md_alg;
mbedtls_pk_type_t pk_alg;
...} oid_sig_alg_t;
static const oid_sig_alg_t oid_sig_alg[] =
{
#if defined(MBEDTLS_RSA_C)
#if defined(MBEDTLS_MD2_C)
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_MD2), "md2WithRSAEncryption", "RSA with MD2" }defined (MBEDTLS_MD2_C) { ... },
MBEDTLS_MD_MD2, MBEDTLS_PK_RSA,
}defined (MBEDTLS_MD2_C) { ... },
#endif
#if defined(MBEDTLS_MD4_C)
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_MD4), "md4WithRSAEncryption", "RSA with MD4" }defined (MBEDTLS_MD4_C) { ... },
MBEDTLS_MD_MD4, MBEDTLS_PK_RSA,
}defined (MBEDTLS_MD4_C) { ... },
#endif
#if defined(MBEDTLS_MD5_C)
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_MD5), "md5WithRSAEncryption", "RSA with MD5" }defined (MBEDTLS_MD5_C) { ... },
MBEDTLS_MD_MD5, MBEDTLS_PK_RSA,
}defined (MBEDTLS_MD5_C) { ... },
#endif
#if defined(MBEDTLS_SHA1_C)
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_SHA1), "sha-1WithRSAEncryption", "RSA with SHA1" }defined (MBEDTLS_SHA1_C) { ... },
MBEDTLS_MD_SHA1, MBEDTLS_PK_RSA,
}defined (MBEDTLS_SHA1_C) { ... },
#endif
#if defined(MBEDTLS_SHA256_C)
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_SHA224), "sha224WithRSAEncryption", "RSA with SHA-224" }defined (MBEDTLS_SHA256_C) { ... },
MBEDTLS_MD_SHA224, MBEDTLS_PK_RSA,
}defined (MBEDTLS_SHA256_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_SHA256), "sha256WithRSAEncryption", "RSA with SHA-256" },
MBEDTLS_MD_SHA256, MBEDTLS_PK_RSA,
...},
#endif
#if defined(MBEDTLS_SHA512_C)
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_SHA384), "sha384WithRSAEncryption", "RSA with SHA-384" }defined (MBEDTLS_SHA512_C) { ... },
MBEDTLS_MD_SHA384, MBEDTLS_PK_RSA,
}defined (MBEDTLS_SHA512_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_SHA512), "sha512WithRSAEncryption", "RSA with SHA-512" },
MBEDTLS_MD_SHA512, MBEDTLS_PK_RSA,
...},
#endif
#if defined(MBEDTLS_SHA1_C)
{
{ ADD_LEN(MBEDTLS_OID_RSA_SHA_OBS), "sha-1WithRSAEncryption", "RSA with SHA1" }defined (MBEDTLS_SHA1_C) { ... },
MBEDTLS_MD_SHA1, MBEDTLS_PK_RSA,
}defined (MBEDTLS_SHA1_C) { ... },
#endif /* ... */
#endif
#if defined(MBEDTLS_ECDSA_C)
#if defined(MBEDTLS_SHA1_C)
{
{ ADD_LEN(MBEDTLS_OID_ECDSA_SHA1), "ecdsa-with-SHA1", "ECDSA with SHA1" }defined (MBEDTLS_SHA1_C) { ... },
MBEDTLS_MD_SHA1, MBEDTLS_PK_ECDSA,
}defined (MBEDTLS_SHA1_C) { ... },
#endif
#if defined(MBEDTLS_SHA256_C)
{
{ ADD_LEN(MBEDTLS_OID_ECDSA_SHA224), "ecdsa-with-SHA224", "ECDSA with SHA224" }defined (MBEDTLS_SHA256_C) { ... },
MBEDTLS_MD_SHA224, MBEDTLS_PK_ECDSA,
}defined (MBEDTLS_SHA256_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_ECDSA_SHA256), "ecdsa-with-SHA256", "ECDSA with SHA256" },
MBEDTLS_MD_SHA256, MBEDTLS_PK_ECDSA,
...},
#endif
#if defined(MBEDTLS_SHA512_C)
{
{ ADD_LEN(MBEDTLS_OID_ECDSA_SHA384), "ecdsa-with-SHA384", "ECDSA with SHA384" }defined (MBEDTLS_SHA512_C) { ... },
MBEDTLS_MD_SHA384, MBEDTLS_PK_ECDSA,
}defined (MBEDTLS_SHA512_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_ECDSA_SHA512), "ecdsa-with-SHA512", "ECDSA with SHA512" },
MBEDTLS_MD_SHA512, MBEDTLS_PK_ECDSA,
...},
#endif /* ... */
#endif
#if defined(MBEDTLS_RSA_C)
{
{ ADD_LEN(MBEDTLS_OID_RSASSA_PSS), "RSASSA-PSS", "RSASSA-PSS" }defined (MBEDTLS_RSA_C) { ... },
MBEDTLS_MD_NONE, MBEDTLS_PK_RSASSA_PSS,
}defined (MBEDTLS_RSA_C) { ... },
#endif
{
{ NULL, 0, NULL, NULL },
MBEDTLS_MD_NONE, MBEDTLS_PK_NONE,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg)
FN_OID_GET_DESCRIPTOR_ATTR1(mbedtls_oid_get_sig_alg_desc,
oid_sig_alg_t,
sig_alg,
const char *,
description)
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)
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)/* ... */
#endif
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
mbedtls_pk_type_t pk_alg;
...} oid_pk_alg_t;
static const oid_pk_alg_t oid_pk_alg[] =
{
{
{ ADD_LEN(MBEDTLS_OID_PKCS1_RSA), "rsaEncryption", "RSA" },
MBEDTLS_PK_RSA,
...},
{
{ ADD_LEN(MBEDTLS_OID_EC_ALG_UNRESTRICTED), "id-ecPublicKey", "Generic EC key" },
MBEDTLS_PK_ECKEY,
...},
{
{ ADD_LEN(MBEDTLS_OID_EC_ALG_ECDH), "id-ecDH", "EC key for ECDH" },
MBEDTLS_PK_ECKEY_DH,
...},
{
{ NULL, 0, NULL, NULL },
MBEDTLS_PK_NONE,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_pk_alg_t, pk_alg, oid_pk_alg)
FN_OID_GET_ATTR1(mbedtls_oid_get_pk_alg, oid_pk_alg_t, pk_alg, mbedtls_pk_type_t, pk_alg)
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)
#if defined(MBEDTLS_ECP_C)
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
mbedtls_ecp_group_id grp_id;
...} oid_ecp_grp_t;
static const oid_ecp_grp_t oid_ecp_grp[] =
{
#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP192R1), "secp192r1", "secp192r1" }defined (MBEDTLS_ECP_DP_SECP192R1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP192R1,
}defined (MBEDTLS_ECP_DP_SECP192R1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP224R1), "secp224r1", "secp224r1" }defined (MBEDTLS_ECP_DP_SECP224R1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP224R1,
}defined (MBEDTLS_ECP_DP_SECP224R1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP256R1), "secp256r1", "secp256r1" }defined (MBEDTLS_ECP_DP_SECP256R1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP256R1,
}defined (MBEDTLS_ECP_DP_SECP256R1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP384R1), "secp384r1", "secp384r1" }defined (MBEDTLS_ECP_DP_SECP384R1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP384R1,
}defined (MBEDTLS_ECP_DP_SECP384R1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP521R1), "secp521r1", "secp521r1" }defined (MBEDTLS_ECP_DP_SECP521R1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP521R1,
}defined (MBEDTLS_ECP_DP_SECP521R1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP192K1), "secp192k1", "secp192k1" }defined (MBEDTLS_ECP_DP_SECP192K1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP192K1,
}defined (MBEDTLS_ECP_DP_SECP192K1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP224K1), "secp224k1", "secp224k1" }defined (MBEDTLS_ECP_DP_SECP224K1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP224K1,
}defined (MBEDTLS_ECP_DP_SECP224K1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_SECP256K1), "secp256k1", "secp256k1" }defined (MBEDTLS_ECP_DP_SECP256K1_ENABLED) { ... },
MBEDTLS_ECP_DP_SECP256K1,
}defined (MBEDTLS_ECP_DP_SECP256K1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_BP256R1), "brainpoolP256r1", "brainpool256r1" }defined (MBEDTLS_ECP_DP_BP256R1_ENABLED) { ... },
MBEDTLS_ECP_DP_BP256R1,
}defined (MBEDTLS_ECP_DP_BP256R1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_BP384R1), "brainpoolP384r1", "brainpool384r1" }defined (MBEDTLS_ECP_DP_BP384R1_ENABLED) { ... },
MBEDTLS_ECP_DP_BP384R1,
}defined (MBEDTLS_ECP_DP_BP384R1_ENABLED) { ... },
#endif
#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED)
{
{ ADD_LEN(MBEDTLS_OID_EC_GRP_BP512R1), "brainpoolP512r1", "brainpool512r1" }defined (MBEDTLS_ECP_DP_BP512R1_ENABLED) { ... },
MBEDTLS_ECP_DP_BP512R1,
}defined (MBEDTLS_ECP_DP_BP512R1_ENABLED) { ... },
#endif
{
{ NULL, 0, NULL, NULL },
MBEDTLS_ECP_DP_NONE,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_ecp_grp_t, grp_id, oid_ecp_grp)
FN_OID_GET_ATTR1(mbedtls_oid_get_ec_grp, oid_ecp_grp_t, grp_id, mbedtls_ecp_group_id, grp_id)
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)/* ... */
#endif
#if defined(MBEDTLS_CIPHER_C)
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
mbedtls_cipher_type_t cipher_alg;
...} oid_cipher_alg_t;
static const oid_cipher_alg_t oid_cipher_alg[] =
{
{
{ ADD_LEN(MBEDTLS_OID_DES_CBC), "desCBC", "DES-CBC" },
MBEDTLS_CIPHER_DES_CBC,
...},
{
{ ADD_LEN(MBEDTLS_OID_DES_EDE3_CBC), "des-ede3-cbc", "DES-EDE3-CBC" },
MBEDTLS_CIPHER_DES_EDE3_CBC,
...},
{
{ NULL, 0, NULL, NULL },
MBEDTLS_CIPHER_NONE,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_cipher_alg_t, cipher_alg, oid_cipher_alg)
FN_OID_GET_ATTR1(mbedtls_oid_get_cipher_alg,
oid_cipher_alg_t,
cipher_alg,
mbedtls_cipher_type_t,
cipher_alg)/* ... */
#endif
#if defined(MBEDTLS_MD_C)
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
mbedtls_md_type_t md_alg;
...} oid_md_alg_t;
static const oid_md_alg_t oid_md_alg[] =
{
#if defined(MBEDTLS_MD2_C)
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_MD2), "id-md2", "MD2" }defined (MBEDTLS_MD2_C) { ... },
MBEDTLS_MD_MD2,
}defined (MBEDTLS_MD2_C) { ... },
#endif
#if defined(MBEDTLS_MD4_C)
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_MD4), "id-md4", "MD4" }defined (MBEDTLS_MD4_C) { ... },
MBEDTLS_MD_MD4,
}defined (MBEDTLS_MD4_C) { ... },
#endif
#if defined(MBEDTLS_MD5_C)
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_MD5), "id-md5", "MD5" }defined (MBEDTLS_MD5_C) { ... },
MBEDTLS_MD_MD5,
}defined (MBEDTLS_MD5_C) { ... },
#endif
#if defined(MBEDTLS_SHA1_C)
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_SHA1), "id-sha1", "SHA-1" }defined (MBEDTLS_SHA1_C) { ... },
MBEDTLS_MD_SHA1,
}defined (MBEDTLS_SHA1_C) { ... },
#endif
#if defined(MBEDTLS_SHA256_C)
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_SHA224), "id-sha224", "SHA-224" }defined (MBEDTLS_SHA256_C) { ... },
MBEDTLS_MD_SHA224,
}defined (MBEDTLS_SHA256_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_SHA256), "id-sha256", "SHA-256" },
MBEDTLS_MD_SHA256,
...},
#endif
#if defined(MBEDTLS_SHA512_C)
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_SHA384), "id-sha384", "SHA-384" }defined (MBEDTLS_SHA512_C) { ... },
MBEDTLS_MD_SHA384,
}defined (MBEDTLS_SHA512_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_SHA512), "id-sha512", "SHA-512" },
MBEDTLS_MD_SHA512,
...},
#endif
#if defined(MBEDTLS_RIPEMD160_C)
{
{ ADD_LEN(MBEDTLS_OID_DIGEST_ALG_RIPEMD160), "id-ripemd160", "RIPEMD-160" }defined (MBEDTLS_RIPEMD160_C) { ... },
MBEDTLS_MD_RIPEMD160,
}defined (MBEDTLS_RIPEMD160_C) { ... },
#endif
{
{ NULL, 0, NULL, NULL },
MBEDTLS_MD_NONE,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg)
FN_OID_GET_ATTR1(mbedtls_oid_get_md_alg, oid_md_alg_t, md_alg, mbedtls_md_type_t, md_alg)
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)
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
mbedtls_md_type_t md_hmac;
...} oid_md_hmac_t;
static const oid_md_hmac_t oid_md_hmac[] =
{
#if defined(MBEDTLS_SHA1_C)
{
{ ADD_LEN(MBEDTLS_OID_HMAC_SHA1), "hmacSHA1", "HMAC-SHA-1" }defined (MBEDTLS_SHA1_C) { ... },
MBEDTLS_MD_SHA1,
}defined (MBEDTLS_SHA1_C) { ... },
#endif
#if defined(MBEDTLS_SHA256_C)
{
{ ADD_LEN(MBEDTLS_OID_HMAC_SHA224), "hmacSHA224", "HMAC-SHA-224" }defined (MBEDTLS_SHA256_C) { ... },
MBEDTLS_MD_SHA224,
}defined (MBEDTLS_SHA256_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_HMAC_SHA256), "hmacSHA256", "HMAC-SHA-256" },
MBEDTLS_MD_SHA256,
...},
#endif
#if defined(MBEDTLS_SHA512_C)
{
{ ADD_LEN(MBEDTLS_OID_HMAC_SHA384), "hmacSHA384", "HMAC-SHA-384" }defined (MBEDTLS_SHA512_C) { ... },
MBEDTLS_MD_SHA384,
}defined (MBEDTLS_SHA512_C) { ... },
{
{ ADD_LEN(MBEDTLS_OID_HMAC_SHA512), "hmacSHA512", "HMAC-SHA-512" },
MBEDTLS_MD_SHA512,
...},
#endif
{
{ NULL, 0, NULL, NULL },
MBEDTLS_MD_NONE,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_md_hmac_t, md_hmac, oid_md_hmac)
FN_OID_GET_ATTR1(mbedtls_oid_get_md_hmac, oid_md_hmac_t, md_hmac, mbedtls_md_type_t, md_hmac)/* ... */
#endif
#if defined(MBEDTLS_PKCS12_C)
/* ... */
typedef struct {
mbedtls_oid_descriptor_t descriptor;
mbedtls_md_type_t md_alg;
mbedtls_cipher_type_t cipher_alg;
...} oid_pkcs12_pbe_alg_t;
static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] =
{
{
{ ADD_LEN(MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC), "pbeWithSHAAnd3-KeyTripleDES-CBC",
"PBE with SHA1 and 3-Key 3DES" ...},
MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE3_CBC,
...},
{
{ ADD_LEN(MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC), "pbeWithSHAAnd2-KeyTripleDES-CBC",
"PBE with SHA1 and 2-Key 3DES" ...},
MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE_CBC,
...},
{
{ NULL, 0, NULL, NULL },
MBEDTLS_MD_NONE, MBEDTLS_CIPHER_NONE,
...},
...};
FN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg)
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)/* ... */
#endif
int mbedtls_oid_get_numeric_string(char *buf, size_t size,
const mbedtls_asn1_buf *oid)
{
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
char *p = buf;
size_t n = size;
unsigned int value = 0;
if (size > INT_MAX) {
return MBEDTLS_ERR_ASN1_INVALID_LENGTH;
}if (size > INT_MAX) { ... }
if (oid->len <= 0) {
return MBEDTLS_ERR_ASN1_OUT_OF_DATA;
}if (oid->len <= 0) { ... }
for (size_t i = 0; i < oid->len; i++) {
if (value > (UINT_MAX >> 7)) {
return MBEDTLS_ERR_ASN1_INVALID_DATA;
}if (value > (UINT_MAX >> 7)) { ... }
if ((value == 0) && ((oid->p[i]) == 0x80)) {
return MBEDTLS_ERR_ASN1_INVALID_DATA;
}if ((value == 0) && ((oid->p[i]) == 0x80)) { ... }
value <<= 7;
value |= oid->p[i] & 0x7F;
if (!(oid->p[i] & 0x80)) {
if (n == size) {
int component1;
unsigned int component2;
if (value >= 80) {
component1 = '2';
component2 = value - 80;
}if (value >= 80) { ... } else if (value >= 40) {
component1 = '1';
component2 = value - 40;
}else if (value >= 40) { ... } else {
component1 = '0';
component2 = value;
}else { ... }
ret = mbedtls_snprintf(p, n, "%c.%u", component1, component2);
}if (n == size) { ... } else {
ret = mbedtls_snprintf(p, n, ".%u", value);
}else { ... }
if (ret < 2 || (size_t) ret >= n) {
return MBEDTLS_ERR_OID_BUF_TOO_SMALL;
}if (ret < 2 || (size_t) ret >= n) { ... }
n -= (size_t) ret;
p += ret;
value = 0;
}if (!(oid->p[i] & 0x80)) { ... }
}for (size_t i = 0; i < oid->len; i++) { ... }
if (value != 0) {
return MBEDTLS_ERR_ASN1_OUT_OF_DATA;
}if (value != 0) { ... }
return (int) (size - n);
}{ ... }
/* ... */#endif