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