Latest update.
This commit is contained in:
@@ -327,10 +327,10 @@ static int get_cert_by_subject(X509_LOOKUP *xl, X509_LOOKUP_TYPE type,
|
||||
/*
|
||||
* we have added it to the cache so now pull it out again
|
||||
*/
|
||||
CRYPTO_THREAD_write_lock(ctx->lock);
|
||||
X509_STORE_lock(xl->store_ctx);
|
||||
j = sk_X509_OBJECT_find(xl->store_ctx->objs, &stmp);
|
||||
tmp = sk_X509_OBJECT_value(xl->store_ctx->objs, j);
|
||||
CRYPTO_THREAD_unlock(ctx->lock);
|
||||
X509_STORE_unlock(xl->store_ctx);
|
||||
|
||||
/* If a CRL, update the last file suffix added for this */
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ static void tree_print(BIO *channel,
|
||||
curr++;
|
||||
|
||||
BIO_printf(channel, "Level print after %s\n", str);
|
||||
BIO_printf(channel, "Printing Up to Level %ld\n",
|
||||
BIO_printf(channel, "Printing Up to Level %zd\n",
|
||||
curr - tree->levels);
|
||||
for (plev = tree->levels; plev != curr; plev++) {
|
||||
int i;
|
||||
|
||||
+20
-6
@@ -256,6 +256,7 @@ static int extract_min_max(ASIdOrRange *aor,
|
||||
static int ASIdentifierChoice_is_canonical(ASIdentifierChoice *choice)
|
||||
{
|
||||
ASN1_INTEGER *a_max_plus_one = NULL;
|
||||
ASN1_INTEGER *orig;
|
||||
BIGNUM *bn = NULL;
|
||||
int i, ret = 0;
|
||||
|
||||
@@ -298,9 +299,15 @@ static int ASIdentifierChoice_is_canonical(ASIdentifierChoice *choice)
|
||||
*/
|
||||
if ((bn == NULL && (bn = BN_new()) == NULL) ||
|
||||
ASN1_INTEGER_to_BN(a_max, bn) == NULL ||
|
||||
!BN_add_word(bn, 1) ||
|
||||
(a_max_plus_one =
|
||||
BN_to_ASN1_INTEGER(bn, a_max_plus_one)) == NULL) {
|
||||
!BN_add_word(bn, 1)) {
|
||||
X509V3err(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((a_max_plus_one =
|
||||
BN_to_ASN1_INTEGER(bn, orig = a_max_plus_one)) == NULL) {
|
||||
a_max_plus_one = orig;
|
||||
X509V3err(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto done;
|
||||
@@ -351,6 +358,7 @@ int X509v3_asid_is_canonical(ASIdentifiers *asid)
|
||||
static int ASIdentifierChoice_canonize(ASIdentifierChoice *choice)
|
||||
{
|
||||
ASN1_INTEGER *a_max_plus_one = NULL;
|
||||
ASN1_INTEGER *orig;
|
||||
BIGNUM *bn = NULL;
|
||||
int i, ret = 0;
|
||||
|
||||
@@ -416,9 +424,15 @@ static int ASIdentifierChoice_canonize(ASIdentifierChoice *choice)
|
||||
*/
|
||||
if ((bn == NULL && (bn = BN_new()) == NULL) ||
|
||||
ASN1_INTEGER_to_BN(a_max, bn) == NULL ||
|
||||
!BN_add_word(bn, 1) ||
|
||||
(a_max_plus_one =
|
||||
BN_to_ASN1_INTEGER(bn, a_max_plus_one)) == NULL) {
|
||||
!BN_add_word(bn, 1)) {
|
||||
X509V3err(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((a_max_plus_one =
|
||||
BN_to_ASN1_INTEGER(bn, orig = a_max_plus_one)) == NULL) {
|
||||
a_max_plus_one = orig;
|
||||
X509V3err(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto done;
|
||||
|
||||
@@ -890,6 +890,20 @@ const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x)
|
||||
return (x->akid != NULL ? x->akid->keyid : NULL);
|
||||
}
|
||||
|
||||
const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x)
|
||||
{
|
||||
/* Call for side-effect of computing hash and caching extensions */
|
||||
X509_check_purpose(x, -1, -1);
|
||||
return (x->akid != NULL ? x->akid->issuer : NULL);
|
||||
}
|
||||
|
||||
const ASN1_INTEGER *X509_get0_authority_serial(X509 *x)
|
||||
{
|
||||
/* Call for side-effect of computing hash and caching extensions */
|
||||
X509_check_purpose(x, -1, -1);
|
||||
return (x->akid != NULL ? x->akid->serial : NULL);
|
||||
}
|
||||
|
||||
long X509_get_pathlen(X509 *x)
|
||||
{
|
||||
/* Called for side effect of caching extensions */
|
||||
|
||||
+2
-118
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Generated by util/mkerr.pl DO NOT EDIT
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -13,120 +13,6 @@
|
||||
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
|
||||
static const ERR_STRING_DATA X509V3_str_functs[] = {
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_A2I_GENERAL_NAME, 0),
|
||||
"a2i_GENERAL_NAME"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_ADDR_VALIDATE_PATH_INTERNAL, 0),
|
||||
"addr_validate_path_internal"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_ASIDENTIFIERCHOICE_CANONIZE, 0),
|
||||
"ASIdentifierChoice_canonize"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL, 0),
|
||||
"ASIdentifierChoice_is_canonical"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_BIGNUM_TO_STRING, 0),
|
||||
"bignum_to_string"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_COPY_EMAIL, 0), "copy_email"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_COPY_ISSUER, 0), "copy_issuer"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_DO_DIRNAME, 0), "do_dirname"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_DO_EXT_I2D, 0), "do_ext_i2d"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_DO_EXT_NCONF, 0), "do_ext_nconf"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_GNAMES_FROM_SECTNAME, 0),
|
||||
"gnames_from_sectname"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2S_ASN1_ENUMERATED, 0),
|
||||
"i2s_ASN1_ENUMERATED"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2S_ASN1_IA5STRING, 0),
|
||||
"i2s_ASN1_IA5STRING"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2S_ASN1_INTEGER, 0),
|
||||
"i2s_ASN1_INTEGER"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2V_AUTHORITY_INFO_ACCESS, 0),
|
||||
"i2v_AUTHORITY_INFO_ACCESS"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_LEVEL_ADD_NODE, 0), "level_add_node"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_NOTICE_SECTION, 0), "notice_section"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_NREF_NOS, 0), "nref_nos"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_POLICY_CACHE_CREATE, 0),
|
||||
"policy_cache_create"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_POLICY_CACHE_NEW, 0),
|
||||
"policy_cache_new"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_POLICY_DATA_NEW, 0), "policy_data_new"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_POLICY_SECTION, 0), "policy_section"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_PROCESS_PCI_VALUE, 0),
|
||||
"process_pci_value"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_R2I_CERTPOL, 0), "r2i_certpol"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_R2I_PCI, 0), "r2i_pci"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_ASN1_IA5STRING, 0),
|
||||
"s2i_ASN1_IA5STRING"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_ASN1_INTEGER, 0),
|
||||
"s2i_ASN1_INTEGER"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_ASN1_OCTET_STRING, 0),
|
||||
"s2i_ASN1_OCTET_STRING"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_SKEY_ID, 0), "s2i_skey_id"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_SET_DIST_POINT_NAME, 0),
|
||||
"set_dist_point_name"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_ADD_ID_ASC, 0),
|
||||
"SXNET_add_id_asc"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_ADD_ID_INTEGER, 0),
|
||||
"SXNET_add_id_INTEGER"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_ADD_ID_ULONG, 0),
|
||||
"SXNET_add_id_ulong"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_GET_ID_ASC, 0),
|
||||
"SXNET_get_id_asc"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_GET_ID_ULONG, 0),
|
||||
"SXNET_get_id_ulong"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_TREE_INIT, 0), "tree_init"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_ASIDENTIFIERS, 0),
|
||||
"v2i_ASIdentifiers"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_ASN1_BIT_STRING, 0),
|
||||
"v2i_ASN1_BIT_STRING"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_AUTHORITY_INFO_ACCESS, 0),
|
||||
"v2i_AUTHORITY_INFO_ACCESS"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_AUTHORITY_KEYID, 0),
|
||||
"v2i_AUTHORITY_KEYID"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_BASIC_CONSTRAINTS, 0),
|
||||
"v2i_BASIC_CONSTRAINTS"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_CRLD, 0), "v2i_crld"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_EXTENDED_KEY_USAGE, 0),
|
||||
"v2i_EXTENDED_KEY_USAGE"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_GENERAL_NAMES, 0),
|
||||
"v2i_GENERAL_NAMES"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_GENERAL_NAME_EX, 0),
|
||||
"v2i_GENERAL_NAME_ex"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_IDP, 0), "v2i_idp"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_IPADDRBLOCKS, 0),
|
||||
"v2i_IPAddrBlocks"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_ISSUER_ALT, 0), "v2i_issuer_alt"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_NAME_CONSTRAINTS, 0),
|
||||
"v2i_NAME_CONSTRAINTS"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_POLICY_CONSTRAINTS, 0),
|
||||
"v2i_POLICY_CONSTRAINTS"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_POLICY_MAPPINGS, 0),
|
||||
"v2i_POLICY_MAPPINGS"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_SUBJECT_ALT, 0), "v2i_subject_alt"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_TLS_FEATURE, 0), "v2i_TLS_FEATURE"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_V3_GENERIC_EXTENSION, 0),
|
||||
"v3_generic_extension"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_ADD1_I2D, 0), "X509V3_add1_i2d"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_ADD_VALUE, 0),
|
||||
"X509V3_add_value"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_ADD, 0), "X509V3_EXT_add"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_ADD_ALIAS, 0),
|
||||
"X509V3_EXT_add_alias"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_I2D, 0), "X509V3_EXT_i2d"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_NCONF, 0),
|
||||
"X509V3_EXT_nconf"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_GET_SECTION, 0),
|
||||
"X509V3_get_section"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_GET_STRING, 0),
|
||||
"X509V3_get_string"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_GET_VALUE_BOOL, 0),
|
||||
"X509V3_get_value_bool"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_PARSE_LIST, 0),
|
||||
"X509V3_parse_list"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509_PURPOSE_ADD, 0),
|
||||
"X509_PURPOSE_add"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509_PURPOSE_SET, 0),
|
||||
"X509_PURPOSE_set"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const ERR_STRING_DATA X509V3_str_reasons[] = {
|
||||
{ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BAD_IP_ADDRESS), "bad ip address"},
|
||||
{ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BAD_OBJECT), "bad object"},
|
||||
@@ -248,10 +134,8 @@ static const ERR_STRING_DATA X509V3_str_reasons[] = {
|
||||
int ERR_load_X509V3_strings(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
if (ERR_func_error_string(X509V3_str_functs[0].error) == NULL) {
|
||||
ERR_load_strings_const(X509V3_str_functs);
|
||||
if (ERR_reason_error_string(X509V3_str_reasons[0].error) == NULL)
|
||||
ERR_load_strings_const(X509V3_str_reasons);
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
@@ -450,9 +450,17 @@ STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain)
|
||||
STACK_OF(X509) *ret;
|
||||
int i;
|
||||
ret = sk_X509_dup(chain);
|
||||
if (ret == NULL)
|
||||
return NULL;
|
||||
for (i = 0; i < sk_X509_num(ret); i++) {
|
||||
X509 *x = sk_X509_value(ret, i);
|
||||
X509_up_ref(x);
|
||||
if (!X509_up_ref(x))
|
||||
goto err;
|
||||
}
|
||||
return ret;
|
||||
err:
|
||||
while (i-- > 0)
|
||||
X509_free (sk_X509_value(ret, i));
|
||||
sk_X509_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
+1
-106
@@ -13,109 +13,6 @@
|
||||
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
|
||||
static const ERR_STRING_DATA X509_str_functs[] = {
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_ADD_CERT_DIR, 0), "add_cert_dir"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_BUILD_CHAIN, 0), "build_chain"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_BY_FILE_CTRL, 0), "by_file_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_CHECK_NAME_CONSTRAINTS, 0),
|
||||
"check_name_constraints"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_CHECK_POLICY, 0), "check_policy"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_COMMON_VERIFY_SM2, 0), "common_verify_sm2"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_DANE_I2D, 0), "dane_i2d"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_DIR_CTRL, 0), "dir_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_GET_CERT_BY_SUBJECT, 0),
|
||||
"get_cert_by_subject"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_I2D_X509_AUX, 0), "i2d_X509_AUX"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_LOOKUP_CERTS_SK, 0), "lookup_certs_sk"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_NETSCAPE_SPKI_B64_DECODE, 0),
|
||||
"NETSCAPE_SPKI_b64_decode"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_NETSCAPE_SPKI_B64_ENCODE, 0),
|
||||
"NETSCAPE_SPKI_b64_encode"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_NEW_DIR, 0), "new_dir"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509AT_ADD1_ATTR, 0), "X509at_add1_attr"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509V3_ADD_EXT, 0), "X509v3_add_ext"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_CREATE_BY_NID, 0),
|
||||
"X509_ATTRIBUTE_create_by_NID"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ, 0),
|
||||
"X509_ATTRIBUTE_create_by_OBJ"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_CREATE_BY_TXT, 0),
|
||||
"X509_ATTRIBUTE_create_by_txt"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_GET0_DATA, 0),
|
||||
"X509_ATTRIBUTE_get0_data"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_SET1_DATA, 0),
|
||||
"X509_ATTRIBUTE_set1_data"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_CHECK_PRIVATE_KEY, 0),
|
||||
"X509_check_private_key"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_DIFF, 0), "X509_CRL_diff"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_METHOD_NEW, 0),
|
||||
"X509_CRL_METHOD_new"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_PRINT_FP, 0), "X509_CRL_print_fp"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_EXTENSION_CREATE_BY_NID, 0),
|
||||
"X509_EXTENSION_create_by_NID"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_EXTENSION_CREATE_BY_OBJ, 0),
|
||||
"X509_EXTENSION_create_by_OBJ"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_GET_PUBKEY_PARAMETERS, 0),
|
||||
"X509_get_pubkey_parameters"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_LOAD_CERT_CRL_FILE, 0),
|
||||
"X509_load_cert_crl_file"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_LOAD_CERT_FILE, 0),
|
||||
"X509_load_cert_file"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_LOAD_CRL_FILE, 0),
|
||||
"X509_load_crl_file"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_LOOKUP_METH_NEW, 0),
|
||||
"X509_LOOKUP_meth_new"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_LOOKUP_NEW, 0), "X509_LOOKUP_new"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ADD_ENTRY, 0),
|
||||
"X509_NAME_add_entry"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_CANON, 0), "x509_name_canon"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_CREATE_BY_NID, 0),
|
||||
"X509_NAME_ENTRY_create_by_NID"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_CREATE_BY_TXT, 0),
|
||||
"X509_NAME_ENTRY_create_by_txt"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_SET_OBJECT, 0),
|
||||
"X509_NAME_ENTRY_set_object"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ONELINE, 0), "X509_NAME_oneline"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_PRINT, 0), "X509_NAME_print"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_OBJECT_NEW, 0), "X509_OBJECT_new"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PRINT_EX_FP, 0), "X509_print_ex_fp"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_DECODE, 0),
|
||||
"x509_pubkey_decode"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_GET0, 0), "X509_PUBKEY_get0"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_SET, 0), "X509_PUBKEY_set"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_CHECK_PRIVATE_KEY, 0),
|
||||
"X509_REQ_check_private_key"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_PRINT_EX, 0), "X509_REQ_print_ex"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_PRINT_FP, 0), "X509_REQ_print_fp"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_TO_X509, 0), "X509_REQ_to_X509"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_VERIFY, 0), "X509_REQ_verify"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_VERIFY_SM2, 0),
|
||||
"x509_req_verify_sm2"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_ADD_CERT, 0),
|
||||
"X509_STORE_add_cert"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_ADD_CRL, 0),
|
||||
"X509_STORE_add_crl"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_ADD_LOOKUP, 0),
|
||||
"X509_STORE_add_lookup"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_GET1_ISSUER, 0),
|
||||
"X509_STORE_CTX_get1_issuer"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_INIT, 0),
|
||||
"X509_STORE_CTX_init"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_NEW, 0),
|
||||
"X509_STORE_CTX_new"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_PURPOSE_INHERIT, 0),
|
||||
"X509_STORE_CTX_purpose_inherit"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_NEW, 0), "X509_STORE_new"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_TO_X509_REQ, 0), "X509_to_X509_REQ"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_TRUST_ADD, 0), "X509_TRUST_add"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_TRUST_SET, 0), "X509_TRUST_set"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_VERIFY, 0), "X509_verify"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_VERIFY_CERT, 0), "X509_verify_cert"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_VERIFY_PARAM_NEW, 0),
|
||||
"X509_VERIFY_PARAM_new"},
|
||||
{ERR_PACK(ERR_LIB_X509, X509_F_X509_VERIFY_SM2, 0), "x509_verify_sm2"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const ERR_STRING_DATA X509_str_reasons[] = {
|
||||
{ERR_PACK(ERR_LIB_X509, 0, X509_R_AKID_MISMATCH), "akid mismatch"},
|
||||
{ERR_PACK(ERR_LIB_X509, 0, X509_R_BAD_SELECTOR), "bad selector"},
|
||||
@@ -180,10 +77,8 @@ static const ERR_STRING_DATA X509_str_reasons[] = {
|
||||
int ERR_load_X509_strings(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
if (ERR_func_error_string(X509_str_functs[0].error) == NULL) {
|
||||
ERR_load_strings_const(X509_str_functs);
|
||||
if (ERR_reason_error_string(X509_str_reasons[0].error) == NULL)
|
||||
ERR_load_strings_const(X509_str_reasons);
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
+71
-50
@@ -289,24 +289,25 @@ X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs,
|
||||
int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type,
|
||||
X509_NAME *name, X509_OBJECT *ret)
|
||||
{
|
||||
X509_STORE *ctx = vs->ctx;
|
||||
X509_STORE *store = vs->store;
|
||||
X509_LOOKUP *lu;
|
||||
X509_OBJECT stmp, *tmp;
|
||||
int i, j;
|
||||
|
||||
if (ctx == NULL)
|
||||
if (store == NULL)
|
||||
return 0;
|
||||
|
||||
stmp.type = X509_LU_NONE;
|
||||
stmp.data.ptr = NULL;
|
||||
|
||||
CRYPTO_THREAD_write_lock(ctx->lock);
|
||||
tmp = X509_OBJECT_retrieve_by_subject(ctx->objs, type, name);
|
||||
CRYPTO_THREAD_unlock(ctx->lock);
|
||||
|
||||
X509_STORE_lock(store);
|
||||
tmp = X509_OBJECT_retrieve_by_subject(store->objs, type, name);
|
||||
X509_STORE_unlock(store);
|
||||
|
||||
if (tmp == NULL || type == X509_LU_CRL) {
|
||||
for (i = 0; i < sk_X509_LOOKUP_num(ctx->get_cert_methods); i++) {
|
||||
lu = sk_X509_LOOKUP_value(ctx->get_cert_methods, i);
|
||||
for (i = 0; i < sk_X509_LOOKUP_num(store->get_cert_methods); i++) {
|
||||
lu = sk_X509_LOOKUP_value(store->get_cert_methods, i);
|
||||
j = X509_LOOKUP_by_subject(lu, type, name, &stmp);
|
||||
if (j) {
|
||||
tmp = &stmp;
|
||||
@@ -317,15 +318,16 @@ int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!X509_OBJECT_up_ref_count(tmp))
|
||||
return 0;
|
||||
|
||||
ret->type = tmp->type;
|
||||
ret->data.ptr = tmp->data.ptr;
|
||||
|
||||
X509_OBJECT_up_ref_count(ret);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int x509_store_add(X509_STORE *ctx, void *x, int crl) {
|
||||
static int x509_store_add(X509_STORE *store, void *x, int crl) {
|
||||
X509_OBJECT *obj;
|
||||
int ret = 0, added = 0;
|
||||
|
||||
@@ -342,18 +344,20 @@ static int x509_store_add(X509_STORE *ctx, void *x, int crl) {
|
||||
obj->type = X509_LU_X509;
|
||||
obj->data.x509 = (X509 *)x;
|
||||
}
|
||||
X509_OBJECT_up_ref_count(obj);
|
||||
|
||||
CRYPTO_THREAD_write_lock(ctx->lock);
|
||||
|
||||
if (X509_OBJECT_retrieve_match(ctx->objs, obj)) {
|
||||
ret = 1;
|
||||
} else {
|
||||
added = sk_X509_OBJECT_push(ctx->objs, obj);
|
||||
ret = added != 0;
|
||||
if (!X509_OBJECT_up_ref_count(obj)) {
|
||||
obj->type = X509_LU_NONE;
|
||||
X509_OBJECT_free(obj);
|
||||
return 0;
|
||||
}
|
||||
|
||||
CRYPTO_THREAD_unlock(ctx->lock);
|
||||
X509_STORE_lock(store);
|
||||
if (X509_OBJECT_retrieve_match(store->objs, obj)) {
|
||||
ret = 1;
|
||||
} else {
|
||||
added = sk_X509_OBJECT_push(store->objs, obj);
|
||||
ret = added != 0;
|
||||
}
|
||||
X509_STORE_unlock(store);
|
||||
|
||||
if (added == 0) /* obj not pushed */
|
||||
X509_OBJECT_free(obj);
|
||||
@@ -534,12 +538,13 @@ STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm)
|
||||
STACK_OF(X509) *sk = NULL;
|
||||
X509 *x;
|
||||
X509_OBJECT *obj;
|
||||
X509_STORE *store = ctx->store;
|
||||
|
||||
if (ctx->ctx == NULL)
|
||||
if (store == NULL)
|
||||
return NULL;
|
||||
|
||||
CRYPTO_THREAD_write_lock(ctx->ctx->lock);
|
||||
idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_X509, nm, &cnt);
|
||||
X509_STORE_lock(store);
|
||||
idx = x509_object_idx_cnt(store->objs, X509_LU_X509, nm, &cnt);
|
||||
if (idx < 0) {
|
||||
/*
|
||||
* Nothing found in cache: do lookup to possibly add new objects to
|
||||
@@ -547,7 +552,8 @@ STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm)
|
||||
*/
|
||||
X509_OBJECT *xobj = X509_OBJECT_new();
|
||||
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
X509_STORE_unlock(store);
|
||||
|
||||
if (xobj == NULL)
|
||||
return NULL;
|
||||
if (!X509_STORE_CTX_get_by_subject(ctx, X509_LU_X509, nm, xobj)) {
|
||||
@@ -555,27 +561,31 @@ STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm)
|
||||
return NULL;
|
||||
}
|
||||
X509_OBJECT_free(xobj);
|
||||
CRYPTO_THREAD_write_lock(ctx->ctx->lock);
|
||||
idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_X509, nm, &cnt);
|
||||
X509_STORE_lock(store);
|
||||
idx = x509_object_idx_cnt(store->objs, X509_LU_X509, nm, &cnt);
|
||||
if (idx < 0) {
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
X509_STORE_unlock(store);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
sk = sk_X509_new_null();
|
||||
for (i = 0; i < cnt; i++, idx++) {
|
||||
obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
|
||||
obj = sk_X509_OBJECT_value(store->objs, idx);
|
||||
x = obj->data.x509;
|
||||
X509_up_ref(x);
|
||||
if (!X509_up_ref(x)) {
|
||||
X509_STORE_unlock(store);
|
||||
sk_X509_pop_free(sk, X509_free);
|
||||
return NULL;
|
||||
}
|
||||
if (!sk_X509_push(sk, x)) {
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
X509_STORE_unlock(store);
|
||||
X509_free(x);
|
||||
sk_X509_pop_free(sk, X509_free);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
X509_STORE_unlock(store);
|
||||
return sk;
|
||||
}
|
||||
|
||||
@@ -585,37 +595,42 @@ STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *ctx, X509_NAME *nm)
|
||||
STACK_OF(X509_CRL) *sk = sk_X509_CRL_new_null();
|
||||
X509_CRL *x;
|
||||
X509_OBJECT *obj, *xobj = X509_OBJECT_new();
|
||||
X509_STORE *store = ctx->store;
|
||||
|
||||
/* Always do lookup to possibly add new CRLs to cache */
|
||||
if (sk == NULL
|
||||
|| xobj == NULL
|
||||
|| ctx->ctx == NULL
|
||||
|| store == NULL
|
||||
|| !X509_STORE_CTX_get_by_subject(ctx, X509_LU_CRL, nm, xobj)) {
|
||||
X509_OBJECT_free(xobj);
|
||||
sk_X509_CRL_free(sk);
|
||||
return NULL;
|
||||
}
|
||||
X509_OBJECT_free(xobj);
|
||||
CRYPTO_THREAD_write_lock(ctx->ctx->lock);
|
||||
idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_CRL, nm, &cnt);
|
||||
X509_STORE_lock(store);
|
||||
idx = x509_object_idx_cnt(store->objs, X509_LU_CRL, nm, &cnt);
|
||||
if (idx < 0) {
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
X509_STORE_unlock(store);
|
||||
sk_X509_CRL_free(sk);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < cnt; i++, idx++) {
|
||||
obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
|
||||
obj = sk_X509_OBJECT_value(store->objs, idx);
|
||||
x = obj->data.crl;
|
||||
X509_CRL_up_ref(x);
|
||||
if (!X509_CRL_up_ref(x)) {
|
||||
X509_STORE_unlock(store);
|
||||
sk_X509_CRL_pop_free(sk, X509_CRL_free);
|
||||
return NULL;
|
||||
}
|
||||
if (!sk_X509_CRL_push(sk, x)) {
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
X509_STORE_unlock(store);
|
||||
X509_CRL_free(x);
|
||||
sk_X509_CRL_pop_free(sk, X509_CRL_free);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
X509_STORE_unlock(store);
|
||||
return sk;
|
||||
}
|
||||
|
||||
@@ -663,6 +678,7 @@ int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
|
||||
{
|
||||
X509_NAME *xn;
|
||||
X509_OBJECT *obj = X509_OBJECT_new(), *pobj = NULL;
|
||||
X509_STORE *store = ctx->store;
|
||||
int i, ok, idx, ret;
|
||||
|
||||
if (obj == NULL)
|
||||
@@ -678,25 +694,28 @@ int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
|
||||
if (ctx->check_issued(ctx, x, obj->data.x509)) {
|
||||
if (x509_check_cert_time(ctx, obj->data.x509, -1)) {
|
||||
*issuer = obj->data.x509;
|
||||
X509_up_ref(*issuer);
|
||||
if (!X509_up_ref(*issuer)) {
|
||||
*issuer = NULL;
|
||||
ok = -1;
|
||||
}
|
||||
X509_OBJECT_free(obj);
|
||||
return 1;
|
||||
return ok;
|
||||
}
|
||||
}
|
||||
X509_OBJECT_free(obj);
|
||||
|
||||
if (ctx->ctx == NULL)
|
||||
if (store == NULL)
|
||||
return 0;
|
||||
|
||||
/* Else find index of first cert accepted by 'check_issued' */
|
||||
ret = 0;
|
||||
CRYPTO_THREAD_write_lock(ctx->ctx->lock);
|
||||
idx = X509_OBJECT_idx_by_subject(ctx->ctx->objs, X509_LU_X509, xn);
|
||||
X509_STORE_lock(store);
|
||||
idx = X509_OBJECT_idx_by_subject(store->objs, X509_LU_X509, xn);
|
||||
if (idx != -1) { /* should be true as we've had at least one
|
||||
* match */
|
||||
/* Look through all matching certs for suitable issuer */
|
||||
for (i = idx; i < sk_X509_OBJECT_num(ctx->ctx->objs); i++) {
|
||||
pobj = sk_X509_OBJECT_value(ctx->ctx->objs, i);
|
||||
for (i = idx; i < sk_X509_OBJECT_num(store->objs); i++) {
|
||||
pobj = sk_X509_OBJECT_value(store->objs, i);
|
||||
/* See if we've run past the matches */
|
||||
if (pobj->type != X509_LU_X509)
|
||||
break;
|
||||
@@ -717,9 +736,11 @@ int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
|
||||
}
|
||||
}
|
||||
}
|
||||
CRYPTO_THREAD_unlock(ctx->ctx->lock);
|
||||
if (*issuer)
|
||||
X509_up_ref(*issuer);
|
||||
if (*issuer && !X509_up_ref(*issuer)) {
|
||||
*issuer = NULL;
|
||||
ret = -1;
|
||||
}
|
||||
X509_STORE_unlock(store);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -897,5 +918,5 @@ void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx)
|
||||
|
||||
X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx)
|
||||
{
|
||||
return ctx->ctx;
|
||||
return ctx->store;
|
||||
}
|
||||
@@ -1276,7 +1276,7 @@ static int check_crl_path(X509_STORE_CTX *ctx, X509 *x)
|
||||
/* Don't allow recursive CRL path validation */
|
||||
if (ctx->parent)
|
||||
return 0;
|
||||
if (!X509_STORE_CTX_init(&crl_ctx, ctx->ctx, x, ctx->untrusted))
|
||||
if (!X509_STORE_CTX_init(&crl_ctx, ctx->store, x, ctx->untrusted))
|
||||
return -1;
|
||||
|
||||
crl_ctx.crls = ctx->crls;
|
||||
@@ -1788,7 +1788,11 @@ int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time)
|
||||
static const size_t generalizedtime_length = sizeof("YYYYMMDDHHMMSSZ") - 1;
|
||||
ASN1_TIME *asn1_cmp_time = NULL;
|
||||
int i, day, sec, ret = 0;
|
||||
|
||||
#ifdef CHARSET_EBCDIC
|
||||
const char upper_z = 0x5A;
|
||||
#else
|
||||
const char upper_z = 'Z';
|
||||
#endif
|
||||
/*
|
||||
* Note that ASN.1 allows much more slack in the time format than RFC5280.
|
||||
* In RFC5280, the representation is fixed:
|
||||
@@ -1819,10 +1823,10 @@ int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time)
|
||||
* Digit and date ranges will be verified in the conversion methods.
|
||||
*/
|
||||
for (i = 0; i < ctm->length - 1; i++) {
|
||||
if (!ossl_isdigit(ctm->data[i]))
|
||||
if (!ascii_isdigit(ctm->data[i]))
|
||||
return 0;
|
||||
}
|
||||
if (ctm->data[ctm->length - 1] != 'Z')
|
||||
if (ctm->data[ctm->length - 1] != upper_z)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
@@ -2201,7 +2205,7 @@ int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,
|
||||
{
|
||||
int ret = 1;
|
||||
|
||||
ctx->ctx = store;
|
||||
ctx->store = store;
|
||||
ctx->cert = x509;
|
||||
ctx->untrusted = chain;
|
||||
ctx->crls = NULL;
|
||||
|
||||
@@ -56,6 +56,7 @@ ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = {
|
||||
} ASN1_SEQUENCE_END_cb(X509_PUBKEY, X509_PUBKEY)
|
||||
|
||||
IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY)
|
||||
IMPLEMENT_ASN1_DUP_FUNCTION(X509_PUBKEY)
|
||||
|
||||
/* TODO should better be called X509_PUBKEY_set1 */
|
||||
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
|
||||
|
||||
Reference in New Issue
Block a user