1c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* apps/crl.c */
2c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * All rights reserved.
4c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
5c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This package is an SSL implementation written
6c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * by Eric Young (eay@cryptsoft.com).
7c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * The implementation was written so as to conform with Netscapes SSL.
8c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
9c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This library is free for commercial and non-commercial use as long as
10c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the following conditions are aheared to.  The following conditions
11c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * apply to all code found in this distribution, be it the RC4, RSA,
12c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * included with this distribution is covered by the same copyright terms
14c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
16c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Copyright remains Eric Young's, and as such any Copyright notices in
17c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the code are not to be removed.
18c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * If this package is used in a product, Eric Young should be given attribution
19c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * as the author of the parts of the library used.
20c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This can be in the form of a textual message at program startup or
21c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * in documentation (online or textual) provided with the package.
22c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
23c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Redistribution and use in source and binary forms, with or without
24c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * modification, are permitted provided that the following conditions
25c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * are met:
26c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 1. Redistributions of source code must retain the copyright
27c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    notice, this list of conditions and the following disclaimer.
28c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 2. Redistributions in binary form must reproduce the above copyright
29c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    notice, this list of conditions and the following disclaimer in the
30c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    documentation and/or other materials provided with the distribution.
31c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 3. All advertising materials mentioning features or use of this software
32c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    must display the following acknowledgement:
33c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    "This product includes cryptographic software written by
34c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *     Eric Young (eay@cryptsoft.com)"
35c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    The word 'cryptographic' can be left out if the rouines from the library
36c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    being used are not cryptographic related :-).
37c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 4. If you include any Windows specific code (or a derivative thereof) from
38c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    the apps directory (application code) you must include an acknowledgement:
39c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
41c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * SUCH DAMAGE.
52c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
53c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * The licence and distribution terms for any publically available version or
54c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * derivative of this code cannot be changed.  i.e. this code cannot simply be
55c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * copied and put under another distribution licence
56c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * [including the GNU Public Licence.]
57c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */
58c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
59c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <stdio.h>
60c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <stdlib.h>
61c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <string.h>
62c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include "apps.h"
63c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/bio.h>
64c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/err.h>
65c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/x509.h>
66c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/x509v3.h>
67c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/pem.h>
68c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
69c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#undef PROG
70c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define PROG	crl_main
71c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
72c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#undef POSTFIX
73c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define	POSTFIX	".rvk"
74c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
75c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic const char *crl_usage[]={
76c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org"usage: crl args\n",
77c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org"\n",
78c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -inform arg     - input format - default PEM (DER or PEM)\n",
79c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -outform arg    - output format - default PEM\n",
80c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -text           - print out a text format version\n",
81c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -in arg         - input file - default stdin\n",
82c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -out arg        - output file - default stdout\n",
83c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -hash           - print hash value\n",
84c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -fingerprint    - print the crl fingerprint\n",
85c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -issuer         - print issuer DN\n",
86c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -lastupdate     - lastUpdate field\n",
87c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -nextupdate     - nextUpdate field\n",
88c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -crlnumber      - print CRL number\n",
89c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -noout          - no CRL output\n",
90c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -CAfile  name   - verify CRL using certificates in file \"name\"\n",
91c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -CApath  dir    - verify CRL using certificates in \"dir\"\n",
92c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org" -nameopt arg    - various certificate name options\n",
93c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgNULL
94c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org};
95c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
96c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic X509_CRL *load_crl(char *file, int format);
97c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic BIO *bio_out=NULL;
98c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
99c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint MAIN(int, char **);
100c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
101c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint MAIN(int argc, char **argv)
102c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	{
103c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	unsigned long nmflag = 0;
104c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	X509_CRL *x=NULL;
105c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	char *CAfile = NULL, *CApath = NULL;
106c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	int ret=1,i,num,badops=0;
107c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BIO *out=NULL;
108c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	int informat,outformat;
109c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	char *infile=NULL,*outfile=NULL;
110c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
111c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	int fingerprint = 0, crlnumber = 0;
112c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	const char **pp;
113c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	X509_STORE *store = NULL;
114c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	X509_STORE_CTX ctx;
115c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	X509_LOOKUP *lookup = NULL;
116c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	X509_OBJECT xobj;
117c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	EVP_PKEY *pkey;
118c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	int do_ver = 0;
119c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	const EVP_MD *md_alg,*digest=EVP_sha1();
120c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
121c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	apps_startup();
122c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
123c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (bio_err == NULL)
124c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
125c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
126c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
127c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (!load_config(bio_err, NULL))
128c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
129c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
130c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (bio_out == NULL)
131c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if ((bio_out=BIO_new(BIO_s_file())) != NULL)
132c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
133c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
134c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef OPENSSL_SYS_VMS
135c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
136c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
137c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			bio_out = BIO_push(tmpbio, bio_out);
138c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
139c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
140c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
141c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
142c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	informat=FORMAT_PEM;
143c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	outformat=FORMAT_PEM;
144c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
145c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	argc--;
146c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	argv++;
147c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	num=0;
148c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	while (argc >= 1)
149c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
150c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef undef
151c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if	(strcmp(*argv,"-p") == 0)
152c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
153c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
154c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (!args_from_file(++argv,Nargc,Nargv)) { goto end; }*/
155c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
156c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
157c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if 	(strcmp(*argv,"-inform") == 0)
158c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
159c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
160c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			informat=str2fmt(*(++argv));
161c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
162c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-outform") == 0)
163c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
164c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
165c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			outformat=str2fmt(*(++argv));
166c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
167c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-in") == 0)
168c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
169c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
170c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			infile= *(++argv);
171c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
172c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-out") == 0)
173c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
174c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
175c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			outfile= *(++argv);
176c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
177c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-CApath") == 0)
178c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
179c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
180c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			CApath = *(++argv);
181c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			do_ver = 1;
182c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
183c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-CAfile") == 0)
184c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
185c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
186c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			CAfile = *(++argv);
187c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			do_ver = 1;
188c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
189c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-verify") == 0)
190c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			do_ver = 1;
191c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-text") == 0)
192c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			text = 1;
193c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-hash") == 0)
194c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			hash= ++num;
195c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-nameopt") == 0)
196c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
197c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (--argc < 1) goto bad;
198c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (!set_name_ex(&nmflag, *(++argv))) goto bad;
199c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
200c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-issuer") == 0)
201c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			issuer= ++num;
202c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-lastupdate") == 0)
203c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			lastupdate= ++num;
204c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-nextupdate") == 0)
205c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			nextupdate= ++num;
206c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-noout") == 0)
207c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			noout= ++num;
208c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-fingerprint") == 0)
209c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			fingerprint= ++num;
210c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if (strcmp(*argv,"-crlnumber") == 0)
211c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			crlnumber= ++num;
212c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
213c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
214c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			/* ok */
215c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			digest=md_alg;
216c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
217c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else
218c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
219c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO_printf(bio_err,"unknown option %s\n",*argv);
220c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			badops=1;
221c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			break;
222c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
223c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		argc--;
224c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		argv++;
225c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
226c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
227c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (badops)
228c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
229c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgbad:
230c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		for (pp=crl_usage; (*pp != NULL); pp++)
231c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO_printf(bio_err,"%s",*pp);
232c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
233c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
234c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
235c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	ERR_load_crypto_strings();
236c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	x=load_crl(infile,informat);
237c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (x == NULL) { goto end; }
238c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
239c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if(do_ver) {
240c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		store = X509_STORE_new();
241c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
242c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (lookup == NULL) goto end;
243c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
244c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
245c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
246c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
247c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (lookup == NULL) goto end;
248c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
249c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
250c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ERR_clear_error();
251c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
252c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
253c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO_printf(bio_err,
254c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				"Error initialising X509 store\n");
255c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			goto end;
256c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
257c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
258c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		i = X509_STORE_get_by_subject(&ctx, X509_LU_X509,
259c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					X509_CRL_get_issuer(x), &xobj);
260c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if(i <= 0) {
261c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO_printf(bio_err,
262c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				"Error getting CRL issuer certificate\n");
263c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			goto end;
264c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
265c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		pkey = X509_get_pubkey(xobj.data.x509);
266c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		X509_OBJECT_free_contents(&xobj);
267c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if(!pkey) {
268c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BIO_printf(bio_err,
269c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				"Error getting CRL issuer public key\n");
270c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			goto end;
271c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
272c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		i = X509_CRL_verify(x, pkey);
273c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		EVP_PKEY_free(pkey);
274c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if(i < 0) goto end;
275c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if(i == 0) BIO_printf(bio_err, "verify failure\n");
276c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		else BIO_printf(bio_err, "verify OK\n");
277c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
278c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
279c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (num)
280c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
281c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		for (i=1; i<=num; i++)
282c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
283c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (issuer == i)
284c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				{
285c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
286c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				}
287c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (crlnumber == i)
288c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				{
289c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				ASN1_INTEGER *crlnum;
290c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number,
291c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org							      NULL, NULL);
292c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"crlNumber=");
293c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				if (crlnum)
294c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					{
295c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					i2a_ASN1_INTEGER(bio_out, crlnum);
296c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					ASN1_INTEGER_free(crlnum);
297c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					}
298c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				else
299c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					BIO_puts(bio_out, "<NONE>");
300c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"\n");
301c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				}
302c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (hash == i)
303c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				{
304c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"%08lx\n",
305c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					X509_NAME_hash(X509_CRL_get_issuer(x)));
306c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				}
307c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (lastupdate == i)
308c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				{
309c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"lastUpdate=");
310c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				ASN1_TIME_print(bio_out,
311c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org						X509_CRL_get_lastUpdate(x));
312c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"\n");
313c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				}
314c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (nextupdate == i)
315c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				{
316c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"nextUpdate=");
317c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				if (X509_CRL_get_nextUpdate(x))
318c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					ASN1_TIME_print(bio_out,
319c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org						X509_CRL_get_nextUpdate(x));
320c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				else
321c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					BIO_printf(bio_out,"NONE");
322c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"\n");
323c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				}
324c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			if (fingerprint == i)
325c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				{
326c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				int j;
327c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				unsigned int n;
328c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				unsigned char md[EVP_MAX_MD_SIZE];
329c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
330c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				if (!X509_CRL_digest(x,digest,md,&n))
331c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					{
332c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					BIO_printf(bio_err,"out of memory\n");
333c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					goto end;
334c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					}
335c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BIO_printf(bio_out,"%s Fingerprint=",
336c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org						OBJ_nid2sn(EVP_MD_type(digest)));
337c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				for (j=0; j<(int)n; j++)
338c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					{
339c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					BIO_printf(bio_out,"%02X%c",md[j],
340c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org						(j+1 == (int)n)
341c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org						?'\n':':');
342c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org					}
343c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				}
344c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
345c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
346c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
347c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	out=BIO_new(BIO_s_file());
348c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (out == NULL)
349c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
350c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ERR_print_errors(bio_err);
351c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
352c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
353c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
354c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (outfile == NULL)
355c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
356c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BIO_set_fp(out,stdout,BIO_NOCLOSE);
357c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef OPENSSL_SYS_VMS
358c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
359c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
360c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		out = BIO_push(tmpbio, out);
361c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
362c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
363c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
364c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else
365c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
366c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (BIO_write_filename(out,outfile) <= 0)
367c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
368c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			perror(outfile);
369c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			goto end;
370c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
371c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
372c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
373c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (text) X509_CRL_print(out, x);
374c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
375c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (noout)
376c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
377c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ret = 0;
378c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
379c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
380c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
381c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if 	(outformat == FORMAT_ASN1)
382c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		i=(int)i2d_X509_CRL_bio(out,x);
383c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else if (outformat == FORMAT_PEM)
384c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		i=PEM_write_bio_X509_CRL(out,x);
385c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else
386c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
387c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BIO_printf(bio_err,"bad output format specified for outfile\n");
388c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
389c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
390c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
391c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	ret=0;
392c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgend:
393c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BIO_free_all(out);
394c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BIO_free_all(bio_out);
395c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	bio_out=NULL;
396c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	X509_CRL_free(x);
397c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if(store) {
398c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		X509_STORE_CTX_cleanup(&ctx);
399c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		X509_STORE_free(store);
400c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
401c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	apps_shutdown();
402c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	OPENSSL_EXIT(ret);
403c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
404c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
405c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic X509_CRL *load_crl(char *infile, int format)
406c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	{
407c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	X509_CRL *x=NULL;
408c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BIO *in=NULL;
409c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
410c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	in=BIO_new(BIO_s_file());
411c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (in == NULL)
412c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
413c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ERR_print_errors(bio_err);
414c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
415c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
416c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
417c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (infile == NULL)
418c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BIO_set_fp(in,stdin,BIO_NOCLOSE);
419c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else
420c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
421c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (BIO_read_filename(in,infile) <= 0)
422c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
423c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			perror(infile);
424c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			goto end;
425c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
426c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
427c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if 	(format == FORMAT_ASN1)
428c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		x=d2i_X509_CRL_bio(in,NULL);
429c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else if (format == FORMAT_PEM)
430c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
431c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else	{
432c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BIO_printf(bio_err,"bad input format specified for input crl\n");
433c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
434c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
435c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (x == NULL)
436c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
437c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BIO_printf(bio_err,"unable to load CRL\n");
438c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ERR_print_errors(bio_err);
439c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		goto end;
440c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
441c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
442c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgend:
443c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BIO_free(in);
444c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	return(x);
445c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
446c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
447