1/*
2 * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License").  You may not use
5 * this file except in compliance with the License.  You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10#include "internal/deprecated.h"
11
12#include <stdio.h>
13#include <time.h>
14#include <errno.h>
15#include <limits.h>
16
17#include "crypto/ctype.h"
18#include "internal/cryptlib.h"
19#include <openssl/crypto.h>
20#include <openssl/buffer.h>
21#include <openssl/evp.h>
22#include <openssl/asn1.h>
23#include <openssl/x509.h>
24#include <openssl/x509v3.h>
25#include <openssl/objects.h>
26#include <openssl/core_names.h>
27#include "internal/dane.h"
28#include "crypto/x509.h"
29#include "x509_local.h"
30
31/* CRL score values */
32
33#define CRL_SCORE_NOCRITICAL    0x100 /* No unhandled critical extensions */
34#define CRL_SCORE_SCOPE         0x080 /* certificate is within CRL scope */
35#define CRL_SCORE_TIME          0x040 /* CRL times valid */
36#define CRL_SCORE_ISSUER_NAME   0x020 /* Issuer name matches certificate */
37#define CRL_SCORE_VALID /* If this score or above CRL is probably valid */ \
38    (CRL_SCORE_NOCRITICAL | CRL_SCORE_TIME | CRL_SCORE_SCOPE)
39#define CRL_SCORE_ISSUER_CERT   0x018 /* CRL issuer is certificate issuer */
40#define CRL_SCORE_SAME_PATH     0x008 /* CRL issuer is on certificate path */
41#define CRL_SCORE_AKID          0x004 /* CRL issuer matches CRL AKID */
42#define CRL_SCORE_TIME_DELTA    0x002 /* Have a delta CRL with valid times */
43
44static int build_chain(X509_STORE_CTX *ctx);
45static int verify_chain(X509_STORE_CTX *ctx);
46static int dane_verify(X509_STORE_CTX *ctx);
47static int null_callback(int ok, X509_STORE_CTX *e);
48static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer);
49static X509 *find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x);
50static int check_extensions(X509_STORE_CTX *ctx);
51static int check_name_constraints(X509_STORE_CTX *ctx);
52static int check_id(X509_STORE_CTX *ctx);
53static int check_trust(X509_STORE_CTX *ctx, int num_untrusted);
54static int check_revocation(X509_STORE_CTX *ctx);
55static int check_cert(X509_STORE_CTX *ctx);
56static int check_policy(X509_STORE_CTX *ctx);
57static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);
58static int check_dane_issuer(X509_STORE_CTX *ctx, int depth);
59static int check_key_level(X509_STORE_CTX *ctx, X509 *cert);
60static int check_sig_level(X509_STORE_CTX *ctx, X509 *cert);
61static int check_curve(X509 *cert);
62
63static int get_crl_score(X509_STORE_CTX *ctx, X509 **pissuer,
64                         unsigned int *preasons, X509_CRL *crl, X509 *x);
65static int get_crl_delta(X509_STORE_CTX *ctx,
66                         X509_CRL **pcrl, X509_CRL **pdcrl, X509 *x);
67static void get_delta_sk(X509_STORE_CTX *ctx, X509_CRL **dcrl,
68                         int *pcrl_score, X509_CRL *base,
69                         STACK_OF(X509_CRL) *crls);
70static void crl_akid_check(X509_STORE_CTX *ctx, X509_CRL *crl, X509 **pissuer,
71                           int *pcrl_score);
72static int crl_crldp_check(X509 *x, X509_CRL *crl, int crl_score,
73                           unsigned int *preasons);
74static int check_crl_path(X509_STORE_CTX *ctx, X509 *x);
75static int check_crl_chain(X509_STORE_CTX *ctx,
76                           STACK_OF(X509) *cert_path,
77                           STACK_OF(X509) *crl_path);
78
79static int internal_verify(X509_STORE_CTX *ctx);
80
81static int null_callback(int ok, X509_STORE_CTX *e)
82{
83    return ok;
84}
85
86/*-
87 * Return 1 if given cert is considered self-signed, 0 if not, or -1 on error.
88 * This actually verifies self-signedness only if requested.
89 * It calls ossl_x509v3_cache_extensions()
90 * to match issuer and subject names (i.e., the cert being self-issued) and any
91 * present authority key identifier to match the subject key identifier, etc.
92 */
93int X509_self_signed(X509 *cert, int verify_signature)
94{
95    EVP_PKEY *pkey;
96
97    if ((pkey = X509_get0_pubkey(cert)) == NULL) { /* handles cert == NULL */
98        ERR_raise(ERR_LIB_X509, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY);
99        return -1;
100    }
101    if (!ossl_x509v3_cache_extensions(cert))
102        return -1;
103    if ((cert->ex_flags & EXFLAG_SS) == 0)
104        return 0;
105    if (!verify_signature)
106        return 1;
107    return X509_verify(cert, pkey);
108}
109
110/*
111 * Given a certificate, try and find an exact match in the store.
112 * Returns 1 on success, 0 on not found, -1 on internal error.
113 */
114static int lookup_cert_match(X509 **result, X509_STORE_CTX *ctx, X509 *x)
115{
116    STACK_OF(X509) *certs;
117    X509 *xtmp = NULL;
118    int i, ret;
119
120    *result = NULL;
121    /* Lookup all certs with matching subject name */
122    ERR_set_mark();
123    certs = ctx->lookup_certs(ctx, X509_get_subject_name(x));
124    ERR_pop_to_mark();
125    if (certs == NULL)
126        return -1;
127    /* Look for exact match */
128    for (i = 0; i < sk_X509_num(certs); i++) {
129        xtmp = sk_X509_value(certs, i);
130        if (X509_cmp(xtmp, x) == 0)
131            break;
132        xtmp = NULL;
133    }
134    ret = xtmp != NULL;
135    if (ret) {
136        if (!X509_up_ref(xtmp))
137            ret = -1;
138        else
139            *result = xtmp;
140    }
141    sk_X509_pop_free(certs, X509_free);
142    return ret;
143}
144
145/*-
146 * Inform the verify callback of an error.
147 * The error code is set to |err| if |err| is not X509_V_OK, else
148 * |ctx->error| is left unchanged (under the assumption it is set elsewhere).
149 * The error depth is |depth| if >= 0, else it defaults to |ctx->error_depth|.
150 * The error cert is |x| if not NULL, else defaults to the chain cert at depth.
151 *
152 * Returns 0 to abort verification with an error, non-zero to continue.
153 */
154static int verify_cb_cert(X509_STORE_CTX *ctx, X509 *x, int depth, int err)
155{
156    if (depth < 0)
157        depth = ctx->error_depth;
158    else
159        ctx->error_depth = depth;
160    ctx->current_cert = (x != NULL) ? x : sk_X509_value(ctx->chain, depth);
161    if (err != X509_V_OK)
162        ctx->error = err;
163    return ctx->verify_cb(0, ctx);
164}
165
166#define CB_FAIL_IF(cond, ctx, cert, depth, err) \
167    if ((cond) && verify_cb_cert(ctx, cert, depth, err) == 0) \
168        return 0
169
170/*-
171 * Inform the verify callback of an error, CRL-specific variant.  Here, the
172 * error depth and certificate are already set, we just specify the error
173 * number.
174 *
175 * Returns 0 to abort verification with an error, non-zero to continue.
176 */
177static int verify_cb_crl(X509_STORE_CTX *ctx, int err)
178{
179    ctx->error = err;
180    return ctx->verify_cb(0, ctx);
181}
182
183static int check_auth_level(X509_STORE_CTX *ctx)
184{
185    int i;
186    int num = sk_X509_num(ctx->chain);
187
188    if (ctx->param->auth_level <= 0)
189        return 1;
190
191    for (i = 0; i < num; ++i) {
192        X509 *cert = sk_X509_value(ctx->chain, i);
193
194        /*
195         * We've already checked the security of the leaf key, so here we only
196         * check the security of issuer keys.
197         */
198        CB_FAIL_IF(i > 0 && !check_key_level(ctx, cert),
199                   ctx, cert, i, X509_V_ERR_CA_KEY_TOO_SMALL);
200        /*
201         * We also check the signature algorithm security of all certificates
202         * except those of the trust anchor at index num-1.
203         */
204        CB_FAIL_IF(i < num - 1 && !check_sig_level(ctx, cert),
205                   ctx, cert, i, X509_V_ERR_CA_MD_TOO_WEAK);
206    }
207    return 1;
208}
209
210/* Returns -1 on internal error */
211static int verify_chain(X509_STORE_CTX *ctx)
212{
213    int err;
214    int ok;
215
216    if ((ok = build_chain(ctx)) <= 0
217        || (ok = check_extensions(ctx)) <= 0
218        || (ok = check_auth_level(ctx)) <= 0
219        || (ok = check_id(ctx)) <= 0
220        || (ok = X509_get_pubkey_parameters(NULL, ctx->chain) ? 1 : -1) <= 0
221        || (ok = ctx->check_revocation(ctx)) <= 0)
222        return ok;
223
224    err = X509_chain_check_suiteb(&ctx->error_depth, NULL, ctx->chain,
225                                  ctx->param->flags);
226    CB_FAIL_IF(err != X509_V_OK, ctx, NULL, ctx->error_depth, err);
227
228    /* Verify chain signatures and expiration times */
229    ok = ctx->verify != NULL ? ctx->verify(ctx) : internal_verify(ctx);
230    if (ok <= 0)
231        return ok;
232
233    if ((ok = check_name_constraints(ctx)) <= 0)
234        return ok;
235
236#ifndef OPENSSL_NO_RFC3779
237    /* RFC 3779 path validation, now that CRL check has been done */
238    if ((ok = X509v3_asid_validate_path(ctx)) <= 0)
239        return ok;
240    if ((ok = X509v3_addr_validate_path(ctx)) <= 0)
241        return ok;
242#endif
243
244    /* If we get this far evaluate policies */
245    if ((ctx->param->flags & X509_V_FLAG_POLICY_CHECK) != 0)
246        ok = ctx->check_policy(ctx);
247    return ok;
248}
249
250int X509_STORE_CTX_verify(X509_STORE_CTX *ctx)
251{
252    if (ctx == NULL) {
253        ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
254        return -1;
255    }
256    if (ctx->cert == NULL && sk_X509_num(ctx->untrusted) >= 1)
257        ctx->cert = sk_X509_value(ctx->untrusted, 0);
258    return X509_verify_cert(ctx);
259}
260
261int X509_verify_cert(X509_STORE_CTX *ctx)
262{
263    int ret;
264
265    if (ctx == NULL) {
266        ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
267        return -1;
268    }
269    if (ctx->cert == NULL) {
270        ERR_raise(ERR_LIB_X509, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY);
271        ctx->error = X509_V_ERR_INVALID_CALL;
272        return -1;
273    }
274
275    if (ctx->chain != NULL) {
276        /*
277         * This X509_STORE_CTX has already been used to verify a cert. We
278         * cannot do another one.
279         */
280        ERR_raise(ERR_LIB_X509, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
281        ctx->error = X509_V_ERR_INVALID_CALL;
282        return -1;
283    }
284
285    if (!ossl_x509_add_cert_new(&ctx->chain, ctx->cert, X509_ADD_FLAG_UP_REF)) {
286        ctx->error = X509_V_ERR_OUT_OF_MEM;
287        return -1;
288    }
289    ctx->num_untrusted = 1;
290
291    /* If the peer's public key is too weak, we can stop early. */
292    CB_FAIL_IF(!check_key_level(ctx, ctx->cert),
293               ctx, ctx->cert, 0, X509_V_ERR_EE_KEY_TOO_SMALL);
294
295    ret = DANETLS_ENABLED(ctx->dane) ? dane_verify(ctx) : verify_chain(ctx);
296
297    /*
298     * Safety-net.  If we are returning an error, we must also set ctx->error,
299     * so that the chain is not considered verified should the error be ignored
300     * (e.g. TLS with SSL_VERIFY_NONE).
301     */
302    if (ret <= 0 && ctx->error == X509_V_OK)
303        ctx->error = X509_V_ERR_UNSPECIFIED;
304    return ret;
305}
306
307static int sk_X509_contains(STACK_OF(X509) *sk, X509 *cert)
308{
309    int i, n = sk_X509_num(sk);
310
311    for (i = 0; i < n; i++)
312        if (X509_cmp(sk_X509_value(sk, i), cert) == 0)
313            return 1;
314    return 0;
315}
316
317/*
318 * Find in given STACK_OF(X509) |sk| an issuer cert (if any) of given cert |x|.
319 * The issuer must not yet be in |ctx->chain|, yet allowing the exception that
320 *     |x| is self-issued and |ctx->chain| has just one element.
321 * Prefer the first non-expired one, else take the most recently expired one.
322 */
323static X509 *find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x)
324{
325    int i;
326    X509 *issuer, *rv = NULL;
327
328    for (i = 0; i < sk_X509_num(sk); i++) {
329        issuer = sk_X509_value(sk, i);
330        if (ctx->check_issued(ctx, x, issuer)
331            && (((x->ex_flags & EXFLAG_SI) != 0 && sk_X509_num(ctx->chain) == 1)
332                || !sk_X509_contains(ctx->chain, issuer))) {
333            if (ossl_x509_check_cert_time(ctx, issuer, -1))
334                return issuer;
335            if (rv == NULL || ASN1_TIME_compare(X509_get0_notAfter(issuer),
336                                                X509_get0_notAfter(rv)) > 0)
337                rv = issuer;
338        }
339    }
340    return rv;
341}
342
343/* Check that the given certificate 'x' is issued by the certificate 'issuer' */
344static int check_issued(ossl_unused X509_STORE_CTX *ctx, X509 *x, X509 *issuer)
345{
346    int err = ossl_x509_likely_issued(issuer, x);
347
348    if (err == X509_V_OK)
349        return 1;
350    /*
351     * SUBJECT_ISSUER_MISMATCH just means 'x' is clearly not issued by 'issuer'.
352     * Every other error code likely indicates a real error.
353     */
354    return 0;
355}
356
357/*-
358 * Alternative get_issuer method: look up from a STACK_OF(X509) in other_ctx.
359 * Returns -1 on internal error.
360 */
361static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
362{
363    *issuer = find_issuer(ctx, ctx->other_ctx, x);
364    if (*issuer != NULL)
365        return X509_up_ref(*issuer) ? 1 : -1;
366    return 0;
367}
368
369/*-
370 * Alternative lookup method: look from a STACK stored in other_ctx.
371 * Returns NULL on internal error (such as out of memory).
372 */
373static STACK_OF(X509) *lookup_certs_sk(X509_STORE_CTX *ctx,
374                                       const X509_NAME *nm)
375{
376    STACK_OF(X509) *sk = sk_X509_new_null();
377    X509 *x;
378    int i;
379
380    if (sk == NULL)
381        return NULL;
382    for (i = 0; i < sk_X509_num(ctx->other_ctx); i++) {
383        x = sk_X509_value(ctx->other_ctx, i);
384        if (X509_NAME_cmp(nm, X509_get_subject_name(x)) == 0) {
385            if (!X509_add_cert(sk, x, X509_ADD_FLAG_UP_REF)) {
386                sk_X509_pop_free(sk, X509_free);
387                ctx->error = X509_V_ERR_OUT_OF_MEM;
388                return NULL;
389            }
390        }
391    }
392    return sk;
393}
394
395/*
396 * Check EE or CA certificate purpose.  For trusted certificates explicit local
397 * auxiliary trust can be used to override EKU-restrictions.
398 * Sadly, returns 0 also on internal error.
399 */
400static int check_purpose(X509_STORE_CTX *ctx, X509 *x, int purpose, int depth,
401                         int must_be_ca)
402{
403    int tr_ok = X509_TRUST_UNTRUSTED;
404
405    /*
406     * For trusted certificates we want to see whether any auxiliary trust
407     * settings trump the purpose constraints.
408     *
409     * This is complicated by the fact that the trust ordinals in
410     * ctx->param->trust are entirely independent of the purpose ordinals in
411     * ctx->param->purpose!
412     *
413     * What connects them is their mutual initialization via calls from
414     * X509_STORE_CTX_set_default() into X509_VERIFY_PARAM_lookup() which sets
415     * related values of both param->trust and param->purpose.  It is however
416     * typically possible to infer associated trust values from a purpose value
417     * via the X509_PURPOSE API.
418     *
419     * Therefore, we can only check for trust overrides when the purpose we're
420     * checking is the same as ctx->param->purpose and ctx->param->trust is
421     * also set.
422     */
423    if (depth >= ctx->num_untrusted && purpose == ctx->param->purpose)
424        tr_ok = X509_check_trust(x, ctx->param->trust, X509_TRUST_NO_SS_COMPAT);
425
426    switch (tr_ok) {
427    case X509_TRUST_TRUSTED:
428        return 1;
429    case X509_TRUST_REJECTED:
430        break;
431    default:
432        switch (X509_check_purpose(x, purpose, must_be_ca > 0)) {
433        case 1:
434            return 1;
435        case 0:
436            break;
437        default:
438            if ((ctx->param->flags & X509_V_FLAG_X509_STRICT) == 0)
439                return 1;
440        }
441        break;
442    }
443
444    return verify_cb_cert(ctx, x, depth, X509_V_ERR_INVALID_PURPOSE);
445}
446
447/*
448 * Check extensions of a cert chain for consistency with the supplied purpose.
449 * Sadly, returns 0 also on internal error.
450 */
451static int check_extensions(X509_STORE_CTX *ctx)
452{
453    int i, must_be_ca, plen = 0;
454    X509 *x;
455    int ret, proxy_path_length = 0;
456    int purpose, allow_proxy_certs, num = sk_X509_num(ctx->chain);
457
458    /*-
459     *  must_be_ca can have 1 of 3 values:
460     * -1: we accept both CA and non-CA certificates, to allow direct
461     *     use of self-signed certificates (which are marked as CA).
462     * 0:  we only accept non-CA certificates.  This is currently not
463     *     used, but the possibility is present for future extensions.
464     * 1:  we only accept CA certificates.  This is currently used for
465     *     all certificates in the chain except the leaf certificate.
466     */
467    must_be_ca = -1;
468
469    /* CRL path validation */
470    if (ctx->parent != NULL) {
471        allow_proxy_certs = 0;
472        purpose = X509_PURPOSE_CRL_SIGN;
473    } else {
474        allow_proxy_certs =
475            (ctx->param->flags & X509_V_FLAG_ALLOW_PROXY_CERTS) != 0;
476        purpose = ctx->param->purpose;
477    }
478
479    for (i = 0; i < num; i++) {
480        x = sk_X509_value(ctx->chain, i);
481        CB_FAIL_IF((ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL) == 0
482                       && (x->ex_flags & EXFLAG_CRITICAL) != 0,
483                   ctx, x, i, X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION);
484        CB_FAIL_IF(!allow_proxy_certs && (x->ex_flags & EXFLAG_PROXY) != 0,
485                   ctx, x, i, X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED);
486        ret = X509_check_ca(x);
487        switch (must_be_ca) {
488        case -1:
489            CB_FAIL_IF((ctx->param->flags & X509_V_FLAG_X509_STRICT) != 0
490                           && ret != 1 && ret != 0,
491                       ctx, x, i, X509_V_ERR_INVALID_CA);
492            break;
493        case 0:
494            CB_FAIL_IF(ret != 0, ctx, x, i, X509_V_ERR_INVALID_NON_CA);
495            break;
496        default:
497            /* X509_V_FLAG_X509_STRICT is implicit for intermediate CAs */
498            CB_FAIL_IF(ret == 0
499                       || ((i + 1 < num
500                            || (ctx->param->flags & X509_V_FLAG_X509_STRICT) != 0)
501                           && ret != 1), ctx, x, i, X509_V_ERR_INVALID_CA);
502            break;
503        }
504        if (num > 1) {
505            /* Check for presence of explicit elliptic curve parameters */
506            ret = check_curve(x);
507            CB_FAIL_IF(ret < 0, ctx, x, i, X509_V_ERR_UNSPECIFIED);
508            CB_FAIL_IF(ret == 0, ctx, x, i, X509_V_ERR_EC_KEY_EXPLICIT_PARAMS);
509        }
510        /*
511         * Do the following set of checks only if strict checking is requested
512         * and not for self-issued (including self-signed) EE (non-CA) certs
513         * because RFC 5280 does not apply to them according RFC 6818 section 2.
514         */
515        if ((ctx->param->flags & X509_V_FLAG_X509_STRICT) != 0
516            && num > 1) { /*
517                           * this should imply
518                           * !(i == 0 && (x->ex_flags & EXFLAG_CA) == 0
519                           *          && (x->ex_flags & EXFLAG_SI) != 0)
520                           */
521            /* Check Basic Constraints according to RFC 5280 section 4.2.1.9 */
522            if (x->ex_pathlen != -1) {
523                CB_FAIL_IF((x->ex_flags & EXFLAG_CA) == 0,
524                           ctx, x, i, X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA);
525                CB_FAIL_IF((x->ex_kusage & KU_KEY_CERT_SIGN) == 0, ctx,
526                           x, i, X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN);
527            }
528            CB_FAIL_IF((x->ex_flags & EXFLAG_CA) != 0
529                           && (x->ex_flags & EXFLAG_BCONS) != 0
530                           && (x->ex_flags & EXFLAG_BCONS_CRITICAL) == 0,
531                       ctx, x, i, X509_V_ERR_CA_BCONS_NOT_CRITICAL);
532            /* Check Key Usage according to RFC 5280 section 4.2.1.3 */
533            if ((x->ex_flags & EXFLAG_CA) != 0) {
534                CB_FAIL_IF((x->ex_flags & EXFLAG_KUSAGE) == 0,
535                           ctx, x, i, X509_V_ERR_CA_CERT_MISSING_KEY_USAGE);
536            } else {
537                CB_FAIL_IF((x->ex_kusage & KU_KEY_CERT_SIGN) != 0, ctx, x, i,
538                           X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA);
539            }
540            /* Check issuer is non-empty acc. to RFC 5280 section 4.1.2.4 */
541            CB_FAIL_IF(X509_NAME_entry_count(X509_get_issuer_name(x)) == 0,
542                       ctx, x, i, X509_V_ERR_ISSUER_NAME_EMPTY);
543            /* Check subject is non-empty acc. to RFC 5280 section 4.1.2.6 */
544            CB_FAIL_IF(((x->ex_flags & EXFLAG_CA) != 0
545                        || (x->ex_kusage & KU_CRL_SIGN) != 0
546                        || x->altname == NULL)
547                       && X509_NAME_entry_count(X509_get_subject_name(x)) == 0,
548                       ctx, x, i, X509_V_ERR_SUBJECT_NAME_EMPTY);
549            CB_FAIL_IF(X509_NAME_entry_count(X509_get_subject_name(x)) == 0
550                           && x->altname != NULL
551                           && (x->ex_flags & EXFLAG_SAN_CRITICAL) == 0,
552                       ctx, x, i, X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL);
553            /* Check SAN is non-empty according to RFC 5280 section 4.2.1.6 */
554            CB_FAIL_IF(x->altname != NULL
555                           && sk_GENERAL_NAME_num(x->altname) <= 0,
556                       ctx, x, i, X509_V_ERR_EMPTY_SUBJECT_ALT_NAME);
557            /* Check sig alg consistency acc. to RFC 5280 section 4.1.1.2 */
558            CB_FAIL_IF(X509_ALGOR_cmp(&x->sig_alg, &x->cert_info.signature) != 0,
559                       ctx, x, i, X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY);
560            CB_FAIL_IF(x->akid != NULL
561                           && (x->ex_flags & EXFLAG_AKID_CRITICAL) != 0,
562                       ctx, x, i, X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL);
563            CB_FAIL_IF(x->skid != NULL
564                           && (x->ex_flags & EXFLAG_SKID_CRITICAL) != 0,
565                       ctx, x, i, X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL);
566            if (X509_get_version(x) >= X509_VERSION_3) {
567                /* Check AKID presence acc. to RFC 5280 section 4.2.1.1 */
568                CB_FAIL_IF(i + 1 < num /*
569                                        * this means not last cert in chain,
570                                        * taken as "generated by conforming CAs"
571                                        */
572                           && (x->akid == NULL || x->akid->keyid == NULL), ctx,
573                           x, i, X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER);
574                /* Check SKID presence acc. to RFC 5280 section 4.2.1.2 */
575                CB_FAIL_IF((x->ex_flags & EXFLAG_CA) != 0 && x->skid == NULL,
576                           ctx, x, i, X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER);
577            } else {
578                CB_FAIL_IF(sk_X509_EXTENSION_num(X509_get0_extensions(x)) > 0,
579                           ctx, x, i, X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3);
580            }
581        }
582
583        /* check_purpose() makes the callback as needed */
584        if (purpose > 0 && !check_purpose(ctx, x, purpose, i, must_be_ca))
585            return 0;
586        /* Check path length */
587        CB_FAIL_IF(i > 1 && x->ex_pathlen != -1
588                       && plen > x->ex_pathlen + proxy_path_length,
589                   ctx, x, i, X509_V_ERR_PATH_LENGTH_EXCEEDED);
590        /* Increment path length if not a self-issued intermediate CA */
591        if (i > 0 && (x->ex_flags & EXFLAG_SI) == 0)
592            plen++;
593        /*
594         * If this certificate is a proxy certificate, the next certificate
595         * must be another proxy certificate or a EE certificate.  If not,
596         * the next certificate must be a CA certificate.
597         */
598        if (x->ex_flags & EXFLAG_PROXY) {
599            /*
600             * RFC3820, 4.1.3 (b)(1) stipulates that if pCPathLengthConstraint
601             * is less than max_path_length, the former should be copied to
602             * the latter, and 4.1.4 (a) stipulates that max_path_length
603             * should be verified to be larger than zero and decrement it.
604             *
605             * Because we're checking the certs in the reverse order, we start
606             * with verifying that proxy_path_length isn't larger than pcPLC,
607             * and copy the latter to the former if it is, and finally,
608             * increment proxy_path_length.
609             */
610            if (x->ex_pcpathlen != -1) {
611                CB_FAIL_IF(proxy_path_length > x->ex_pcpathlen,
612                           ctx, x, i, X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED);
613                proxy_path_length = x->ex_pcpathlen;
614            }
615            proxy_path_length++;
616            must_be_ca = 0;
617        } else {
618            must_be_ca = 1;
619        }
620    }
621    return 1;
622}
623
624static int has_san_id(X509 *x, int gtype)
625{
626    int i;
627    int ret = 0;
628    GENERAL_NAMES *gs = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
629
630    if (gs == NULL)
631        return 0;
632
633    for (i = 0; i < sk_GENERAL_NAME_num(gs); i++) {
634        GENERAL_NAME *g = sk_GENERAL_NAME_value(gs, i);
635
636        if (g->type == gtype) {
637            ret = 1;
638            break;
639        }
640    }
641    GENERAL_NAMES_free(gs);
642    return ret;
643}
644
645/* Returns -1 on internal error */
646static int check_name_constraints(X509_STORE_CTX *ctx)
647{
648    int i;
649
650    /* Check name constraints for all certificates */
651    for (i = sk_X509_num(ctx->chain) - 1; i >= 0; i--) {
652        X509 *x = sk_X509_value(ctx->chain, i);
653        int j;
654
655        /* Ignore self-issued certs unless last in chain */
656        if (i != 0 && (x->ex_flags & EXFLAG_SI) != 0)
657            continue;
658
659        /*
660         * Proxy certificates policy has an extra constraint, where the
661         * certificate subject MUST be the issuer with a single CN entry
662         * added.
663         * (RFC 3820: 3.4, 4.1.3 (a)(4))
664         */
665        if ((x->ex_flags & EXFLAG_PROXY) != 0) {
666            X509_NAME *tmpsubject = X509_get_subject_name(x);
667            X509_NAME *tmpissuer = X509_get_issuer_name(x);
668            X509_NAME_ENTRY *tmpentry = NULL;
669            int last_nid = 0;
670            int err = X509_V_OK;
671            int last_loc = X509_NAME_entry_count(tmpsubject) - 1;
672
673            /* Check that there are at least two RDNs */
674            if (last_loc < 1) {
675                err = X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION;
676                goto proxy_name_done;
677            }
678
679            /*
680             * Check that there is exactly one more RDN in subject as
681             * there is in issuer.
682             */
683            if (X509_NAME_entry_count(tmpsubject)
684                != X509_NAME_entry_count(tmpissuer) + 1) {
685                err = X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION;
686                goto proxy_name_done;
687            }
688
689            /*
690             * Check that the last subject component isn't part of a
691             * multi-valued RDN
692             */
693            if (X509_NAME_ENTRY_set(X509_NAME_get_entry(tmpsubject, last_loc))
694                == X509_NAME_ENTRY_set(X509_NAME_get_entry(tmpsubject,
695                                                           last_loc - 1))) {
696                err = X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION;
697                goto proxy_name_done;
698            }
699
700            /*
701             * Check that the last subject RDN is a commonName, and that
702             * all the previous RDNs match the issuer exactly
703             */
704            tmpsubject = X509_NAME_dup(tmpsubject);
705            if (tmpsubject == NULL) {
706                ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
707                ctx->error = X509_V_ERR_OUT_OF_MEM;
708                return -1;
709            }
710
711            tmpentry = X509_NAME_delete_entry(tmpsubject, last_loc);
712            last_nid = OBJ_obj2nid(X509_NAME_ENTRY_get_object(tmpentry));
713
714            if (last_nid != NID_commonName
715                || X509_NAME_cmp(tmpsubject, tmpissuer) != 0) {
716                err = X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION;
717            }
718
719            X509_NAME_ENTRY_free(tmpentry);
720            X509_NAME_free(tmpsubject);
721
722        proxy_name_done:
723            CB_FAIL_IF(err != X509_V_OK, ctx, x, i, err);
724        }
725
726        /*
727         * Check against constraints for all certificates higher in chain
728         * including trust anchor. Trust anchor not strictly speaking needed
729         * but if it includes constraints it is to be assumed it expects them
730         * to be obeyed.
731         */
732        for (j = sk_X509_num(ctx->chain) - 1; j > i; j--) {
733            NAME_CONSTRAINTS *nc = sk_X509_value(ctx->chain, j)->nc;
734
735            if (nc) {
736                int rv = NAME_CONSTRAINTS_check(x, nc);
737                int ret = 1;
738
739                /* If EE certificate check commonName too */
740                if (rv == X509_V_OK && i == 0
741                    && (ctx->param->hostflags
742                        & X509_CHECK_FLAG_NEVER_CHECK_SUBJECT) == 0
743                    && ((ctx->param->hostflags
744                         & X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT) != 0
745                        || (ret = has_san_id(x, GEN_DNS)) == 0))
746                    rv = NAME_CONSTRAINTS_check_CN(x, nc);
747                if (ret < 0)
748                    return ret;
749
750                switch (rv) {
751                case X509_V_OK:
752                    break;
753                case X509_V_ERR_OUT_OF_MEM:
754                    return -1;
755                default:
756                    CB_FAIL_IF(1, ctx, x, i, rv);
757                    break;
758                }
759            }
760        }
761    }
762    return 1;
763}
764
765static int check_id_error(X509_STORE_CTX *ctx, int errcode)
766{
767    return verify_cb_cert(ctx, ctx->cert, 0, errcode);
768}
769
770static int check_hosts(X509 *x, X509_VERIFY_PARAM *vpm)
771{
772    int i;
773    int n = sk_OPENSSL_STRING_num(vpm->hosts);
774    char *name;
775
776    if (vpm->peername != NULL) {
777        OPENSSL_free(vpm->peername);
778        vpm->peername = NULL;
779    }
780    for (i = 0; i < n; ++i) {
781        name = sk_OPENSSL_STRING_value(vpm->hosts, i);
782        if (X509_check_host(x, name, 0, vpm->hostflags, &vpm->peername) > 0)
783            return 1;
784    }
785    return n == 0;
786}
787
788static int check_id(X509_STORE_CTX *ctx)
789{
790    X509_VERIFY_PARAM *vpm = ctx->param;
791    X509 *x = ctx->cert;
792
793    if (vpm->hosts != NULL && check_hosts(x, vpm) <= 0) {
794        if (!check_id_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH))
795            return 0;
796    }
797    if (vpm->email != NULL
798            && X509_check_email(x, vpm->email, vpm->emaillen, 0) <= 0) {
799        if (!check_id_error(ctx, X509_V_ERR_EMAIL_MISMATCH))
800            return 0;
801    }
802    if (vpm->ip != NULL && X509_check_ip(x, vpm->ip, vpm->iplen, 0) <= 0) {
803        if (!check_id_error(ctx, X509_V_ERR_IP_ADDRESS_MISMATCH))
804            return 0;
805    }
806    return 1;
807}
808
809/* Returns -1 on internal error */
810static int check_trust(X509_STORE_CTX *ctx, int num_untrusted)
811{
812    int i, res;
813    X509 *x = NULL;
814    X509 *mx;
815    SSL_DANE *dane = ctx->dane;
816    int num = sk_X509_num(ctx->chain);
817    int trust;
818
819    /*
820     * Check for a DANE issuer at depth 1 or greater, if it is a DANE-TA(2)
821     * match, we're done, otherwise we'll merely record the match depth.
822     */
823    if (DANETLS_HAS_TA(dane) && num_untrusted > 0 && num_untrusted < num) {
824        trust = check_dane_issuer(ctx, num_untrusted);
825        if (trust != X509_TRUST_UNTRUSTED)
826            return trust;
827    }
828
829    /*
830     * Check trusted certificates in chain at depth num_untrusted and up.
831     * Note, that depths 0..num_untrusted-1 may also contain trusted
832     * certificates, but the caller is expected to have already checked those,
833     * and wants to incrementally check just any added since.
834     */
835    for (i = num_untrusted; i < num; i++) {
836        x = sk_X509_value(ctx->chain, i);
837        trust = X509_check_trust(x, ctx->param->trust, 0);
838        /* If explicitly trusted (so not neutral nor rejected) return trusted */
839        if (trust == X509_TRUST_TRUSTED)
840            goto trusted;
841        if (trust == X509_TRUST_REJECTED)
842            goto rejected;
843    }
844
845    /*
846     * If we are looking at a trusted certificate, and accept partial chains,
847     * the chain is PKIX trusted.
848     */
849    if (num_untrusted < num) {
850        if ((ctx->param->flags & X509_V_FLAG_PARTIAL_CHAIN) != 0)
851            goto trusted;
852        return X509_TRUST_UNTRUSTED;
853    }
854
855    if (num_untrusted == num
856            && (ctx->param->flags & X509_V_FLAG_PARTIAL_CHAIN) != 0) {
857        /*
858         * Last-resort call with no new trusted certificates, check the leaf
859         * for a direct trust store match.
860         */
861        i = 0;
862        x = sk_X509_value(ctx->chain, i);
863        res = lookup_cert_match(&mx, ctx, x);
864        if (res < 0)
865            return res;
866        if (mx == NULL)
867            return X509_TRUST_UNTRUSTED;
868
869        /*
870         * Check explicit auxiliary trust/reject settings.  If none are set,
871         * we'll accept X509_TRUST_UNTRUSTED when not self-signed.
872         */
873        trust = X509_check_trust(mx, ctx->param->trust, 0);
874        if (trust == X509_TRUST_REJECTED) {
875            X509_free(mx);
876            goto rejected;
877        }
878
879        /* Replace leaf with trusted match */
880        (void)sk_X509_set(ctx->chain, 0, mx);
881        X509_free(x);
882        ctx->num_untrusted = 0;
883        goto trusted;
884    }
885
886    /*
887     * If no trusted certs in chain at all return untrusted and allow
888     * standard (no issuer cert) etc errors to be indicated.
889     */
890    return X509_TRUST_UNTRUSTED;
891
892 rejected:
893    return verify_cb_cert(ctx, x, i, X509_V_ERR_CERT_REJECTED) == 0
894        ? X509_TRUST_REJECTED : X509_TRUST_UNTRUSTED;
895
896 trusted:
897    if (!DANETLS_ENABLED(dane))
898        return X509_TRUST_TRUSTED;
899    if (dane->pdpth < 0)
900        dane->pdpth = num_untrusted;
901    /* With DANE, PKIX alone is not trusted until we have both */
902    if (dane->mdpth >= 0)
903        return X509_TRUST_TRUSTED;
904    return X509_TRUST_UNTRUSTED;
905}
906
907/* Sadly, returns 0 also on internal error. */
908static int check_revocation(X509_STORE_CTX *ctx)
909{
910    int i = 0, last = 0, ok = 0;
911
912    if ((ctx->param->flags & X509_V_FLAG_CRL_CHECK) == 0)
913        return 1;
914    if ((ctx->param->flags & X509_V_FLAG_CRL_CHECK_ALL) != 0) {
915        last = sk_X509_num(ctx->chain) - 1;
916    } else {
917        /* If checking CRL paths this isn't the EE certificate */
918        if (ctx->parent)
919            return 1;
920        last = 0;
921    }
922    for (i = 0; i <= last; i++) {
923        ctx->error_depth = i;
924        ok = check_cert(ctx);
925        if (!ok)
926            return ok;
927    }
928    return 1;
929}
930
931/* Sadly, returns 0 also on internal error. */
932static int check_cert(X509_STORE_CTX *ctx)
933{
934    X509_CRL *crl = NULL, *dcrl = NULL;
935    int ok = 0;
936    int cnum = ctx->error_depth;
937    X509 *x = sk_X509_value(ctx->chain, cnum);
938
939    ctx->current_cert = x;
940    ctx->current_issuer = NULL;
941    ctx->current_crl_score = 0;
942    ctx->current_reasons = 0;
943
944    if ((x->ex_flags & EXFLAG_PROXY) != 0)
945        return 1;
946
947    while (ctx->current_reasons != CRLDP_ALL_REASONS) {
948        unsigned int last_reasons = ctx->current_reasons;
949
950        /* Try to retrieve relevant CRL */
951        if (ctx->get_crl != NULL)
952            ok = ctx->get_crl(ctx, &crl, x);
953        else
954            ok = get_crl_delta(ctx, &crl, &dcrl, x);
955        /* If error looking up CRL, nothing we can do except notify callback */
956        if (!ok) {
957            ok = verify_cb_crl(ctx, X509_V_ERR_UNABLE_TO_GET_CRL);
958            goto done;
959        }
960        ctx->current_crl = crl;
961        ok = ctx->check_crl(ctx, crl);
962        if (!ok)
963            goto done;
964
965        if (dcrl != NULL) {
966            ok = ctx->check_crl(ctx, dcrl);
967            if (!ok)
968                goto done;
969            ok = ctx->cert_crl(ctx, dcrl, x);
970            if (!ok)
971                goto done;
972        } else {
973            ok = 1;
974        }
975
976        /* Don't look in full CRL if delta reason is removefromCRL */
977        if (ok != 2) {
978            ok = ctx->cert_crl(ctx, crl, x);
979            if (!ok)
980                goto done;
981        }
982
983        X509_CRL_free(crl);
984        X509_CRL_free(dcrl);
985        crl = NULL;
986        dcrl = NULL;
987        /*
988         * If reasons not updated we won't get anywhere by another iteration,
989         * so exit loop.
990         */
991        if (last_reasons == ctx->current_reasons) {
992            ok = verify_cb_crl(ctx, X509_V_ERR_UNABLE_TO_GET_CRL);
993            goto done;
994        }
995    }
996 done:
997    X509_CRL_free(crl);
998    X509_CRL_free(dcrl);
999
1000    ctx->current_crl = NULL;
1001    return ok;
1002}
1003
1004/* Check CRL times against values in X509_STORE_CTX */
1005static int check_crl_time(X509_STORE_CTX *ctx, X509_CRL *crl, int notify)
1006{
1007    time_t *ptime;
1008    int i;
1009
1010    if ((ctx->param->flags & X509_V_FLAG_USE_CHECK_TIME) != 0)
1011        ptime = &ctx->param->check_time;
1012    else if ((ctx->param->flags & X509_V_FLAG_NO_CHECK_TIME) != 0)
1013        return 1;
1014    else
1015        ptime = NULL;
1016    if (notify)
1017        ctx->current_crl = crl;
1018
1019    i = X509_cmp_time(X509_CRL_get0_lastUpdate(crl), ptime);
1020    if (i == 0) {
1021        if (!notify)
1022            return 0;
1023        if (!verify_cb_crl(ctx, X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD))
1024            return 0;
1025    }
1026
1027    if (i > 0) {
1028        if (!notify)
1029            return 0;
1030        if (!verify_cb_crl(ctx, X509_V_ERR_CRL_NOT_YET_VALID))
1031            return 0;
1032    }
1033
1034    if (X509_CRL_get0_nextUpdate(crl)) {
1035        i = X509_cmp_time(X509_CRL_get0_nextUpdate(crl), ptime);
1036
1037        if (i == 0) {
1038            if (!notify)
1039                return 0;
1040            if (!verify_cb_crl(ctx, X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD))
1041                return 0;
1042        }
1043        /* Ignore expiration of base CRL is delta is valid */
1044        if (i < 0 && (ctx->current_crl_score & CRL_SCORE_TIME_DELTA) == 0) {
1045            if (!notify || !verify_cb_crl(ctx, X509_V_ERR_CRL_HAS_EXPIRED))
1046                return 0;
1047        }
1048    }
1049
1050    if (notify)
1051        ctx->current_crl = NULL;
1052
1053    return 1;
1054}
1055
1056static int get_crl_sk(X509_STORE_CTX *ctx, X509_CRL **pcrl, X509_CRL **pdcrl,
1057                      X509 **pissuer, int *pscore, unsigned int *preasons,
1058                      STACK_OF(X509_CRL) *crls)
1059{
1060    int i, crl_score, best_score = *pscore;
1061    unsigned int reasons, best_reasons = 0;
1062    X509 *x = ctx->current_cert;
1063    X509_CRL *crl, *best_crl = NULL;
1064    X509 *crl_issuer = NULL, *best_crl_issuer = NULL;
1065
1066    for (i = 0; i < sk_X509_CRL_num(crls); i++) {
1067        crl = sk_X509_CRL_value(crls, i);
1068        reasons = *preasons;
1069        crl_score = get_crl_score(ctx, &crl_issuer, &reasons, crl, x);
1070        if (crl_score < best_score || crl_score == 0)
1071            continue;
1072        /* If current CRL is equivalent use it if it is newer */
1073        if (crl_score == best_score && best_crl != NULL) {
1074            int day, sec;
1075
1076            if (ASN1_TIME_diff(&day, &sec, X509_CRL_get0_lastUpdate(best_crl),
1077                               X509_CRL_get0_lastUpdate(crl)) == 0)
1078                continue;
1079            /*
1080             * ASN1_TIME_diff never returns inconsistent signs for |day|
1081             * and |sec|.
1082             */
1083            if (day <= 0 && sec <= 0)
1084                continue;
1085        }
1086        best_crl = crl;
1087        best_crl_issuer = crl_issuer;
1088        best_score = crl_score;
1089        best_reasons = reasons;
1090    }
1091
1092    if (best_crl != NULL) {
1093        X509_CRL_free(*pcrl);
1094        *pcrl = best_crl;
1095        *pissuer = best_crl_issuer;
1096        *pscore = best_score;
1097        *preasons = best_reasons;
1098        X509_CRL_up_ref(best_crl);
1099        X509_CRL_free(*pdcrl);
1100        *pdcrl = NULL;
1101        get_delta_sk(ctx, pdcrl, pscore, best_crl, crls);
1102    }
1103
1104    if (best_score >= CRL_SCORE_VALID)
1105        return 1;
1106
1107    return 0;
1108}
1109
1110/*
1111 * Compare two CRL extensions for delta checking purposes. They should be
1112 * both present or both absent. If both present all fields must be identical.
1113 */
1114static int crl_extension_match(X509_CRL *a, X509_CRL *b, int nid)
1115{
1116    ASN1_OCTET_STRING *exta = NULL, *extb = NULL;
1117    int i = X509_CRL_get_ext_by_NID(a, nid, -1);
1118
1119    if (i >= 0) {
1120        /* Can't have multiple occurrences */
1121        if (X509_CRL_get_ext_by_NID(a, nid, i) != -1)
1122            return 0;
1123        exta = X509_EXTENSION_get_data(X509_CRL_get_ext(a, i));
1124    }
1125
1126    i = X509_CRL_get_ext_by_NID(b, nid, -1);
1127    if (i >= 0) {
1128        if (X509_CRL_get_ext_by_NID(b, nid, i) != -1)
1129            return 0;
1130        extb = X509_EXTENSION_get_data(X509_CRL_get_ext(b, i));
1131    }
1132
1133    if (exta == NULL && extb == NULL)
1134        return 1;
1135
1136    if (exta == NULL || extb == NULL)
1137        return 0;
1138
1139    return ASN1_OCTET_STRING_cmp(exta, extb) == 0;
1140}
1141
1142/* See if a base and delta are compatible */
1143static int check_delta_base(X509_CRL *delta, X509_CRL *base)
1144{
1145    /* Delta CRL must be a delta */
1146    if (delta->base_crl_number == NULL)
1147        return 0;
1148    /* Base must have a CRL number */
1149    if (base->crl_number == NULL)
1150        return 0;
1151    /* Issuer names must match */
1152    if (X509_NAME_cmp(X509_CRL_get_issuer(base),
1153                      X509_CRL_get_issuer(delta)) != 0)
1154        return 0;
1155    /* AKID and IDP must match */
1156    if (!crl_extension_match(delta, base, NID_authority_key_identifier))
1157        return 0;
1158    if (!crl_extension_match(delta, base, NID_issuing_distribution_point))
1159        return 0;
1160    /* Delta CRL base number must not exceed Full CRL number. */
1161    if (ASN1_INTEGER_cmp(delta->base_crl_number, base->crl_number) > 0)
1162        return 0;
1163    /* Delta CRL number must exceed full CRL number */
1164    return ASN1_INTEGER_cmp(delta->crl_number, base->crl_number) > 0;
1165}
1166
1167/*
1168 * For a given base CRL find a delta... maybe extend to delta scoring or
1169 * retrieve a chain of deltas...
1170 */
1171static void get_delta_sk(X509_STORE_CTX *ctx, X509_CRL **dcrl, int *pscore,
1172                         X509_CRL *base, STACK_OF(X509_CRL) *crls)
1173{
1174    X509_CRL *delta;
1175    int i;
1176
1177    if ((ctx->param->flags & X509_V_FLAG_USE_DELTAS) == 0)
1178        return;
1179    if (((ctx->current_cert->ex_flags | base->flags) & EXFLAG_FRESHEST) == 0)
1180        return;
1181    for (i = 0; i < sk_X509_CRL_num(crls); i++) {
1182        delta = sk_X509_CRL_value(crls, i);
1183        if (check_delta_base(delta, base)) {
1184            if (check_crl_time(ctx, delta, 0))
1185                *pscore |= CRL_SCORE_TIME_DELTA;
1186            X509_CRL_up_ref(delta);
1187            *dcrl = delta;
1188            return;
1189        }
1190    }
1191    *dcrl = NULL;
1192}
1193
1194/*
1195 * For a given CRL return how suitable it is for the supplied certificate
1196 * 'x'. The return value is a mask of several criteria. If the issuer is not
1197 * the certificate issuer this is returned in *pissuer. The reasons mask is
1198 * also used to determine if the CRL is suitable: if no new reasons the CRL
1199 * is rejected, otherwise reasons is updated.
1200 */
1201static int get_crl_score(X509_STORE_CTX *ctx, X509 **pissuer,
1202                         unsigned int *preasons, X509_CRL *crl, X509 *x)
1203{
1204    int crl_score = 0;
1205    unsigned int tmp_reasons = *preasons, crl_reasons;
1206
1207    /* First see if we can reject CRL straight away */
1208
1209    /* Invalid IDP cannot be processed */
1210    if ((crl->idp_flags & IDP_INVALID) != 0)
1211        return 0;
1212    /* Reason codes or indirect CRLs need extended CRL support */
1213    if ((ctx->param->flags & X509_V_FLAG_EXTENDED_CRL_SUPPORT) == 0) {
1214        if (crl->idp_flags & (IDP_INDIRECT | IDP_REASONS))
1215            return 0;
1216    } else if ((crl->idp_flags & IDP_REASONS) != 0) {
1217        /* If no new reasons reject */
1218        if ((crl->idp_reasons & ~tmp_reasons) == 0)
1219            return 0;
1220    }
1221    /* Don't process deltas at this stage */
1222    else if (crl->base_crl_number != NULL)
1223        return 0;
1224    /* If issuer name doesn't match certificate need indirect CRL */
1225    if (X509_NAME_cmp(X509_get_issuer_name(x), X509_CRL_get_issuer(crl)) != 0) {
1226        if ((crl->idp_flags & IDP_INDIRECT) == 0)
1227            return 0;
1228    } else {
1229        crl_score |= CRL_SCORE_ISSUER_NAME;
1230    }
1231
1232    if ((crl->flags & EXFLAG_CRITICAL) == 0)
1233        crl_score |= CRL_SCORE_NOCRITICAL;
1234
1235    /* Check expiration */
1236    if (check_crl_time(ctx, crl, 0))
1237        crl_score |= CRL_SCORE_TIME;
1238
1239    /* Check authority key ID and locate certificate issuer */
1240    crl_akid_check(ctx, crl, pissuer, &crl_score);
1241
1242    /* If we can't locate certificate issuer at this point forget it */
1243    if ((crl_score & CRL_SCORE_AKID) == 0)
1244        return 0;
1245
1246    /* Check cert for matching CRL distribution points */
1247    if (crl_crldp_check(x, crl, crl_score, &crl_reasons)) {
1248        /* If no new reasons reject */
1249        if ((crl_reasons & ~tmp_reasons) == 0)
1250            return 0;
1251        tmp_reasons |= crl_reasons;
1252        crl_score |= CRL_SCORE_SCOPE;
1253    }
1254
1255    *preasons = tmp_reasons;
1256
1257    return crl_score;
1258
1259}
1260
1261static void crl_akid_check(X509_STORE_CTX *ctx, X509_CRL *crl,
1262                           X509 **pissuer, int *pcrl_score)
1263{
1264    X509 *crl_issuer = NULL;
1265    const X509_NAME *cnm = X509_CRL_get_issuer(crl);
1266    int cidx = ctx->error_depth;
1267    int i;
1268
1269    if (cidx != sk_X509_num(ctx->chain) - 1)
1270        cidx++;
1271
1272    crl_issuer = sk_X509_value(ctx->chain, cidx);
1273
1274    if (X509_check_akid(crl_issuer, crl->akid) == X509_V_OK) {
1275        if (*pcrl_score & CRL_SCORE_ISSUER_NAME) {
1276            *pcrl_score |= CRL_SCORE_AKID | CRL_SCORE_ISSUER_CERT;
1277            *pissuer = crl_issuer;
1278            return;
1279        }
1280    }
1281
1282    for (cidx++; cidx < sk_X509_num(ctx->chain); cidx++) {
1283        crl_issuer = sk_X509_value(ctx->chain, cidx);
1284        if (X509_NAME_cmp(X509_get_subject_name(crl_issuer), cnm))
1285            continue;
1286        if (X509_check_akid(crl_issuer, crl->akid) == X509_V_OK) {
1287            *pcrl_score |= CRL_SCORE_AKID | CRL_SCORE_SAME_PATH;
1288            *pissuer = crl_issuer;
1289            return;
1290        }
1291    }
1292
1293    /* Anything else needs extended CRL support */
1294    if ((ctx->param->flags & X509_V_FLAG_EXTENDED_CRL_SUPPORT) == 0)
1295        return;
1296
1297    /*
1298     * Otherwise the CRL issuer is not on the path. Look for it in the set of
1299     * untrusted certificates.
1300     */
1301    for (i = 0; i < sk_X509_num(ctx->untrusted); i++) {
1302        crl_issuer = sk_X509_value(ctx->untrusted, i);
1303        if (X509_NAME_cmp(X509_get_subject_name(crl_issuer), cnm) != 0)
1304            continue;
1305        if (X509_check_akid(crl_issuer, crl->akid) == X509_V_OK) {
1306            *pissuer = crl_issuer;
1307            *pcrl_score |= CRL_SCORE_AKID;
1308            return;
1309        }
1310    }
1311}
1312
1313/*
1314 * Check the path of a CRL issuer certificate. This creates a new
1315 * X509_STORE_CTX and populates it with most of the parameters from the
1316 * parent. This could be optimised somewhat since a lot of path checking will
1317 * be duplicated by the parent, but this will rarely be used in practice.
1318 */
1319static int check_crl_path(X509_STORE_CTX *ctx, X509 *x)
1320{
1321    X509_STORE_CTX crl_ctx = {0};
1322    int ret;
1323
1324    /* Don't allow recursive CRL path validation */
1325    if (ctx->parent != NULL)
1326        return 0;
1327    if (!X509_STORE_CTX_init(&crl_ctx, ctx->store, x, ctx->untrusted))
1328        return -1;
1329
1330    crl_ctx.crls = ctx->crls;
1331    /* Copy verify params across */
1332    X509_STORE_CTX_set0_param(&crl_ctx, ctx->param);
1333
1334    crl_ctx.parent = ctx;
1335    crl_ctx.verify_cb = ctx->verify_cb;
1336
1337    /* Verify CRL issuer */
1338    ret = X509_verify_cert(&crl_ctx);
1339    if (ret <= 0)
1340        goto err;
1341
1342    /* Check chain is acceptable */
1343    ret = check_crl_chain(ctx, ctx->chain, crl_ctx.chain);
1344 err:
1345    X509_STORE_CTX_cleanup(&crl_ctx);
1346    return ret;
1347}
1348
1349/*
1350 * RFC3280 says nothing about the relationship between CRL path and
1351 * certificate path, which could lead to situations where a certificate could
1352 * be revoked or validated by a CA not authorized to do so. RFC5280 is more
1353 * strict and states that the two paths must end in the same trust anchor,
1354 * though some discussions remain... until this is resolved we use the
1355 * RFC5280 version
1356 */
1357static int check_crl_chain(X509_STORE_CTX *ctx,
1358                           STACK_OF(X509) *cert_path,
1359                           STACK_OF(X509) *crl_path)
1360{
1361    X509 *cert_ta = sk_X509_value(cert_path, sk_X509_num(cert_path) - 1);
1362    X509 *crl_ta = sk_X509_value(crl_path, sk_X509_num(crl_path) - 1);
1363
1364    return X509_cmp(cert_ta, crl_ta) == 0;
1365}
1366
1367/*-
1368 * Check for match between two dist point names: three separate cases.
1369 * 1. Both are relative names and compare X509_NAME types.
1370 * 2. One full, one relative. Compare X509_NAME to GENERAL_NAMES.
1371 * 3. Both are full names and compare two GENERAL_NAMES.
1372 * 4. One is NULL: automatic match.
1373 */
1374static int idp_check_dp(DIST_POINT_NAME *a, DIST_POINT_NAME *b)
1375{
1376    X509_NAME *nm = NULL;
1377    GENERAL_NAMES *gens = NULL;
1378    GENERAL_NAME *gena, *genb;
1379    int i, j;
1380
1381    if (a == NULL || b == NULL)
1382        return 1;
1383    if (a->type == 1) {
1384        if (a->dpname == NULL)
1385            return 0;
1386        /* Case 1: two X509_NAME */
1387        if (b->type == 1) {
1388            if (b->dpname == NULL)
1389                return 0;
1390            return X509_NAME_cmp(a->dpname, b->dpname) == 0;
1391        }
1392        /* Case 2: set name and GENERAL_NAMES appropriately */
1393        nm = a->dpname;
1394        gens = b->name.fullname;
1395    } else if (b->type == 1) {
1396        if (b->dpname == NULL)
1397            return 0;
1398        /* Case 2: set name and GENERAL_NAMES appropriately */
1399        gens = a->name.fullname;
1400        nm = b->dpname;
1401    }
1402
1403    /* Handle case 2 with one GENERAL_NAMES and one X509_NAME */
1404    if (nm != NULL) {
1405        for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) {
1406            gena = sk_GENERAL_NAME_value(gens, i);
1407            if (gena->type != GEN_DIRNAME)
1408                continue;
1409            if (X509_NAME_cmp(nm, gena->d.directoryName) == 0)
1410                return 1;
1411        }
1412        return 0;
1413    }
1414
1415    /* Else case 3: two GENERAL_NAMES */
1416
1417    for (i = 0; i < sk_GENERAL_NAME_num(a->name.fullname); i++) {
1418        gena = sk_GENERAL_NAME_value(a->name.fullname, i);
1419        for (j = 0; j < sk_GENERAL_NAME_num(b->name.fullname); j++) {
1420            genb = sk_GENERAL_NAME_value(b->name.fullname, j);
1421            if (GENERAL_NAME_cmp(gena, genb) == 0)
1422                return 1;
1423        }
1424    }
1425
1426    return 0;
1427
1428}
1429
1430static int crldp_check_crlissuer(DIST_POINT *dp, X509_CRL *crl, int crl_score)
1431{
1432    int i;
1433    const X509_NAME *nm = X509_CRL_get_issuer(crl);
1434
1435    /* If no CRLissuer return is successful iff don't need a match */
1436    if (dp->CRLissuer == NULL)
1437        return (crl_score & CRL_SCORE_ISSUER_NAME) != 0;
1438    for (i = 0; i < sk_GENERAL_NAME_num(dp->CRLissuer); i++) {
1439        GENERAL_NAME *gen = sk_GENERAL_NAME_value(dp->CRLissuer, i);
1440
1441        if (gen->type != GEN_DIRNAME)
1442            continue;
1443        if (X509_NAME_cmp(gen->d.directoryName, nm) == 0)
1444            return 1;
1445    }
1446    return 0;
1447}
1448
1449/* Check CRLDP and IDP */
1450static int crl_crldp_check(X509 *x, X509_CRL *crl, int crl_score,
1451                           unsigned int *preasons)
1452{
1453    int i;
1454
1455    if ((crl->idp_flags & IDP_ONLYATTR) != 0)
1456        return 0;
1457    if ((x->ex_flags & EXFLAG_CA) != 0) {
1458        if ((crl->idp_flags & IDP_ONLYUSER) != 0)
1459            return 0;
1460    } else {
1461        if ((crl->idp_flags & IDP_ONLYCA) != 0)
1462            return 0;
1463    }
1464    *preasons = crl->idp_reasons;
1465    for (i = 0; i < sk_DIST_POINT_num(x->crldp); i++) {
1466        DIST_POINT *dp = sk_DIST_POINT_value(x->crldp, i);
1467
1468        if (crldp_check_crlissuer(dp, crl, crl_score)) {
1469            if (crl->idp == NULL
1470                    || idp_check_dp(dp->distpoint, crl->idp->distpoint)) {
1471                *preasons &= dp->dp_reasons;
1472                return 1;
1473            }
1474        }
1475    }
1476    return (crl->idp == NULL || crl->idp->distpoint == NULL)
1477            && (crl_score & CRL_SCORE_ISSUER_NAME) != 0;
1478}
1479
1480/*
1481 * Retrieve CRL corresponding to current certificate. If deltas enabled try
1482 * to find a delta CRL too
1483 */
1484static int get_crl_delta(X509_STORE_CTX *ctx,
1485                         X509_CRL **pcrl, X509_CRL **pdcrl, X509 *x)
1486{
1487    int ok;
1488    X509 *issuer = NULL;
1489    int crl_score = 0;
1490    unsigned int reasons;
1491    X509_CRL *crl = NULL, *dcrl = NULL;
1492    STACK_OF(X509_CRL) *skcrl;
1493    const X509_NAME *nm = X509_get_issuer_name(x);
1494
1495    reasons = ctx->current_reasons;
1496    ok = get_crl_sk(ctx, &crl, &dcrl,
1497                    &issuer, &crl_score, &reasons, ctx->crls);
1498    if (ok)
1499        goto done;
1500
1501    /* Lookup CRLs from store */
1502    skcrl = ctx->lookup_crls(ctx, nm);
1503
1504    /* If no CRLs found and a near match from get_crl_sk use that */
1505    if (skcrl == NULL && crl != NULL)
1506        goto done;
1507
1508    get_crl_sk(ctx, &crl, &dcrl, &issuer, &crl_score, &reasons, skcrl);
1509
1510    sk_X509_CRL_pop_free(skcrl, X509_CRL_free);
1511
1512 done:
1513    /* If we got any kind of CRL use it and return success */
1514    if (crl != NULL) {
1515        ctx->current_issuer = issuer;
1516        ctx->current_crl_score = crl_score;
1517        ctx->current_reasons = reasons;
1518        *pcrl = crl;
1519        *pdcrl = dcrl;
1520        return 1;
1521    }
1522    return 0;
1523}
1524
1525/* Check CRL validity */
1526static int check_crl(X509_STORE_CTX *ctx, X509_CRL *crl)
1527{
1528    X509 *issuer = NULL;
1529    EVP_PKEY *ikey = NULL;
1530    int cnum = ctx->error_depth;
1531    int chnum = sk_X509_num(ctx->chain) - 1;
1532
1533    /* If we have an alternative CRL issuer cert use that */
1534    if (ctx->current_issuer != NULL) {
1535        issuer = ctx->current_issuer;
1536    /*
1537     * Else find CRL issuer: if not last certificate then issuer is next
1538     * certificate in chain.
1539     */
1540    } else if (cnum < chnum) {
1541        issuer = sk_X509_value(ctx->chain, cnum + 1);
1542    } else {
1543        issuer = sk_X509_value(ctx->chain, chnum);
1544        /* If not self-issued, can't check signature */
1545        if (!ctx->check_issued(ctx, issuer, issuer) &&
1546            !verify_cb_crl(ctx, X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER))
1547            return 0;
1548    }
1549
1550    if (issuer == NULL)
1551        return 1;
1552
1553    /*
1554     * Skip most tests for deltas because they have already been done
1555     */
1556    if (crl->base_crl_number == NULL) {
1557        /* Check for cRLSign bit if keyUsage present */
1558        if ((issuer->ex_flags & EXFLAG_KUSAGE) != 0 &&
1559            (issuer->ex_kusage & KU_CRL_SIGN) == 0 &&
1560            !verify_cb_crl(ctx, X509_V_ERR_KEYUSAGE_NO_CRL_SIGN))
1561            return 0;
1562
1563        if ((ctx->current_crl_score & CRL_SCORE_SCOPE) == 0 &&
1564            !verify_cb_crl(ctx, X509_V_ERR_DIFFERENT_CRL_SCOPE))
1565            return 0;
1566
1567        if ((ctx->current_crl_score & CRL_SCORE_SAME_PATH) == 0 &&
1568            check_crl_path(ctx, ctx->current_issuer) <= 0 &&
1569            !verify_cb_crl(ctx, X509_V_ERR_CRL_PATH_VALIDATION_ERROR))
1570            return 0;
1571
1572        if ((crl->idp_flags & IDP_INVALID) != 0 &&
1573            !verify_cb_crl(ctx, X509_V_ERR_INVALID_EXTENSION))
1574            return 0;
1575    }
1576
1577    if ((ctx->current_crl_score & CRL_SCORE_TIME) == 0 &&
1578        !check_crl_time(ctx, crl, 1))
1579        return 0;
1580
1581    /* Attempt to get issuer certificate public key */
1582    ikey = X509_get0_pubkey(issuer);
1583    if (ikey == NULL &&
1584        !verify_cb_crl(ctx, X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY))
1585        return 0;
1586
1587    if (ikey != NULL) {
1588        int rv = X509_CRL_check_suiteb(crl, ikey, ctx->param->flags);
1589
1590        if (rv != X509_V_OK && !verify_cb_crl(ctx, rv))
1591            return 0;
1592        /* Verify CRL signature */
1593        if (X509_CRL_verify(crl, ikey) <= 0 &&
1594            !verify_cb_crl(ctx, X509_V_ERR_CRL_SIGNATURE_FAILURE))
1595            return 0;
1596    }
1597    return 1;
1598}
1599
1600/* Check certificate against CRL */
1601static int cert_crl(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x)
1602{
1603    X509_REVOKED *rev;
1604
1605    /*
1606     * The rules changed for this... previously if a CRL contained unhandled
1607     * critical extensions it could still be used to indicate a certificate
1608     * was revoked. This has since been changed since critical extensions can
1609     * change the meaning of CRL entries.
1610     */
1611    if ((ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL) == 0
1612        && (crl->flags & EXFLAG_CRITICAL) != 0 &&
1613        !verify_cb_crl(ctx, X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION))
1614        return 0;
1615    /*
1616     * Look for serial number of certificate in CRL.  If found, make sure
1617     * reason is not removeFromCRL.
1618     */
1619    if (X509_CRL_get0_by_cert(crl, &rev, x)) {
1620        if (rev->reason == CRL_REASON_REMOVE_FROM_CRL)
1621            return 2;
1622        if (!verify_cb_crl(ctx, X509_V_ERR_CERT_REVOKED))
1623            return 0;
1624    }
1625
1626    return 1;
1627}
1628
1629static int check_policy(X509_STORE_CTX *ctx)
1630{
1631    int ret;
1632
1633    if (ctx->parent)
1634        return 1;
1635    /*
1636     * With DANE, the trust anchor might be a bare public key, not a
1637     * certificate!  In that case our chain does not have the trust anchor
1638     * certificate as a top-most element.  This comports well with RFC5280
1639     * chain verification, since there too, the trust anchor is not part of the
1640     * chain to be verified.  In particular, X509_policy_check() does not look
1641     * at the TA cert, but assumes that it is present as the top-most chain
1642     * element.  We therefore temporarily push a NULL cert onto the chain if it
1643     * was verified via a bare public key, and pop it off right after the
1644     * X509_policy_check() call.
1645     */
1646    if (ctx->bare_ta_signed && !sk_X509_push(ctx->chain, NULL))
1647        goto memerr;
1648    ret = X509_policy_check(&ctx->tree, &ctx->explicit_policy, ctx->chain,
1649                            ctx->param->policies, ctx->param->flags);
1650    if (ctx->bare_ta_signed)
1651        (void)sk_X509_pop(ctx->chain);
1652
1653    if (ret == X509_PCY_TREE_INTERNAL)
1654        goto memerr;
1655    /* Invalid or inconsistent extensions */
1656    if (ret == X509_PCY_TREE_INVALID) {
1657        int i, cbcalled = 0;
1658
1659        /* Locate certificates with bad extensions and notify callback. */
1660        for (i = 0; i < sk_X509_num(ctx->chain); i++) {
1661            X509 *x = sk_X509_value(ctx->chain, i);
1662
1663            if ((x->ex_flags & EXFLAG_INVALID_POLICY) != 0)
1664                cbcalled = 1;
1665            CB_FAIL_IF((x->ex_flags & EXFLAG_INVALID_POLICY) != 0,
1666                       ctx, x, i, X509_V_ERR_INVALID_POLICY_EXTENSION);
1667        }
1668        if (!cbcalled) {
1669            /* Should not be able to get here */
1670            ERR_raise(ERR_LIB_X509, ERR_R_INTERNAL_ERROR);
1671            return 0;
1672        }
1673        /* The callback ignored the error so we return success */
1674        return 1;
1675    }
1676    if (ret == X509_PCY_TREE_FAILURE) {
1677        ctx->current_cert = NULL;
1678        ctx->error = X509_V_ERR_NO_EXPLICIT_POLICY;
1679        return ctx->verify_cb(0, ctx);
1680    }
1681    if (ret != X509_PCY_TREE_VALID) {
1682        ERR_raise(ERR_LIB_X509, ERR_R_INTERNAL_ERROR);
1683        return 0;
1684    }
1685
1686    if ((ctx->param->flags & X509_V_FLAG_NOTIFY_POLICY) != 0) {
1687        ctx->current_cert = NULL;
1688        /*
1689         * Verification errors need to be "sticky", a callback may have allowed
1690         * an SSL handshake to continue despite an error, and we must then
1691         * remain in an error state.  Therefore, we MUST NOT clear earlier
1692         * verification errors by setting the error to X509_V_OK.
1693         */
1694        if (!ctx->verify_cb(2, ctx))
1695            return 0;
1696    }
1697
1698    return 1;
1699
1700 memerr:
1701    ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
1702    ctx->error = X509_V_ERR_OUT_OF_MEM;
1703    return -1;
1704}
1705
1706/*-
1707 * Check certificate validity times.
1708 * If depth >= 0, invoke verification callbacks on error, otherwise just return
1709 * the validation status.
1710 *
1711 * Return 1 on success, 0 otherwise.
1712 */
1713int ossl_x509_check_cert_time(X509_STORE_CTX *ctx, X509 *x, int depth)
1714{
1715    time_t *ptime;
1716    int i;
1717
1718    if ((ctx->param->flags & X509_V_FLAG_USE_CHECK_TIME) != 0)
1719        ptime = &ctx->param->check_time;
1720    else if ((ctx->param->flags & X509_V_FLAG_NO_CHECK_TIME) != 0)
1721        return 1;
1722    else
1723        ptime = NULL;
1724
1725    i = X509_cmp_time(X509_get0_notBefore(x), ptime);
1726    if (i >= 0 && depth < 0)
1727        return 0;
1728    CB_FAIL_IF(i == 0, ctx, x, depth, X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD);
1729    CB_FAIL_IF(i > 0, ctx, x, depth, X509_V_ERR_CERT_NOT_YET_VALID);
1730
1731    i = X509_cmp_time(X509_get0_notAfter(x), ptime);
1732    if (i <= 0 && depth < 0)
1733        return 0;
1734    CB_FAIL_IF(i == 0, ctx, x, depth, X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD);
1735    CB_FAIL_IF(i < 0, ctx, x, depth, X509_V_ERR_CERT_HAS_EXPIRED);
1736    return 1;
1737}
1738
1739/*
1740 * Verify the issuer signatures and cert times of ctx->chain.
1741 * Sadly, returns 0 also on internal error.
1742 */
1743static int internal_verify(X509_STORE_CTX *ctx)
1744{
1745    int n = sk_X509_num(ctx->chain) - 1;
1746    X509 *xi = sk_X509_value(ctx->chain, n);
1747    X509 *xs = xi;
1748
1749    ctx->error_depth = n;
1750    if (ctx->bare_ta_signed) {
1751        /*
1752         * With DANE-verified bare public key TA signatures,
1753         * on the top certificate we check only the timestamps.
1754         * We report the issuer as NULL because all we have is a bare key.
1755         */
1756        xi = NULL;
1757    } else if (ossl_x509_likely_issued(xi, xi) != X509_V_OK
1758               /* exceptional case: last cert in the chain is not self-issued */
1759               && ((ctx->param->flags & X509_V_FLAG_PARTIAL_CHAIN) == 0)) {
1760        if (n > 0) {
1761            n--;
1762            ctx->error_depth = n;
1763            xs = sk_X509_value(ctx->chain, n);
1764        } else {
1765            CB_FAIL_IF(1, ctx, xi, 0,
1766                       X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE);
1767        }
1768        /*
1769         * The below code will certainly not do a
1770         * self-signature check on xi because it is not self-issued.
1771         */
1772    }
1773
1774    /*
1775     * Do not clear error (by ctx->error = X509_V_OK), it must be "sticky",
1776     * only the user's callback is allowed to reset errors (at its own peril).
1777     */
1778    while (n >= 0) {
1779        /*-
1780         * For each iteration of this loop:
1781         * n is the subject depth
1782         * xs is the subject cert, for which the signature is to be checked
1783         * xi is NULL for DANE-verified bare public key TA signatures
1784         *       else the supposed issuer cert containing the public key to use
1785         * Initially xs == xi if the last cert in the chain is self-issued.
1786         */
1787        /*
1788         * Do signature check for self-signed certificates only if explicitly
1789         * asked for because it does not add any security and just wastes time.
1790         */
1791        if (xi != NULL
1792            && (xs != xi
1793                || ((ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE) != 0
1794                    && (xi->ex_flags & EXFLAG_SS) != 0))) {
1795            EVP_PKEY *pkey;
1796            /*
1797             * If the issuer's public key is not available or its key usage
1798             * does not support issuing the subject cert, report the issuer
1799             * cert and its depth (rather than n, the depth of the subject).
1800             */
1801            int issuer_depth = n + (xs == xi ? 0 : 1);
1802            /*
1803             * According to https://tools.ietf.org/html/rfc5280#section-6.1.4
1804             * step (n) we must check any given key usage extension in a CA cert
1805             * when preparing the verification of a certificate issued by it.
1806             * According to https://tools.ietf.org/html/rfc5280#section-4.2.1.3
1807             * we must not verify a certificate signature if the key usage of
1808             * the CA certificate that issued the certificate prohibits signing.
1809             * In case the 'issuing' certificate is the last in the chain and is
1810             * not a CA certificate but a 'self-issued' end-entity cert (i.e.,
1811             * xs == xi && !(xi->ex_flags & EXFLAG_CA)) RFC 5280 does not apply
1812             * (see https://tools.ietf.org/html/rfc6818#section-2) and thus
1813             * we are free to ignore any key usage restrictions on such certs.
1814             */
1815            int ret = xs == xi && (xi->ex_flags & EXFLAG_CA) == 0
1816                ? X509_V_OK : ossl_x509_signing_allowed(xi, xs);
1817
1818            CB_FAIL_IF(ret != X509_V_OK, ctx, xi, issuer_depth, ret);
1819            if ((pkey = X509_get0_pubkey(xi)) == NULL) {
1820                CB_FAIL_IF(1, ctx, xi, issuer_depth,
1821                           X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY);
1822            } else {
1823                CB_FAIL_IF(X509_verify(xs, pkey) <= 0,
1824                           ctx, xs, n, X509_V_ERR_CERT_SIGNATURE_FAILURE);
1825            }
1826        }
1827
1828        /* In addition to RFC 5280 requirements do also for trust anchor cert */
1829        /* Calls verify callback as needed */
1830        if (!ossl_x509_check_cert_time(ctx, xs, n))
1831            return 0;
1832
1833        /*
1834         * Signal success at this depth.  However, the previous error (if any)
1835         * is retained.
1836         */
1837        ctx->current_issuer = xi;
1838        ctx->current_cert = xs;
1839        ctx->error_depth = n;
1840        if (!ctx->verify_cb(1, ctx))
1841            return 0;
1842
1843        if (--n >= 0) {
1844            xi = xs;
1845            xs = sk_X509_value(ctx->chain, n);
1846        }
1847    }
1848    return 1;
1849}
1850
1851int X509_cmp_current_time(const ASN1_TIME *ctm)
1852{
1853    return X509_cmp_time(ctm, NULL);
1854}
1855
1856int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time)
1857{
1858    static const size_t utctime_length = sizeof("YYMMDDHHMMSSZ") - 1;
1859    static const size_t generalizedtime_length = sizeof("YYYYMMDDHHMMSSZ") - 1;
1860    ASN1_TIME *asn1_cmp_time = NULL;
1861    int i, day, sec, ret = 0;
1862#ifdef CHARSET_EBCDIC
1863    const char upper_z = 0x5A;
1864#else
1865    const char upper_z = 'Z';
1866#endif
1867
1868    /*-
1869     * Note that ASN.1 allows much more slack in the time format than RFC5280.
1870     * In RFC5280, the representation is fixed:
1871     * UTCTime: YYMMDDHHMMSSZ
1872     * GeneralizedTime: YYYYMMDDHHMMSSZ
1873     *
1874     * We do NOT currently enforce the following RFC 5280 requirement:
1875     * "CAs conforming to this profile MUST always encode certificate
1876     *  validity dates through the year 2049 as UTCTime; certificate validity
1877     *  dates in 2050 or later MUST be encoded as GeneralizedTime."
1878     */
1879    switch (ctm->type) {
1880    case V_ASN1_UTCTIME:
1881        if (ctm->length != (int)(utctime_length))
1882            return 0;
1883        break;
1884    case V_ASN1_GENERALIZEDTIME:
1885        if (ctm->length != (int)(generalizedtime_length))
1886            return 0;
1887        break;
1888    default:
1889        return 0;
1890    }
1891
1892    /**
1893     * Verify the format: the ASN.1 functions we use below allow a more
1894     * flexible format than what's mandated by RFC 5280.
1895     * Digit and date ranges will be verified in the conversion methods.
1896     */
1897    for (i = 0; i < ctm->length - 1; i++) {
1898        if (!ossl_ascii_isdigit(ctm->data[i]))
1899            return 0;
1900    }
1901    if (ctm->data[ctm->length - 1] != upper_z)
1902        return 0;
1903
1904    /*
1905     * There is ASN1_UTCTIME_cmp_time_t but no
1906     * ASN1_GENERALIZEDTIME_cmp_time_t or ASN1_TIME_cmp_time_t,
1907     * so we go through ASN.1
1908     */
1909    asn1_cmp_time = X509_time_adj(NULL, 0, cmp_time);
1910    if (asn1_cmp_time == NULL)
1911        goto err;
1912    if (ASN1_TIME_diff(&day, &sec, ctm, asn1_cmp_time) == 0)
1913        goto err;
1914
1915    /*
1916     * X509_cmp_time comparison is <=.
1917     * The return value 0 is reserved for errors.
1918     */
1919    ret = (day >= 0 && sec >= 0) ? -1 : 1;
1920
1921 err:
1922    ASN1_TIME_free(asn1_cmp_time);
1923    return ret;
1924}
1925
1926/*
1927 * Return 0 if time should not be checked or reference time is in range,
1928 * or else 1 if it is past the end, or -1 if it is before the start
1929 */
1930int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm,
1931                       const ASN1_TIME *start, const ASN1_TIME *end)
1932{
1933    time_t ref_time;
1934    time_t *time = NULL;
1935    unsigned long flags = vpm == NULL ? 0 : X509_VERIFY_PARAM_get_flags(vpm);
1936
1937    if ((flags & X509_V_FLAG_USE_CHECK_TIME) != 0) {
1938        ref_time = X509_VERIFY_PARAM_get_time(vpm);
1939        time = &ref_time;
1940    } else if ((flags & X509_V_FLAG_NO_CHECK_TIME) != 0) {
1941        return 0; /* this means ok */
1942    } /* else reference time is the current time */
1943
1944    if (end != NULL && X509_cmp_time(end, time) < 0)
1945        return 1;
1946    if (start != NULL && X509_cmp_time(start, time) > 0)
1947        return -1;
1948    return 0;
1949}
1950
1951ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj)
1952{
1953    return X509_time_adj(s, adj, NULL);
1954}
1955
1956ASN1_TIME *X509_time_adj(ASN1_TIME *s, long offset_sec, time_t *in_tm)
1957{
1958    return X509_time_adj_ex(s, 0, offset_sec, in_tm);
1959}
1960
1961ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
1962                            int offset_day, long offset_sec, time_t *in_tm)
1963{
1964    time_t t;
1965
1966    if (in_tm)
1967        t = *in_tm;
1968    else
1969        time(&t);
1970
1971    if (s != NULL && (s->flags & ASN1_STRING_FLAG_MSTRING) == 0) {
1972        if (s->type == V_ASN1_UTCTIME)
1973            return ASN1_UTCTIME_adj(s, t, offset_day, offset_sec);
1974        if (s->type == V_ASN1_GENERALIZEDTIME)
1975            return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec);
1976    }
1977    return ASN1_TIME_adj(s, t, offset_day, offset_sec);
1978}
1979
1980/* Copy any missing public key parameters up the chain towards pkey */
1981int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain)
1982{
1983    EVP_PKEY *ktmp = NULL, *ktmp2;
1984    int i, j;
1985
1986    if (pkey != NULL && !EVP_PKEY_missing_parameters(pkey))
1987        return 1;
1988
1989    for (i = 0; i < sk_X509_num(chain); i++) {
1990        ktmp = X509_get0_pubkey(sk_X509_value(chain, i));
1991        if (ktmp == NULL) {
1992            ERR_raise(ERR_LIB_X509, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY);
1993            return 0;
1994        }
1995        if (!EVP_PKEY_missing_parameters(ktmp))
1996            break;
1997        ktmp = NULL;
1998    }
1999    if (ktmp == NULL) {
2000        ERR_raise(ERR_LIB_X509, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN);
2001        return 0;
2002    }
2003
2004    /* first, populate the other certs */
2005    for (j = i - 1; j >= 0; j--) {
2006        ktmp2 = X509_get0_pubkey(sk_X509_value(chain, j));
2007        if (!EVP_PKEY_copy_parameters(ktmp2, ktmp))
2008            return 0;
2009    }
2010
2011    if (pkey != NULL)
2012        return EVP_PKEY_copy_parameters(pkey, ktmp);
2013    return 1;
2014}
2015
2016/*
2017 * Make a delta CRL as the difference between two full CRLs.
2018 * Sadly, returns NULL also on internal error.
2019 */
2020X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
2021                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags)
2022{
2023    X509_CRL *crl = NULL;
2024    int i;
2025
2026    STACK_OF(X509_REVOKED) *revs = NULL;
2027    /* CRLs can't be delta already */
2028    if (base->base_crl_number != NULL || newer->base_crl_number != NULL) {
2029        ERR_raise(ERR_LIB_X509, X509_R_CRL_ALREADY_DELTA);
2030        return NULL;
2031    }
2032    /* Base and new CRL must have a CRL number */
2033    if (base->crl_number == NULL || newer->crl_number == NULL) {
2034        ERR_raise(ERR_LIB_X509, X509_R_NO_CRL_NUMBER);
2035        return NULL;
2036    }
2037    /* Issuer names must match */
2038    if (X509_NAME_cmp(X509_CRL_get_issuer(base),
2039                      X509_CRL_get_issuer(newer)) != 0) {
2040        ERR_raise(ERR_LIB_X509, X509_R_ISSUER_MISMATCH);
2041        return NULL;
2042    }
2043    /* AKID and IDP must match */
2044    if (!crl_extension_match(base, newer, NID_authority_key_identifier)) {
2045        ERR_raise(ERR_LIB_X509, X509_R_AKID_MISMATCH);
2046        return NULL;
2047    }
2048    if (!crl_extension_match(base, newer, NID_issuing_distribution_point)) {
2049        ERR_raise(ERR_LIB_X509, X509_R_IDP_MISMATCH);
2050        return NULL;
2051    }
2052    /* Newer CRL number must exceed full CRL number */
2053    if (ASN1_INTEGER_cmp(newer->crl_number, base->crl_number) <= 0) {
2054        ERR_raise(ERR_LIB_X509, X509_R_NEWER_CRL_NOT_NEWER);
2055        return NULL;
2056    }
2057    /* CRLs must verify */
2058    if (skey != NULL && (X509_CRL_verify(base, skey) <= 0 ||
2059                         X509_CRL_verify(newer, skey) <= 0)) {
2060        ERR_raise(ERR_LIB_X509, X509_R_CRL_VERIFY_FAILURE);
2061        return NULL;
2062    }
2063    /* Create new CRL */
2064    crl = X509_CRL_new_ex(base->libctx, base->propq);
2065    if (crl == NULL || !X509_CRL_set_version(crl, X509_CRL_VERSION_2))
2066        goto memerr;
2067    /* Set issuer name */
2068    if (!X509_CRL_set_issuer_name(crl, X509_CRL_get_issuer(newer)))
2069        goto memerr;
2070
2071    if (!X509_CRL_set1_lastUpdate(crl, X509_CRL_get0_lastUpdate(newer)))
2072        goto memerr;
2073    if (!X509_CRL_set1_nextUpdate(crl, X509_CRL_get0_nextUpdate(newer)))
2074        goto memerr;
2075
2076    /* Set base CRL number: must be critical */
2077    if (!X509_CRL_add1_ext_i2d(crl, NID_delta_crl, base->crl_number, 1, 0))
2078        goto memerr;
2079
2080    /*
2081     * Copy extensions across from newest CRL to delta: this will set CRL
2082     * number to correct value too.
2083     */
2084    for (i = 0; i < X509_CRL_get_ext_count(newer); i++) {
2085        X509_EXTENSION *ext = X509_CRL_get_ext(newer, i);
2086
2087        if (!X509_CRL_add_ext(crl, ext, -1))
2088            goto memerr;
2089    }
2090
2091    /* Go through revoked entries, copying as needed */
2092    revs = X509_CRL_get_REVOKED(newer);
2093
2094    for (i = 0; i < sk_X509_REVOKED_num(revs); i++) {
2095        X509_REVOKED *rvn, *rvtmp;
2096
2097        rvn = sk_X509_REVOKED_value(revs, i);
2098        /*
2099         * Add only if not also in base.
2100         * Need something cleverer here for some more complex CRLs covering
2101         * multiple CAs.
2102         */
2103        if (!X509_CRL_get0_by_serial(base, &rvtmp, &rvn->serialNumber)) {
2104            rvtmp = X509_REVOKED_dup(rvn);
2105            if (rvtmp == NULL)
2106                goto memerr;
2107            if (!X509_CRL_add0_revoked(crl, rvtmp)) {
2108                X509_REVOKED_free(rvtmp);
2109                goto memerr;
2110            }
2111        }
2112    }
2113
2114    if (skey != NULL && md != NULL && !X509_CRL_sign(crl, skey, md))
2115        goto memerr;
2116
2117    return crl;
2118
2119 memerr:
2120    ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
2121    X509_CRL_free(crl);
2122    return NULL;
2123}
2124
2125int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data)
2126{
2127    return CRYPTO_set_ex_data(&ctx->ex_data, idx, data);
2128}
2129
2130void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx)
2131{
2132    return CRYPTO_get_ex_data(&ctx->ex_data, idx);
2133}
2134
2135int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx)
2136{
2137    return ctx->error;
2138}
2139
2140void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int err)
2141{
2142    ctx->error = err;
2143}
2144
2145int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx)
2146{
2147    return ctx->error_depth;
2148}
2149
2150void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth)
2151{
2152    ctx->error_depth = depth;
2153}
2154
2155X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx)
2156{
2157    return ctx->current_cert;
2158}
2159
2160void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x)
2161{
2162    ctx->current_cert = x;
2163}
2164
2165STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx)
2166{
2167    return ctx->chain;
2168}
2169
2170STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx)
2171{
2172    if (ctx->chain == NULL)
2173        return NULL;
2174    return X509_chain_up_ref(ctx->chain);
2175}
2176
2177X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx)
2178{
2179    return ctx->current_issuer;
2180}
2181
2182X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx)
2183{
2184    return ctx->current_crl;
2185}
2186
2187X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx)
2188{
2189    return ctx->parent;
2190}
2191
2192void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *x)
2193{
2194    ctx->cert = x;
2195}
2196
2197void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk)
2198{
2199    ctx->crls = sk;
2200}
2201
2202int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose)
2203{
2204    /*
2205     * XXX: Why isn't this function always used to set the associated trust?
2206     * Should there even be a VPM->trust field at all?  Or should the trust
2207     * always be inferred from the purpose by X509_STORE_CTX_init().
2208     */
2209    return X509_STORE_CTX_purpose_inherit(ctx, 0, purpose, 0);
2210}
2211
2212int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust)
2213{
2214    /*
2215     * XXX: See above, this function would only be needed when the default
2216     * trust for the purpose needs an override in a corner case.
2217     */
2218    return X509_STORE_CTX_purpose_inherit(ctx, 0, 0, trust);
2219}
2220
2221/*
2222 * This function is used to set the X509_STORE_CTX purpose and trust values.
2223 * This is intended to be used when another structure has its own trust and
2224 * purpose values which (if set) will be inherited by the ctx. If they aren't
2225 * set then we will usually have a default purpose in mind which should then
2226 * be used to set the trust value. An example of this is SSL use: an SSL
2227 * structure will have its own purpose and trust settings which the
2228 * application can set: if they aren't set then we use the default of SSL
2229 * client/server.
2230 */
2231int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
2232                                   int purpose, int trust)
2233{
2234    int idx;
2235
2236    /* If purpose not set use default */
2237    if (purpose == 0)
2238        purpose = def_purpose;
2239    /*
2240     * If purpose is set but we don't have a default then set the default to
2241     * the current purpose
2242     */
2243    else if (def_purpose == 0)
2244        def_purpose = purpose;
2245    /* If we have a purpose then check it is valid */
2246    if (purpose != 0) {
2247        X509_PURPOSE *ptmp;
2248
2249        idx = X509_PURPOSE_get_by_id(purpose);
2250        if (idx == -1) {
2251            ERR_raise(ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID);
2252            return 0;
2253        }
2254        ptmp = X509_PURPOSE_get0(idx);
2255        if (ptmp->trust == X509_TRUST_DEFAULT) {
2256            idx = X509_PURPOSE_get_by_id(def_purpose);
2257            if (idx == -1) {
2258                ERR_raise(ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID);
2259                return 0;
2260            }
2261            ptmp = X509_PURPOSE_get0(idx);
2262        }
2263        /* If trust not set then get from purpose default */
2264        if (trust == 0)
2265            trust = ptmp->trust;
2266    }
2267    if (trust != 0) {
2268        idx = X509_TRUST_get_by_id(trust);
2269        if (idx == -1) {
2270            ERR_raise(ERR_LIB_X509, X509_R_UNKNOWN_TRUST_ID);
2271            return 0;
2272        }
2273    }
2274
2275    if (ctx->param->purpose == 0 && purpose != 0)
2276        ctx->param->purpose = purpose;
2277    if (ctx->param->trust == 0 && trust != 0)
2278        ctx->param->trust = trust;
2279    return 1;
2280}
2281
2282X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq)
2283{
2284    X509_STORE_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx));
2285
2286    if (ctx == NULL) {
2287        ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
2288        return NULL;
2289    }
2290
2291    ctx->libctx = libctx;
2292    if (propq != NULL) {
2293        ctx->propq = OPENSSL_strdup(propq);
2294        if (ctx->propq == NULL) {
2295            OPENSSL_free(ctx);
2296            ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
2297            return NULL;
2298        }
2299    }
2300
2301    return ctx;
2302}
2303
2304X509_STORE_CTX *X509_STORE_CTX_new(void)
2305{
2306    return X509_STORE_CTX_new_ex(NULL, NULL);
2307}
2308
2309void X509_STORE_CTX_free(X509_STORE_CTX *ctx)
2310{
2311    if (ctx == NULL)
2312        return;
2313
2314    X509_STORE_CTX_cleanup(ctx);
2315
2316    /* libctx and propq survive X509_STORE_CTX_cleanup() */
2317    OPENSSL_free(ctx->propq);
2318    OPENSSL_free(ctx);
2319}
2320
2321int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,
2322                        STACK_OF(X509) *chain)
2323{
2324    if (ctx == NULL) {
2325        ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
2326        return 0;
2327    }
2328    X509_STORE_CTX_cleanup(ctx);
2329
2330    ctx->store = store;
2331    ctx->cert = x509;
2332    ctx->untrusted = chain;
2333    ctx->crls = NULL;
2334    ctx->num_untrusted = 0;
2335    ctx->other_ctx = NULL;
2336    ctx->valid = 0;
2337    ctx->chain = NULL;
2338    ctx->error = X509_V_OK;
2339    ctx->explicit_policy = 0;
2340    ctx->error_depth = 0;
2341    ctx->current_cert = NULL;
2342    ctx->current_issuer = NULL;
2343    ctx->current_crl = NULL;
2344    ctx->current_crl_score = 0;
2345    ctx->current_reasons = 0;
2346    ctx->tree = NULL;
2347    ctx->parent = NULL;
2348    ctx->dane = NULL;
2349    ctx->bare_ta_signed = 0;
2350    /* Zero ex_data to make sure we're cleanup-safe */
2351    memset(&ctx->ex_data, 0, sizeof(ctx->ex_data));
2352
2353    /* store->cleanup is always 0 in OpenSSL, if set must be idempotent */
2354    if (store != NULL)
2355        ctx->cleanup = store->cleanup;
2356    else
2357        ctx->cleanup = NULL;
2358
2359    if (store != NULL && store->check_issued != NULL)
2360        ctx->check_issued = store->check_issued;
2361    else
2362        ctx->check_issued = check_issued;
2363
2364    if (store != NULL && store->get_issuer != NULL)
2365        ctx->get_issuer = store->get_issuer;
2366    else
2367        ctx->get_issuer = X509_STORE_CTX_get1_issuer;
2368
2369    if (store != NULL && store->verify_cb != NULL)
2370        ctx->verify_cb = store->verify_cb;
2371    else
2372        ctx->verify_cb = null_callback;
2373
2374    if (store != NULL && store->verify != NULL)
2375        ctx->verify = store->verify;
2376    else
2377        ctx->verify = internal_verify;
2378
2379    if (store != NULL && store->check_revocation != NULL)
2380        ctx->check_revocation = store->check_revocation;
2381    else
2382        ctx->check_revocation = check_revocation;
2383
2384    if (store != NULL && store->get_crl != NULL)
2385        ctx->get_crl = store->get_crl;
2386    else
2387        ctx->get_crl = NULL;
2388
2389    if (store != NULL && store->check_crl != NULL)
2390        ctx->check_crl = store->check_crl;
2391    else
2392        ctx->check_crl = check_crl;
2393
2394    if (store != NULL && store->cert_crl != NULL)
2395        ctx->cert_crl = store->cert_crl;
2396    else
2397        ctx->cert_crl = cert_crl;
2398
2399    if (store != NULL && store->check_policy != NULL)
2400        ctx->check_policy = store->check_policy;
2401    else
2402        ctx->check_policy = check_policy;
2403
2404    if (store != NULL && store->lookup_certs != NULL)
2405        ctx->lookup_certs = store->lookup_certs;
2406    else
2407        ctx->lookup_certs = X509_STORE_CTX_get1_certs;
2408
2409    if (store != NULL && store->lookup_crls != NULL)
2410        ctx->lookup_crls = store->lookup_crls;
2411    else
2412        ctx->lookup_crls = X509_STORE_CTX_get1_crls;
2413
2414    ctx->param = X509_VERIFY_PARAM_new();
2415    if (ctx->param == NULL) {
2416        ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
2417        goto err;
2418    }
2419
2420    /* Inherit callbacks and flags from X509_STORE if not set use defaults. */
2421    if (store == NULL)
2422        ctx->param->inh_flags |= X509_VP_FLAG_DEFAULT | X509_VP_FLAG_ONCE;
2423    else if (X509_VERIFY_PARAM_inherit(ctx->param, store->param) == 0)
2424        goto err;
2425
2426    if (!X509_STORE_CTX_set_default(ctx, "default"))
2427        goto err;
2428
2429    /*
2430     * XXX: For now, continue to inherit trust from VPM, but infer from the
2431     * purpose if this still yields the default value.
2432     */
2433    if (ctx->param->trust == X509_TRUST_DEFAULT) {
2434        int idx = X509_PURPOSE_get_by_id(ctx->param->purpose);
2435        X509_PURPOSE *xp = X509_PURPOSE_get0(idx);
2436
2437        if (xp != NULL)
2438            ctx->param->trust = X509_PURPOSE_get_trust(xp);
2439    }
2440
2441    if (CRYPTO_new_ex_data(CRYPTO_EX_INDEX_X509_STORE_CTX, ctx,
2442                           &ctx->ex_data))
2443        return 1;
2444    ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
2445
2446 err:
2447    /*
2448     * On error clean up allocated storage, if the store context was not
2449     * allocated with X509_STORE_CTX_new() this is our last chance to do so.
2450     */
2451    X509_STORE_CTX_cleanup(ctx);
2452    return 0;
2453}
2454
2455/*
2456 * Set alternative get_issuer method: just from a STACK of trusted certificates.
2457 * This avoids the complexity of X509_STORE where it is not needed.
2458 */
2459void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk)
2460{
2461    ctx->other_ctx = sk;
2462    ctx->get_issuer = get_issuer_sk;
2463    ctx->lookup_certs = lookup_certs_sk;
2464}
2465
2466void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx)
2467{
2468    /*
2469     * We need to be idempotent because, unfortunately, free() also calls
2470     * cleanup(), so the natural call sequence new(), init(), cleanup(), free()
2471     * calls cleanup() for the same object twice!  Thus we must zero the
2472     * pointers below after they're freed!
2473     */
2474    /* Seems to always be NULL in OpenSSL, do this at most once. */
2475    if (ctx->cleanup != NULL) {
2476        ctx->cleanup(ctx);
2477        ctx->cleanup = NULL;
2478    }
2479    if (ctx->param != NULL) {
2480        if (ctx->parent == NULL)
2481            X509_VERIFY_PARAM_free(ctx->param);
2482        ctx->param = NULL;
2483    }
2484    X509_policy_tree_free(ctx->tree);
2485    ctx->tree = NULL;
2486    sk_X509_pop_free(ctx->chain, X509_free);
2487    ctx->chain = NULL;
2488    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE_CTX, ctx, &(ctx->ex_data));
2489    memset(&ctx->ex_data, 0, sizeof(ctx->ex_data));
2490}
2491
2492void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth)
2493{
2494    X509_VERIFY_PARAM_set_depth(ctx->param, depth);
2495}
2496
2497void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags)
2498{
2499    X509_VERIFY_PARAM_set_flags(ctx->param, flags);
2500}
2501
2502void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags,
2503                             time_t t)
2504{
2505    X509_VERIFY_PARAM_set_time(ctx->param, t);
2506}
2507
2508X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx)
2509{
2510    return ctx->cert;
2511}
2512
2513STACK_OF(X509) *X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx)
2514{
2515    return ctx->untrusted;
2516}
2517
2518void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk)
2519{
2520    ctx->untrusted = sk;
2521}
2522
2523void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *sk)
2524{
2525    sk_X509_pop_free(ctx->chain, X509_free);
2526    ctx->chain = sk;
2527}
2528
2529void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,
2530                                  X509_STORE_CTX_verify_cb verify_cb)
2531{
2532    ctx->verify_cb = verify_cb;
2533}
2534
2535X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx)
2536{
2537    return ctx->verify_cb;
2538}
2539
2540void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx,
2541                               X509_STORE_CTX_verify_fn verify)
2542{
2543    ctx->verify = verify;
2544}
2545
2546X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx)
2547{
2548    return ctx->verify;
2549}
2550
2551X509_STORE_CTX_get_issuer_fn
2552X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx)
2553{
2554    return ctx->get_issuer;
2555}
2556
2557X509_STORE_CTX_check_issued_fn
2558X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx)
2559{
2560    return ctx->check_issued;
2561}
2562
2563X509_STORE_CTX_check_revocation_fn
2564X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx)
2565{
2566    return ctx->check_revocation;
2567}
2568
2569X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx)
2570{
2571    return ctx->get_crl;
2572}
2573
2574X509_STORE_CTX_check_crl_fn
2575X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx)
2576{
2577    return ctx->check_crl;
2578}
2579
2580X509_STORE_CTX_cert_crl_fn
2581X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx)
2582{
2583    return ctx->cert_crl;
2584}
2585
2586X509_STORE_CTX_check_policy_fn
2587X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx)
2588{
2589    return ctx->check_policy;
2590}
2591
2592X509_STORE_CTX_lookup_certs_fn
2593X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx)
2594{
2595    return ctx->lookup_certs;
2596}
2597
2598X509_STORE_CTX_lookup_crls_fn
2599X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx)
2600{
2601    return ctx->lookup_crls;
2602}
2603
2604X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx)
2605{
2606    return ctx->cleanup;
2607}
2608
2609X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx)
2610{
2611    return ctx->tree;
2612}
2613
2614int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx)
2615{
2616    return ctx->explicit_policy;
2617}
2618
2619int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx)
2620{
2621    return ctx->num_untrusted;
2622}
2623
2624int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name)
2625{
2626    const X509_VERIFY_PARAM *param;
2627
2628    param = X509_VERIFY_PARAM_lookup(name);
2629    if (param == NULL) {
2630        ERR_raise_data(ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID, "name=%s", name);
2631        return 0;
2632    }
2633    return X509_VERIFY_PARAM_inherit(ctx->param, param);
2634}
2635
2636X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx)
2637{
2638    return ctx->param;
2639}
2640
2641void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param)
2642{
2643    X509_VERIFY_PARAM_free(ctx->param);
2644    ctx->param = param;
2645}
2646
2647void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane)
2648{
2649    ctx->dane = dane;
2650}
2651
2652static unsigned char *dane_i2d(X509 *cert, uint8_t selector,
2653                               unsigned int *i2dlen)
2654{
2655    unsigned char *buf = NULL;
2656    int len;
2657
2658    /*
2659     * Extract ASN.1 DER form of certificate or public key.
2660     */
2661    switch (selector) {
2662    case DANETLS_SELECTOR_CERT:
2663        len = i2d_X509(cert, &buf);
2664        break;
2665    case DANETLS_SELECTOR_SPKI:
2666        len = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &buf);
2667        break;
2668    default:
2669        ERR_raise(ERR_LIB_X509, X509_R_BAD_SELECTOR);
2670        return NULL;
2671    }
2672
2673    if (len < 0 || buf == NULL) {
2674        ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
2675        return NULL;
2676    }
2677
2678    *i2dlen = (unsigned int)len;
2679    return buf;
2680}
2681
2682#define DANETLS_NONE 256 /* impossible uint8_t */
2683
2684/* Returns -1 on internal error */
2685static int dane_match(X509_STORE_CTX *ctx, X509 *cert, int depth)
2686{
2687    SSL_DANE *dane = ctx->dane;
2688    unsigned usage = DANETLS_NONE;
2689    unsigned selector = DANETLS_NONE;
2690    unsigned ordinal = DANETLS_NONE;
2691    unsigned mtype = DANETLS_NONE;
2692    unsigned char *i2dbuf = NULL;
2693    unsigned int i2dlen = 0;
2694    unsigned char mdbuf[EVP_MAX_MD_SIZE];
2695    unsigned char *cmpbuf = NULL;
2696    unsigned int cmplen = 0;
2697    int i;
2698    int recnum;
2699    int matched = 0;
2700    danetls_record *t = NULL;
2701    uint32_t mask;
2702
2703    mask = (depth == 0) ? DANETLS_EE_MASK : DANETLS_TA_MASK;
2704
2705    /* The trust store is not applicable with DANE-TA(2) */
2706    if (depth >= ctx->num_untrusted)
2707        mask &= DANETLS_PKIX_MASK;
2708
2709    /*
2710     * If we've previously matched a PKIX-?? record, no need to test any
2711     * further PKIX-?? records, it remains to just build the PKIX chain.
2712     * Had the match been a DANE-?? record, we'd be done already.
2713     */
2714    if (dane->mdpth >= 0)
2715        mask &= ~DANETLS_PKIX_MASK;
2716
2717    /*-
2718     * https://tools.ietf.org/html/rfc7671#section-5.1
2719     * https://tools.ietf.org/html/rfc7671#section-5.2
2720     * https://tools.ietf.org/html/rfc7671#section-5.3
2721     * https://tools.ietf.org/html/rfc7671#section-5.4
2722     *
2723     * We handle DANE-EE(3) records first as they require no chain building
2724     * and no expiration or hostname checks.  We also process digests with
2725     * higher ordinals first and ignore lower priorities except Full(0) which
2726     * is always processed (last).  If none match, we then process PKIX-EE(1).
2727     *
2728     * NOTE: This relies on DANE usages sorting before the corresponding PKIX
2729     * usages in SSL_dane_tlsa_add(), and also on descending sorting of digest
2730     * priorities.  See twin comment in ssl/ssl_lib.c.
2731     *
2732     * We expect that most TLSA RRsets will have just a single usage, so we
2733     * don't go out of our way to cache multiple selector-specific i2d buffers
2734     * across usages, but if the selector happens to remain the same as switch
2735     * usages, that's OK.  Thus, a set of "3 1 1", "3 0 1", "1 1 1", "1 0 1",
2736     * records would result in us generating each of the certificate and public
2737     * key DER forms twice, but more typically we'd just see multiple "3 1 1"
2738     * or multiple "3 0 1" records.
2739     *
2740     * As soon as we find a match at any given depth, we stop, because either
2741     * we've matched a DANE-?? record and the peer is authenticated, or, after
2742     * exhausting all DANE-?? records, we've matched a PKIX-?? record, which is
2743     * sufficient for DANE, and what remains to do is ordinary PKIX validation.
2744     */
2745    recnum = (dane->umask & mask) != 0 ? sk_danetls_record_num(dane->trecs) : 0;
2746    for (i = 0; matched == 0 && i < recnum; ++i) {
2747        t = sk_danetls_record_value(dane->trecs, i);
2748        if ((DANETLS_USAGE_BIT(t->usage) & mask) == 0)
2749            continue;
2750        if (t->usage != usage) {
2751            usage = t->usage;
2752
2753            /* Reset digest agility for each usage/selector pair */
2754            mtype = DANETLS_NONE;
2755            ordinal = dane->dctx->mdord[t->mtype];
2756        }
2757        if (t->selector != selector) {
2758            selector = t->selector;
2759
2760            /* Update per-selector state */
2761            OPENSSL_free(i2dbuf);
2762            i2dbuf = dane_i2d(cert, selector, &i2dlen);
2763            if (i2dbuf == NULL)
2764                return -1;
2765
2766            /* Reset digest agility for each usage/selector pair */
2767            mtype = DANETLS_NONE;
2768            ordinal = dane->dctx->mdord[t->mtype];
2769        } else if (t->mtype != DANETLS_MATCHING_FULL) {
2770            /*-
2771             * Digest agility:
2772             *
2773             *     <https://tools.ietf.org/html/rfc7671#section-9>
2774             *
2775             * For a fixed selector, after processing all records with the
2776             * highest mtype ordinal, ignore all mtypes with lower ordinals
2777             * other than "Full".
2778             */
2779            if (dane->dctx->mdord[t->mtype] < ordinal)
2780                continue;
2781        }
2782
2783        /*
2784         * Each time we hit a (new selector or) mtype, re-compute the relevant
2785         * digest, more complex caching is not worth the code space.
2786         */
2787        if (t->mtype != mtype) {
2788            const EVP_MD *md = dane->dctx->mdevp[mtype = t->mtype];
2789
2790            cmpbuf = i2dbuf;
2791            cmplen = i2dlen;
2792
2793            if (md != NULL) {
2794                cmpbuf = mdbuf;
2795                if (!EVP_Digest(i2dbuf, i2dlen, cmpbuf, &cmplen, md, 0)) {
2796                    matched = -1;
2797                    break;
2798                }
2799            }
2800        }
2801
2802        /*
2803         * Squirrel away the certificate and depth if we have a match.  Any
2804         * DANE match is dispositive, but with PKIX we still need to build a
2805         * full chain.
2806         */
2807        if (cmplen == t->dlen &&
2808            memcmp(cmpbuf, t->data, cmplen) == 0) {
2809            if (DANETLS_USAGE_BIT(usage) & DANETLS_DANE_MASK)
2810                matched = 1;
2811            if (matched || dane->mdpth < 0) {
2812                dane->mdpth = depth;
2813                dane->mtlsa = t;
2814                OPENSSL_free(dane->mcert);
2815                dane->mcert = cert;
2816                X509_up_ref(cert);
2817            }
2818            break;
2819        }
2820    }
2821
2822    /* Clear the one-element DER cache */
2823    OPENSSL_free(i2dbuf);
2824    return matched;
2825}
2826
2827/* Returns -1 on internal error */
2828static int check_dane_issuer(X509_STORE_CTX *ctx, int depth)
2829{
2830    SSL_DANE *dane = ctx->dane;
2831    int matched = 0;
2832    X509 *cert;
2833
2834    if (!DANETLS_HAS_TA(dane) || depth == 0)
2835        return X509_TRUST_UNTRUSTED;
2836
2837    /*
2838     * Record any DANE trust anchor matches, for the first depth to test, if
2839     * there's one at that depth. (This'll be false for length 1 chains looking
2840     * for an exact match for the leaf certificate).
2841     */
2842    cert = sk_X509_value(ctx->chain, depth);
2843    if (cert != NULL && (matched = dane_match(ctx, cert, depth)) < 0)
2844        return matched;
2845    if (matched > 0) {
2846        ctx->num_untrusted = depth - 1;
2847        return X509_TRUST_TRUSTED;
2848    }
2849
2850    return X509_TRUST_UNTRUSTED;
2851}
2852
2853static int check_dane_pkeys(X509_STORE_CTX *ctx)
2854{
2855    SSL_DANE *dane = ctx->dane;
2856    danetls_record *t;
2857    int num = ctx->num_untrusted;
2858    X509 *cert = sk_X509_value(ctx->chain, num - 1);
2859    int recnum = sk_danetls_record_num(dane->trecs);
2860    int i;
2861
2862    for (i = 0; i < recnum; ++i) {
2863        t = sk_danetls_record_value(dane->trecs, i);
2864        if (t->usage != DANETLS_USAGE_DANE_TA ||
2865            t->selector != DANETLS_SELECTOR_SPKI ||
2866            t->mtype != DANETLS_MATCHING_FULL ||
2867            X509_verify(cert, t->spki) <= 0)
2868            continue;
2869
2870        /* Clear any PKIX-?? matches that failed to extend to a full chain */
2871        X509_free(dane->mcert);
2872        dane->mcert = NULL;
2873
2874        /* Record match via a bare TA public key */
2875        ctx->bare_ta_signed = 1;
2876        dane->mdpth = num - 1;
2877        dane->mtlsa = t;
2878
2879        /* Prune any excess chain certificates */
2880        num = sk_X509_num(ctx->chain);
2881        for (; num > ctx->num_untrusted; --num)
2882            X509_free(sk_X509_pop(ctx->chain));
2883
2884        return X509_TRUST_TRUSTED;
2885    }
2886
2887    return X509_TRUST_UNTRUSTED;
2888}
2889
2890static void dane_reset(SSL_DANE *dane)
2891{
2892    /* Reset state to verify another chain, or clear after failure. */
2893    X509_free(dane->mcert);
2894    dane->mcert = NULL;
2895    dane->mtlsa = NULL;
2896    dane->mdpth = -1;
2897    dane->pdpth = -1;
2898}
2899
2900static int check_leaf_suiteb(X509_STORE_CTX *ctx, X509 *cert)
2901{
2902    int err = X509_chain_check_suiteb(NULL, cert, NULL, ctx->param->flags);
2903
2904    CB_FAIL_IF(err != X509_V_OK, ctx, cert, 0, err);
2905    return 1;
2906}
2907
2908/* Returns -1 on internal error */
2909static int dane_verify(X509_STORE_CTX *ctx)
2910{
2911    X509 *cert = ctx->cert;
2912    SSL_DANE *dane = ctx->dane;
2913    int matched;
2914    int done;
2915
2916    dane_reset(dane);
2917
2918    /*-
2919     * When testing the leaf certificate, if we match a DANE-EE(3) record,
2920     * dane_match() returns 1 and we're done.  If however we match a PKIX-EE(1)
2921     * record, the match depth and matching TLSA record are recorded, but the
2922     * return value is 0, because we still need to find a PKIX trust anchor.
2923     * Therefore, when DANE authentication is enabled (required), we're done
2924     * if:
2925     *   + matched < 0, internal error.
2926     *   + matched == 1, we matched a DANE-EE(3) record
2927     *   + matched == 0, mdepth < 0 (no PKIX-EE match) and there are no
2928     *     DANE-TA(2) or PKIX-TA(0) to test.
2929     */
2930    matched = dane_match(ctx, ctx->cert, 0);
2931    done = matched != 0 || (!DANETLS_HAS_TA(dane) && dane->mdpth < 0);
2932
2933    if (done && !X509_get_pubkey_parameters(NULL, ctx->chain))
2934        return -1;
2935
2936    if (matched > 0) {
2937        /* Callback invoked as needed */
2938        if (!check_leaf_suiteb(ctx, cert))
2939            return 0;
2940        /* Callback invoked as needed */
2941        if ((dane->flags & DANE_FLAG_NO_DANE_EE_NAMECHECKS) == 0 &&
2942            !check_id(ctx))
2943            return 0;
2944        /* Bypass internal_verify(), issue depth 0 success callback */
2945        ctx->error_depth = 0;
2946        ctx->current_cert = cert;
2947        return ctx->verify_cb(1, ctx);
2948    }
2949
2950    if (matched < 0) {
2951        ctx->error_depth = 0;
2952        ctx->current_cert = cert;
2953        ctx->error = X509_V_ERR_OUT_OF_MEM;
2954        return -1;
2955    }
2956
2957    if (done) {
2958        /* Fail early, TA-based success is not possible */
2959        if (!check_leaf_suiteb(ctx, cert))
2960            return 0;
2961        return verify_cb_cert(ctx, cert, 0, X509_V_ERR_DANE_NO_MATCH);
2962    }
2963
2964    /*
2965     * Chain verification for usages 0/1/2.  TLSA record matching of depth > 0
2966     * certificates happens in-line with building the rest of the chain.
2967     */
2968    return verify_chain(ctx);
2969}
2970
2971/*
2972 * Get trusted issuer, without duplicate suppression
2973 * Returns -1 on internal error.
2974 */
2975static int get1_trusted_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *cert)
2976{
2977    STACK_OF(X509) *saved_chain = ctx->chain;
2978    int ok;
2979
2980    ctx->chain = NULL;
2981    ok = ctx->get_issuer(issuer, ctx, cert);
2982    ctx->chain = saved_chain;
2983
2984    return ok;
2985}
2986
2987/* Returns -1 on internal error */
2988static int build_chain(X509_STORE_CTX *ctx)
2989{
2990    SSL_DANE *dane = ctx->dane;
2991    int num = sk_X509_num(ctx->chain);
2992    STACK_OF(X509) *sk_untrusted = NULL;
2993    unsigned int search;
2994    int may_trusted = 0;
2995    int may_alternate = 0;
2996    int trust = X509_TRUST_UNTRUSTED;
2997    int alt_untrusted = 0;
2998    int max_depth;
2999    int ok = 0;
3000    int i;
3001
3002    /* Our chain starts with a single untrusted element. */
3003    if (!ossl_assert(num == 1 && ctx->num_untrusted == num))
3004        goto int_err;
3005
3006#define S_DOUNTRUSTED (1 << 0) /* Search untrusted chain */
3007#define S_DOTRUSTED   (1 << 1) /* Search trusted store */
3008#define S_DOALTERNATE (1 << 2) /* Retry with pruned alternate chain */
3009    /*
3010     * Set up search policy, untrusted if possible, trusted-first if enabled,
3011     * which is the default.
3012     * If we're doing DANE and not doing PKIX-TA/PKIX-EE, we never look in the
3013     * trust_store, otherwise we might look there first.  If not trusted-first,
3014     * and alternate chains are not disabled, try building an alternate chain
3015     * if no luck with untrusted first.
3016     */
3017    search = ctx->untrusted != NULL ? S_DOUNTRUSTED : 0;
3018    if (DANETLS_HAS_PKIX(dane) || !DANETLS_HAS_DANE(dane)) {
3019        if (search == 0 || (ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST) != 0)
3020            search |= S_DOTRUSTED;
3021        else if (!(ctx->param->flags & X509_V_FLAG_NO_ALT_CHAINS))
3022            may_alternate = 1;
3023        may_trusted = 1;
3024    }
3025
3026    /* Initialize empty untrusted stack. */
3027    if ((sk_untrusted = sk_X509_new_null()) == NULL)
3028        goto memerr;
3029
3030    /*
3031     * If we got any "Cert(0) Full(0)" trust anchors from DNS, *prepend* them
3032     * to our working copy of the untrusted certificate stack.
3033     */
3034    if (DANETLS_ENABLED(dane) && dane->certs != NULL
3035        && !X509_add_certs(sk_untrusted, dane->certs, X509_ADD_FLAG_DEFAULT))
3036        goto memerr;
3037
3038    /*
3039     * Shallow-copy the stack of untrusted certificates (with TLS, this is
3040     * typically the content of the peer's certificate message) so we can make
3041     * multiple passes over it, while free to remove elements as we go.
3042     */
3043    if (!X509_add_certs(sk_untrusted, ctx->untrusted, X509_ADD_FLAG_DEFAULT))
3044        goto memerr;
3045
3046    /*
3047     * Still absurdly large, but arithmetically safe, a lower hard upper bound
3048     * might be reasonable.
3049     */
3050    if (ctx->param->depth > INT_MAX / 2)
3051        ctx->param->depth = INT_MAX / 2;
3052
3053    /*
3054     * Try to extend the chain until we reach an ultimately trusted issuer.
3055     * Build chains up to one longer the limit, later fail if we hit the limit,
3056     * with an X509_V_ERR_CERT_CHAIN_TOO_LONG error code.
3057     */
3058    max_depth = ctx->param->depth + 1;
3059
3060    while (search != 0) {
3061        X509 *curr, *issuer = NULL;
3062
3063        num = sk_X509_num(ctx->chain);
3064        ctx->error_depth = num - 1;
3065        /*
3066         * Look in the trust store if enabled for first lookup, or we've run
3067         * out of untrusted issuers and search here is not disabled.  When we
3068         * reach the depth limit, we stop extending the chain, if by that point
3069         * we've not found a trust anchor, any trusted chain would be too long.
3070         *
3071         * The error reported to the application verify callback is at the
3072         * maximal valid depth with the current certificate equal to the last
3073         * not ultimately-trusted issuer.  For example, with verify_depth = 0,
3074         * the callback will report errors at depth=1 when the immediate issuer
3075         * of the leaf certificate is not a trust anchor.  No attempt will be
3076         * made to locate an issuer for that certificate, since such a chain
3077         * would be a-priori too long.
3078         */
3079        if ((search & S_DOTRUSTED) != 0) {
3080            i = num;
3081            if ((search & S_DOALTERNATE) != 0) {
3082                /*
3083                 * As high up the chain as we can, look for an alternative
3084                 * trusted issuer of an untrusted certificate that currently
3085                 * has an untrusted issuer.  We use the alt_untrusted variable
3086                 * to track how far up the chain we find the first match.  It
3087                 * is only if and when we find a match, that we prune the chain
3088                 * and reset ctx->num_untrusted to the reduced count of
3089                 * untrusted certificates.  While we're searching for such a
3090                 * match (which may never be found), it is neither safe nor
3091                 * wise to preemptively modify either the chain or
3092                 * ctx->num_untrusted.
3093                 *
3094                 * Note, like ctx->num_untrusted, alt_untrusted is a count of
3095                 * untrusted certificates, not a "depth".
3096                 */
3097                i = alt_untrusted;
3098            }
3099            curr = sk_X509_value(ctx->chain, i - 1);
3100
3101            /* Note: get1_trusted_issuer() must be used even if self-signed. */
3102            ok = num > max_depth ? 0 : get1_trusted_issuer(&issuer, ctx, curr);
3103
3104            if (ok < 0) {
3105                trust = -1;
3106                ctx->error = X509_V_ERR_STORE_LOOKUP;
3107                break;
3108            }
3109
3110            if (ok > 0) {
3111                int self_signed = X509_self_signed(curr, 0);
3112
3113                if (self_signed < 0) {
3114                    X509_free(issuer);
3115                    goto int_err;
3116                }
3117                /*
3118                 * Alternative trusted issuer for a mid-chain untrusted cert?
3119                 * Pop the untrusted cert's successors and retry.  We might now
3120                 * be able to complete a valid chain via the trust store.  Note
3121                 * that despite the current trust store match we might still
3122                 * fail complete the chain to a suitable trust anchor, in which
3123                 * case we may prune some more untrusted certificates and try
3124                 * again.  Thus the S_DOALTERNATE bit may yet be turned on
3125                 * again with an even shorter untrusted chain!
3126                 *
3127                 * If in the process we threw away our matching PKIX-TA trust
3128                 * anchor, reset DANE trust.  We might find a suitable trusted
3129                 * certificate among the ones from the trust store.
3130                 */
3131                if ((search & S_DOALTERNATE) != 0) {
3132                    if (!ossl_assert(num > i && i > 0 && !self_signed)) {
3133                        X509_free(issuer);
3134                        goto int_err;
3135                    }
3136                    search &= ~S_DOALTERNATE;
3137                    for (; num > i; --num)
3138                        X509_free(sk_X509_pop(ctx->chain));
3139                    ctx->num_untrusted = num;
3140
3141                    if (DANETLS_ENABLED(dane) &&
3142                        dane->mdpth >= ctx->num_untrusted) {
3143                        dane->mdpth = -1;
3144                        X509_free(dane->mcert);
3145                        dane->mcert = NULL;
3146                    }
3147                    if (DANETLS_ENABLED(dane) &&
3148                        dane->pdpth >= ctx->num_untrusted)
3149                        dane->pdpth = -1;
3150                }
3151
3152                /*
3153                 * Self-signed untrusted certificates get replaced by their
3154                 * trusted matching issuer.  Otherwise, grow the chain.
3155                 */
3156                if (!self_signed) {
3157                    if (!sk_X509_push(ctx->chain, issuer)) {
3158                        X509_free(issuer);
3159                        goto memerr;
3160                    }
3161                    if ((self_signed = X509_self_signed(issuer, 0)) < 0)
3162                        goto int_err;
3163                } else {
3164                    /*
3165                     * We have a self-signed certificate that has the same
3166                     * subject name (and perhaps keyid and/or serial number) as
3167                     * a trust anchor.  We must have an exact match to avoid
3168                     * possible impersonation via key substitution etc.
3169                     */
3170                    if (X509_cmp(curr, issuer) != 0) {
3171                        /* Self-signed untrusted mimic. */
3172                        X509_free(issuer);
3173                        ok = 0;
3174                    } else { /* curr "==" issuer */
3175                        X509_free(curr);
3176                        ctx->num_untrusted = --num;
3177                        (void)sk_X509_set(ctx->chain, num, issuer);
3178                    }
3179                }
3180
3181                /*
3182                 * We've added a new trusted certificate to the chain, re-check
3183                 * trust.  If not done, and not self-signed look deeper.
3184                 * Whether or not we're doing "trusted first", we no longer
3185                 * look for untrusted certificates from the peer's chain.
3186                 *
3187                 * At this point ctx->num_trusted and num must reflect the
3188                 * correct number of untrusted certificates, since the DANE
3189                 * logic in check_trust() depends on distinguishing CAs from
3190                 * "the wire" from CAs from the trust store.  In particular, the
3191                 * certificate at depth "num" should be the new trusted
3192                 * certificate with ctx->num_untrusted <= num.
3193                 */
3194                if (ok) {
3195                    if (!ossl_assert(ctx->num_untrusted <= num))
3196                        goto int_err;
3197                    search &= ~S_DOUNTRUSTED;
3198                    trust = check_trust(ctx, num);
3199                    if (trust != X509_TRUST_UNTRUSTED)
3200                        break;
3201                    if (!self_signed)
3202                        continue;
3203                }
3204            }
3205
3206            /*
3207             * No dispositive decision, and either self-signed or no match, if
3208             * we were doing untrusted-first, and alt-chains are not disabled,
3209             * do that, by repeatedly losing one untrusted element at a time,
3210             * and trying to extend the shorted chain.
3211             */
3212            if ((search & S_DOUNTRUSTED) == 0) {
3213                /* Continue search for a trusted issuer of a shorter chain? */
3214                if ((search & S_DOALTERNATE) != 0 && --alt_untrusted > 0)
3215                    continue;
3216                /* Still no luck and no fallbacks left? */
3217                if (!may_alternate || (search & S_DOALTERNATE) != 0 ||
3218                    ctx->num_untrusted < 2)
3219                    break;
3220                /* Search for a trusted issuer of a shorter chain */
3221                search |= S_DOALTERNATE;
3222                alt_untrusted = ctx->num_untrusted - 1;
3223            }
3224        }
3225
3226        /*
3227         * Extend chain with peer-provided untrusted certificates
3228         */
3229        if ((search & S_DOUNTRUSTED) != 0) {
3230            num = sk_X509_num(ctx->chain);
3231            if (!ossl_assert(num == ctx->num_untrusted))
3232                goto int_err;
3233            curr = sk_X509_value(ctx->chain, num - 1);
3234            issuer = (X509_self_signed(curr, 0) > 0 || num > max_depth) ?
3235                NULL : find_issuer(ctx, sk_untrusted, curr);
3236            if (issuer == NULL) {
3237                /*
3238                 * Once we have reached a self-signed cert or num > max_depth
3239                 * or can't find an issuer in the untrusted list we stop looking
3240                 * there and start looking only in the trust store if enabled.
3241                 */
3242                search &= ~S_DOUNTRUSTED;
3243                if (may_trusted)
3244                    search |= S_DOTRUSTED;
3245                continue;
3246            }
3247
3248            /* Drop this issuer from future consideration */
3249            (void)sk_X509_delete_ptr(sk_untrusted, issuer);
3250
3251            if (!X509_add_cert(ctx->chain, issuer, X509_ADD_FLAG_UP_REF))
3252                goto int_err;
3253
3254            ++ctx->num_untrusted;
3255
3256            /* Check for DANE-TA trust of the topmost untrusted certificate. */
3257            trust = check_dane_issuer(ctx, ctx->num_untrusted - 1);
3258            if (trust == X509_TRUST_TRUSTED || trust == X509_TRUST_REJECTED)
3259                break;
3260        }
3261    }
3262    sk_X509_free(sk_untrusted);
3263
3264    if (trust < 0) /* internal error */
3265        return trust;
3266
3267    /*
3268     * Last chance to make a trusted chain, either bare DANE-TA public-key
3269     * signers, or else direct leaf PKIX trust.
3270     */
3271    num = sk_X509_num(ctx->chain);
3272    if (num <= max_depth) {
3273        if (trust == X509_TRUST_UNTRUSTED && DANETLS_HAS_DANE_TA(dane))
3274            trust = check_dane_pkeys(ctx);
3275        if (trust == X509_TRUST_UNTRUSTED && num == ctx->num_untrusted)
3276            trust = check_trust(ctx, num);
3277    }
3278
3279    switch (trust) {
3280    case X509_TRUST_TRUSTED:
3281        return 1;
3282    case X509_TRUST_REJECTED:
3283        /* Callback already issued */
3284        return 0;
3285    case X509_TRUST_UNTRUSTED:
3286    default:
3287        switch(ctx->error) {
3288        case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
3289        case X509_V_ERR_CERT_NOT_YET_VALID:
3290        case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
3291        case X509_V_ERR_CERT_HAS_EXPIRED:
3292            return 0; /* Callback already issued by ossl_x509_check_cert_time() */
3293        default: /* A preliminary error has become final */
3294            return verify_cb_cert(ctx, NULL, num - 1, ctx->error);
3295        case X509_V_OK:
3296            break;
3297        }
3298        CB_FAIL_IF(num > max_depth,
3299                   ctx, NULL, num - 1, X509_V_ERR_CERT_CHAIN_TOO_LONG);
3300        CB_FAIL_IF(DANETLS_ENABLED(dane)
3301                       && (!DANETLS_HAS_PKIX(dane) || dane->pdpth >= 0),
3302                   ctx, NULL, num - 1, X509_V_ERR_DANE_NO_MATCH);
3303        if (X509_self_signed(sk_X509_value(ctx->chain, num - 1), 0) > 0)
3304            return verify_cb_cert(ctx, NULL, num - 1,
3305                                  num == 1
3306                                  ? X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
3307                                  : X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN);
3308        return verify_cb_cert(ctx, NULL, num - 1,
3309                              ctx->num_untrusted < num
3310                              ? X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
3311                              : X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY);
3312    }
3313
3314 int_err:
3315    ERR_raise(ERR_LIB_X509, ERR_R_INTERNAL_ERROR);
3316    ctx->error = X509_V_ERR_UNSPECIFIED;
3317    sk_X509_free(sk_untrusted);
3318    return -1;
3319
3320 memerr:
3321    ERR_raise(ERR_LIB_X509, ERR_R_MALLOC_FAILURE);
3322    ctx->error = X509_V_ERR_OUT_OF_MEM;
3323    sk_X509_free(sk_untrusted);
3324    return -1;
3325}
3326
3327STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs,
3328                                 X509_STORE *store, int with_self_signed,
3329                                 OSSL_LIB_CTX *libctx, const char *propq)
3330{
3331    int finish_chain = store != NULL;
3332    X509_STORE_CTX *ctx;
3333    int flags = X509_ADD_FLAG_UP_REF;
3334    STACK_OF(X509) *result = NULL;
3335
3336    if (target == NULL) {
3337        ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
3338        return NULL;
3339    }
3340
3341    if ((ctx = X509_STORE_CTX_new_ex(libctx, propq)) == NULL)
3342        return NULL;
3343    if (!X509_STORE_CTX_init(ctx, store, target, finish_chain ? certs : NULL))
3344        goto err;
3345    if (!finish_chain)
3346        X509_STORE_CTX_set0_trusted_stack(ctx, certs);
3347    if (!ossl_x509_add_cert_new(&ctx->chain, target, X509_ADD_FLAG_UP_REF)) {
3348        ctx->error = X509_V_ERR_OUT_OF_MEM;
3349        goto err;
3350    }
3351    ctx->num_untrusted = 1;
3352
3353    if (!build_chain(ctx) && finish_chain)
3354        goto err;
3355
3356    /* result list to store the up_ref'ed certificates */
3357    if (sk_X509_num(ctx->chain) > 1 && !with_self_signed)
3358        flags |= X509_ADD_FLAG_NO_SS;
3359    if (!ossl_x509_add_certs_new(&result, ctx->chain, flags)) {
3360        sk_X509_free(result);
3361        result = NULL;
3362    }
3363
3364 err:
3365    X509_STORE_CTX_free(ctx);
3366    return result;
3367}
3368
3369/*
3370 * note that there's a corresponding minbits_table in ssl/ssl_cert.c
3371 * in ssl_get_security_level_bits that's used for selection of DH parameters
3372 */
3373static const int minbits_table[] = { 80, 112, 128, 192, 256 };
3374static const int NUM_AUTH_LEVELS = OSSL_NELEM(minbits_table);
3375
3376/*-
3377 * Check whether the public key of `cert` meets the security level of `ctx`.
3378 * Returns 1 on success, 0 otherwise.
3379 */
3380static int check_key_level(X509_STORE_CTX *ctx, X509 *cert)
3381{
3382    EVP_PKEY *pkey = X509_get0_pubkey(cert);
3383    int level = ctx->param->auth_level;
3384
3385    /*
3386     * At security level zero, return without checking for a supported public
3387     * key type.  Some engines support key types not understood outside the
3388     * engine, and we only need to understand the key when enforcing a security
3389     * floor.
3390     */
3391    if (level <= 0)
3392        return 1;
3393
3394    /* Unsupported or malformed keys are not secure */
3395    if (pkey == NULL)
3396        return 0;
3397
3398    if (level > NUM_AUTH_LEVELS)
3399        level = NUM_AUTH_LEVELS;
3400
3401    return EVP_PKEY_get_security_bits(pkey) >= minbits_table[level - 1];
3402}
3403
3404/*-
3405 * Check whether the public key of ``cert`` does not use explicit params
3406 * for an elliptic curve.
3407 *
3408 * Returns 1 on success, 0 if check fails, -1 for other errors.
3409 */
3410static int check_curve(X509 *cert)
3411{
3412    EVP_PKEY *pkey = X509_get0_pubkey(cert);
3413
3414    /* Unsupported or malformed key */
3415    if (pkey == NULL)
3416        return -1;
3417
3418    if (EVP_PKEY_get_id(pkey) == EVP_PKEY_EC) {
3419        int ret, val;
3420
3421        ret = EVP_PKEY_get_int_param(pkey,
3422                                     OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS,
3423                                     &val);
3424        return ret == 1 ? !val : -1;
3425    }
3426
3427    return 1;
3428}
3429
3430/*-
3431 * Check whether the signature digest algorithm of ``cert`` meets the security
3432 * level of ``ctx``.  Should not be checked for trust anchors (whether
3433 * self-signed or otherwise).
3434 *
3435 * Returns 1 on success, 0 otherwise.
3436 */
3437static int check_sig_level(X509_STORE_CTX *ctx, X509 *cert)
3438{
3439    int secbits = -1;
3440    int level = ctx->param->auth_level;
3441
3442    if (level <= 0)
3443        return 1;
3444    if (level > NUM_AUTH_LEVELS)
3445        level = NUM_AUTH_LEVELS;
3446
3447    if (!X509_get_signature_info(cert, NULL, NULL, &secbits, NULL))
3448        return 0;
3449
3450    return secbits >= minbits_table[level - 1];
3451}
3452