1109998Smarkm/* ocsp.h */
2296465Sdelphij/*
3296465Sdelphij * Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL
4296465Sdelphij * project.
5296465Sdelphij */
6109998Smarkm
7296465Sdelphij/*
8296465Sdelphij * History: This file was transfered to Richard Levitte from CertCo by Kathy
9296465Sdelphij * Weinhold in mid-spring 2000 to be included in OpenSSL or released as a
10296465Sdelphij * patch kit.
11296465Sdelphij */
12109998Smarkm
13109998Smarkm/* ====================================================================
14109998Smarkm * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.
15109998Smarkm *
16109998Smarkm * Redistribution and use in source and binary forms, with or without
17109998Smarkm * modification, are permitted provided that the following conditions
18109998Smarkm * are met:
19109998Smarkm *
20109998Smarkm * 1. Redistributions of source code must retain the above copyright
21296465Sdelphij *    notice, this list of conditions and the following disclaimer.
22109998Smarkm *
23109998Smarkm * 2. Redistributions in binary form must reproduce the above copyright
24109998Smarkm *    notice, this list of conditions and the following disclaimer in
25109998Smarkm *    the documentation and/or other materials provided with the
26109998Smarkm *    distribution.
27109998Smarkm *
28109998Smarkm * 3. All advertising materials mentioning features or use of this
29109998Smarkm *    software must display the following acknowledgment:
30109998Smarkm *    "This product includes software developed by the OpenSSL Project
31109998Smarkm *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
32109998Smarkm *
33109998Smarkm * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
34109998Smarkm *    endorse or promote products derived from this software without
35109998Smarkm *    prior written permission. For written permission, please contact
36109998Smarkm *    openssl-core@openssl.org.
37109998Smarkm *
38109998Smarkm * 5. Products derived from this software may not be called "OpenSSL"
39109998Smarkm *    nor may "OpenSSL" appear in their names without prior written
40109998Smarkm *    permission of the OpenSSL Project.
41109998Smarkm *
42109998Smarkm * 6. Redistributions of any form whatsoever must retain the following
43109998Smarkm *    acknowledgment:
44109998Smarkm *    "This product includes software developed by the OpenSSL Project
45109998Smarkm *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
46109998Smarkm *
47109998Smarkm * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
48109998Smarkm * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49109998Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
50109998Smarkm * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
51109998Smarkm * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
52109998Smarkm * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
53109998Smarkm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
54109998Smarkm * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55109998Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
56109998Smarkm * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
57109998Smarkm * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
58109998Smarkm * OF THE POSSIBILITY OF SUCH DAMAGE.
59109998Smarkm * ====================================================================
60109998Smarkm *
61109998Smarkm * This product includes cryptographic software written by Eric Young
62109998Smarkm * (eay@cryptsoft.com).  This product includes software written by Tim
63109998Smarkm * Hudson (tjh@cryptsoft.com).
64109998Smarkm *
65109998Smarkm */
66109998Smarkm
67109998Smarkm#ifndef HEADER_OCSP_H
68296465Sdelphij# define HEADER_OCSP_H
69109998Smarkm
70296465Sdelphij# include <openssl/x509.h>
71296465Sdelphij# include <openssl/x509v3.h>
72296465Sdelphij# include <openssl/safestack.h>
73109998Smarkm
74109998Smarkm#ifdef  __cplusplus
75109998Smarkmextern "C" {
76109998Smarkm#endif
77109998Smarkm
78109998Smarkm/* Various flags and values */
79109998Smarkm
80296465Sdelphij# define OCSP_DEFAULT_NONCE_LENGTH       16
81109998Smarkm
82296465Sdelphij# define OCSP_NOCERTS                    0x1
83296465Sdelphij# define OCSP_NOINTERN                   0x2
84296465Sdelphij# define OCSP_NOSIGS                     0x4
85296465Sdelphij# define OCSP_NOCHAIN                    0x8
86296465Sdelphij# define OCSP_NOVERIFY                   0x10
87296465Sdelphij# define OCSP_NOEXPLICIT                 0x20
88296465Sdelphij# define OCSP_NOCASIGN                   0x40
89296465Sdelphij# define OCSP_NODELEGATED                0x80
90296465Sdelphij# define OCSP_NOCHECKS                   0x100
91296465Sdelphij# define OCSP_TRUSTOTHER                 0x200
92296465Sdelphij# define OCSP_RESPID_KEY                 0x400
93296465Sdelphij# define OCSP_NOTIME                     0x800
94109998Smarkm
95296465Sdelphij/*-  CertID ::= SEQUENCE {
96109998Smarkm *       hashAlgorithm            AlgorithmIdentifier,
97109998Smarkm *       issuerNameHash     OCTET STRING, -- Hash of Issuer's DN
98109998Smarkm *       issuerKeyHash      OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields)
99109998Smarkm *       serialNumber       CertificateSerialNumber }
100109998Smarkm */
101296465Sdelphijtypedef struct ocsp_cert_id_st {
102296465Sdelphij    X509_ALGOR *hashAlgorithm;
103296465Sdelphij    ASN1_OCTET_STRING *issuerNameHash;
104296465Sdelphij    ASN1_OCTET_STRING *issuerKeyHash;
105296465Sdelphij    ASN1_INTEGER *serialNumber;
106296465Sdelphij} OCSP_CERTID;
107109998Smarkm
108109998SmarkmDECLARE_STACK_OF(OCSP_CERTID)
109109998Smarkm
110296465Sdelphij/*-  Request ::=     SEQUENCE {
111109998Smarkm *       reqCert                    CertID,
112109998Smarkm *       singleRequestExtensions    [0] EXPLICIT Extensions OPTIONAL }
113109998Smarkm */
114296465Sdelphijtypedef struct ocsp_one_request_st {
115296465Sdelphij    OCSP_CERTID *reqCert;
116296465Sdelphij    STACK_OF(X509_EXTENSION) *singleRequestExtensions;
117296465Sdelphij} OCSP_ONEREQ;
118109998Smarkm
119109998SmarkmDECLARE_STACK_OF(OCSP_ONEREQ)
120109998SmarkmDECLARE_ASN1_SET_OF(OCSP_ONEREQ)
121109998Smarkm
122296465Sdelphij/*-  TBSRequest      ::=     SEQUENCE {
123109998Smarkm *       version             [0] EXPLICIT Version DEFAULT v1,
124109998Smarkm *       requestorName       [1] EXPLICIT GeneralName OPTIONAL,
125109998Smarkm *       requestList             SEQUENCE OF Request,
126109998Smarkm *       requestExtensions   [2] EXPLICIT Extensions OPTIONAL }
127109998Smarkm */
128296465Sdelphijtypedef struct ocsp_req_info_st {
129296465Sdelphij    ASN1_INTEGER *version;
130296465Sdelphij    GENERAL_NAME *requestorName;
131296465Sdelphij    STACK_OF(OCSP_ONEREQ) *requestList;
132296465Sdelphij    STACK_OF(X509_EXTENSION) *requestExtensions;
133296465Sdelphij} OCSP_REQINFO;
134109998Smarkm
135296465Sdelphij/*-  Signature       ::=     SEQUENCE {
136109998Smarkm *       signatureAlgorithm   AlgorithmIdentifier,
137109998Smarkm *       signature            BIT STRING,
138109998Smarkm *       certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
139109998Smarkm */
140296465Sdelphijtypedef struct ocsp_signature_st {
141296465Sdelphij    X509_ALGOR *signatureAlgorithm;
142296465Sdelphij    ASN1_BIT_STRING *signature;
143296465Sdelphij    STACK_OF(X509) *certs;
144296465Sdelphij} OCSP_SIGNATURE;
145109998Smarkm
146296465Sdelphij/*-  OCSPRequest     ::=     SEQUENCE {
147109998Smarkm *       tbsRequest                  TBSRequest,
148109998Smarkm *       optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
149109998Smarkm */
150296465Sdelphijtypedef struct ocsp_request_st {
151296465Sdelphij    OCSP_REQINFO *tbsRequest;
152296465Sdelphij    OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */
153296465Sdelphij} OCSP_REQUEST;
154109998Smarkm
155296465Sdelphij/*-  OCSPResponseStatus ::= ENUMERATED {
156109998Smarkm *       successful            (0),      --Response has valid confirmations
157109998Smarkm *       malformedRequest      (1),      --Illegal confirmation request
158109998Smarkm *       internalError         (2),      --Internal error in issuer
159109998Smarkm *       tryLater              (3),      --Try again later
160109998Smarkm *                                       --(4) is not used
161109998Smarkm *       sigRequired           (5),      --Must sign the request
162109998Smarkm *       unauthorized          (6)       --Request unauthorized
163109998Smarkm *   }
164109998Smarkm */
165296465Sdelphij# define OCSP_RESPONSE_STATUS_SUCCESSFUL          0
166296465Sdelphij# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST     1
167296465Sdelphij# define OCSP_RESPONSE_STATUS_INTERNALERROR        2
168296465Sdelphij# define OCSP_RESPONSE_STATUS_TRYLATER             3
169296465Sdelphij# define OCSP_RESPONSE_STATUS_SIGREQUIRED          5
170296465Sdelphij# define OCSP_RESPONSE_STATUS_UNAUTHORIZED         6
171109998Smarkm
172296465Sdelphij/*-  ResponseBytes ::=       SEQUENCE {
173109998Smarkm *       responseType   OBJECT IDENTIFIER,
174109998Smarkm *       response       OCTET STRING }
175109998Smarkm */
176296465Sdelphijtypedef struct ocsp_resp_bytes_st {
177296465Sdelphij    ASN1_OBJECT *responseType;
178296465Sdelphij    ASN1_OCTET_STRING *response;
179296465Sdelphij} OCSP_RESPBYTES;
180109998Smarkm
181296465Sdelphij/*-  OCSPResponse ::= SEQUENCE {
182109998Smarkm *      responseStatus         OCSPResponseStatus,
183109998Smarkm *      responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
184109998Smarkm */
185296465Sdelphijstruct ocsp_response_st {
186296465Sdelphij    ASN1_ENUMERATED *responseStatus;
187296465Sdelphij    OCSP_RESPBYTES *responseBytes;
188296465Sdelphij};
189109998Smarkm
190296465Sdelphij/*-  ResponderID ::= CHOICE {
191109998Smarkm *      byName   [1] Name,
192109998Smarkm *      byKey    [2] KeyHash }
193109998Smarkm */
194296465Sdelphij# define V_OCSP_RESPID_NAME 0
195296465Sdelphij# define V_OCSP_RESPID_KEY  1
196296465Sdelphijstruct ocsp_responder_id_st {
197296465Sdelphij    int type;
198296465Sdelphij    union {
199296465Sdelphij        X509_NAME *byName;
200296465Sdelphij        ASN1_OCTET_STRING *byKey;
201296465Sdelphij    } value;
202296465Sdelphij};
203194206Ssimon
204194206SsimonDECLARE_STACK_OF(OCSP_RESPID)
205194206SsimonDECLARE_ASN1_FUNCTIONS(OCSP_RESPID)
206194206Ssimon
207296465Sdelphij/*-  KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key
208109998Smarkm *                            --(excluding the tag and length fields)
209109998Smarkm */
210109998Smarkm
211296465Sdelphij/*-  RevokedInfo ::= SEQUENCE {
212109998Smarkm *       revocationTime              GeneralizedTime,
213109998Smarkm *       revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
214109998Smarkm */
215296465Sdelphijtypedef struct ocsp_revoked_info_st {
216296465Sdelphij    ASN1_GENERALIZEDTIME *revocationTime;
217296465Sdelphij    ASN1_ENUMERATED *revocationReason;
218296465Sdelphij} OCSP_REVOKEDINFO;
219109998Smarkm
220296465Sdelphij/*-  CertStatus ::= CHOICE {
221109998Smarkm *       good                [0]     IMPLICIT NULL,
222109998Smarkm *       revoked             [1]     IMPLICIT RevokedInfo,
223109998Smarkm *       unknown             [2]     IMPLICIT UnknownInfo }
224109998Smarkm */
225296465Sdelphij# define V_OCSP_CERTSTATUS_GOOD    0
226296465Sdelphij# define V_OCSP_CERTSTATUS_REVOKED 1
227296465Sdelphij# define V_OCSP_CERTSTATUS_UNKNOWN 2
228296465Sdelphijtypedef struct ocsp_cert_status_st {
229296465Sdelphij    int type;
230296465Sdelphij    union {
231296465Sdelphij        ASN1_NULL *good;
232296465Sdelphij        OCSP_REVOKEDINFO *revoked;
233296465Sdelphij        ASN1_NULL *unknown;
234296465Sdelphij    } value;
235296465Sdelphij} OCSP_CERTSTATUS;
236109998Smarkm
237296465Sdelphij/*-  SingleResponse ::= SEQUENCE {
238109998Smarkm *      certID                       CertID,
239109998Smarkm *      certStatus                   CertStatus,
240109998Smarkm *      thisUpdate                   GeneralizedTime,
241109998Smarkm *      nextUpdate           [0]     EXPLICIT GeneralizedTime OPTIONAL,
242109998Smarkm *      singleExtensions     [1]     EXPLICIT Extensions OPTIONAL }
243109998Smarkm */
244296465Sdelphijtypedef struct ocsp_single_response_st {
245296465Sdelphij    OCSP_CERTID *certId;
246296465Sdelphij    OCSP_CERTSTATUS *certStatus;
247296465Sdelphij    ASN1_GENERALIZEDTIME *thisUpdate;
248296465Sdelphij    ASN1_GENERALIZEDTIME *nextUpdate;
249296465Sdelphij    STACK_OF(X509_EXTENSION) *singleExtensions;
250296465Sdelphij} OCSP_SINGLERESP;
251109998Smarkm
252109998SmarkmDECLARE_STACK_OF(OCSP_SINGLERESP)
253109998SmarkmDECLARE_ASN1_SET_OF(OCSP_SINGLERESP)
254109998Smarkm
255296465Sdelphij/*-  ResponseData ::= SEQUENCE {
256109998Smarkm *      version              [0] EXPLICIT Version DEFAULT v1,
257109998Smarkm *      responderID              ResponderID,
258109998Smarkm *      producedAt               GeneralizedTime,
259109998Smarkm *      responses                SEQUENCE OF SingleResponse,
260109998Smarkm *      responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
261109998Smarkm */
262296465Sdelphijtypedef struct ocsp_response_data_st {
263296465Sdelphij    ASN1_INTEGER *version;
264296465Sdelphij    OCSP_RESPID *responderId;
265296465Sdelphij    ASN1_GENERALIZEDTIME *producedAt;
266296465Sdelphij    STACK_OF(OCSP_SINGLERESP) *responses;
267296465Sdelphij    STACK_OF(X509_EXTENSION) *responseExtensions;
268296465Sdelphij} OCSP_RESPDATA;
269109998Smarkm
270296465Sdelphij/*-  BasicOCSPResponse       ::= SEQUENCE {
271109998Smarkm *      tbsResponseData      ResponseData,
272109998Smarkm *      signatureAlgorithm   AlgorithmIdentifier,
273109998Smarkm *      signature            BIT STRING,
274109998Smarkm *      certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
275109998Smarkm */
276296465Sdelphij  /*
277296465Sdelphij   * Note 1: The value for "signature" is specified in the OCSP rfc2560 as
278296465Sdelphij   * follows: "The value for the signature SHALL be computed on the hash of
279296465Sdelphij   * the DER encoding ResponseData." This means that you must hash the
280296465Sdelphij   * DER-encoded tbsResponseData, and then run it through a crypto-signing
281296465Sdelphij   * function, which will (at least w/RSA) do a hash-'n'-private-encrypt
282296465Sdelphij   * operation.  This seems a bit odd, but that's the spec.  Also note that
283296465Sdelphij   * the data structures do not leave anywhere to independently specify the
284296465Sdelphij   * algorithm used for the initial hash. So, we look at the
285296465Sdelphij   * signature-specification algorithm, and try to do something intelligent.
286296465Sdelphij   * -- Kathy Weinhold, CertCo
287296465Sdelphij   */
288296465Sdelphij  /*
289296465Sdelphij   * Note 2: It seems that the mentioned passage from RFC 2560 (section
290296465Sdelphij   * 4.2.1) is open for interpretation.  I've done tests against another
291296465Sdelphij   * responder, and found that it doesn't do the double hashing that the RFC
292296465Sdelphij   * seems to say one should.  Therefore, all relevant functions take a flag
293296465Sdelphij   * saying which variant should be used.  -- Richard Levitte, OpenSSL team
294296465Sdelphij   * and CeloCom
295296465Sdelphij   */
296296465Sdelphijtypedef struct ocsp_basic_response_st {
297296465Sdelphij    OCSP_RESPDATA *tbsResponseData;
298296465Sdelphij    X509_ALGOR *signatureAlgorithm;
299296465Sdelphij    ASN1_BIT_STRING *signature;
300296465Sdelphij    STACK_OF(X509) *certs;
301296465Sdelphij} OCSP_BASICRESP;
302109998Smarkm
303296465Sdelphij/*-
304109998Smarkm *   CRLReason ::= ENUMERATED {
305109998Smarkm *        unspecified             (0),
306109998Smarkm *        keyCompromise           (1),
307109998Smarkm *        cACompromise            (2),
308109998Smarkm *        affiliationChanged      (3),
309109998Smarkm *        superseded              (4),
310109998Smarkm *        cessationOfOperation    (5),
311109998Smarkm *        certificateHold         (6),
312109998Smarkm *        removeFromCRL           (8) }
313109998Smarkm */
314296465Sdelphij# define OCSP_REVOKED_STATUS_NOSTATUS               -1
315296465Sdelphij# define OCSP_REVOKED_STATUS_UNSPECIFIED             0
316296465Sdelphij# define OCSP_REVOKED_STATUS_KEYCOMPROMISE           1
317296465Sdelphij# define OCSP_REVOKED_STATUS_CACOMPROMISE            2
318296465Sdelphij# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED      3
319296465Sdelphij# define OCSP_REVOKED_STATUS_SUPERSEDED              4
320296465Sdelphij# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION    5
321296465Sdelphij# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD         6
322296465Sdelphij# define OCSP_REVOKED_STATUS_REMOVEFROMCRL           8
323109998Smarkm
324296465Sdelphij/*-
325296465Sdelphij * CrlID ::= SEQUENCE {
326109998Smarkm *     crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
327109998Smarkm *     crlNum               [1]     EXPLICIT INTEGER OPTIONAL,
328109998Smarkm *     crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
329109998Smarkm */
330296465Sdelphijtypedef struct ocsp_crl_id_st {
331296465Sdelphij    ASN1_IA5STRING *crlUrl;
332296465Sdelphij    ASN1_INTEGER *crlNum;
333296465Sdelphij    ASN1_GENERALIZEDTIME *crlTime;
334296465Sdelphij} OCSP_CRLID;
335109998Smarkm
336296465Sdelphij/*-
337296465Sdelphij * ServiceLocator ::= SEQUENCE {
338109998Smarkm *      issuer    Name,
339109998Smarkm *      locator   AuthorityInfoAccessSyntax OPTIONAL }
340109998Smarkm */
341296465Sdelphijtypedef struct ocsp_service_locator_st {
342296465Sdelphij    X509_NAME *issuer;
343296465Sdelphij    STACK_OF(ACCESS_DESCRIPTION) *locator;
344296465Sdelphij} OCSP_SERVICELOC;
345109998Smarkm
346296465Sdelphij# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST"
347296465Sdelphij# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE"
348109998Smarkm
349296465Sdelphij# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p)
350109998Smarkm
351296465Sdelphij# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p)
352296465Sdelphij
353296465Sdelphij# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \
354109998Smarkm     (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL)
355109998Smarkm
356296465Sdelphij# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\
357109998Smarkm     (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL)
358109998Smarkm
359296465Sdelphij# define PEM_write_bio_OCSP_REQUEST(bp,o) \
360109998Smarkm    PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\
361296465Sdelphij                        bp,(char *)o, NULL,NULL,0,NULL,NULL)
362109998Smarkm
363296465Sdelphij# define PEM_write_bio_OCSP_RESPONSE(bp,o) \
364109998Smarkm    PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\
365296465Sdelphij                        bp,(char *)o, NULL,NULL,0,NULL,NULL)
366109998Smarkm
367296465Sdelphij# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o)
368109998Smarkm
369296465Sdelphij# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o)
370109998Smarkm
371296465Sdelphij# define OCSP_REQUEST_sign(o,pkey,md) \
372296465Sdelphij        ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\
373296465Sdelphij                o->optionalSignature->signatureAlgorithm,NULL,\
374296465Sdelphij                o->optionalSignature->signature,o->tbsRequest,pkey,md)
375109998Smarkm
376296465Sdelphij# define OCSP_BASICRESP_sign(o,pkey,md,d) \
377296465Sdelphij        ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\
378296465Sdelphij                o->signature,o->tbsResponseData,pkey,md)
379109998Smarkm
380296465Sdelphij# define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\
381109998Smarkm        a->optionalSignature->signatureAlgorithm,\
382296465Sdelphij        a->optionalSignature->signature,a->tbsRequest,r)
383109998Smarkm
384296465Sdelphij# define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\
385296465Sdelphij        a->signatureAlgorithm,a->signature,a->tbsResponseData,r)
386109998Smarkm
387296465Sdelphij# define ASN1_BIT_STRING_digest(data,type,md,len) \
388296465Sdelphij        ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len)
389109998Smarkm
390296465Sdelphij# define OCSP_CERTID_dup(cid) ASN1_dup_of(OCSP_CERTID,i2d_OCSP_CERTID,d2i_OCSP_CERTID,cid)
391109998Smarkm
392296465Sdelphij# define OCSP_CERTSTATUS_dup(cs)\
393109998Smarkm                (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\
394296465Sdelphij                (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs))
395109998Smarkm
396109998SmarkmOCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, char *path, OCSP_REQUEST *req);
397194206SsimonOCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, char *path, OCSP_REQUEST *req,
398296465Sdelphij                               int maxline);
399194206Ssimonint OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx);
400194206Ssimonvoid OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx);
401109998Smarkm
402109998SmarkmOCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer);
403109998Smarkm
404296465SdelphijOCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst,
405296465Sdelphij                              X509_NAME *issuerName,
406296465Sdelphij                              ASN1_BIT_STRING *issuerKey,
407296465Sdelphij                              ASN1_INTEGER *serialNumber);
408109998Smarkm
409109998SmarkmOCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid);
410109998Smarkm
411109998Smarkmint OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len);
412109998Smarkmint OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len);
413109998Smarkmint OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs);
414109998Smarkmint OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req);
415109998Smarkm
416109998Smarkmint OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm);
417109998Smarkmint OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert);
418109998Smarkm
419296465Sdelphijint OCSP_request_sign(OCSP_REQUEST *req,
420296465Sdelphij                      X509 *signer,
421296465Sdelphij                      EVP_PKEY *key,
422296465Sdelphij                      const EVP_MD *dgst,
423296465Sdelphij                      STACK_OF(X509) *certs, unsigned long flags);
424109998Smarkm
425109998Smarkmint OCSP_response_status(OCSP_RESPONSE *resp);
426109998SmarkmOCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp);
427109998Smarkm
428109998Smarkmint OCSP_resp_count(OCSP_BASICRESP *bs);
429109998SmarkmOCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx);
430109998Smarkmint OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last);
431109998Smarkmint OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason,
432296465Sdelphij                            ASN1_GENERALIZEDTIME **revtime,
433296465Sdelphij                            ASN1_GENERALIZEDTIME **thisupd,
434296465Sdelphij                            ASN1_GENERALIZEDTIME **nextupd);
435109998Smarkmint OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status,
436296465Sdelphij                          int *reason,
437296465Sdelphij                          ASN1_GENERALIZEDTIME **revtime,
438296465Sdelphij                          ASN1_GENERALIZEDTIME **thisupd,
439296465Sdelphij                          ASN1_GENERALIZEDTIME **nextupd);
440109998Smarkmint OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd,
441296465Sdelphij                        ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec);
442109998Smarkm
443296465Sdelphijint OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs,
444296465Sdelphij                        X509_STORE *store, unsigned long flags);
445109998Smarkm
446296465Sdelphijint OCSP_parse_url(char *url, char **phost, char **pport, char **ppath,
447296465Sdelphij                   int *pssl);
448109998Smarkm
449109998Smarkmint OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
450109998Smarkmint OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
451109998Smarkm
452109998Smarkmint OCSP_request_onereq_count(OCSP_REQUEST *req);
453109998SmarkmOCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i);
454109998SmarkmOCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one);
455109998Smarkmint OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd,
456296465Sdelphij                      ASN1_OCTET_STRING **pikeyHash,
457296465Sdelphij                      ASN1_INTEGER **pserial, OCSP_CERTID *cid);
458109998Smarkmint OCSP_request_is_signed(OCSP_REQUEST *req);
459109998SmarkmOCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs);
460109998SmarkmOCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp,
461296465Sdelphij                                        OCSP_CERTID *cid,
462296465Sdelphij                                        int status, int reason,
463296465Sdelphij                                        ASN1_TIME *revtime,
464296465Sdelphij                                        ASN1_TIME *thisupd,
465296465Sdelphij                                        ASN1_TIME *nextupd);
466109998Smarkmint OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert);
467296465Sdelphijint OCSP_basic_sign(OCSP_BASICRESP *brsp,
468296465Sdelphij                    X509 *signer, EVP_PKEY *key, const EVP_MD *dgst,
469296465Sdelphij                    STACK_OF(X509) *certs, unsigned long flags);
470109998Smarkm
471160814SsimonASN1_STRING *ASN1_STRING_encode(ASN1_STRING *s, i2d_of_void *i2d,
472296465Sdelphij                                void *data, STACK_OF(ASN1_OBJECT) *sk);
473296465Sdelphij# define ASN1_STRING_encode_of(type,s,i2d,data,sk) \
474296465Sdelphij        ASN1_STRING_encode(s, CHECKED_I2D_OF(type, i2d), data, sk)
475109998Smarkm
476109998SmarkmX509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim);
477109998Smarkm
478109998SmarkmX509_EXTENSION *OCSP_accept_responses_new(char **oids);
479109998Smarkm
480296465SdelphijX509_EXTENSION *OCSP_archive_cutoff_new(char *tim);
481109998Smarkm
482296465SdelphijX509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, char **urls);
483109998Smarkm
484109998Smarkmint OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x);
485109998Smarkmint OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos);
486296465Sdelphijint OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj,
487296465Sdelphij                                int lastpos);
488109998Smarkmint OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos);
489109998SmarkmX509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc);
490109998SmarkmX509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc);
491296465Sdelphijvoid *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit,
492296465Sdelphij                                int *idx);
493109998Smarkmint OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit,
494296465Sdelphij                              unsigned long flags);
495109998Smarkmint OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc);
496109998Smarkm
497109998Smarkmint OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x);
498109998Smarkmint OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos);
499109998Smarkmint OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos);
500109998Smarkmint OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos);
501109998SmarkmX509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc);
502109998SmarkmX509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc);
503109998Smarkmvoid *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx);
504109998Smarkmint OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit,
505296465Sdelphij                             unsigned long flags);
506109998Smarkmint OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc);
507109998Smarkm
508109998Smarkmint OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x);
509109998Smarkmint OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos);
510296465Sdelphijint OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj,
511296465Sdelphij                                  int lastpos);
512296465Sdelphijint OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit,
513296465Sdelphij                                       int lastpos);
514109998SmarkmX509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc);
515109998SmarkmX509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc);
516296465Sdelphijvoid *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit,
517296465Sdelphij                                  int *idx);
518296465Sdelphijint OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value,
519296465Sdelphij                                int crit, unsigned long flags);
520109998Smarkmint OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc);
521109998Smarkm
522109998Smarkmint OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x);
523109998Smarkmint OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos);
524296465Sdelphijint OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj,
525296465Sdelphij                                   int lastpos);
526296465Sdelphijint OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit,
527296465Sdelphij                                        int lastpos);
528109998SmarkmX509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc);
529109998SmarkmX509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc);
530296465Sdelphijvoid *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit,
531296465Sdelphij                                   int *idx);
532296465Sdelphijint OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value,
533296465Sdelphij                                 int crit, unsigned long flags);
534109998Smarkmint OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc);
535109998Smarkm
536109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP)
537109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS)
538109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO)
539109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP)
540109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA)
541109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_RESPID)
542109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE)
543109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES)
544109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ)
545109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_CERTID)
546109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_REQUEST)
547109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE)
548109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_REQINFO)
549109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_CRLID)
550109998SmarkmDECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC)
551109998Smarkm
552109998Smarkmchar *OCSP_response_status_str(long s);
553109998Smarkmchar *OCSP_cert_status_str(long s);
554109998Smarkmchar *OCSP_crl_reason_str(long s);
555109998Smarkm
556296465Sdelphijint OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags);
557296465Sdelphijint OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags);
558109998Smarkm
559109998Smarkmint OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
560296465Sdelphij                      X509_STORE *st, unsigned long flags);
561109998Smarkm
562109998Smarkm/* BEGIN ERROR CODES */
563296465Sdelphij/*
564296465Sdelphij * The following lines are auto generated by the script mkerr.pl. Any changes
565109998Smarkm * made after this point may be overwritten when the script is next run.
566109998Smarkm */
567109998Smarkmvoid ERR_load_OCSP_strings(void);
568109998Smarkm
569109998Smarkm/* Error codes for the OCSP functions. */
570109998Smarkm
571109998Smarkm/* Function codes. */
572296465Sdelphij# define OCSP_F_ASN1_STRING_ENCODE                        100
573296465Sdelphij# define OCSP_F_D2I_OCSP_NONCE                            102
574296465Sdelphij# define OCSP_F_OCSP_BASIC_ADD1_STATUS                    103
575296465Sdelphij# define OCSP_F_OCSP_BASIC_SIGN                           104
576296465Sdelphij# define OCSP_F_OCSP_BASIC_VERIFY                         105
577296465Sdelphij# define OCSP_F_OCSP_CERT_ID_NEW                          101
578296465Sdelphij# define OCSP_F_OCSP_CHECK_DELEGATED                      106
579296465Sdelphij# define OCSP_F_OCSP_CHECK_IDS                            107
580296465Sdelphij# define OCSP_F_OCSP_CHECK_ISSUER                         108
581296465Sdelphij# define OCSP_F_OCSP_CHECK_VALIDITY                       115
582296465Sdelphij# define OCSP_F_OCSP_MATCH_ISSUERID                       109
583296465Sdelphij# define OCSP_F_OCSP_PARSE_URL                            114
584296465Sdelphij# define OCSP_F_OCSP_REQUEST_SIGN                         110
585296465Sdelphij# define OCSP_F_OCSP_REQUEST_VERIFY                       116
586296465Sdelphij# define OCSP_F_OCSP_RESPONSE_GET1_BASIC                  111
587296465Sdelphij# define OCSP_F_OCSP_SENDREQ_BIO                          112
588296465Sdelphij# define OCSP_F_PARSE_HTTP_LINE1                          117
589296465Sdelphij# define OCSP_F_REQUEST_VERIFY                            113
590109998Smarkm
591109998Smarkm/* Reason codes. */
592296465Sdelphij# define OCSP_R_BAD_DATA                                  100
593296465Sdelphij# define OCSP_R_CERTIFICATE_VERIFY_ERROR                  101
594296465Sdelphij# define OCSP_R_DIGEST_ERR                                102
595296465Sdelphij# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD                 122
596296465Sdelphij# define OCSP_R_ERROR_IN_THISUPDATE_FIELD                 123
597296465Sdelphij# define OCSP_R_ERROR_PARSING_URL                         121
598296465Sdelphij# define OCSP_R_MISSING_OCSPSIGNING_USAGE                 103
599296465Sdelphij# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE              124
600296465Sdelphij# define OCSP_R_NOT_BASIC_RESPONSE                        104
601296465Sdelphij# define OCSP_R_NO_CERTIFICATES_IN_CHAIN                  105
602296465Sdelphij# define OCSP_R_NO_CONTENT                                106
603296465Sdelphij# define OCSP_R_NO_PUBLIC_KEY                             107
604296465Sdelphij# define OCSP_R_NO_RESPONSE_DATA                          108
605296465Sdelphij# define OCSP_R_NO_REVOKED_TIME                           109
606296465Sdelphij# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE    110
607296465Sdelphij# define OCSP_R_REQUEST_NOT_SIGNED                        128
608296465Sdelphij# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA      111
609296465Sdelphij# define OCSP_R_ROOT_CA_NOT_TRUSTED                       112
610296465Sdelphij# define OCSP_R_SERVER_READ_ERROR                         113
611296465Sdelphij# define OCSP_R_SERVER_RESPONSE_ERROR                     114
612296465Sdelphij# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR               115
613296465Sdelphij# define OCSP_R_SERVER_WRITE_ERROR                        116
614296465Sdelphij# define OCSP_R_SIGNATURE_FAILURE                         117
615296465Sdelphij# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND              118
616296465Sdelphij# define OCSP_R_STATUS_EXPIRED                            125
617296465Sdelphij# define OCSP_R_STATUS_NOT_YET_VALID                      126
618296465Sdelphij# define OCSP_R_STATUS_TOO_OLD                            127
619296465Sdelphij# define OCSP_R_UNKNOWN_MESSAGE_DIGEST                    119
620296465Sdelphij# define OCSP_R_UNKNOWN_NID                               120
621296465Sdelphij# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE            129
622109998Smarkm
623109998Smarkm#ifdef  __cplusplus
624109998Smarkm}
625109998Smarkm#endif
626109998Smarkm#endif
627