Go to the documentation of this file.
71 #include "../internal.h"
72 #include "../x509v3/internal.h"
81 #define CRL_SCORE_NOCRITICAL 0x100
85 #define CRL_SCORE_SCOPE 0x080
89 #define CRL_SCORE_TIME 0x040
93 #define CRL_SCORE_ISSUER_NAME 0x020
97 #define CRL_SCORE_VALID (CRL_SCORE_NOCRITICAL|CRL_SCORE_TIME|CRL_SCORE_SCOPE)
101 #define CRL_SCORE_ISSUER_CERT 0x018
105 #define CRL_SCORE_SAME_PATH 0x008
109 #define CRL_SCORE_AKID 0x004
113 #define CRL_SCORE_TIME_DELTA 0x002
136 unsigned int *preasons);
157 *out_is_self_signed = (
x->ex_flags &
EXFLAG_SS) != 0;
188 X509 *
x, *xtmp, *xtmp2, *chain_ss = NULL;
195 if (
ctx->cert == NULL) {
200 if (
ctx->chain != NULL) {
217 if (
ctx->chain == NULL || !sk_X509_push(
ctx->chain,
ctx->cert)) {
223 ctx->last_untrusted = 1;
226 if (
ctx->untrusted != NULL
227 && (sktmp = sk_X509_dup(
ctx->untrusted)) == NULL) {
277 if (!sk_X509_push(
ctx->chain, xtmp)) {
284 (void)sk_X509_delete_ptr(sktmp, xtmp);
285 ctx->last_untrusted++;
318 if (is_self_signed) {
329 ctx->current_cert =
x;
330 ctx->error_depth =
i - 1;
344 (void)sk_X509_set(
ctx->chain,
i - 1,
x);
345 ctx->last_untrusted = 0;
351 chain_ss = sk_X509_pop(
ctx->chain);
352 ctx->last_untrusted--;
379 if (!sk_X509_push(
ctx->chain,
x)) {
409 ok =
ctx->get_issuer(&xtmp,
ctx, xtmp2);
424 xtmp = sk_X509_pop(
ctx->chain);
442 if ((chain_ss == NULL) || !
ctx->check_issued(
ctx,
x, chain_ss)) {
443 if (
ctx->last_untrusted >=
num)
447 ctx->current_cert =
x;
450 sk_X509_push(
ctx->chain, chain_ss);
452 ctx->last_untrusted =
num;
453 ctx->current_cert = chain_ss;
458 ctx->error_depth =
num - 1;
496 if (
ctx->verify != NULL)
516 if (chain_ss != NULL)
535 if (
ctx->check_issued(
ctx,
x, issuer))
554 ctx->current_cert =
x;
555 ctx->current_issuer = issuer;
556 return ctx->verify_cb(0,
ctx);
578 int i,
ok = 0, plen = 0;
581 int proxy_path_length = 0;
583 int allow_proxy_certs;
596 allow_proxy_certs = 0;
601 purpose =
ctx->param->purpose;
604 ca_requirement = ca_or_leaf;
607 for (
i = 0;
i <
ctx->last_untrusted;
i++) {
613 ctx->error_depth =
i;
614 ctx->current_cert =
x;
621 ctx->error_depth =
i;
622 ctx->current_cert =
x;
628 switch (ca_requirement) {
652 ctx->error_depth =
i;
653 ctx->current_cert =
x;
658 if (
ctx->param->purpose > 0) {
663 ctx->error_depth =
i;
664 ctx->current_cert =
x;
672 && (
x->ex_pathlen != -1)
673 && (plen > (
x->ex_pathlen + proxy_path_length + 1))) {
675 ctx->error_depth =
i;
676 ctx->current_cert =
x;
690 if (
x->ex_pcpathlen != -1 &&
i >
x->ex_pcpathlen) {
692 ctx->error_depth =
i;
693 ctx->current_cert =
x;
699 ca_requirement = must_not_be_ca;
701 ca_requirement = must_be_ca;
721 unsigned char *idval;
730 if (looks_like_dns) {
739 int has_name_constraints = 0;
755 has_name_constraints = 1;
765 ctx->error_depth =
i;
766 ctx->current_cert =
x;
767 if (!
ctx->verify_cb(0,
ctx))
786 if (has_name_constraints && leaf->altname == NULL) {
796 ctx->error_depth =
i;
797 ctx->current_cert = leaf;
798 if (!
ctx->verify_cb(0,
ctx))
809 ctx->error = errcode;
810 ctx->current_cert =
ctx->cert;
811 ctx->error_depth = 0;
812 return ctx->verify_cb(0,
ctx);
818 size_t n = sk_OPENSSL_STRING_num(param->hosts);
825 for (
i = 0;
i <
n; ++
i) {
826 name = sk_OPENSSL_STRING_value(param->hosts,
i);
876 ctx->error_depth =
i;
877 ctx->current_cert =
x;
895 (void)sk_X509_set(
ctx->chain, 0, mx);
897 ctx->last_untrusted = 0;
922 for (
i = 0;
i <= last;
i++) {
923 ctx->error_depth =
i;
936 unsigned int last_reasons;
937 cnum =
ctx->error_depth;
939 ctx->current_cert =
x;
940 ctx->current_issuer = NULL;
941 ctx->current_crl_score = 0;
942 ctx->current_reasons = 0;
944 last_reasons =
ctx->current_reasons;
958 ctx->current_crl = crl;
988 if (last_reasons ==
ctx->current_reasons) {
998 ctx->current_crl = NULL;
1010 ctx->current_crl = crl;
1012 ptime = &
ctx->param->check_time;
1021 if (!
ctx->verify_cb(0,
ctx))
1029 if (!
ctx->verify_cb(0,
ctx))
1040 if (!
ctx->verify_cb(0,
ctx))
1048 if (!
ctx->verify_cb(0,
ctx))
1054 ctx->current_crl = NULL;
1060 X509 **pissuer,
int *pscore,
unsigned int *preasons,
1063 int crl_score, best_score = *pscore;
1065 unsigned int reasons, best_reasons = 0;
1068 X509 *crl_issuer = NULL, *best_crl_issuer = NULL;
1070 for (
i = 0;
i < sk_X509_CRL_num(crls);
i++) {
1071 crl = sk_X509_CRL_value(crls,
i);
1072 reasons = *preasons;
1074 if (crl_score < best_score || crl_score == 0)
1077 if (crl_score == best_score && best_crl != NULL) {
1086 if (day <= 0 && sec <= 0)
1090 best_crl_issuer = crl_issuer;
1091 best_score = crl_score;
1092 best_reasons = reasons;
1099 *pissuer = best_crl_issuer;
1100 *pscore = best_score;
1101 *preasons = best_reasons;
1164 if (!
base->crl_number)
1197 for (
i = 0;
i < sk_X509_CRL_num(crls);
i++) {
1198 delta = sk_X509_CRL_value(crls,
i);
1223 unsigned int tmp_reasons = *preasons,
crl_reasons;
1274 *preasons = tmp_reasons;
1281 X509 **pissuer,
int *pcrl_score)
1283 X509 *crl_issuer = NULL;
1285 int cidx =
ctx->error_depth;
1296 *pissuer = crl_issuer;
1307 *pissuer = crl_issuer;
1326 *pissuer = crl_issuer;
1350 crl_ctx.crls =
ctx->crls;
1384 X509 *cert_ta, *crl_ta;
1402 GENERAL_NAMES *gens = NULL;
1421 gens =
b->name.fullname;
1422 }
else if (
b->type == 1) {
1426 gens =
a->name.fullname;
1432 for (
i = 0;
i < sk_GENERAL_NAME_num(gens);
i++) {
1433 gena = sk_GENERAL_NAME_value(gens,
i);
1444 for (
i = 0;
i < sk_GENERAL_NAME_num(
a->name.fullname);
i++) {
1445 gena = sk_GENERAL_NAME_value(
a->name.fullname,
i);
1446 for (j = 0; j < sk_GENERAL_NAME_num(
b->name.fullname); j++) {
1447 genb = sk_GENERAL_NAME_value(
b->name.fullname, j);
1464 for (
i = 0;
i < sk_GENERAL_NAME_num(dp->
CRLissuer);
i++) {
1477 unsigned int *preasons)
1490 for (
i = 0;
i < sk_DIST_POINT_num(
x->crldp);
i++) {
1514 X509 *issuer = NULL;
1516 unsigned int reasons;
1517 X509_CRL *crl = NULL, *dcrl = NULL;
1520 reasons =
ctx->current_reasons;
1522 &issuer, &crl_score, &reasons,
ctx->crls);
1535 get_crl_sk(
ctx, &crl, &dcrl, &issuer, &crl_score, &reasons, skcrl);
1543 ctx->current_issuer = issuer;
1544 ctx->current_crl_score = crl_score;
1545 ctx->current_reasons = reasons;
1557 X509 *issuer = NULL;
1559 int ok = 0, chnum, cnum;
1560 cnum =
ctx->error_depth;
1563 if (
ctx->current_issuer)
1564 issuer =
ctx->current_issuer;
1570 else if (cnum < chnum)
1575 if (!
ctx->check_issued(
ctx, issuer, issuer)) {
1702 ctx->param->policies,
ctx->param->flags);
1719 ctx->current_cert =
x;
1721 if (!
ctx->verify_cb(0,
ctx))
1727 ctx->current_cert = NULL;
1729 return ctx->verify_cb(0,
ctx);
1733 ctx->current_cert = NULL;
1740 if (!
ctx->verify_cb(2,
ctx))
1753 ptime = &
ctx->param->check_time;
1760 ctx->current_cert =
x;
1761 if (!
ctx->verify_cb(0,
ctx))
1767 ctx->current_cert =
x;
1768 if (!
ctx->verify_cb(0,
ctx))
1775 ctx->current_cert =
x;
1776 if (!
ctx->verify_cb(0,
ctx))
1782 ctx->current_cert =
x;
1783 if (!
ctx->verify_cb(0,
ctx))
1797 cb =
ctx->verify_cb;
1800 ctx->error_depth =
n - 1;
1804 if (
ctx->check_issued(
ctx, xi, xi))
1813 ctx->current_cert = xi;
1818 ctx->error_depth =
n;
1825 ctx->error_depth =
n;
1835 ctx->current_cert = xi;
1836 ok = (*cb) (0,
ctx);
1841 ctx->current_cert = xs;
1842 ok = (*cb) (0,
ctx);
1858 ctx->current_issuer = xi;
1859 ctx->current_cert = xs;
1860 ok = (*cb) (1,
ctx);
1882 static const size_t utctime_length =
sizeof(
"YYMMDDHHMMSSZ") - 1;
1883 static const size_t generalizedtime_length =
sizeof(
"YYYYMMDDHHMMSSZ") - 1;
1885 int i, day, sec,
ret = 0;
1898 switch (ctm->
type) {
1900 if (ctm->
length != (
int)(utctime_length))
1904 if (ctm->
length != (
int)(generalizedtime_length))
1917 if (!isdigit(ctm->
data[
i]))
1929 if (asn1_cmp_time == NULL)
1938 ret = (day >= 0 && sec >= 0) ? -1 : 1;
1956 int offset_day,
long offset_sec, time_t *in_tm)
2047 for (j = 0; j < sk_X509_REVOKED_num(revs); j++) {
2049 rvn = sk_X509_REVOKED_value(revs, j);
2117 return ctx->error_depth;
2122 return ctx->current_cert;
2144 return ctx->current_issuer;
2149 return ctx->current_crl;
2164 ctx->untrusted = sk;
2169 return ctx->untrusted;
2199 int purpose,
int trust)
2204 purpose = def_purpose;
2224 trust = ptmp->
trust;
2234 if (purpose && !
ctx->param->purpose)
2235 ctx->param->purpose = purpose;
2236 if (trust && !
ctx->param->trust)
2237 ctx->param->trust = trust;
2273 ctx->untrusted = chain;
2277 if (store == NULL) {
2327 ctx->get_crl = NULL;
2355 if (
ctx->param != NULL) {
2371 ctx->other_ctx = sk;
2379 if (
ctx->cleanup != NULL) {
2381 ctx->cleanup = NULL;
2383 if (
ctx->param != NULL) {
2384 if (
ctx->parent == NULL)
2388 if (
ctx->tree != NULL) {
2392 if (
ctx->chain != NULL) {
2434 return ctx->explicit_policy;
#define X509_V_FLAG_CRL_CHECK_ALL
#define X509_V_ERR_DIFFERENT_CRL_SCOPE
X509_STORE_CTX_check_crl_fn check_crl
#define ASN1_OCTET_STRING_cmp
#define X509_V_ERR_INVALID_EXTENSION
#define X509_R_IDP_MISMATCH
#define X509_get_subject_name
#define X509_STORE_CTX_get1_issuer
static int check_crl_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *cert_path, STACK_OF(X509) *crl_path)
#define X509_V_FLAG_POLICY_CHECK
#define CRL_SCORE_SAME_PATH
static int crl_extension_match(X509_CRL *a, X509_CRL *b, int nid)
int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust)
#define X509_chain_check_suiteb
#define X509_V_ERR_NO_EXPLICIT_POLICY
#define X509_V_ERR_INVALID_CA
static int internal_verify(X509_STORE_CTX *ctx)
int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void **from_d, int index, long argl, void *argp)
static int check_trust(X509_STORE_CTX *ctx)
ASN1_INTEGER * base_crl_number
#define X509_R_ISSUER_MISMATCH
X509_NAME * directoryName
#define CRL_REASON_REMOVE_FROM_CRL
#define X509_V_FLAG_CRL_CHECK
GENERAL_NAMES * CRLissuer
#define X509_STORE_CTX_get0_chain
#define X509_V_FLAG_PARTIAL_CHAIN
#define X509_CRL_set_version
static int verify_cb(int ok, X509_STORE_CTX *ctx)
#define X509_V_ERR_CRL_HAS_EXPIRED
#define OPENSSL_PUT_ERROR(library, reason)
#define NID_authority_key_identifier
#define X509_get_notBefore
#define CRL_SCORE_TIME_DELTA
#define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
#define X509_CRL_get0_nextUpdate
X509_VERIFY_PARAM * param
#define X509_CRL_check_suiteb
#define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
static int check_revocation(X509_STORE_CTX *ctx)
#define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
#define X509_V_ERR_CRL_SIGNATURE_FAILURE
static int reject_dns_name_in_common_name(X509 *x509)
#define X509_TRUST_DEFAULT
static const ENUMERATED_NAMES crl_reasons[]
OPENSSL_EXPORT int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *pkey)
#define X509_V_FLAG_USE_DELTAS
int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name)
#define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
ASN1_TIME * X509_time_adj(ASN1_TIME *s, long offset_sec, time_t *in_tm)
#define CRL_SCORE_NOCRITICAL
X509_STORE_CTX_get_crl_fn get_crl
#define X509_V_ERR_PATH_LENGTH_EXCEEDED
static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer)
static struct test_ctx ctx
X509_STORE_CTX_cleanup_fn cleanup
#define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
#define X509_CRL_get_ext_by_NID
static int check_hosts(X509 *x, X509_VERIFY_PARAM *param)
static int null_callback(int ok, X509_STORE_CTX *e)
#define X509_TRUST_TRUSTED
OPENSSL_EXPORT void ASN1_TIME_free(ASN1_TIME *str)
#define X509_PURPOSE_get0
#define X509_chain_up_ref
#define X509_V_ERR_CERT_REVOKED
#define X509_R_NO_CRL_NUMBER
static CRYPTO_EX_DATA_CLASS g_ex_data_class
static int crldp_check_crlissuer(DIST_POINT *dp, X509_CRL *crl, int crl_score)
#define X509_VERIFY_PARAM_inherit
#define X509_NAME_get_index_by_NID
void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk)
OPENSSL_EXPORT X509_REVOKED * X509_REVOKED_dup(X509_REVOKED *rev)
static void * OPENSSL_memset(void *dst, int c, size_t n)
X509_CRL * X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags)
#define X509_CRL_get_ext_count
#define X509_CRL_set1_lastUpdate
#define x509v3_looks_like_dns_name
#define X509_CRL_add1_ext_i2d
static int check_cert_time(X509_STORE_CTX *ctx, X509 *x)
#define X509_TRUST_get_by_id
void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, time_t t)
static int check_cert(X509_STORE_CTX *ctx)
#define V_ASN1_GENERALIZEDTIME
#define X509_V_ERR_CERT_HAS_EXPIRED
#define X509_VERIFY_PARAM_new
static int check_policy(X509_STORE_CTX *ctx)
void retry(grpc_end2end_test_config config)
#define CRYPTO_free_ex_data
#define X509_CRL_VERSION_2
int X509_verify_cert(X509_STORE_CTX *ctx)
#define X509_V_ERR_UNSPECIFIED
static int cert_crl(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x)
#define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_unused *unused, CRYPTO_EX_dup *dup_unused, CRYPTO_EX_free *free_func)
#define X509_VERIFY_PARAM_set_flags
static int check_id(X509_STORE_CTX *ctx)
#define X509_V_FLAG_NO_ALT_CHAINS
static int check_crl_time(X509_STORE_CTX *ctx, X509_CRL *crl, int notify)
#define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
#define X509_policy_tree_free
#define X509_check_issued
X509 * X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx)
#define X509_V_ERR_INVALID_PURPOSE
#define X509_V_ERR_CRL_NOT_YET_VALID
X509_STORE_CTX_verify_fn verify
static int check_id_error(X509_STORE_CTX *ctx, int errcode)
static void get_delta_sk(X509_STORE_CTX *ctx, X509_CRL **dcrl, int *pcrl_score, X509_CRL *base, STACK_OF(X509_CRL) *crls)
#define X509_get_issuer_name
#define x509v3_cache_extensions
static int crl_crldp_check(X509 *x, X509_CRL *crl, int crl_score, unsigned int *preasons)
#define ERR_R_PASSED_NULL_PARAMETER
void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int err)
#define X509_V_ERR_INVALID_POLICY_EXTENSION
#define X509_V_ERR_CERT_SIGNATURE_FAILURE
#define X509_NAME_get_entry
#define X509_V_FLAG_NOTIFY_POLICY
#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED
#define X509_CRL_get0_lastUpdate
void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx)
X509_STORE_CTX_verify_cb verify_cb
#define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
static int idp_check_dp(DIST_POINT_NAME *a, DIST_POINT_NAME *b)
#define EXFLAG_INVALID_POLICY
int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509, STACK_OF(X509) *chain)
#define X509_STORE_CTX_get0_untrusted
#define X509_CRL_set_issuer_name
#define X509_VERIFY_PARAM_set_time
int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx)
#define X509_EXTENSION_get_data
#define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY
#define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
#define X509_V_ERR_OUT_OF_MEM
#define X509_NAME_ENTRY_get_data
#define X509_get_notAfter
#define X509_policy_check
X509_POLICY_TREE * X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx)
void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *x)
int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data)
X509_STORE_CTX * X509_STORE_CTX_new(void)
OPENSSL_EXPORT int X509_up_ref(X509 *x509)
X509_VERIFY_PARAM * X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx)
#define X509_V_FLAG_TRUSTED_FIRST
X509_STORE_CTX_check_revocation_fn check_revocation
static int check_delta_base(X509_CRL *delta, X509_CRL *base)
#define CRYPTO_new_ex_data
#define X509_V_ERR_IP_ADDRESS_MISMATCH
#define X509_R_AKID_MISMATCH
DIST_POINT_NAME * distpoint
X509_CRL * X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx)
OPENSSL_EXPORT GENERAL_NAME * gen
#define X509_CRL_get_REVOKED
void X509_STORE_CTX_free(X509_STORE_CTX *ctx)
void * X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx)
#define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
OPENSSL_EXPORT int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc)
#define X509_STORE_get1_crls
int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time)
void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int index, long argl, void *argp)
X509_STORE_CTX_lookup_crls_fn lookup_crls
#define X509_V_ERR_INVALID_CALL
void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags)
X509_STORE_CTX_verify_cb verify_cb
void X509_STORE_CTX_set_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *sk)
#define X509_VERIFY_PARAM_lookup
#define X509_STORE_CTX_get_chain
#define X509_V_FLAG_IGNORE_CRITICAL
#define CRYPTO_EX_DATA_CLASS_INIT_WITH_APP_DATA
#define X509_STORE_CTX_get1_chain
OPENSSL_EXPORT int X509_CRL_get0_by_serial(X509_CRL *crl, X509_REVOKED **ret, ASN1_INTEGER *serial)
#define CRYPTO_get_ex_data
ASN1_TIME * X509_gmtime_adj(ASN1_TIME *s, long offset_sec)
X509_STORE_CTX_get_issuer_fn get_issuer
X509_STORE_CTX_cert_crl_fn cert_crl
void X509_STORE_CTX_zero(X509_STORE_CTX *ctx)
#define ASN1_STRING_to_UTF8
#define CRL_SCORE_ISSUER_CERT
#define X509_CRL_set1_nextUpdate
static int get_crl_delta(X509_STORE_CTX *ctx, X509_CRL **pcrl, X509_CRL **pdcrl, X509 *x)
#define CRLDP_ALL_REASONS
int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx)
#define CRYPTO_get_ex_new_index
ASN1_INTEGER * serialNumber
#define X509_V_FLAG_CB_ISSUER_CHECK
union GENERAL_NAME_st::@370 d
#define X509_R_UNKNOWN_PURPOSE_ID
#define X509_PURPOSE_CRL_SIGN
static int get_crl_score(X509_STORE_CTX *ctx, X509 **pissuer, unsigned int *preasons, X509_CRL *crl, X509 *x)
#define X509_V_ERR_HOSTNAME_MISMATCH
static int check_name_constraints(X509_STORE_CTX *ctx)
int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, int purpose, int trust)
#define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
static int check_chain_extensions(X509_STORE_CTX *ctx)
#define X509_PURPOSE_get_by_id
#define X509_STORE_get1_certs
#define X509_TRUST_UNTRUSTED
int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx)
static void crl_akid_check(X509_STORE_CTX *ctx, X509_CRL *crl, X509 **pissuer, int *pcrl_score)
#define X509_VERIFY_PARAM_set_depth
#define X509_V_ERR_STORE_LOOKUP
UniquePtr< SSL_SESSION > ret
static X509 * find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x)
static int check_crl_path(X509_STORE_CTX *ctx, X509 *x)
OPENSSL_EXPORT int GENERAL_NAME_cmp(const GENERAL_NAME *a, const GENERAL_NAME *b)
#define CRL_SCORE_ISSUER_NAME
#define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
static int check_crl(X509_STORE_CTX *ctx, X509_CRL *crl)
#define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
#define X509_V_FLAG_EXTENDED_CRL_SUPPORT
X509_STORE_CTX * X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx)
ASN1_INTEGER * crl_number
void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth)
static int cert_self_signed(X509 *x, int *out_is_self_signed)
#define X509_V_ERR_CERT_REJECTED
#define X509_V_ERR_CERT_NOT_YET_VALID
#define X509_REVOKED_free
#define X509_R_UNKNOWN_TRUST_ID
X509_STORE_CTX_lookup_certs_fn lookup_certs
static X509 * lookup_cert_match(X509_STORE_CTX *ctx, X509 *x)
X509_STORE_CTX_check_issued_fn check_issued
#define X509_R_CRL_ALREADY_DELTA
OPENSSL_EXPORT int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x)
#define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
#define X509_R_NEWER_CRL_NOT_NEWER
static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
#define NID_issuing_distribution_point
DIST_POINT_NAME * distpoint
#define CRYPTO_set_ex_data
static int get_crl_sk(X509_STORE_CTX *ctx, X509_CRL **pcrl, X509_CRL **pdcrl, X509 **pissuer, int *pscore, unsigned int *preasons, STACK_OF(X509_CRL) *crls)
#define X509_VERIFY_PARAM_free
void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk)
#define X509_V_ERR_EMAIL_MISMATCH
#define X509_V_ERR_CRL_PATH_VALIDATION_ERROR
void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param)
int X509_cmp_current_time(const ASN1_TIME *ctm)
#define X509_CRL_get_issuer
#define X509_R_CRL_VERIFY_FAILURE
#define X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS
X509 * X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx)
void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, int(*verify_cb)(int, X509_STORE_CTX *))
#define X509_V_ERR_UNABLE_TO_GET_CRL
int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose)
#define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
OPENSSL_EXPORT pem_password_cb * cb
OPENSSL_EXPORT int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev)
#define X509_V_FLAG_USE_CHECK_TIME
ASN1_TIME * X509_time_adj_ex(ASN1_TIME *s, int offset_day, long offset_sec, time_t *in_tm)
#define ERR_R_MALLOC_FAILURE
#define X509_TRUST_REJECTED
#define X509_V_FLAG_ALLOW_PROXY_CERTS
#define X509_check_purpose
X509 * X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx)
#define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
#define X509_V_ERR_INVALID_NON_CA
#define X509_V_FLAG_CHECK_SS_SIGNATURE
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:56