Home | History | Annotate | Download | only in ocsp
      1 /* ocsp.h */
      2 /* Written by Tom Titchener <Tom_Titchener (at) groove.net> for the OpenSSL
      3  * project. */
      4 
      5 /* History:
      6    This file was transfered to Richard Levitte from CertCo by Kathy
      7    Weinhold in mid-spring 2000 to be included in OpenSSL or released
      8    as a patch kit. */
      9 
     10 /* ====================================================================
     11  * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.
     12  *
     13  * Redistribution and use in source and binary forms, with or without
     14  * modification, are permitted provided that the following conditions
     15  * are met:
     16  *
     17  * 1. Redistributions of source code must retain the above copyright
     18  *    notice, this list of conditions and the following disclaimer.
     19  *
     20  * 2. Redistributions in binary form must reproduce the above copyright
     21  *    notice, this list of conditions and the following disclaimer in
     22  *    the documentation and/or other materials provided with the
     23  *    distribution.
     24  *
     25  * 3. All advertising materials mentioning features or use of this
     26  *    software must display the following acknowledgment:
     27  *    "This product includes software developed by the OpenSSL Project
     28  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
     29  *
     30  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     31  *    endorse or promote products derived from this software without
     32  *    prior written permission. For written permission, please contact
     33  *    openssl-core (at) openssl.org.
     34  *
     35  * 5. Products derived from this software may not be called "OpenSSL"
     36  *    nor may "OpenSSL" appear in their names without prior written
     37  *    permission of the OpenSSL Project.
     38  *
     39  * 6. Redistributions of any form whatsoever must retain the following
     40  *    acknowledgment:
     41  *    "This product includes software developed by the OpenSSL Project
     42  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
     43  *
     44  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     45  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     46  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     47  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     48  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     49  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     50  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     51  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     52  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     53  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     54  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     55  * OF THE POSSIBILITY OF SUCH DAMAGE.
     56  * ====================================================================
     57  *
     58  * This product includes cryptographic software written by Eric Young
     59  * (eay (at) cryptsoft.com).  This product includes software written by Tim
     60  * Hudson (tjh (at) cryptsoft.com).
     61  *
     62  */
     63 
     64 #ifndef HEADER_OCSP_H
     65 #define HEADER_OCSP_H
     66 
     67 #include <openssl/ossl_typ.h>
     68 #include <openssl/x509.h>
     69 #include <openssl/x509v3.h>
     70 #include <openssl/safestack.h>
     71 
     72 #ifdef  __cplusplus
     73 extern "C" {
     74 #endif
     75 
     76 /* Various flags and values */
     77 
     78 #define OCSP_DEFAULT_NONCE_LENGTH	16
     79 
     80 #define OCSP_NOCERTS			0x1
     81 #define OCSP_NOINTERN			0x2
     82 #define OCSP_NOSIGS			0x4
     83 #define OCSP_NOCHAIN			0x8
     84 #define OCSP_NOVERIFY			0x10
     85 #define OCSP_NOEXPLICIT			0x20
     86 #define OCSP_NOCASIGN			0x40
     87 #define OCSP_NODELEGATED		0x80
     88 #define OCSP_NOCHECKS			0x100
     89 #define OCSP_TRUSTOTHER			0x200
     90 #define OCSP_RESPID_KEY			0x400
     91 #define OCSP_NOTIME			0x800
     92 
     93 #ifdef OPENSSL_SYS_WIN32
     94   /* Under Win32 these are defined in wincrypt.h */
     95 #undef OCSP_REQUEST
     96 #undef X509_NAME
     97 #undef OCSP_RESPONSE
     98 #endif
     99 
    100 /*   CertID ::= SEQUENCE {
    101  *       hashAlgorithm            AlgorithmIdentifier,
    102  *       issuerNameHash     OCTET STRING, -- Hash of Issuer's DN
    103  *       issuerKeyHash      OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields)
    104  *       serialNumber       CertificateSerialNumber }
    105  */
    106 typedef struct ocsp_cert_id_st
    107 	{
    108 	X509_ALGOR *hashAlgorithm;
    109 	ASN1_OCTET_STRING *issuerNameHash;
    110 	ASN1_OCTET_STRING *issuerKeyHash;
    111 	ASN1_INTEGER *serialNumber;
    112 	} OCSP_CERTID;
    113 
    114 DECLARE_STACK_OF(OCSP_CERTID)
    115 
    116 /*   Request ::=     SEQUENCE {
    117  *       reqCert                    CertID,
    118  *       singleRequestExtensions    [0] EXPLICIT Extensions OPTIONAL }
    119  */
    120 typedef struct ocsp_one_request_st
    121 	{
    122 	OCSP_CERTID *reqCert;
    123 	STACK_OF(X509_EXTENSION) *singleRequestExtensions;
    124 	} OCSP_ONEREQ;
    125 
    126 DECLARE_STACK_OF(OCSP_ONEREQ)
    127 DECLARE_ASN1_SET_OF(OCSP_ONEREQ)
    128 
    129 
    130 /*   TBSRequest      ::=     SEQUENCE {
    131  *       version             [0] EXPLICIT Version DEFAULT v1,
    132  *       requestorName       [1] EXPLICIT GeneralName OPTIONAL,
    133  *       requestList             SEQUENCE OF Request,
    134  *       requestExtensions   [2] EXPLICIT Extensions OPTIONAL }
    135  */
    136 typedef struct ocsp_req_info_st
    137 	{
    138 	ASN1_INTEGER *version;
    139 	GENERAL_NAME *requestorName;
    140 	STACK_OF(OCSP_ONEREQ) *requestList;
    141 	STACK_OF(X509_EXTENSION) *requestExtensions;
    142 	} OCSP_REQINFO;
    143 
    144 /*   Signature       ::=     SEQUENCE {
    145  *       signatureAlgorithm   AlgorithmIdentifier,
    146  *       signature            BIT STRING,
    147  *       certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
    148  */
    149 typedef struct ocsp_signature_st
    150 	{
    151 	X509_ALGOR *signatureAlgorithm;
    152 	ASN1_BIT_STRING *signature;
    153 	STACK_OF(X509) *certs;
    154 	} OCSP_SIGNATURE;
    155 
    156 /*   OCSPRequest     ::=     SEQUENCE {
    157  *       tbsRequest                  TBSRequest,
    158  *       optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    159  */
    160 typedef struct ocsp_request_st
    161 	{
    162 	OCSP_REQINFO *tbsRequest;
    163 	OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */
    164 	} OCSP_REQUEST;
    165 
    166 /*   OCSPResponseStatus ::= ENUMERATED {
    167  *       successful            (0),      --Response has valid confirmations
    168  *       malformedRequest      (1),      --Illegal confirmation request
    169  *       internalError         (2),      --Internal error in issuer
    170  *       tryLater              (3),      --Try again later
    171  *                                       --(4) is not used
    172  *       sigRequired           (5),      --Must sign the request
    173  *       unauthorized          (6)       --Request unauthorized
    174  *   }
    175  */
    176 #define OCSP_RESPONSE_STATUS_SUCCESSFUL          0
    177 #define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST     1
    178 #define OCSP_RESPONSE_STATUS_INTERNALERROR        2
    179 #define OCSP_RESPONSE_STATUS_TRYLATER             3
    180 #define OCSP_RESPONSE_STATUS_SIGREQUIRED          5
    181 #define OCSP_RESPONSE_STATUS_UNAUTHORIZED         6
    182 
    183 /*   ResponseBytes ::=       SEQUENCE {
    184  *       responseType   OBJECT IDENTIFIER,
    185  *       response       OCTET STRING }
    186  */
    187 typedef struct ocsp_resp_bytes_st
    188 	{
    189 	ASN1_OBJECT *responseType;
    190 	ASN1_OCTET_STRING *response;
    191 	} OCSP_RESPBYTES;
    192 
    193 /*   OCSPResponse ::= SEQUENCE {
    194  *      responseStatus         OCSPResponseStatus,
    195  *      responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    196  */
    197 struct ocsp_response_st
    198 	{
    199 	ASN1_ENUMERATED *responseStatus;
    200 	OCSP_RESPBYTES  *responseBytes;
    201 	};
    202 
    203 /*   ResponderID ::= CHOICE {
    204  *      byName   [1] Name,
    205  *      byKey    [2] KeyHash }
    206  */
    207 #define V_OCSP_RESPID_NAME 0
    208 #define V_OCSP_RESPID_KEY  1
    209 struct ocsp_responder_id_st
    210 	{
    211 	int type;
    212 	union   {
    213 		X509_NAME* byName;
    214         	ASN1_OCTET_STRING *byKey;
    215 		} value;
    216 	};
    217 
    218 DECLARE_STACK_OF(OCSP_RESPID)
    219 DECLARE_ASN1_FUNCTIONS(OCSP_RESPID)
    220 
    221 /*   KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key
    222  *                            --(excluding the tag and length fields)
    223  */
    224 
    225 /*   RevokedInfo ::= SEQUENCE {
    226  *       revocationTime              GeneralizedTime,
    227  *       revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    228  */
    229 typedef struct ocsp_revoked_info_st
    230 	{
    231 	ASN1_GENERALIZEDTIME *revocationTime;
    232 	ASN1_ENUMERATED *revocationReason;
    233 	} OCSP_REVOKEDINFO;
    234 
    235 /*   CertStatus ::= CHOICE {
    236  *       good                [0]     IMPLICIT NULL,
    237  *       revoked             [1]     IMPLICIT RevokedInfo,
    238  *       unknown             [2]     IMPLICIT UnknownInfo }
    239  */
    240 #define V_OCSP_CERTSTATUS_GOOD    0
    241 #define V_OCSP_CERTSTATUS_REVOKED 1
    242 #define V_OCSP_CERTSTATUS_UNKNOWN 2
    243 typedef struct ocsp_cert_status_st
    244 	{
    245 	int type;
    246 	union	{
    247 		ASN1_NULL *good;
    248 		OCSP_REVOKEDINFO *revoked;
    249 		ASN1_NULL *unknown;
    250 		} value;
    251 	} OCSP_CERTSTATUS;
    252 
    253 /*   SingleResponse ::= SEQUENCE {
    254  *      certID                       CertID,
    255  *      certStatus                   CertStatus,
    256  *      thisUpdate                   GeneralizedTime,
    257  *      nextUpdate           [0]     EXPLICIT GeneralizedTime OPTIONAL,
    258  *      singleExtensions     [1]     EXPLICIT Extensions OPTIONAL }
    259  */
    260 typedef struct ocsp_single_response_st
    261 	{
    262 	OCSP_CERTID *certId;
    263 	OCSP_CERTSTATUS *certStatus;
    264 	ASN1_GENERALIZEDTIME *thisUpdate;
    265 	ASN1_GENERALIZEDTIME *nextUpdate;
    266 	STACK_OF(X509_EXTENSION) *singleExtensions;
    267 	} OCSP_SINGLERESP;
    268 
    269 DECLARE_STACK_OF(OCSP_SINGLERESP)
    270 DECLARE_ASN1_SET_OF(OCSP_SINGLERESP)
    271 
    272 /*   ResponseData ::= SEQUENCE {
    273  *      version              [0] EXPLICIT Version DEFAULT v1,
    274  *      responderID              ResponderID,
    275  *      producedAt               GeneralizedTime,
    276  *      responses                SEQUENCE OF SingleResponse,
    277  *      responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    278  */
    279 typedef struct ocsp_response_data_st
    280 	{
    281 	ASN1_INTEGER *version;
    282 	OCSP_RESPID  *responderId;
    283 	ASN1_GENERALIZEDTIME *producedAt;
    284 	STACK_OF(OCSP_SINGLERESP) *responses;
    285 	STACK_OF(X509_EXTENSION) *responseExtensions;
    286 	} OCSP_RESPDATA;
    287 
    288 /*   BasicOCSPResponse       ::= SEQUENCE {
    289  *      tbsResponseData      ResponseData,
    290  *      signatureAlgorithm   AlgorithmIdentifier,
    291  *      signature            BIT STRING,
    292  *      certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
    293  */
    294   /* Note 1:
    295      The value for "signature" is specified in the OCSP rfc2560 as follows:
    296      "The value for the signature SHALL be computed on the hash of the DER
    297      encoding ResponseData."  This means that you must hash the DER-encoded
    298      tbsResponseData, and then run it through a crypto-signing function, which
    299      will (at least w/RSA) do a hash-'n'-private-encrypt operation.  This seems
    300      a bit odd, but that's the spec.  Also note that the data structures do not
    301      leave anywhere to independently specify the algorithm used for the initial
    302      hash. So, we look at the signature-specification algorithm, and try to do
    303      something intelligent.	-- Kathy Weinhold, CertCo */
    304   /* Note 2:
    305      It seems that the mentioned passage from RFC 2560 (section 4.2.1) is open
    306      for interpretation.  I've done tests against another responder, and found
    307      that it doesn't do the double hashing that the RFC seems to say one
    308      should.  Therefore, all relevant functions take a flag saying which
    309      variant should be used.	-- Richard Levitte, OpenSSL team and CeloCom */
    310 typedef struct ocsp_basic_response_st
    311 	{
    312 	OCSP_RESPDATA *tbsResponseData;
    313 	X509_ALGOR *signatureAlgorithm;
    314 	ASN1_BIT_STRING *signature;
    315 	STACK_OF(X509) *certs;
    316 	} OCSP_BASICRESP;
    317 
    318 /*
    319  *   CRLReason ::= ENUMERATED {
    320  *        unspecified             (0),
    321  *        keyCompromise           (1),
    322  *        cACompromise            (2),
    323  *        affiliationChanged      (3),
    324  *        superseded              (4),
    325  *        cessationOfOperation    (5),
    326  *        certificateHold         (6),
    327  *        removeFromCRL           (8) }
    328  */
    329 #define OCSP_REVOKED_STATUS_NOSTATUS               -1
    330 #define OCSP_REVOKED_STATUS_UNSPECIFIED             0
    331 #define OCSP_REVOKED_STATUS_KEYCOMPROMISE           1
    332 #define OCSP_REVOKED_STATUS_CACOMPROMISE            2
    333 #define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED      3
    334 #define OCSP_REVOKED_STATUS_SUPERSEDED              4
    335 #define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION    5
    336 #define OCSP_REVOKED_STATUS_CERTIFICATEHOLD         6
    337 #define OCSP_REVOKED_STATUS_REMOVEFROMCRL           8
    338 
    339 /* CrlID ::= SEQUENCE {
    340  *     crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    341  *     crlNum               [1]     EXPLICIT INTEGER OPTIONAL,
    342  *     crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    343  */
    344 typedef struct ocsp_crl_id_st
    345         {
    346 	ASN1_IA5STRING *crlUrl;
    347 	ASN1_INTEGER *crlNum;
    348 	ASN1_GENERALIZEDTIME *crlTime;
    349         } OCSP_CRLID;
    350 
    351 /* ServiceLocator ::= SEQUENCE {
    352  *      issuer    Name,
    353  *      locator   AuthorityInfoAccessSyntax OPTIONAL }
    354  */
    355 typedef struct ocsp_service_locator_st
    356         {
    357 	X509_NAME* issuer;
    358 	STACK_OF(ACCESS_DESCRIPTION) *locator;
    359         } OCSP_SERVICELOC;
    360 
    361 #define PEM_STRING_OCSP_REQUEST	"OCSP REQUEST"
    362 #define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE"
    363 
    364 #define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p)
    365 
    366 #define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p)
    367 
    368 #define	PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \
    369      (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL)
    370 
    371 #define	PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\
    372      (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL)
    373 
    374 #define PEM_write_bio_OCSP_REQUEST(bp,o) \
    375     PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\
    376 			bp,(char *)o, NULL,NULL,0,NULL,NULL)
    377 
    378 #define PEM_write_bio_OCSP_RESPONSE(bp,o) \
    379     PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\
    380 			bp,(char *)o, NULL,NULL,0,NULL,NULL)
    381 
    382 #define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o)
    383 
    384 #define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o)
    385 
    386 #define OCSP_REQUEST_sign(o,pkey,md) \
    387 	ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\
    388 		o->optionalSignature->signatureAlgorithm,NULL,\
    389 	        o->optionalSignature->signature,o->tbsRequest,pkey,md)
    390 
    391 #define OCSP_BASICRESP_sign(o,pkey,md,d) \
    392 	ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\
    393 		o->signature,o->tbsResponseData,pkey,md)
    394 
    395 #define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\
    396         a->optionalSignature->signatureAlgorithm,\
    397 	a->optionalSignature->signature,a->tbsRequest,r)
    398 
    399 #define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\
    400 	a->signatureAlgorithm,a->signature,a->tbsResponseData,r)
    401 
    402 #define ASN1_BIT_STRING_digest(data,type,md,len) \
    403 	ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len)
    404 
    405 #define OCSP_CERTSTATUS_dup(cs)\
    406                 (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\
    407 		(char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs))
    408 
    409 OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id);
    410 
    411 OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, char *path, OCSP_REQUEST *req);
    412 OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, char *path, OCSP_REQUEST *req,
    413 								int maxline);
    414 int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx);
    415 void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx);
    416 int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req);
    417 int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx,
    418 		const char *name, const char *value);
    419 
    420 OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer);
    421 
    422 OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst,
    423 			      X509_NAME *issuerName,
    424 			      ASN1_BIT_STRING* issuerKey,
    425 			      ASN1_INTEGER *serialNumber);
    426 
    427 OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid);
    428 
    429 int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len);
    430 int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len);
    431 int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs);
    432 int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req);
    433 
    434 int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm);
    435 int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert);
    436 
    437 int OCSP_request_sign(OCSP_REQUEST   *req,
    438 		      X509           *signer,
    439 		      EVP_PKEY       *key,
    440 		      const EVP_MD   *dgst,
    441 		      STACK_OF(X509) *certs,
    442 		      unsigned long flags);
    443 
    444 int OCSP_response_status(OCSP_RESPONSE *resp);
    445 OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp);
    446 
    447 int OCSP_resp_count(OCSP_BASICRESP *bs);
    448 OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx);
    449 int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last);
    450 int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason,
    451 				ASN1_GENERALIZEDTIME **revtime,
    452 				ASN1_GENERALIZEDTIME **thisupd,
    453 				ASN1_GENERALIZEDTIME **nextupd);
    454 int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status,
    455 				int *reason,
    456 				ASN1_GENERALIZEDTIME **revtime,
    457 				ASN1_GENERALIZEDTIME **thisupd,
    458 				ASN1_GENERALIZEDTIME **nextupd);
    459 int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd,
    460 			ASN1_GENERALIZEDTIME *nextupd,
    461 			long sec, long maxsec);
    462 
    463 int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, X509_STORE *store, unsigned long flags);
    464 
    465 int OCSP_parse_url(char *url, char **phost, char **pport, char **ppath, int *pssl);
    466 
    467 int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
    468 int OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
    469 
    470 int OCSP_request_onereq_count(OCSP_REQUEST *req);
    471 OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i);
    472 OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one);
    473 int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd,
    474 			ASN1_OCTET_STRING **pikeyHash,
    475 			ASN1_INTEGER **pserial, OCSP_CERTID *cid);
    476 int OCSP_request_is_signed(OCSP_REQUEST *req);
    477 OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs);
    478 OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp,
    479 						OCSP_CERTID *cid,
    480 						int status, int reason,
    481 						ASN1_TIME *revtime,
    482 					ASN1_TIME *thisupd, ASN1_TIME *nextupd);
    483 int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert);
    484 int OCSP_basic_sign(OCSP_BASICRESP *brsp,
    485 			X509 *signer, EVP_PKEY *key, const EVP_MD *dgst,
    486 			STACK_OF(X509) *certs, unsigned long flags);
    487 
    488 X509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim);
    489 
    490 X509_EXTENSION *OCSP_accept_responses_new(char **oids);
    491 
    492 X509_EXTENSION *OCSP_archive_cutoff_new(char* tim);
    493 
    494 X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME* issuer, char **urls);
    495 
    496 int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x);
    497 int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos);
    498 int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj, int lastpos);
    499 int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos);
    500 X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc);
    501 X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc);
    502 void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, int *idx);
    503 int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit,
    504 							unsigned long flags);
    505 int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc);
    506 
    507 int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x);
    508 int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos);
    509 int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos);
    510 int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos);
    511 X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc);
    512 X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc);
    513 void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx);
    514 int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit,
    515 							unsigned long flags);
    516 int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc);
    517 
    518 int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x);
    519 int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos);
    520 int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj, int lastpos);
    521 int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, int lastpos);
    522 X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc);
    523 X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc);
    524 void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, int *idx);
    525 int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, int crit,
    526 							unsigned long flags);
    527 int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc);
    528 
    529 int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x);
    530 int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos);
    531 int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj, int lastpos);
    532 int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, int lastpos);
    533 X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc);
    534 X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc);
    535 void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, int *idx);
    536 int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, int crit,
    537 							unsigned long flags);
    538 int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc);
    539 
    540 DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP)
    541 DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS)
    542 DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO)
    543 DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP)
    544 DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA)
    545 DECLARE_ASN1_FUNCTIONS(OCSP_RESPID)
    546 DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE)
    547 DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES)
    548 DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ)
    549 DECLARE_ASN1_FUNCTIONS(OCSP_CERTID)
    550 DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST)
    551 DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE)
    552 DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO)
    553 DECLARE_ASN1_FUNCTIONS(OCSP_CRLID)
    554 DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC)
    555 
    556 const char *OCSP_response_status_str(long s);
    557 const char *OCSP_cert_status_str(long s);
    558 const char *OCSP_crl_reason_str(long s);
    559 
    560 int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST* a, unsigned long flags);
    561 int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE* o, unsigned long flags);
    562 
    563 int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
    564 				X509_STORE *st, unsigned long flags);
    565 
    566 /* BEGIN ERROR CODES */
    567 /* The following lines are auto generated by the script mkerr.pl. Any changes
    568  * made after this point may be overwritten when the script is next run.
    569  */
    570 void ERR_load_OCSP_strings(void);
    571 
    572 /* Error codes for the OCSP functions. */
    573 
    574 /* Function codes. */
    575 #define OCSP_F_ASN1_STRING_ENCODE			 100
    576 #define OCSP_F_D2I_OCSP_NONCE				 102
    577 #define OCSP_F_OCSP_BASIC_ADD1_STATUS			 103
    578 #define OCSP_F_OCSP_BASIC_SIGN				 104
    579 #define OCSP_F_OCSP_BASIC_VERIFY			 105
    580 #define OCSP_F_OCSP_CERT_ID_NEW				 101
    581 #define OCSP_F_OCSP_CHECK_DELEGATED			 106
    582 #define OCSP_F_OCSP_CHECK_IDS				 107
    583 #define OCSP_F_OCSP_CHECK_ISSUER			 108
    584 #define OCSP_F_OCSP_CHECK_VALIDITY			 115
    585 #define OCSP_F_OCSP_MATCH_ISSUERID			 109
    586 #define OCSP_F_OCSP_PARSE_URL				 114
    587 #define OCSP_F_OCSP_REQUEST_SIGN			 110
    588 #define OCSP_F_OCSP_REQUEST_VERIFY			 116
    589 #define OCSP_F_OCSP_RESPONSE_GET1_BASIC			 111
    590 #define OCSP_F_OCSP_SENDREQ_BIO				 112
    591 #define OCSP_F_OCSP_SENDREQ_NBIO			 117
    592 #define OCSP_F_PARSE_HTTP_LINE1				 118
    593 #define OCSP_F_REQUEST_VERIFY				 113
    594 
    595 /* Reason codes. */
    596 #define OCSP_R_BAD_DATA					 100
    597 #define OCSP_R_CERTIFICATE_VERIFY_ERROR			 101
    598 #define OCSP_R_DIGEST_ERR				 102
    599 #define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD		 122
    600 #define OCSP_R_ERROR_IN_THISUPDATE_FIELD		 123
    601 #define OCSP_R_ERROR_PARSING_URL			 121
    602 #define OCSP_R_MISSING_OCSPSIGNING_USAGE		 103
    603 #define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE		 124
    604 #define OCSP_R_NOT_BASIC_RESPONSE			 104
    605 #define OCSP_R_NO_CERTIFICATES_IN_CHAIN			 105
    606 #define OCSP_R_NO_CONTENT				 106
    607 #define OCSP_R_NO_PUBLIC_KEY				 107
    608 #define OCSP_R_NO_RESPONSE_DATA				 108
    609 #define OCSP_R_NO_REVOKED_TIME				 109
    610 #define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE	 110
    611 #define OCSP_R_REQUEST_NOT_SIGNED			 128
    612 #define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA	 111
    613 #define OCSP_R_ROOT_CA_NOT_TRUSTED			 112
    614 #define OCSP_R_SERVER_READ_ERROR			 113
    615 #define OCSP_R_SERVER_RESPONSE_ERROR			 114
    616 #define OCSP_R_SERVER_RESPONSE_PARSE_ERROR		 115
    617 #define OCSP_R_SERVER_WRITE_ERROR			 116
    618 #define OCSP_R_SIGNATURE_FAILURE			 117
    619 #define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND		 118
    620 #define OCSP_R_STATUS_EXPIRED				 125
    621 #define OCSP_R_STATUS_NOT_YET_VALID			 126
    622 #define OCSP_R_STATUS_TOO_OLD				 127
    623 #define OCSP_R_UNKNOWN_MESSAGE_DIGEST			 119
    624 #define OCSP_R_UNKNOWN_NID				 120
    625 #define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE		 129
    626 
    627 #ifdef  __cplusplus
    628 }
    629 #endif
    630 #endif
    631