summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x509_vfy.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509/x509_vfy.h')
-rw-r--r--src/lib/libcrypto/x509/x509_vfy.h162
1 files changed, 3 insertions, 159 deletions
diff --git a/src/lib/libcrypto/x509/x509_vfy.h b/src/lib/libcrypto/x509/x509_vfy.h
index 61ea11b71a..133ffda337 100644
--- a/src/lib/libcrypto/x509/x509_vfy.h
+++ b/src/lib/libcrypto/x509/x509_vfy.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_vfy.h,v 1.45 2021/11/01 08:14:36 tb Exp $ */ 1/* $OpenBSD: x509_vfy.h,v 1.46 2021/11/01 20:53:08 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -100,173 +100,17 @@ typedef enum {
100 X509_LU_CRL, 100 X509_LU_CRL,
101} X509_LOOKUP_TYPE; 101} X509_LOOKUP_TYPE;
102 102
103#if defined(LIBRESSL_CRYPTO_INTERNAL) || !defined(LIBRESSL_OPAQUE_X509)
104typedef struct x509_object_st {
105 /* one of the above types */
106 int type;
107 union {
108 char *ptr;
109 X509 *x509;
110 X509_CRL *crl;
111 EVP_PKEY *pkey;
112 } data;
113} X509_OBJECT;
114#else
115typedef struct x509_object_st X509_OBJECT;
116#endif
117
118typedef struct x509_lookup_st X509_LOOKUP;
119 103
120DECLARE_STACK_OF(X509_LOOKUP) 104DECLARE_STACK_OF(X509_LOOKUP)
121DECLARE_STACK_OF(X509_OBJECT) 105DECLARE_STACK_OF(X509_OBJECT)
106DECLARE_STACK_OF(X509_VERIFY_PARAM)
122 107
123#if defined(LIBRESSL_CRYPTO_INTERNAL) || !defined(LIBRESSL_OPAQUE_X509) 108/* unused in OpenSSL */
124/* This is a static that defines the function interface */
125typedef struct x509_lookup_method_st {
126 const char *name;
127 int (*new_item)(X509_LOOKUP *ctx);
128 void (*free)(X509_LOOKUP *ctx);
129 int (*init)(X509_LOOKUP *ctx);
130 int (*shutdown)(X509_LOOKUP *ctx);
131 int (*ctrl)(X509_LOOKUP *ctx, int cmd, const char *argc, long argl,
132 char **ret);
133 int (*get_by_subject)(X509_LOOKUP *ctx, int type, X509_NAME *name,
134 X509_OBJECT *ret);
135 int (*get_by_issuer_serial)(X509_LOOKUP *ctx, int type, X509_NAME *name,
136 ASN1_INTEGER *serial,X509_OBJECT *ret);
137 int (*get_by_fingerprint)(X509_LOOKUP *ctx, int type,
138 const unsigned char *bytes, int len, X509_OBJECT *ret);
139 int (*get_by_alias)(X509_LOOKUP *ctx, int type, const char *str,
140 int len, X509_OBJECT *ret);
141} X509_LOOKUP_METHOD;
142
143typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; 109typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID;
144 110
145/* This structure hold all parameters associated with a verify operation
146 * by including an X509_VERIFY_PARAM structure in related structures the
147 * parameters used can be customized
148 */
149
150typedef struct X509_VERIFY_PARAM_st {
151 char *name;
152 time_t check_time; /* Time to use */
153 unsigned long inh_flags; /* Inheritance flags */
154 unsigned long flags; /* Various verify flags */
155 int purpose; /* purpose to check untrusted certificates */
156 int trust; /* trust setting to check */
157 int depth; /* Verify depth */
158 STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */
159 X509_VERIFY_PARAM_ID *id; /* opaque ID data */
160} X509_VERIFY_PARAM;
161#else
162typedef struct x509_lookup_method_st X509_LOOKUP_METHOD;
163typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM;
164#endif
165
166DECLARE_STACK_OF(X509_VERIFY_PARAM)
167
168#if defined(LIBRESSL_CRYPTO_INTERNAL) || !defined(LIBRESSL_OPAQUE_X509)
169/*
170 * This is used to hold everything. It is used for all certificate
171 * validation. Once we have a certificate chain, the 'verify'
172 * function is then called to actually check the cert chain.
173 */
174struct x509_store_st {
175 /* The following is a cache of trusted certs */
176 int cache; /* if true, stash any hits */
177 STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */
178
179 /* These are external lookup methods */
180 STACK_OF(X509_LOOKUP) *get_cert_methods;
181
182 X509_VERIFY_PARAM *param;
183
184 /* Callbacks for various operations */
185 int (*verify)(X509_STORE_CTX *ctx); /* called to verify a certificate */
186 int (*verify_cb)(int ok,X509_STORE_CTX *ctx); /* error callback */
187 int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* get issuers cert from ctx */
188 int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */
189 int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */
190 int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */
191 int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */
192 int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */
193 STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm);
194 STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm);
195 int (*cleanup)(X509_STORE_CTX *ctx);
196
197 CRYPTO_EX_DATA ex_data;
198 int references;
199} /* X509_STORE */;
200#endif
201 111
202int X509_STORE_set_depth(X509_STORE *store, int depth); 112int X509_STORE_set_depth(X509_STORE *store, int depth);
203 113
204#if defined(LIBRESSL_CRYPTO_INTERNAL) || !defined(LIBRESSL_OPAQUE_X509)
205/* This is the functions plus an instance of the local variables. */
206struct x509_lookup_st {
207 int init; /* have we been started */
208 int skip; /* don't use us. */
209 X509_LOOKUP_METHOD *method; /* the functions */
210 char *method_data; /* method data */
211
212 X509_STORE *store_ctx; /* who owns us */
213} /* X509_LOOKUP */;
214
215/*
216 * This is used when verifying cert chains. Since the gathering of the cert
217 * chain can take some time (and has to be 'retried'), this needs to be kept
218 * and passed around.
219 */
220struct x509_store_ctx_st {
221 X509_STORE *ctx;
222 int current_method; /* used when looking up certs */
223
224 /* The following are set by the caller */
225 X509 *cert; /* The cert to check */
226 STACK_OF(X509) *untrusted; /* chain of X509s - untrusted - passed in */
227 STACK_OF(X509_CRL) *crls; /* set of CRLs passed in */
228
229 X509_VERIFY_PARAM *param;
230 void *other_ctx; /* Other info for use with get_issuer() */
231
232 /* Callbacks for various operations */
233 int (*verify)(X509_STORE_CTX *ctx); /* called to verify a certificate */
234 int (*verify_cb)(int ok,X509_STORE_CTX *ctx); /* error callback */
235 int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* get issuers cert from ctx */
236 int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */
237 int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */
238 int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */
239 int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */
240 int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */
241 int (*check_policy)(X509_STORE_CTX *ctx);
242 STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm);
243 STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm);
244 int (*cleanup)(X509_STORE_CTX *ctx);
245
246 /* The following is built up */
247 int valid; /* if 0, rebuild chain */
248 int last_untrusted; /* XXX: number of untrusted certs in chain!!! */
249 STACK_OF(X509) *chain; /* chain of X509s - built up and trusted */
250 X509_POLICY_TREE *tree; /* Valid policy tree */
251
252 int explicit_policy; /* Require explicit policy value */
253
254 /* When something goes wrong, this is why */
255 int error_depth;
256 int error;
257 X509 *current_cert;
258 X509 *current_issuer; /* cert currently being tested as valid issuer */
259 X509_CRL *current_crl; /* current CRL */
260
261 int current_crl_score; /* score of current CRL */
262 unsigned int current_reasons; /* Reason mask */
263
264 X509_STORE_CTX *parent; /* For CRL path validation: parent context */
265
266 CRYPTO_EX_DATA ex_data;
267} /* X509_STORE_CTX */;
268#endif
269
270void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); 114void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
271 115
272#define X509_STORE_CTX_set_app_data(ctx,data) \ 116#define X509_STORE_CTX_set_app_data(ctx,data) \