Further const-correct config-based extension creation.
Constructing extensions from a config file should not modify the config
file or input certificates, so everything here should be const.
While I'm here, fix various missing sk_FOO_push malloc failure checks.
Change-Id: Ic29b21248a9d9243050c771fd0ce1e1d77f7ce7f
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/56027
Reviewed-by: Bob Beck <bbe@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/conf/conf.c b/crypto/conf/conf.c
index 620b104..f036498 100644
--- a/crypto/conf/conf.c
+++ b/crypto/conf/conf.c
@@ -385,8 +385,9 @@
return lh_CONF_VALUE_retrieve(conf->data, &template);
}
-STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, const char *section) {
- CONF_VALUE *section_value = get_section(conf, section);
+const STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,
+ const char *section) {
+ const CONF_VALUE *section_value = get_section(conf, section);
if (section_value == NULL) {
return NULL;
}
diff --git a/crypto/x509/asn1_gen.c b/crypto/x509/asn1_gen.c
index 7f48435..821d90d 100644
--- a/crypto/x509/asn1_gen.c
+++ b/crypto/x509/asn1_gen.c
@@ -124,7 +124,7 @@
int exp_count;
} tag_exp_arg;
-static ASN1_TYPE *generate_v3(const char *str, X509V3_CTX *cnf, int depth,
+static ASN1_TYPE *generate_v3(const char *str, const X509V3_CTX *cnf, int depth,
int *perr);
static int bitstr_cb(const char *elem, size_t len, void *bitstr);
static int asn1_cb(const char *elem, size_t len, void *bitstr);
@@ -132,12 +132,12 @@
int exp_constructed, int exp_pad, int imp_ok);
static int parse_tagging(const char *vstart, size_t vlen, int *ptag,
int *pclass);
-static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf,
- int depth, int *perr);
+static ASN1_TYPE *asn1_multi(int utype, const char *section,
+ const X509V3_CTX *cnf, int depth, int *perr);
static ASN1_TYPE *asn1_str2type(const char *str, int format, int utype);
static int asn1_str2tag(const char *tagstr, size_t len);
-ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf) {
+ASN1_TYPE *ASN1_generate_v3(const char *str, const X509V3_CTX *cnf) {
int err = 0;
ASN1_TYPE *ret = generate_v3(str, cnf, 0, &err);
if (err) {
@@ -146,7 +146,7 @@
return ret;
}
-static ASN1_TYPE *generate_v3(const char *str, X509V3_CTX *cnf, int depth,
+static ASN1_TYPE *generate_v3(const char *str, const X509V3_CTX *cnf, int depth,
int *perr) {
ASN1_TYPE *ret;
tag_exp_arg asn1_tags;
@@ -444,8 +444,8 @@
// Handle multiple types: SET and SEQUENCE
-static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf,
- int depth, int *perr) {
+static ASN1_TYPE *asn1_multi(int utype, const char *section,
+ const X509V3_CTX *cnf, int depth, int *perr) {
ASN1_TYPE *ret = NULL;
STACK_OF(ASN1_TYPE) *sk = NULL;
const STACK_OF(CONF_VALUE) *sect = NULL;
@@ -460,7 +460,7 @@
if (!cnf) {
goto bad;
}
- sect = X509V3_get_section(cnf, (char *)section);
+ sect = X509V3_get_section(cnf, section);
if (!sect) {
goto bad;
}
diff --git a/crypto/x509/internal.h b/crypto/x509/internal.h
index 4cfc4ae..e102842 100644
--- a/crypto/x509/internal.h
+++ b/crypto/x509/internal.h
@@ -369,7 +369,7 @@
CRYPTO_EX_DATA ex_data;
} /* X509_STORE_CTX */;
-ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf);
+ASN1_TYPE *ASN1_generate_v3(const char *str, const X509V3_CTX *cnf);
int X509_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent);
diff --git a/crypto/x509v3/internal.h b/crypto/x509v3/internal.h
index a1f3cee..a7bcb4e 100644
--- a/crypto/x509v3/internal.h
+++ b/crypto/x509v3/internal.h
@@ -136,7 +136,8 @@
int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool);
int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint);
-STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section);
+const STACK_OF(CONF_VALUE) *X509V3_get_section(const X509V3_CTX *ctx,
+ const char *section);
// X509V3_add_value appends a |CONF_VALUE| containing |name| and |value| to
// |*extlist|. It returns one on success and zero on error. If |*extlist| is
diff --git a/crypto/x509v3/v3_akey.c b/crypto/x509v3/v3_akey.c
index 7616f4f..a7e1ee2 100644
--- a/crypto/x509v3/v3_akey.c
+++ b/crypto/x509v3/v3_akey.c
@@ -72,7 +72,8 @@
static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_KEYID(
const X509V3_EXT_METHOD *method, void *ext, STACK_OF(CONF_VALUE) *extlist);
static void *v2i_AUTHORITY_KEYID(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *values);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *values);
const X509V3_EXT_METHOD v3_akey_id = {
NID_authority_key_identifier,
@@ -132,22 +133,20 @@
// is always included.
static void *v2i_AUTHORITY_KEYID(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *values) {
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *values) {
char keyid = 0, issuer = 0;
- size_t i;
int j;
- CONF_VALUE *cnf;
ASN1_OCTET_STRING *ikeyid = NULL;
X509_NAME *isname = NULL;
GENERAL_NAMES *gens = NULL;
GENERAL_NAME *gen = NULL;
ASN1_INTEGER *serial = NULL;
- X509 *cert;
+ const X509 *cert;
AUTHORITY_KEYID *akeyid;
- for (i = 0; i < sk_CONF_VALUE_num(values); i++) {
- cnf = sk_CONF_VALUE_value(values, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(values); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(values, i);
if (!strcmp(cnf->name, "keyid")) {
keyid = 1;
if (cnf->value && !strcmp(cnf->value, "always")) {
@@ -189,7 +188,7 @@
if ((issuer && !ikeyid) || (issuer == 2)) {
isname = X509_NAME_dup(X509_get_issuer_name(cert));
- serial = ASN1_INTEGER_dup(X509_get_serialNumber(cert));
+ serial = ASN1_INTEGER_dup(X509_get0_serialNumber(cert));
if (!isname || !serial) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS);
goto err;
diff --git a/crypto/x509v3/v3_alt.c b/crypto/x509v3/v3_alt.c
index 31b87f1..3a7df6b 100644
--- a/crypto/x509v3/v3_alt.c
+++ b/crypto/x509v3/v3_alt.c
@@ -68,14 +68,18 @@
#include "internal.h"
-static void *v2i_subject_alt(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval);
-static void *v2i_issuer_alt(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval);
-static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p);
-static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens);
-static int do_othername(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx);
-static int do_dirname(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx);
+static void *v2i_subject_alt(const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
+static void *v2i_issuer_alt(const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
+static int copy_email(const X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p);
+static int copy_issuer(const X509V3_CTX *ctx, GENERAL_NAMES *gens);
+static int do_othername(GENERAL_NAME *gen, const char *value,
+ const X509V3_CTX *ctx);
+static int do_dirname(GENERAL_NAME *gen, const char *value,
+ const X509V3_CTX *ctx);
static STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES_cb(
const X509V3_EXT_METHOD *method, void *ext, STACK_OF(CONF_VALUE) *ret) {
@@ -267,28 +271,27 @@
return 1;
}
-static void *v2i_issuer_alt(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval) {
- GENERAL_NAMES *gens = NULL;
- CONF_VALUE *cnf;
- size_t i;
- if (!(gens = sk_GENERAL_NAME_new_null())) {
+static void *v2i_issuer_alt(const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
+ GENERAL_NAMES *gens = sk_GENERAL_NAME_new_null();
+ if (gens == NULL) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- cnf = sk_CONF_VALUE_value(nval, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
if (x509v3_conf_name_matches(cnf->name, "issuer") && cnf->value &&
!strcmp(cnf->value, "copy")) {
if (!copy_issuer(ctx, gens)) {
goto err;
}
} else {
- GENERAL_NAME *gen;
- if (!(gen = v2i_GENERAL_NAME(method, ctx, cnf))) {
+ GENERAL_NAME *gen = v2i_GENERAL_NAME(method, ctx, cnf);
+ if (gen == NULL || !sk_GENERAL_NAME_push(gens, gen)) {
+ GENERAL_NAME_free(gen);
goto err;
}
- sk_GENERAL_NAME_push(gens, gen);
}
}
return gens;
@@ -299,7 +302,7 @@
// Append subject altname of issuer to issuer alt name of subject
-static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens) {
+static int copy_issuer(const X509V3_CTX *ctx, GENERAL_NAMES *gens) {
if (ctx && (ctx->flags == CTX_TEST)) {
return 1;
}
@@ -338,17 +341,16 @@
return ret;
}
-static void *v2i_subject_alt(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval) {
- GENERAL_NAMES *gens = NULL;
- CONF_VALUE *cnf;
- size_t i;
- if (!(gens = sk_GENERAL_NAME_new_null())) {
+static void *v2i_subject_alt(const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
+ GENERAL_NAMES *gens = sk_GENERAL_NAME_new_null();
+ if (gens == NULL) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- cnf = sk_CONF_VALUE_value(nval, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
if (x509v3_conf_name_matches(cnf->name, "email") && cnf->value &&
!strcmp(cnf->value, "copy")) {
if (!copy_email(ctx, gens, 0)) {
@@ -360,11 +362,11 @@
goto err;
}
} else {
- GENERAL_NAME *gen;
- if (!(gen = v2i_GENERAL_NAME(method, ctx, cnf))) {
+ GENERAL_NAME *gen = v2i_GENERAL_NAME(method, ctx, cnf);
+ if (gen == NULL || !sk_GENERAL_NAME_push(gens, gen)) {
+ GENERAL_NAME_free(gen);
goto err;
}
- sk_GENERAL_NAME_push(gens, gen);
}
}
return gens;
@@ -375,7 +377,7 @@
// Copy any email addresses in a certificate or request to GENERAL_NAMES
-static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p) {
+static int copy_email(const X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p) {
X509_NAME *nm;
ASN1_IA5STRING *email = NULL;
X509_NAME_ENTRY *ne;
@@ -428,21 +430,20 @@
}
GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) {
- GENERAL_NAME *gen;
- GENERAL_NAMES *gens = NULL;
- CONF_VALUE *cnf;
- size_t i;
- if (!(gens = sk_GENERAL_NAME_new_null())) {
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
+ GENERAL_NAMES *gens = sk_GENERAL_NAME_new_null();
+ if (gens == NULL) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- cnf = sk_CONF_VALUE_value(nval, i);
- if (!(gen = v2i_GENERAL_NAME(method, ctx, cnf))) {
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
+ GENERAL_NAME *gen = v2i_GENERAL_NAME(method, ctx, cnf);
+ if (gen == NULL || !sk_GENERAL_NAME_push(gens, gen)) {
+ GENERAL_NAME_free(gen);
goto err;
}
- sk_GENERAL_NAME_push(gens, gen);
}
return gens;
err:
@@ -450,14 +451,15 @@
return NULL;
}
-GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- CONF_VALUE *cnf) {
+GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx, const CONF_VALUE *cnf) {
return v2i_GENERAL_NAME_ex(NULL, method, ctx, cnf, 0);
}
GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
- const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- int gen_type, const char *value, int is_nc) {
+ const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx, int gen_type,
+ const char *value, int is_nc) {
char is_string = 0;
GENERAL_NAME *gen = NULL;
@@ -545,19 +547,16 @@
GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc) {
- int type;
-
- char *name, *value;
-
- name = cnf->name;
- value = cnf->value;
-
+ const X509V3_CTX *ctx, const CONF_VALUE *cnf,
+ int is_nc) {
+ const char *name = cnf->name;
+ const char *value = cnf->value;
if (!value) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_MISSING_VALUE);
return NULL;
}
+ int type;
if (x509v3_conf_name_matches(name, "email")) {
type = GEN_EMAIL;
} else if (x509v3_conf_name_matches(name, "URI")) {
@@ -581,7 +580,8 @@
return a2i_GENERAL_NAME(out, method, ctx, type, value, is_nc);
}
-static int do_othername(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx) {
+static int do_othername(GENERAL_NAME *gen, const char *value,
+ const X509V3_CTX *ctx) {
char *objtmp = NULL;
const char *p;
int objlen;
@@ -611,7 +611,8 @@
return 1;
}
-static int do_dirname(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx) {
+static int do_dirname(GENERAL_NAME *gen, const char *value,
+ const X509V3_CTX *ctx) {
int ret = 0;
X509_NAME *nm = X509_NAME_new();
if (nm == NULL) {
diff --git a/crypto/x509v3/v3_bcons.c b/crypto/x509v3/v3_bcons.c
index 936a44d..11a6519 100644
--- a/crypto/x509v3/v3_bcons.c
+++ b/crypto/x509v3/v3_bcons.c
@@ -71,8 +71,8 @@
static STACK_OF(CONF_VALUE) *i2v_BASIC_CONSTRAINTS(
const X509V3_EXT_METHOD *method, void *ext, STACK_OF(CONF_VALUE) *extlist);
static void *v2i_BASIC_CONSTRAINTS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *values);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *values);
const X509V3_EXT_METHOD v3_bcons = {
NID_basic_constraints,
@@ -107,17 +107,15 @@
}
static void *v2i_BASIC_CONSTRAINTS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *values) {
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *values) {
BASIC_CONSTRAINTS *bcons = NULL;
- CONF_VALUE *val;
- size_t i;
if (!(bcons = BASIC_CONSTRAINTS_new())) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(values); i++) {
- val = sk_CONF_VALUE_value(values, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(values); i++) {
+ const CONF_VALUE *val = sk_CONF_VALUE_value(values, i);
if (!strcmp(val->name, "CA")) {
if (!X509V3_get_value_bool(val, &bcons->ca)) {
goto err;
diff --git a/crypto/x509v3/v3_bitst.c b/crypto/x509v3/v3_bitst.c
index 9562826..c1d1734 100644
--- a/crypto/x509v3/v3_bitst.c
+++ b/crypto/x509v3/v3_bitst.c
@@ -102,17 +102,16 @@
}
static void *v2i_ASN1_BIT_STRING(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) {
- CONF_VALUE *val;
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
ASN1_BIT_STRING *bs;
- size_t i;
- const BIT_STRING_BITNAME *bnam;
if (!(bs = ASN1_BIT_STRING_new())) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- val = sk_CONF_VALUE_value(nval, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *val = sk_CONF_VALUE_value(nval, i);
+ const BIT_STRING_BITNAME *bnam;
for (bnam = method->usr_data; bnam->lname; bnam++) {
if (!strcmp(bnam->sname, val->name) || !strcmp(bnam->lname, val->name)) {
if (!ASN1_BIT_STRING_set_bit(bs, bnam->bitnum, 1)) {
diff --git a/crypto/x509v3/v3_conf.c b/crypto/x509v3/v3_conf.c
index b5a760d..ef55363 100644
--- a/crypto/x509v3/v3_conf.c
+++ b/crypto/x509v3/v3_conf.c
@@ -74,20 +74,20 @@
static int v3_check_critical(const char **value);
static int v3_check_generic(const char **value);
-static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid,
- int crit, const char *value);
+static X509_EXTENSION *do_ext_nconf(const CONF *conf, const X509V3_CTX *ctx,
+ int ext_nid, int crit, const char *value);
static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
int crit, int type,
- X509V3_CTX *ctx);
+ const X509V3_CTX *ctx);
static X509_EXTENSION *do_ext_i2d(const X509V3_EXT_METHOD *method, int ext_nid,
int crit, void *ext_struc);
-static unsigned char *generic_asn1(const char *value, X509V3_CTX *ctx,
+static unsigned char *generic_asn1(const char *value, const X509V3_CTX *ctx,
long *ext_len);
// CONF *conf: Config file
// char *name: Name
// char *value: Value
-X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
- const char *value) {
+X509_EXTENSION *X509V3_EXT_nconf(const CONF *conf, const X509V3_CTX *ctx,
+ const char *name, const char *value) {
int crit;
int ext_type;
X509_EXTENSION *ret;
@@ -105,8 +105,8 @@
// CONF *conf: Config file
// char *value: Value
-X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
- const char *value) {
+X509_EXTENSION *X509V3_EXT_nconf_nid(const CONF *conf, const X509V3_CTX *ctx,
+ int ext_nid, const char *value) {
int crit;
int ext_type;
crit = v3_check_critical(&value);
@@ -119,11 +119,12 @@
// CONF *conf: Config file
// char *value: Value
-static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid,
- int crit, const char *value) {
+static X509_EXTENSION *do_ext_nconf(const CONF *conf, const X509V3_CTX *ctx,
+ int ext_nid, int crit, const char *value) {
const X509V3_EXT_METHOD *method;
X509_EXTENSION *ext;
- STACK_OF(CONF_VALUE) *nval;
+ const STACK_OF(CONF_VALUE) *nval;
+ STACK_OF(CONF_VALUE) *nval_owned = NULL;
void *ext_struc;
if (ext_nid == NID_undef) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_UNKNOWN_EXTENSION_NAME);
@@ -138,20 +139,17 @@
if (*value == '@') {
nval = NCONF_get_section(conf, value + 1);
} else {
- nval = X509V3_parse_list(value);
+ nval_owned = X509V3_parse_list(value);
+ nval = nval_owned;
}
if (nval == NULL || sk_CONF_VALUE_num(nval) <= 0) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_EXTENSION_STRING);
ERR_add_error_data(4, "name=", OBJ_nid2sn(ext_nid), ",section=", value);
- if (*value != '@') {
- sk_CONF_VALUE_pop_free(nval, X509V3_conf_free);
- }
+ sk_CONF_VALUE_pop_free(nval_owned, X509V3_conf_free);
return NULL;
}
ext_struc = method->v2i(method, ctx, nval);
- if (*value != '@') {
- sk_CONF_VALUE_pop_free(nval, X509V3_conf_free);
- }
+ sk_CONF_VALUE_pop_free(nval_owned, X509V3_conf_free);
if (!ext_struc) {
return NULL;
}
@@ -272,7 +270,7 @@
// Create a generic extension: for now just handle DER type
static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
int crit, int gen_type,
- X509V3_CTX *ctx) {
+ const X509V3_CTX *ctx) {
unsigned char *ext_der = NULL;
long ext_len = 0;
ASN1_OBJECT *obj = NULL;
@@ -314,7 +312,7 @@
return extension;
}
-static unsigned char *generic_asn1(const char *value, X509V3_CTX *ctx,
+static unsigned char *generic_asn1(const char *value, const X509V3_CTX *ctx,
long *ext_len) {
ASN1_TYPE *typ;
unsigned char *ext_der = NULL;
@@ -330,18 +328,17 @@
// This is the main function: add a bunch of extensions based on a config
// file section to an extension STACK.
-int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section,
+int X509V3_EXT_add_nconf_sk(const CONF *conf, const X509V3_CTX *ctx,
+ const char *section,
STACK_OF(X509_EXTENSION) **sk) {
- X509_EXTENSION *ext;
- STACK_OF(CONF_VALUE) *nval;
- CONF_VALUE *val;
- size_t i;
- if (!(nval = NCONF_get_section(conf, section))) {
+ const STACK_OF(CONF_VALUE) *nval = NCONF_get_section(conf, section);
+ if (nval == NULL) {
return 0;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- val = sk_CONF_VALUE_value(nval, i);
- if (!(ext = X509V3_EXT_nconf(conf, ctx, val->name, val->value))) {
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *val = sk_CONF_VALUE_value(nval, i);
+ X509_EXTENSION *ext = X509V3_EXT_nconf(conf, ctx, val->name, val->value);
+ if (ext == NULL) {
return 0;
}
if (sk) {
@@ -354,8 +351,8 @@
// Convenience functions to add extensions to a certificate, CRL and request
-int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
- X509 *cert) {
+int X509V3_EXT_add_nconf(const CONF *conf, const X509V3_CTX *ctx,
+ const char *section, X509 *cert) {
STACK_OF(X509_EXTENSION) **sk = NULL;
if (cert) {
sk = &cert->cert_info->extensions;
@@ -365,8 +362,8 @@
// Same as above but for a CRL
-int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
- X509_CRL *crl) {
+int X509V3_EXT_CRL_add_nconf(const CONF *conf, const X509V3_CTX *ctx,
+ const char *section, X509_CRL *crl) {
STACK_OF(X509_EXTENSION) **sk = NULL;
if (crl) {
sk = &crl->crl->extensions;
@@ -376,8 +373,8 @@
// Add extensions to certificate request
-int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
- X509_REQ *req) {
+int X509V3_EXT_REQ_add_nconf(const CONF *conf, const X509V3_CTX *ctx,
+ const char *section, X509_REQ *req) {
STACK_OF(X509_EXTENSION) *extlist = NULL, **sk = NULL;
int i;
if (req) {
@@ -394,9 +391,8 @@
// Config database functions
-// TODO(davidben): This function and |NCONF_get_section| should return const
-// pointers.
-STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section) {
+const STACK_OF(CONF_VALUE) *X509V3_get_section(const X509V3_CTX *ctx,
+ const char *section) {
if (ctx->db == NULL) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_OPERATION_NOT_DEFINED);
return NULL;
@@ -408,8 +404,8 @@
ctx->db = conf;
}
-void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subj, X509_REQ *req,
- X509_CRL *crl, int flags) {
+void X509V3_set_ctx(X509V3_CTX *ctx, const X509 *issuer, const X509 *subj,
+ const X509_REQ *req, const X509_CRL *crl, int flags) {
ctx->issuer_cert = issuer;
ctx->subject_cert = subj;
ctx->crl = crl;
diff --git a/crypto/x509v3/v3_cpols.c b/crypto/x509v3/v3_cpols.c
index c2bc885..6fa011d 100644
--- a/crypto/x509v3/v3_cpols.c
+++ b/crypto/x509v3/v3_cpols.c
@@ -75,16 +75,19 @@
static int i2r_certpol(const X509V3_EXT_METHOD *method, void *ext, BIO *out,
int indent);
-static void *r2i_certpol(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
+static void *r2i_certpol(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
const char *value);
static void print_qualifiers(BIO *out, const STACK_OF(POLICYQUALINFO) *quals,
int indent);
static void print_notice(BIO *out, const USERNOTICE *notice, int indent);
-static POLICYINFO *policy_section(X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *polstrs, int ia5org);
-static POLICYQUALINFO *notice_section(X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *unot, int ia5org);
-static int nref_nos(STACK_OF(ASN1_INTEGER) *nnums, STACK_OF(CONF_VALUE) *nos);
+static POLICYINFO *policy_section(const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *polstrs,
+ int ia5org);
+static POLICYQUALINFO *notice_section(const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *unot,
+ int ia5org);
+static int nref_nos(STACK_OF(ASN1_INTEGER) *nnums,
+ const STACK_OF(CONF_VALUE) *nos);
const X509V3_EXT_METHOD v3_cpols = {
NID_certificate_policies,
@@ -147,40 +150,33 @@
IMPLEMENT_ASN1_FUNCTIONS_const(NOTICEREF)
-static void *r2i_certpol(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
+static void *r2i_certpol(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
const char *value) {
- STACK_OF(POLICYINFO) *pols = NULL;
- char *pstr;
- POLICYINFO *pol;
- ASN1_OBJECT *pobj;
- STACK_OF(CONF_VALUE) *vals;
- CONF_VALUE *cnf;
- size_t i;
- int ia5org;
- pols = sk_POLICYINFO_new_null();
+ STACK_OF(POLICYINFO) *pols = sk_POLICYINFO_new_null();
if (pols == NULL) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- vals = X509V3_parse_list(value);
+ STACK_OF(CONF_VALUE) *vals = X509V3_parse_list(value);
if (vals == NULL) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_X509V3_LIB);
goto err;
}
- ia5org = 0;
- for (i = 0; i < sk_CONF_VALUE_num(vals); i++) {
- cnf = sk_CONF_VALUE_value(vals, i);
+ int ia5org = 0;
+ for (size_t i = 0; i < sk_CONF_VALUE_num(vals); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(vals, i);
if (cnf->value || !cnf->name) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_POLICY_IDENTIFIER);
X509V3_conf_err(cnf);
goto err;
}
- pstr = cnf->name;
+ POLICYINFO *pol;
+ const char *pstr = cnf->name;
if (!strcmp(pstr, "ia5org")) {
ia5org = 1;
continue;
} else if (*pstr == '@') {
- STACK_OF(CONF_VALUE) *polsect = X509V3_get_section(ctx, pstr + 1);
+ const STACK_OF(CONF_VALUE) *polsect = X509V3_get_section(ctx, pstr + 1);
if (!polsect) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SECTION);
@@ -192,7 +188,8 @@
goto err;
}
} else {
- if (!(pobj = OBJ_txt2obj(cnf->name, 0))) {
+ ASN1_OBJECT *pobj = OBJ_txt2obj(cnf->name, 0);
+ if (pobj == NULL) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER);
X509V3_conf_err(cnf);
goto err;
@@ -219,17 +216,16 @@
return NULL;
}
-static POLICYINFO *policy_section(X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *polstrs, int ia5org) {
- size_t i;
- CONF_VALUE *cnf;
+static POLICYINFO *policy_section(const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *polstrs,
+ int ia5org) {
POLICYINFO *pol;
POLICYQUALINFO *qual;
if (!(pol = POLICYINFO_new())) {
goto merr;
}
- for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) {
- cnf = sk_CONF_VALUE_value(polstrs, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(polstrs); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(polstrs, i);
if (!strcmp(cnf->name, "policyIdentifier")) {
ASN1_OBJECT *pobj;
if (!(pobj = OBJ_txt2obj(cnf->value, 0))) {
@@ -267,10 +263,10 @@
X509V3_conf_err(cnf);
goto err;
}
- STACK_OF(CONF_VALUE) *unot = X509V3_get_section(ctx, cnf->value + 1);
+ const STACK_OF(CONF_VALUE) *unot =
+ X509V3_get_section(ctx, cnf->value + 1);
if (!unot) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SECTION);
-
X509V3_conf_err(cnf);
goto err;
}
@@ -306,12 +302,10 @@
return NULL;
}
-static POLICYQUALINFO *notice_section(X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *unot, int ia5org) {
- size_t i;
- int ret;
- CONF_VALUE *cnf;
- USERNOTICE * not ;
+static POLICYQUALINFO *notice_section(const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *unot,
+ int ia5org) {
+ USERNOTICE *notice;
POLICYQUALINFO *qual;
if (!(qual = POLICYQUALINFO_new())) {
goto merr;
@@ -321,29 +315,29 @@
OPENSSL_PUT_ERROR(X509V3, ERR_R_INTERNAL_ERROR);
goto err;
}
- if (!(not = USERNOTICE_new())) {
+ if (!(notice = USERNOTICE_new())) {
goto merr;
}
- qual->d.usernotice = not ;
- for (i = 0; i < sk_CONF_VALUE_num(unot); i++) {
- cnf = sk_CONF_VALUE_value(unot, i);
+ qual->d.usernotice = notice;
+ for (size_t i = 0; i < sk_CONF_VALUE_num(unot); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(unot, i);
if (!strcmp(cnf->name, "explicitText")) {
- not ->exptext = ASN1_VISIBLESTRING_new();
- if (not ->exptext == NULL) {
+ notice->exptext = ASN1_VISIBLESTRING_new();
+ if (notice->exptext == NULL) {
goto merr;
}
- if (!ASN1_STRING_set(not ->exptext, cnf->value, strlen(cnf->value))) {
+ if (!ASN1_STRING_set(notice->exptext, cnf->value, strlen(cnf->value))) {
goto merr;
}
} else if (!strcmp(cnf->name, "organization")) {
NOTICEREF *nref;
- if (!not ->noticeref) {
+ if (!notice->noticeref) {
if (!(nref = NOTICEREF_new())) {
goto merr;
}
- not ->noticeref = nref;
+ notice->noticeref = nref;
} else {
- nref = not ->noticeref;
+ nref = notice->noticeref;
}
if (ia5org) {
nref->organization->type = V_ASN1_IA5STRING;
@@ -357,13 +351,13 @@
} else if (!strcmp(cnf->name, "noticeNumbers")) {
NOTICEREF *nref;
STACK_OF(CONF_VALUE) *nos;
- if (!not ->noticeref) {
+ if (!notice->noticeref) {
if (!(nref = NOTICEREF_new())) {
goto merr;
}
- not ->noticeref = nref;
+ notice->noticeref = nref;
} else {
- nref = not ->noticeref;
+ nref = notice->noticeref;
}
nos = X509V3_parse_list(cnf->value);
if (!nos || !sk_CONF_VALUE_num(nos)) {
@@ -371,7 +365,7 @@
X509V3_conf_err(cnf);
goto err;
}
- ret = nref_nos(nref->noticenos, nos);
+ int ret = nref_nos(nref->noticenos, nos);
sk_CONF_VALUE_pop_free(nos, X509V3_conf_free);
if (!ret) {
goto err;
@@ -383,8 +377,8 @@
}
}
- if (not ->noticeref &&
- (!not ->noticeref->noticenos || !not ->noticeref->organization)) {
+ if (notice->noticeref &&
+ (!notice->noticeref->noticenos || !notice->noticeref->organization)) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_NEED_ORGANIZATION_AND_NUMBERS);
goto err;
}
@@ -399,30 +393,22 @@
return NULL;
}
-static int nref_nos(STACK_OF(ASN1_INTEGER) *nnums, STACK_OF(CONF_VALUE) *nos) {
- CONF_VALUE *cnf;
- ASN1_INTEGER *aint;
-
- size_t i;
-
- for (i = 0; i < sk_CONF_VALUE_num(nos); i++) {
- cnf = sk_CONF_VALUE_value(nos, i);
- if (!(aint = s2i_ASN1_INTEGER(NULL, cnf->name))) {
+static int nref_nos(STACK_OF(ASN1_INTEGER) *nnums,
+ const STACK_OF(CONF_VALUE) *nos) {
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nos); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nos, i);
+ ASN1_INTEGER *aint = s2i_ASN1_INTEGER(NULL, cnf->name);
+ if (aint == NULL) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NUMBER);
- goto err;
+ return 0;
}
if (!sk_ASN1_INTEGER_push(nnums, aint)) {
- goto merr;
+ ASN1_INTEGER_free(aint);
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
+ return 0;
}
}
return 1;
-
-merr:
- ASN1_INTEGER_free(aint);
- OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
-
-err:
- return 0;
}
static int i2r_certpol(const X509V3_EXT_METHOD *method, void *ext, BIO *out,
diff --git a/crypto/x509v3/v3_crld.c b/crypto/x509v3/v3_crld.c
index 4093d7b..0291630 100644
--- a/crypto/x509v3/v3_crld.c
+++ b/crypto/x509v3/v3_crld.c
@@ -70,8 +70,8 @@
#include "internal.h"
-static void *v2i_crld(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval);
+static void *v2i_crld(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
static int i2r_crldp(const X509V3_EXT_METHOD *method, void *pcrldp, BIO *out,
int indent);
@@ -109,28 +109,27 @@
NULL,
};
-static STACK_OF(GENERAL_NAME) *gnames_from_sectname(X509V3_CTX *ctx,
+static STACK_OF(GENERAL_NAME) *gnames_from_sectname(const X509V3_CTX *ctx,
char *sect) {
- STACK_OF(CONF_VALUE) *gnsect;
- STACK_OF(GENERAL_NAME) *gens;
+ const STACK_OF(CONF_VALUE) *gnsect;
+ STACK_OF(CONF_VALUE) *gnsect_owned = NULL;
if (*sect == '@') {
gnsect = X509V3_get_section(ctx, sect + 1);
} else {
- gnsect = X509V3_parse_list(sect);
+ gnsect_owned = X509V3_parse_list(sect);
+ gnsect = gnsect_owned;
}
if (!gnsect) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_SECTION_NOT_FOUND);
return NULL;
}
- gens = v2i_GENERAL_NAMES(NULL, ctx, gnsect);
- if (*sect != '@') {
- sk_CONF_VALUE_pop_free(gnsect, X509V3_conf_free);
- }
+ STACK_OF(GENERAL_NAME) *gens = v2i_GENERAL_NAMES(NULL, ctx, gnsect);
+ sk_CONF_VALUE_pop_free(gnsect_owned, X509V3_conf_free);
return gens;
}
-static int set_dist_point_name(DIST_POINT_NAME **pdp, X509V3_CTX *ctx,
- CONF_VALUE *cnf) {
+static int set_dist_point_name(DIST_POINT_NAME **pdp, const X509V3_CTX *ctx,
+ const CONF_VALUE *cnf) {
STACK_OF(GENERAL_NAME) *fnm = NULL;
STACK_OF(X509_NAME_ENTRY) *rnm = NULL;
if (!strncmp(cnf->name, "fullname", 9)) {
@@ -203,7 +202,7 @@
{8, "AA Compromise", "AACompromise"},
{-1, NULL, NULL}};
-static int set_reasons(ASN1_BIT_STRING **preas, char *value) {
+static int set_reasons(ASN1_BIT_STRING **preas, const char *value) {
STACK_OF(CONF_VALUE) *rsk = NULL;
const BIT_STRING_BITNAME *pbn;
const char *bnam;
@@ -266,19 +265,16 @@
return 1;
}
-static DIST_POINT *crldp_from_section(X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval) {
- size_t i;
- CONF_VALUE *cnf;
+static DIST_POINT *crldp_from_section(const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
DIST_POINT *point = NULL;
point = DIST_POINT_new();
if (!point) {
goto err;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- int ret;
- cnf = sk_CONF_VALUE_value(nval, i);
- ret = set_dist_point_name(&point->distpoint, ctx, cnf);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
+ int ret = set_dist_point_name(&point->distpoint, ctx, cnf);
if (ret > 0) {
continue;
}
@@ -304,21 +300,19 @@
return NULL;
}
-static void *v2i_crld(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval) {
+static void *v2i_crld(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
STACK_OF(DIST_POINT) *crld = NULL;
GENERAL_NAMES *gens = NULL;
GENERAL_NAME *gen = NULL;
- CONF_VALUE *cnf;
- size_t i;
if (!(crld = sk_DIST_POINT_new_null())) {
goto merr;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
DIST_POINT *point;
- cnf = sk_CONF_VALUE_value(nval, i);
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
if (!cnf->value) {
- STACK_OF(CONF_VALUE) *dpsect = X509V3_get_section(ctx, cnf->name);
+ const STACK_OF(CONF_VALUE) *dpsect = X509V3_get_section(ctx, cnf->name);
if (!dpsect) {
goto err;
}
@@ -420,8 +414,8 @@
static int i2r_idp(const X509V3_EXT_METHOD *method, void *pidp, BIO *out,
int indent);
-static void *v2i_idp(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval);
+static void *v2i_idp(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
const X509V3_EXT_METHOD v3_idp = {
NID_issuing_distribution_point,
@@ -440,22 +434,17 @@
NULL,
};
-static void *v2i_idp(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval) {
- ISSUING_DIST_POINT *idp = NULL;
- CONF_VALUE *cnf;
- char *name, *val;
- size_t i;
- int ret;
- idp = ISSUING_DIST_POINT_new();
+static void *v2i_idp(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
+ ISSUING_DIST_POINT *idp = ISSUING_DIST_POINT_new();
if (!idp) {
goto merr;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- cnf = sk_CONF_VALUE_value(nval, i);
- name = cnf->name;
- val = cnf->value;
- ret = set_dist_point_name(&idp->distpoint, ctx, cnf);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
+ const char *name = cnf->name;
+ const char *val = cnf->value;
+ int ret = set_dist_point_name(&idp->distpoint, ctx, cnf);
if (ret > 0) {
continue;
}
diff --git a/crypto/x509v3/v3_extku.c b/crypto/x509v3/v3_extku.c
index 568e289..d493bf2 100644
--- a/crypto/x509v3/v3_extku.c
+++ b/crypto/x509v3/v3_extku.c
@@ -67,8 +67,8 @@
static void *v2i_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
static STACK_OF(CONF_VALUE) *i2v_EXTENDED_KEY_USAGE(
const X509V3_EXT_METHOD *method, void *eku, STACK_OF(CONF_VALUE) *extlist);
@@ -115,12 +115,10 @@
static STACK_OF(CONF_VALUE) *i2v_EXTENDED_KEY_USAGE(
const X509V3_EXT_METHOD *method, void *a, STACK_OF(CONF_VALUE) *ext_list) {
- EXTENDED_KEY_USAGE *eku = a;
- size_t i;
- ASN1_OBJECT *obj;
- char obj_tmp[80];
- for (i = 0; i < sk_ASN1_OBJECT_num(eku); i++) {
- obj = sk_ASN1_OBJECT_value(eku, i);
+ const EXTENDED_KEY_USAGE *eku = a;
+ for (size_t i = 0; i < sk_ASN1_OBJECT_num(eku); i++) {
+ const ASN1_OBJECT *obj = sk_ASN1_OBJECT_value(eku, i);
+ char obj_tmp[80];
i2t_ASN1_OBJECT(obj_tmp, 80, obj);
X509V3_add_value(NULL, obj_tmp, &ext_list);
}
@@ -128,33 +126,31 @@
}
static void *v2i_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval) {
- EXTENDED_KEY_USAGE *extku;
- char *extval;
- ASN1_OBJECT *objtmp;
- CONF_VALUE *val;
- size_t i;
-
- if (!(extku = sk_ASN1_OBJECT_new_null())) {
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
+ EXTENDED_KEY_USAGE *extku = sk_ASN1_OBJECT_new_null();
+ if (extku == NULL) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- val = sk_CONF_VALUE_value(nval, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *val = sk_CONF_VALUE_value(nval, i);
+ const char *extval;
if (val->value) {
extval = val->value;
} else {
extval = val->name;
}
- if (!(objtmp = OBJ_txt2obj(extval, 0))) {
+ ASN1_OBJECT *obj = OBJ_txt2obj(extval, 0);
+ if (obj == NULL || !sk_ASN1_OBJECT_push(extku, obj)) {
+ ASN1_OBJECT_free(obj);
sk_ASN1_OBJECT_pop_free(extku, ASN1_OBJECT_free);
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER);
X509V3_conf_err(val);
return NULL;
}
- sk_ASN1_OBJECT_push(extku, objtmp);
}
+
return extku;
}
diff --git a/crypto/x509v3/v3_ia5.c b/crypto/x509v3/v3_ia5.c
index 8abf40c..80ba5f9 100644
--- a/crypto/x509v3/v3_ia5.c
+++ b/crypto/x509v3/v3_ia5.c
@@ -86,7 +86,7 @@
}
static void *s2i_ASN1_IA5STRING(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, const char *str) {
+ const X509V3_CTX *ctx, const char *str) {
ASN1_IA5STRING *ia5;
if (!str) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_ARGUMENT);
diff --git a/crypto/x509v3/v3_info.c b/crypto/x509v3/v3_info.c
index 872346a..386b519 100644
--- a/crypto/x509v3/v3_info.c
+++ b/crypto/x509v3/v3_info.c
@@ -71,8 +71,8 @@
static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(
const X509V3_EXT_METHOD *method, void *ext, STACK_OF(CONF_VALUE) *ret);
static void *v2i_AUTHORITY_INFO_ACCESS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
const X509V3_EXT_METHOD v3_info = {
NID_info_access,
@@ -166,8 +166,8 @@
}
static void *v2i_AUTHORITY_INFO_ACCESS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval) {
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
AUTHORITY_INFO_ACCESS *ainfo = NULL;
ACCESS_DESCRIPTION *acc;
char *objtmp, *ptmp;
@@ -176,7 +176,7 @@
return NULL;
}
for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
+ const CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i);
if (!(acc = ACCESS_DESCRIPTION_new()) ||
!sk_ACCESS_DESCRIPTION_push(ainfo, acc)) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
diff --git a/crypto/x509v3/v3_int.c b/crypto/x509v3/v3_int.c
index 50cef84..843c758 100644
--- a/crypto/x509v3/v3_int.c
+++ b/crypto/x509v3/v3_int.c
@@ -65,7 +65,7 @@
return i2s_ASN1_INTEGER(method, ext);
}
-static void *s2i_asn1_int(const X509V3_EXT_METHOD *meth, X509V3_CTX *ctx,
+static void *s2i_asn1_int(const X509V3_EXT_METHOD *meth, const X509V3_CTX *ctx,
const char *value) {
return s2i_ASN1_INTEGER(meth, value);
}
diff --git a/crypto/x509v3/v3_ncons.c b/crypto/x509v3/v3_ncons.c
index f923e29..97a79c8 100644
--- a/crypto/x509v3/v3_ncons.c
+++ b/crypto/x509v3/v3_ncons.c
@@ -70,7 +70,8 @@
static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
static int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a,
BIO *bp, int ind);
static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
@@ -120,9 +121,8 @@
IMPLEMENT_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) {
- size_t i;
- CONF_VALUE tval, *val;
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
STACK_OF(GENERAL_SUBTREE) **ptree = NULL;
NAME_CONSTRAINTS *ncons = NULL;
GENERAL_SUBTREE *sub = NULL;
@@ -130,8 +130,9 @@
if (!ncons) {
goto memerr;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- val = sk_CONF_VALUE_value(nval, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *val = sk_CONF_VALUE_value(nval, i);
+ CONF_VALUE tval;
if (!strncmp(val->name, "permitted", 9) && val->name[9]) {
ptree = &ncons->permittedSubtrees;
tval.name = val->name + 10;
diff --git a/crypto/x509v3/v3_ocsp.c b/crypto/x509v3/v3_ocsp.c
index b490a11..f0ed0b8 100644
--- a/crypto/x509v3/v3_ocsp.c
+++ b/crypto/x509v3/v3_ocsp.c
@@ -20,8 +20,8 @@
static int i2r_ocsp_nocheck(const X509V3_EXT_METHOD *method, void *nocheck,
BIO *out, int indent);
-static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- const char *str);
+static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx, const char *str);
const X509V3_EXT_METHOD v3_crl_invdate = {
NID_invalidity_date,
@@ -75,7 +75,7 @@
return 1;
}
-static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- const char *str) {
+static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method,
+ const X509V3_CTX *ctx, const char *str) {
return ASN1_NULL_new();
}
diff --git a/crypto/x509v3/v3_pci.c b/crypto/x509v3/v3_pci.c
index ccbc885..5616aac 100644
--- a/crypto/x509v3/v3_pci.c
+++ b/crypto/x509v3/v3_pci.c
@@ -49,7 +49,7 @@
static int i2r_pci(const X509V3_EXT_METHOD *method, void *ext, BIO *out,
int indent);
-static void *r2i_pci(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
+static void *r2i_pci(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
const char *str);
const X509V3_EXT_METHOD v3_pci = {
@@ -195,7 +195,7 @@
return 0;
}
-static void *r2i_pci(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
+static void *r2i_pci(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
const char *value) {
PROXY_CERT_INFO_EXTENSION *pci = NULL;
STACK_OF(CONF_VALUE) *vals;
diff --git a/crypto/x509v3/v3_pcons.c b/crypto/x509v3/v3_pcons.c
index 69c8933..ea1e8ba 100644
--- a/crypto/x509v3/v3_pcons.c
+++ b/crypto/x509v3/v3_pcons.c
@@ -72,8 +72,8 @@
const X509V3_EXT_METHOD *method, void *bcons,
STACK_OF(CONF_VALUE) *extlist);
static void *v2i_POLICY_CONSTRAINTS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *values);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *values);
const X509V3_EXT_METHOD v3_policy_constraints = {
NID_policy_constraints,
@@ -100,7 +100,7 @@
static STACK_OF(CONF_VALUE) *i2v_POLICY_CONSTRAINTS(
const X509V3_EXT_METHOD *method, void *a, STACK_OF(CONF_VALUE) *extlist) {
- POLICY_CONSTRAINTS *pcons = a;
+ const POLICY_CONSTRAINTS *pcons = a;
X509V3_add_value_int("Require Explicit Policy", pcons->requireExplicitPolicy,
&extlist);
X509V3_add_value_int("Inhibit Policy Mapping", pcons->inhibitPolicyMapping,
@@ -109,17 +109,15 @@
}
static void *v2i_POLICY_CONSTRAINTS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *values) {
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *values) {
POLICY_CONSTRAINTS *pcons = NULL;
- CONF_VALUE *val;
- size_t i;
if (!(pcons = POLICY_CONSTRAINTS_new())) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(values); i++) {
- val = sk_CONF_VALUE_value(values, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(values); i++) {
+ const CONF_VALUE *val = sk_CONF_VALUE_value(values, i);
if (!strcmp(val->name, "requireExplicitPolicy")) {
if (!X509V3_get_value_int(val, &pcons->requireExplicitPolicy)) {
goto err;
diff --git a/crypto/x509v3/v3_pmaps.c b/crypto/x509v3/v3_pmaps.c
index 3e9dcb3..3049347 100644
--- a/crypto/x509v3/v3_pmaps.c
+++ b/crypto/x509v3/v3_pmaps.c
@@ -67,7 +67,8 @@
static void *v2i_POLICY_MAPPINGS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
static STACK_OF(CONF_VALUE) *i2v_POLICY_MAPPINGS(
const X509V3_EXT_METHOD *method, void *pmps, STACK_OF(CONF_VALUE) *extlist);
@@ -101,13 +102,10 @@
static STACK_OF(CONF_VALUE) *i2v_POLICY_MAPPINGS(
const X509V3_EXT_METHOD *method, void *a, STACK_OF(CONF_VALUE) *ext_list) {
- POLICY_MAPPINGS *pmaps = a;
- POLICY_MAPPING *pmap;
- size_t i;
- char obj_tmp1[80];
- char obj_tmp2[80];
- for (i = 0; i < sk_POLICY_MAPPING_num(pmaps); i++) {
- pmap = sk_POLICY_MAPPING_value(pmaps, i);
+ const POLICY_MAPPINGS *pmaps = a;
+ for (size_t i = 0; i < sk_POLICY_MAPPING_num(pmaps); i++) {
+ const POLICY_MAPPING *pmap = sk_POLICY_MAPPING_value(pmaps, i);
+ char obj_tmp1[80], obj_tmp2[80];
i2t_ASN1_OBJECT(obj_tmp1, 80, pmap->issuerDomainPolicy);
i2t_ASN1_OBJECT(obj_tmp2, 80, pmap->subjectDomainPolicy);
X509V3_add_value(obj_tmp1, obj_tmp2, &ext_list);
@@ -116,43 +114,39 @@
}
static void *v2i_POLICY_MAPPINGS(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) {
- POLICY_MAPPINGS *pmaps;
- POLICY_MAPPING *pmap;
- ASN1_OBJECT *obj1, *obj2;
- CONF_VALUE *val;
- size_t i;
-
- if (!(pmaps = sk_POLICY_MAPPING_new_null())) {
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval) {
+ POLICY_MAPPINGS *pmaps = sk_POLICY_MAPPING_new_null();
+ if (pmaps == NULL) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
- val = sk_CONF_VALUE_value(nval, i);
+ for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+ const CONF_VALUE *val = sk_CONF_VALUE_value(nval, i);
if (!val->value || !val->name) {
sk_POLICY_MAPPING_pop_free(pmaps, POLICY_MAPPING_free);
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER);
X509V3_conf_err(val);
return NULL;
}
- obj1 = OBJ_txt2obj(val->name, 0);
- obj2 = OBJ_txt2obj(val->value, 0);
+ ASN1_OBJECT *obj1 = OBJ_txt2obj(val->name, 0);
+ ASN1_OBJECT *obj2 = OBJ_txt2obj(val->value, 0);
if (!obj1 || !obj2) {
sk_POLICY_MAPPING_pop_free(pmaps, POLICY_MAPPING_free);
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER);
X509V3_conf_err(val);
return NULL;
}
- pmap = POLICY_MAPPING_new();
- if (!pmap) {
+ POLICY_MAPPING *pmap = POLICY_MAPPING_new();
+ if (pmap == NULL || !sk_POLICY_MAPPING_push(pmaps, pmap)) {
+ POLICY_MAPPING_free(pmap);
sk_POLICY_MAPPING_pop_free(pmaps, POLICY_MAPPING_free);
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
return NULL;
}
pmap->issuerDomainPolicy = obj1;
pmap->subjectDomainPolicy = obj2;
- sk_POLICY_MAPPING_push(pmaps, pmap);
}
return pmaps;
}
diff --git a/crypto/x509v3/v3_skey.c b/crypto/x509v3/v3_skey.c
index 05c5050..9e777ed 100644
--- a/crypto/x509v3/v3_skey.c
+++ b/crypto/x509v3/v3_skey.c
@@ -73,7 +73,8 @@
}
ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, const char *str) {
+ const X509V3_CTX *ctx,
+ const char *str) {
ASN1_OCTET_STRING *oct;
long length;
@@ -97,7 +98,7 @@
return i2s_ASN1_OCTET_STRING(method, ext);
}
-static void *s2i_skey_id(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
+static void *s2i_skey_id(const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
const char *str) {
ASN1_OCTET_STRING *oct;
ASN1_BIT_STRING *pk;
diff --git a/decrepit/x509/x509_decrepit.c b/decrepit/x509/x509_decrepit.c
index 3abab06..5af499e 100644
--- a/decrepit/x509/x509_decrepit.c
+++ b/decrepit/x509/x509_decrepit.c
@@ -19,8 +19,9 @@
#include <openssl/conf.h>
-X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
- int ext_nid, const char *value) {
+X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,
+ const X509V3_CTX *ctx, int ext_nid,
+ const char *value) {
assert(conf == NULL);
return X509V3_EXT_nconf_nid(NULL, ctx, ext_nid, value);
}
diff --git a/include/openssl/conf.h b/include/openssl/conf.h
index 0872e13..908c16e 100644
--- a/include/openssl/conf.h
+++ b/include/openssl/conf.h
@@ -110,8 +110,8 @@
// NCONF_get_section returns a stack of values for a given section in |conf|.
// If |section| is NULL, the default section is returned. It returns NULL on
// error.
-OPENSSL_EXPORT STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,
- const char *section);
+OPENSSL_EXPORT const STACK_OF(CONF_VALUE) *NCONF_get_section(
+ const CONF *conf, const char *section);
// NCONF_get_string returns the value of the key |name|, in section |section|.
// The |section| argument may be NULL to indicate the default section. It
diff --git a/include/openssl/x509v3.h b/include/openssl/x509v3.h
index ec2427d..c0d1677 100644
--- a/include/openssl/x509v3.h
+++ b/include/openssl/x509v3.h
@@ -89,14 +89,15 @@
void *ext,
STACK_OF(CONF_VALUE) *extlist);
typedef void *(*X509V3_EXT_V2I)(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *values);
+ const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *values);
typedef char *(*X509V3_EXT_I2S)(const X509V3_EXT_METHOD *method, void *ext);
typedef void *(*X509V3_EXT_S2I)(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, const char *str);
+ const X509V3_CTX *ctx, const char *str);
typedef int (*X509V3_EXT_I2R)(const X509V3_EXT_METHOD *method, void *ext,
BIO *out, int indent);
typedef void *(*X509V3_EXT_R2I)(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, const char *str);
+ const X509V3_CTX *ctx, const char *str);
// V3 extension structure
@@ -130,10 +131,10 @@
struct v3_ext_ctx {
#define CTX_TEST 0x1
int flags;
- X509 *issuer_cert;
- X509 *subject_cert;
- X509_REQ *subject_req;
- X509_CRL *crl;
+ const X509 *issuer_cert;
+ const X509 *subject_cert;
+ const X509_REQ *subject_req;
+ const X509_CRL *crl;
const CONF *db;
};
@@ -477,9 +478,9 @@
OPENSSL_EXPORT STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(
const X509V3_EXT_METHOD *method, GENERAL_NAMES *gen,
STACK_OF(CONF_VALUE) *extlist);
-OPENSSL_EXPORT GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx,
- STACK_OF(CONF_VALUE) *nval);
+OPENSSL_EXPORT GENERAL_NAMES *v2i_GENERAL_NAMES(
+ const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
+ const STACK_OF(CONF_VALUE) *nval);
DECLARE_ASN1_FUNCTIONS_const(OTHERNAME)
DECLARE_ASN1_FUNCTIONS_const(EDIPARTYNAME)
@@ -497,7 +498,7 @@
OPENSSL_EXPORT char *i2s_ASN1_OCTET_STRING(const X509V3_EXT_METHOD *method,
const ASN1_OCTET_STRING *ia5);
OPENSSL_EXPORT ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(
- const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str);
+ const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx, const char *str);
DECLARE_ASN1_FUNCTIONS_const(EXTENDED_KEY_USAGE)
OPENSSL_EXPORT int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a);
@@ -548,43 +549,51 @@
OPENSSL_EXPORT GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, int gen_type,
+ const X509V3_CTX *ctx, int gen_type,
const char *value, int is_nc);
OPENSSL_EXPORT GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,
- X509V3_CTX *ctx, CONF_VALUE *cnf);
+ const X509V3_CTX *ctx,
+ const CONF_VALUE *cnf);
OPENSSL_EXPORT GENERAL_NAME *v2i_GENERAL_NAME_ex(
- GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
- CONF_VALUE *cnf, int is_nc);
+ GENERAL_NAME *out, const X509V3_EXT_METHOD *method, const X509V3_CTX *ctx,
+ const CONF_VALUE *cnf, int is_nc);
OPENSSL_EXPORT void X509V3_conf_free(CONF_VALUE *val);
// X509V3_EXT_conf_nid contains the only exposed instance of an LHASH in our
// public headers. The |conf| pointer must be NULL but cryptography.io wraps
// this function so we cannot, yet, replace the type with a dummy struct.
OPENSSL_EXPORT X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,
- X509V3_CTX *ctx, int ext_nid,
+ const X509V3_CTX *ctx,
+ int ext_nid,
const char *value);
-OPENSSL_EXPORT X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx,
+OPENSSL_EXPORT X509_EXTENSION *X509V3_EXT_nconf_nid(const CONF *conf,
+ const X509V3_CTX *ctx,
int ext_nid,
const char *value);
-OPENSSL_EXPORT X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx,
+OPENSSL_EXPORT X509_EXTENSION *X509V3_EXT_nconf(const CONF *conf,
+ const X509V3_CTX *ctx,
const char *name,
const char *value);
-OPENSSL_EXPORT int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx,
+OPENSSL_EXPORT int X509V3_EXT_add_nconf_sk(const CONF *conf,
+ const X509V3_CTX *ctx,
const char *section,
STACK_OF(X509_EXTENSION) **sk);
-OPENSSL_EXPORT int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx,
+OPENSSL_EXPORT int X509V3_EXT_add_nconf(const CONF *conf, const X509V3_CTX *ctx,
const char *section, X509 *cert);
-OPENSSL_EXPORT int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx,
+OPENSSL_EXPORT int X509V3_EXT_REQ_add_nconf(const CONF *conf,
+ const X509V3_CTX *ctx,
const char *section, X509_REQ *req);
-OPENSSL_EXPORT int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx,
+OPENSSL_EXPORT int X509V3_EXT_CRL_add_nconf(const CONF *conf,
+ const X509V3_CTX *ctx,
const char *section, X509_CRL *crl);
OPENSSL_EXPORT void X509V3_set_nconf(X509V3_CTX *ctx, const CONF *conf);
-OPENSSL_EXPORT void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
- X509_REQ *req, X509_CRL *crl, int flags);
+OPENSSL_EXPORT void X509V3_set_ctx(X509V3_CTX *ctx, const X509 *issuer,
+ const X509 *subject, const X509_REQ *req,
+ const X509_CRL *crl, int flags);
OPENSSL_EXPORT char *i2s_ASN1_INTEGER(const X509V3_EXT_METHOD *meth,
const ASN1_INTEGER *aint);