1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/* crypto/x509/x509_vfy.h */
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * All rights reserved.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * This package is an SSL implementation written
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * by Eric Young (eay@cryptsoft.com).
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * The implementation was written so as to conform with Netscapes SSL.
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This library is free for commercial and non-commercial use as long as
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * the following conditions are aheared to.  The following conditions
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch * apply to all code found in this distribution, be it the RC4, RSA,
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * included with this distribution is covered by the same copyright terms
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright remains Eric Young's, and as such any Copyright notices in
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * the code are not to be removed.
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * If this package is used in a product, Eric Young should be given attribution
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * as the author of the parts of the library used.
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This can be in the form of a textual message at program startup or
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * in documentation (online or textual) provided with the package.
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * modification, are permitted provided that the following conditions
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * are met:
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * 1. Redistributions of source code must retain the copyright
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * 3. All advertising materials mentioning features or use of this software
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) *    must display the following acknowledgement:
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *    "This product includes cryptographic software written by
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *     Eric Young (eay@cryptsoft.com)"
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) *    The word 'cryptographic' can be left out if the rouines from the library
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) *    being used are not cryptographic related :-).
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * 4. If you include any Windows specific code (or a derivative thereof) from
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *    the apps directory (application code) you must include an acknowledgement:
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * SUCH DAMAGE.
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * The licence and distribution terms for any publically available version or
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * derivative of this code cannot be changed.  i.e. this code cannot simply be
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * copied and put under another distribution licence
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * [including the GNU Public Licence.]
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef HEADER_X509_H
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <openssl/x509.h>
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* openssl/x509.h ends up #include-ing this file at about the only
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * appropriate moment. */
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef HEADER_X509_VFY_H
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define HEADER_X509_VFY_H
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <openssl/bio.h>
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <openssl/lhash.h>
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef  __cplusplus
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" {
73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if 0
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Outer object */
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef struct x509_hash_dir_st
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	{
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int num_dirs;
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	char **dirs;
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	int *dirs_type;
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	int num_dirs_alloced;
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	} X509_HASH_DIR_CTX;
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdochtypedef struct x509_file_st
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	{
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	int num_paths;	/* number of paths to files or directories */
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	int num_alloced;
90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	char **paths;	/* the list of paths or directories */
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	int *path_type;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	} X509_CERT_FILE_CTX;
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*******************************/
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SSL_CTX -> X509_STORE
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		-> X509_LOOKUP
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			->X509_LOOKUP_METHOD
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		-> X509_LOOKUP
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			->X509_LOOKUP_METHOD
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SSL	-> X509_STORE_CTX
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		->X509_STORE
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)The X509_STORE holds the tables etc for verification stuff.
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)A X509_STORE_CTX is used while validating a single certificate.
10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)The X509_STORE has X509_LOOKUPs for looking up certs.
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)The X509_STORE then calls a function to actually verify the
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)certificate chain.
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)*/
11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define X509_LU_RETRY		-1
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_LU_FAIL		0
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_LU_X509		1
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_LU_CRL		2
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define X509_LU_PKEY		3
11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef struct x509_object_st
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	{
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/* one of the above types */
121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	int type;
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	union	{
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		char *ptr;
12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)		X509 *x509;
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		X509_CRL *crl;
12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)		EVP_PKEY *pkey;
12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)		} data;
12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	} X509_OBJECT;
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef struct x509_lookup_st X509_LOOKUP;
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DECLARE_STACK_OF(X509_LOOKUP)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DECLARE_STACK_OF(X509_OBJECT)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* This is a static that defines the function interface */
13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef struct x509_lookup_method_st
13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	{
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	const char *name;
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	int (*new_item)(X509_LOOKUP *ctx);
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	void (*free)(X509_LOOKUP *ctx);
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	int (*init)(X509_LOOKUP *ctx);
142a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)	int (*shutdown)(X509_LOOKUP *ctx);
143a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)	int (*ctrl)(X509_LOOKUP *ctx,int cmd,const char *argc,long argl,
14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)			char **ret);
14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	int (*get_by_subject)(X509_LOOKUP *ctx,int type,X509_NAME *name,
14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)			      X509_OBJECT *ret);
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*get_by_issuer_serial)(X509_LOOKUP *ctx,int type,X509_NAME *name,
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)				    ASN1_INTEGER *serial,X509_OBJECT *ret);
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*get_by_fingerprint)(X509_LOOKUP *ctx,int type,
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)				  unsigned char *bytes,int len,
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)				  X509_OBJECT *ret);
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*get_by_alias)(X509_LOOKUP *ctx,int type,char *str,int len,
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			    X509_OBJECT *ret);
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	} X509_LOOKUP_METHOD;
15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID;
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* This structure hold all parameters associated with a verify operation
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * by including an X509_VERIFY_PARAM structure in related structures the
16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * parameters used can be customized
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef struct X509_VERIFY_PARAM_st
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	{
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *name;
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	time_t check_time;	/* Time to use */
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	unsigned long inh_flags; /* Inheritance flags */
168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	unsigned long flags;	/* Various verify flags */
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int purpose;		/* purpose to check untrusted certificates */
170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	int trust;		/* trust setting to check */
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int depth;		/* Verify depth */
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	STACK_OF(ASN1_OBJECT) *policies;	/* Permissible policies */
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	X509_VERIFY_PARAM_ID *id;	/* opaque ID data */
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	} X509_VERIFY_PARAM;
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)DECLARE_STACK_OF(X509_VERIFY_PARAM)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)/* This is used to hold everything.  It is used for all certificate
17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * validation.  Once we have a certificate chain, the 'verify'
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * function is then called to actually check the cert chain. */
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct x509_store_st
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	{
18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	/* The following is a cache of trusted certs */
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int cache; 	/* if true, stash any hits */
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	STACK_OF(X509_OBJECT) *objs;	/* Cache of all objects */
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/* These are external lookup methods */
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	STACK_OF(X509_LOOKUP) *get_cert_methods;
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_VERIFY_PARAM *param;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	/* Callbacks for various operations */
193a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)	int (*verify)(X509_STORE_CTX *ctx);	/* called to verify a certificate */
19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	int (*verify_cb)(int ok,X509_STORE_CTX *ctx);	/* error callback */
19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);	/* get issuers cert from ctx */
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm);
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm);
20368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	int (*cleanup)(X509_STORE_CTX *ctx);
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	CRYPTO_EX_DATA ex_data;
20658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	int references;
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	} /* X509_STORE */;
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_STORE_set_depth(X509_STORE *store, int depth);
210a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
21168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func))
212a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_STORE_set_verify_func(ctx,func)	((ctx)->verify=(func))
21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* This is the functions plus an instance of the local variables. */
215a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)struct x509_lookup_st
216a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)	{
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int init;			/* have we been started */
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int skip;			/* don't use us. */
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_LOOKUP_METHOD *method;	/* the functions */
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *method_data;		/* method data */
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	X509_STORE *store_ctx;	/* who owns us */
22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	} /* X509_LOOKUP */;
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* This is a used when verifying cert chains.  Since the
22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * gathering of the cert chain can take some time (and have to be
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 'retried', this needs to be kept and passed around. */
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct x509_store_ctx_st      /* X509_STORE_CTX */
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	{
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_STORE *ctx;
23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	int current_method;	/* used when looking up certs */
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/* The following are set by the caller */
234a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)	X509 *cert;		/* The cert to check */
23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	STACK_OF(X509) *untrusted;	/* chain of X509s - untrusted - passed in */
23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	STACK_OF(X509_CRL) *crls;	/* set of CRLs passed in */
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	X509_VERIFY_PARAM *param;
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	void *other_ctx;	/* Other info for use with get_issuer() */
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/* Callbacks for various operations */
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*verify)(X509_STORE_CTX *ctx);	/* called to verify a certificate */
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*verify_cb)(int ok,X509_STORE_CTX *ctx);		/* error callback */
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);	/* get issuers cert from ctx */
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */
249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */
250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	int (*check_policy)(X509_STORE_CTX *ctx);
251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm);
25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm);
25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	int (*cleanup)(X509_STORE_CTX *ctx);
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/* The following is built up */
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int valid;		/* if 0, rebuild chain */
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int last_untrusted;	/* index of last untrusted cert */
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	STACK_OF(X509) *chain; 		/* chain of X509s - built up and trusted */
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_POLICY_TREE *tree;	/* Valid policy tree */
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int explicit_policy;	/* Require explicit policy value */
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/* When something goes wrong, this is why */
264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	int error_depth;
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int error;
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509 *current_cert;
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509 *current_issuer;	/* cert currently being tested as valid issuer */
268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	X509_CRL *current_crl;	/* current CRL */
269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	int current_crl_score;  /* score of current CRL */
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	unsigned int current_reasons;  /* Reason mask */
27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
27368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	X509_STORE_CTX *parent; /* For CRL path validation: parent context */
274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	CRYPTO_EX_DATA ex_data;
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	} /* X509_STORE_CTX */;
277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_STORE_CTX_set_app_data(ctx,data) \
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_STORE_CTX_set_ex_data(ctx,0,data)
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_STORE_CTX_get_app_data(ctx) \
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_STORE_CTX_get_ex_data(ctx,0)
284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define X509_L_FILE_LOAD	1
2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define X509_L_ADD_DIR		2
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_LOOKUP_load_file(x,name,type) \
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL)
2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_LOOKUP_add_dir(x,name,type) \
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL)
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_OK					0
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* illegal error (for uninitialized values, to avoid X509_V_OK): 1 */
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT		2
298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_UNABLE_TO_GET_CRL			3
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE	4
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE	5
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY	6
302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_CERT_SIGNATURE_FAILURE		7
303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_CRL_SIGNATURE_FAILURE		8
304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_CERT_NOT_YET_VALID			9
305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_CERT_HAS_EXPIRED			10
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_CRL_NOT_YET_VALID			11
307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_CRL_HAS_EXPIRED			12
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD	13
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD	14
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD	15
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD	16
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_OUT_OF_MEM				17
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT		18
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN		19
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY	20
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE	21
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_CERT_CHAIN_TOO_LONG			22
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_CERT_REVOKED				23
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_INVALID_CA				24
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_PATH_LENGTH_EXCEEDED			25
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_INVALID_PURPOSE			26
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_CERT_UNTRUSTED			27
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_CERT_REJECTED			28
324868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/* These are 'informational' when looking for issuer cert */
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_SUBJECT_ISSUER_MISMATCH		29
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_AKID_SKID_MISMATCH			30
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH		31
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_KEYUSAGE_NO_CERTSIGN			32
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
330eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER		33
331eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION		34
332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_KEYUSAGE_NO_CRL_SIGN			35
333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION	36
334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_INVALID_NON_CA			37
335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED		38
336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE	39
337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define		X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED	40
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_INVALID_EXTENSION			41
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_INVALID_POLICY_EXTENSION		42
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_NO_EXPLICIT_POLICY			43
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_DIFFERENT_CRL_SCOPE			44
34358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define		X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE	45
34458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
34558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define		X509_V_ERR_UNNESTED_RESOURCE			46
34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
347a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define		X509_V_ERR_PERMITTED_VIOLATION			47
348a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define		X509_V_ERR_EXCLUDED_VIOLATION			48
349a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define		X509_V_ERR_SUBTREE_MINMAX			49
350a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define		X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE		51
351a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define		X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX	52
352a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define		X509_V_ERR_UNSUPPORTED_NAME_SYNTAX		53
353a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define		X509_V_ERR_CRL_PATH_VALIDATION_ERROR		54
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Suite B mode algorithm violation */
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_SUITE_B_INVALID_VERSION		56
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_SUITE_B_INVALID_ALGORITHM		57
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_SUITE_B_INVALID_CURVE		58
35958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define		X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM	59
36058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define		X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED		60
36158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define		X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256	61
36258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
36368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)/* Host, email and IP check errors */
36468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define		X509_V_ERR_HOSTNAME_MISMATCH			62
36568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define		X509_V_ERR_EMAIL_MISMATCH			63
36668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define		X509_V_ERR_IP_ADDRESS_MISMATCH			64
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* The application is not happy */
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define		X509_V_ERR_APPLICATION_VERIFICATION		50
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Certificate verify flags */
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Send issuer+subject checks to verify_cb */
3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define	X509_V_FLAG_CB_ISSUER_CHECK		0x1
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Use check time instead of current time */
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define	X509_V_FLAG_USE_CHECK_TIME		0x2
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Lookup CRLs */
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define	X509_V_FLAG_CRL_CHECK			0x4
379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/* Lookup CRLs for whole chain */
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define	X509_V_FLAG_CRL_CHECK_ALL		0x8
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Ignore unhandled critical extensions */
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define	X509_V_FLAG_IGNORE_CRITICAL		0x10
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Disable workarounds for broken certificates */
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define	X509_V_FLAG_X509_STRICT			0x20
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Enable proxy certificate validation */
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define	X509_V_FLAG_ALLOW_PROXY_CERTS		0x40
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Enable policy checking */
3887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define X509_V_FLAG_POLICY_CHECK		0x80
3897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* Policy variable require-explicit-policy */
3907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define X509_V_FLAG_EXPLICIT_POLICY		0x100
3917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* Policy variable inhibit-any-policy */
3927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define	X509_V_FLAG_INHIBIT_ANY			0x200
3937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* Policy variable inhibit-policy-mapping */
3947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define X509_V_FLAG_INHIBIT_MAP			0x400
3957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* Notify callback that policy is OK */
3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define X509_V_FLAG_NOTIFY_POLICY		0x800
3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */
3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define X509_V_FLAG_EXTENDED_CRL_SUPPORT	0x1000
3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Delta CRL support */
4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define X509_V_FLAG_USE_DELTAS			0x2000
4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Check selfsigned CA signature */
4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define X509_V_FLAG_CHECK_SS_SIGNATURE		0x4000
4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Use trusted store first */
4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define X509_V_FLAG_TRUSTED_FIRST		0x8000
40568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)/* Suite B 128 bit only mode: not normally used */
40668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define X509_V_FLAG_SUITEB_128_LOS_ONLY		0x10000
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Suite B 192 bit only mode */
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define X509_V_FLAG_SUITEB_192_LOS		0x20000
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Suite B 128 bit mode allowing 192 bit algorithms */
41068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define X509_V_FLAG_SUITEB_128_LOS		0x30000
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Allow partial chains if at least one certificate is in trusted store */
413a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_V_FLAG_PARTIAL_CHAIN		0x80000
41468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
415a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_VP_FLAG_DEFAULT			0x1
416a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_VP_FLAG_OVERWRITE			0x2
417a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_VP_FLAG_RESET_FLAGS		0x4
418a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_VP_FLAG_LOCKED			0x8
419a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_VP_FLAG_ONCE			0x10
420a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
421a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)/* Internal use: mask of policy related options */
422a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \
423a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)				| X509_V_FLAG_EXPLICIT_POLICY \
42468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)				| X509_V_FLAG_INHIBIT_ANY \
425a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)				| X509_V_FLAG_INHIBIT_MAP)
426a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
427a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type,
428a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)	     X509_NAME *name);
429a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h,int type,X509_NAME *name);
43068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, X509_OBJECT *x);
431a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_OBJECT_up_ref_count(X509_OBJECT *a);
432a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_OBJECT_free_contents(X509_OBJECT *a);
433a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT X509_STORE *X509_STORE_new(void );
434a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_free(X509_STORE *v);
435a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
43658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben MurdochOPENSSL_EXPORT STACK_OF(X509)* X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm);
43758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben MurdochOPENSSL_EXPORT STACK_OF(X509_CRL)* X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm);
43858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben MurdochOPENSSL_EXPORT int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags);
43958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben MurdochOPENSSL_EXPORT int X509_STORE_set_purpose(X509_STORE *ctx, int purpose);
44068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_set_trust(X509_STORE *ctx, int trust);
44158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben MurdochOPENSSL_EXPORT int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm);
44258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch
44358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben MurdochOPENSSL_EXPORT void X509_STORE_set_verify_cb(X509_STORE *ctx,
444a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)				  int (*verify_cb)(int, X509_STORE_CTX *));
44568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
446a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx,
447a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)		STACK_OF(X509_CRL)* (*cb)(X509_STORE_CTX *ctx, X509_NAME *nm));
448a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
449a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT X509_STORE_CTX *X509_STORE_CTX_new(void);
450a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
451a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);
452a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
453a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_free(X509_STORE_CTX *ctx);
454a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
45568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)			 X509 *x509, STACK_OF(X509) *chain);
456a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
457a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
458a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
459a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx);
460a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
461424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)OPENSSL_EXPORT X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m);
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)OPENSSL_EXPORT X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void);
4645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT X509_LOOKUP_METHOD *X509_LOOKUP_file(void);
4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_add_cert(X509_STORE *ctx, X509 *x);
4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x);
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
46968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_get_by_subject(X509_STORE_CTX *vs,int type,X509_NAME *name,
4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	X509_OBJECT *ret);
4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,
4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	long argl, char **ret);
4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef OPENSSL_NO_STDIO
4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type);
47790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)OPENSSL_EXPORT int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type);
478868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)OPENSSL_EXPORT int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type);
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method);
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT void X509_LOOKUP_free(X509_LOOKUP *ctx);
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_LOOKUP_init(X509_LOOKUP *ctx);
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name,
48668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	X509_OBJECT *ret);
48768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name,
48868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	ASN1_INTEGER *serial, X509_OBJECT *ret);
48968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type,
49068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	unsigned char *bytes, int len, X509_OBJECT *ret);
4913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str,
4923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	int len, X509_OBJECT *ret);
49368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_LOOKUP_shutdown(X509_LOOKUP *ctx);
4943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
4953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifndef OPENSSL_NO_STDIO
4963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int	X509_STORE_load_locations (X509_STORE *ctx,
4973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)		const char *file, const char *dir);
4983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int	X509_STORE_set_default_paths(X509_STORE *ctx);
4993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif
5003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
5013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
5023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
50368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int	X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx,int idx,void *data);
5043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT void *	X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx,int idx);
5053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int	X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
5063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT void	X509_STORE_CTX_set_error(X509_STORE_CTX *ctx,int s);
5073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int	X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
50868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT X509 *	X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
509eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochOPENSSL_EXPORT X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx);
510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochOPENSSL_EXPORT X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx);
51168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx);
51268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx);
51368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx);
51468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT void	X509_STORE_CTX_set_cert(X509_STORE_CTX *c,X509 *x);
51568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT void	X509_STORE_CTX_set_chain(X509_STORE_CTX *c,STACK_OF(X509) *sk);
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT void	X509_STORE_CTX_set0_crls(X509_STORE_CTX *c,STACK_OF(X509_CRL) *sk);
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
5183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust);
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
520eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch				int purpose, int trust);
52168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags);
522a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags,
52368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)								time_t t);
524a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,
525a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)				  int (*verify_cb)(int, X509_STORE_CTX *));
526a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
527a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)OPENSSL_EXPORT X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx);
528868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx);
529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)OPENSSL_EXPORT X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx);
5313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);
5323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OPENSSL_EXPORT int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);
53368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)/* X509_VERIFY_PARAM functions */
53568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
53668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void);
5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param);
5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to,
5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)						const X509_VERIFY_PARAM *from);
5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to,
5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)						const X509_VERIFY_PARAM *from);
5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name);
5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags);
54490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,
545868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)							unsigned long flags);
546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)OPENSSL_EXPORT unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param);
547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose);
548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust);
549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)OPENSSL_EXPORT void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t);
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,
55268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)						ASN1_OBJECT *policy);
55368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
55468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)					STACK_OF(ASN1_OBJECT) *policies);
55568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
55668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
55768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)				const unsigned char *name, size_t namelen);
55868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
55968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)					unsigned int flags);
56068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,
56168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)				const unsigned char *email, size_t emaillen);
56268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,
56368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)					const unsigned char *ip, size_t iplen);
56468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc);
56568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
56668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
56768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param);
56868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
56968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param);
57068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT int X509_VERIFY_PARAM_get_count(void);
57168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id);
57268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name);
57368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)OPENSSL_EXPORT void X509_VERIFY_PARAM_table_cleanup(void);
574424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
57558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)OPENSSL_EXPORT int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,
57668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)			STACK_OF(X509) *certs,
57768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)			STACK_OF(ASN1_OBJECT) *policy_oids,
57868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)			unsigned int flags);
57968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)OPENSSL_EXPORT void X509_policy_tree_free(X509_POLICY_TREE *tree);
581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_policy_tree_level_count(const X509_POLICY_TREE *tree);
583424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)OPENSSL_EXPORT X509_POLICY_LEVEL *
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i);
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT STACK_OF(X509_POLICY_NODE) *
58768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree);
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT STACK_OF(X509_POLICY_NODE) *
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree);
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT int X509_policy_level_node_count(X509_POLICY_LEVEL *level);
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, int i);
5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node);
597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT STACK_OF(POLICYQUALINFO) *
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node);
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OPENSSL_EXPORT const X509_POLICY_NODE *
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	X509_policy_node_get0_parent(const X509_POLICY_NODE *node);
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef  __cplusplus
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)