]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/x509/v3_extku.c
Update copyright year
[thirdparty/openssl.git] / crypto / x509 / v3_extku.c
CommitLineData
0f113f3e 1/*
454afd98 2 * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved.
9aeaf1b4 3 *
4286ca47 4 * Licensed under the Apache License 2.0 (the "License"). You may not use
d2e9e320
RS
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
9aeaf1b4
DSH
8 */
9
10#include <stdio.h>
b39fc560 11#include "internal/cryptlib.h"
9d6b1ce6 12#include <openssl/asn1t.h>
ec577822
BM
13#include <openssl/conf.h>
14#include <openssl/x509v3.h>
df2ee0e2 15#include "ext_dat.h"
9aeaf1b4 16
852c2ed2
RS
17DEFINE_STACK_OF(ASN1_OBJECT)
18DEFINE_STACK_OF(CONF_VALUE)
19
babb3798 20static void *v2i_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD *method,
0f113f3e
MC
21 X509V3_CTX *ctx,
22 STACK_OF(CONF_VALUE) *nval);
23static STACK_OF(CONF_VALUE) *i2v_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD
24 *method, void *eku, STACK_OF(CONF_VALUE)
25 *extlist);
9d6b1ce6 26
560b79cb 27const X509V3_EXT_METHOD v3_ext_ku = {
0f113f3e
MC
28 NID_ext_key_usage, 0,
29 ASN1_ITEM_ref(EXTENDED_KEY_USAGE),
30 0, 0, 0, 0,
31 0, 0,
32 i2v_EXTENDED_KEY_USAGE,
33 v2i_EXTENDED_KEY_USAGE,
34 0, 0,
35 NULL
c08523d8
DSH
36};
37
38/* NB OCSP acceptable responses also is a SEQUENCE OF OBJECT */
560b79cb 39const X509V3_EXT_METHOD v3_ocsp_accresp = {
0f113f3e
MC
40 NID_id_pkix_OCSP_acceptableResponses, 0,
41 ASN1_ITEM_ref(EXTENDED_KEY_USAGE),
42 0, 0, 0, 0,
43 0, 0,
44 i2v_EXTENDED_KEY_USAGE,
45 v2i_EXTENDED_KEY_USAGE,
46 0, 0,
47 NULL
9aeaf1b4
DSH
48};
49
0f113f3e
MC
50ASN1_ITEM_TEMPLATE(EXTENDED_KEY_USAGE) =
51 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, EXTENDED_KEY_USAGE, ASN1_OBJECT)
d339187b 52ASN1_ITEM_TEMPLATE_END(EXTENDED_KEY_USAGE)
9aeaf1b4 53
9d6b1ce6 54IMPLEMENT_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
9aeaf1b4 55
0f113f3e
MC
56static STACK_OF(CONF_VALUE) *i2v_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD
57 *method, void *a, STACK_OF(CONF_VALUE)
58 *ext_list)
9aeaf1b4 59{
0f113f3e
MC
60 EXTENDED_KEY_USAGE *eku = a;
61 int i;
62 ASN1_OBJECT *obj;
63 char obj_tmp[80];
64 for (i = 0; i < sk_ASN1_OBJECT_num(eku); i++) {
65 obj = sk_ASN1_OBJECT_value(eku, i);
66 i2t_ASN1_OBJECT(obj_tmp, 80, obj);
67 X509V3_add_value(NULL, obj_tmp, &ext_list);
68 }
69 return ext_list;
9aeaf1b4
DSH
70}
71
babb3798 72static void *v2i_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD *method,
0f113f3e
MC
73 X509V3_CTX *ctx,
74 STACK_OF(CONF_VALUE) *nval)
9aeaf1b4 75{
0f113f3e
MC
76 EXTENDED_KEY_USAGE *extku;
77 char *extval;
78 ASN1_OBJECT *objtmp;
79 CONF_VALUE *val;
270a4bba 80 const int num = sk_CONF_VALUE_num(nval);
0f113f3e 81 int i;
9aeaf1b4 82
7a908204
PY
83 extku = sk_ASN1_OBJECT_new_reserve(NULL, num);
84 if (extku == NULL) {
0f113f3e 85 X509V3err(X509V3_F_V2I_EXTENDED_KEY_USAGE, ERR_R_MALLOC_FAILURE);
270a4bba 86 sk_ASN1_OBJECT_free(extku);
0f113f3e
MC
87 return NULL;
88 }
c08523d8 89
270a4bba 90 for (i = 0; i < num; i++) {
0f113f3e
MC
91 val = sk_CONF_VALUE_value(nval, i);
92 if (val->value)
93 extval = val->value;
94 else
95 extval = val->name;
75ebbd9a 96 if ((objtmp = OBJ_txt2obj(extval, 0)) == NULL) {
0f113f3e
MC
97 sk_ASN1_OBJECT_pop_free(extku, ASN1_OBJECT_free);
98 X509V3err(X509V3_F_V2I_EXTENDED_KEY_USAGE,
99 X509V3_R_INVALID_OBJECT_IDENTIFIER);
100 X509V3_conf_err(val);
101 return NULL;
102 }
270a4bba 103 sk_ASN1_OBJECT_push(extku, objtmp); /* no failure as it was reserved */
0f113f3e
MC
104 }
105 return extku;
9aeaf1b4 106}