]> git.saurik.com Git - apple/security.git/blobdiff - libsecurity_asn1/lib/ocspTemplates.h
Security-57031.1.35.tar.gz
[apple/security.git] / libsecurity_asn1 / lib / ocspTemplates.h
diff --git a/libsecurity_asn1/lib/ocspTemplates.h b/libsecurity_asn1/lib/ocspTemplates.h
deleted file mode 100644 (file)
index af742a3..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (c) 2003-2006,2008-2010 Apple Inc. All Rights Reserved.
- * 
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- *
- * ocspTemplates.h -  ASN1 templates OCSP requests and responses.
- */
-
-#ifndef        _OCSP_TEMPLATES_H_
-#define _OCSP_TEMPLATES_H_
-
-#include <Security/X509Templates.h> /* NSS_CertExtension */
-#include <Security/nameTemplates.h> /* NSS_GeneralName and support */
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-// MARK: ----- OCSP Request -----
-
-/*
- * CertID          ::=     SEQUENCE {
- *             hashAlgorithm           AlgorithmIdentifier,
- *             issuerNameHash          OCTET STRING, -- Hash of Issuer's DN
- *             issuerKeyHash           OCTET STRING, -- Hash of Issuers public key
- *             serialNumber            CertificateSerialNumber }   -- i.e., INTEGER
- */
-typedef struct {
-       SecAsn1AlgId            algId;
-       SecAsn1Item                                                     issuerNameHash;
-       SecAsn1Item                                                     issuerPubKeyHash;
-       SecAsn1Item                                                     serialNumber;
-} SecAsn1OCSPCertID;
-
-extern const SecAsn1Template kSecAsn1OCSPCertIDTemplate[];
-/*
- * Request         ::=     SEQUENCE {
- *             reqCert                     CertID,
- *             singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }  
- */
-typedef struct {
-       SecAsn1OCSPCertID                                       reqCert;
-    NSS_CertExtension                                  **extensions;           // optional     
-} SecAsn1OCSPRequest;
-
-extern const SecAsn1Template kSecAsn1OCSPRequestTemplate[];
-
-/*
- * Signature       ::=     SEQUENCE {
- *             signatureAlgorithm      AlgorithmIdentifier,
- *             signature               BIT STRING,
- *             certs               [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL}
- *
- * Since we wish to avoid knowing anything about the details of the certs, 
- * we declare them here as ASN_ANY, get/set as raw data, and leave it to 
- * the CL to parse them.
- */
-typedef struct {
-       SecAsn1AlgId            algId;
-       SecAsn1Item                                                     sig;            // length in BITS
-       SecAsn1Item                                                     **certs;        // OPTIONAL
-} SecAsn1OCSPSignature;
-
-extern const SecAsn1Template kSecAsn1OCSPSignatureTemplate[];
-
-/* 
- * TBSRequest      ::=     SEQUENCE {
- *             version             [0]     EXPLICIT Version DEFAULT v1,
- *             requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
- *             requestList                 SEQUENCE OF Request,
- *             requestExtensions   [2]     EXPLICIT Extensions OPTIONAL } 
- */
-typedef struct {
-       SecAsn1Item                                                     *version;                               // OPTIONAL
-       NSS_GeneralName                                         *requestorName;                 // OPTIONAL
-       SecAsn1OCSPRequest                                      **requestList;
-    NSS_CertExtension                                  **requestExtensions;    // OPTIONAL
-} SecAsn1OCSPTbsRequest;
-
-extern const SecAsn1Template kSecAsn1OCSPTbsRequestTemplate[];
-
-/* 
- * OCSPRequest     ::=     SEQUENCE {
- *             tbsRequest                  TBSRequest,
- *             optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
- */
-typedef struct {
-       SecAsn1OCSPTbsRequest                           tbsRequest;
-       SecAsn1OCSPSignature                            *signature;                     // OPTIONAL
-} SecAsn1OCSPSignedRequest;
-
-extern const SecAsn1Template kSecAsn1OCSPSignedRequestTemplate[];
-
-// MARK: ----- OCSP Response -----
-
-/*
- * CertStatus ::= CHOICE {
- *             good        [0]     IMPLICIT NULL,
- *             revoked     [1]     IMPLICIT RevokedInfo,
- *             unknown     [2]     IMPLICIT UnknownInfo }
- *
- * RevokedInfo ::= SEQUENCE {
- *             revocationTime              GeneralizedTime,
- *             revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
- *
- * UnknownInfo ::= NULL -- this can be replaced with an enumeration
- *
- * See <Security/certextensions.h> for enum values of CE_CrlReason.
- */
-typedef struct {
-       SecAsn1Item                                     revocationTime;
-       SecAsn1Item                                     *revocationReason;              // OPTIONAL, CE_CrlReason
-} SecAsn1OCSPRevokedInfo;
-
-typedef union {
-       SecAsn1OCSPRevokedInfo          *revokedInfo;
-       SecAsn1Item                                     *nullData;
-} SecAsn1OCSPCertStatus;
-
-typedef enum {
-       CS_Good = 0,
-       CS_Revoked = 1,
-       CS_Unknown = 2,
-       CS_NotParsed = 0xff             /* Not in protocol: means value not parsed or seen */
-} SecAsn1OCSPCertStatusTag;
-
-extern const SecAsn1Template kSecAsn1OCSPRevokedInfoTemplate[];
-
-/* 
- * Encode/decode CertStatus separately using one of these  hree templates. 
- * The result goes into SecAsn1OCSPSingleResponse.certStatus on encode. 
- */
-extern const SecAsn1Template kSecAsn1OCSPCertStatusGoodTemplate[];
-extern const SecAsn1Template kSecAsn1OCSPCertStatusRevokedTemplate[];
-extern const SecAsn1Template kSecAsn1OCSPCertStatusUnknownTemplate[];
-
-/* 
- * SingleResponse ::= SEQUENCE {
- *             certID                       CertID,
- *             certStatus                   CertStatus,
- *             thisUpdate                   GeneralizedTime,
- *             nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
- *             singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
- */
-typedef struct {
-       SecAsn1OCSPCertID                       certID;
-       SecAsn1Item                                     certStatus;                             // ASN_ANY here
-       SecAsn1Item                                     thisUpdate;                             // GeneralizedTime
-       SecAsn1Item                                     *nextUpdate;                    // GeneralizedTime, OPTIONAL
-    NSS_CertExtension                  **singleExtensions;             // OPTIONAL
-} SecAsn1OCSPSingleResponse;
-
-extern const SecAsn1Template kSecAsn1OCSPSingleResponseTemplate[];
-
-/*
- * ResponderID ::= CHOICE {
- *     byName               EXPLICIT [1] Name,
- *     byKey                EXPLICIT [2] KeyHash }
- *
- * Since our ASN.1 encoder/decoder can't handle CHOICEs very well, we encode
- * this separately using one of the following two templates. On encode the
- * result if this step of the encode goes into SecAsn1OCSPResponseData.responderID,
- * where it's treated as an ANY_ANY when encoding that struct. The reverse happens
- * on decode. 
- */
-typedef union {
-       SecAsn1Item                                     byName;
-       SecAsn1Item                                     byKey;          // key hash in OCTET STRING
-} SecAsn1OCSPResponderID;
-
-typedef enum {
-       RIT_Name        = 1,
-       RIT_Key         = 2
-} SecAsn1OCSPResponderIDTag;
-
-extern const SecAsn1Template kSecAsn1OCSPResponderIDAsNameTemplate[];
-extern const SecAsn1Template kSecAsn1OCSPResponderIDAsKeyTemplate[];
-
-/* 
- * ResponseData ::= SEQUENCE {
- *             version              [0] EXPLICIT Version DEFAULT v1,
- *             responderID              ResponderID,
- *             producedAt               GeneralizedTime,
- *             responses                SEQUENCE OF SingleResponse,
- *             responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
- */
-typedef struct {
-       SecAsn1Item                                     *version;               // OPTIONAL
-       SecAsn1Item                                     responderID;    // ASN_ANY here, decode/encode separately
-       SecAsn1Item                                     producedAt;             // GeneralizedTime
-       SecAsn1OCSPSingleResponse   **responses;
-    NSS_CertExtension                  **responseExtensions;   // OPTIONAL
-} SecAsn1OCSPResponseData;
-
-extern const SecAsn1Template kSecAsn1OCSPResponseDataTemplate[];
-
-/* 
- * BasicOCSPResponse       ::= SEQUENCE {
- *             tbsResponseData      ResponseData,
- *             signatureAlgorithm   AlgorithmIdentifier,
- *             signature            BIT STRING,
- *             certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
- *
- * Since we ALWAYS encode the tbsResponseData in preparation for signing,
- * we declare it as a raw ASN_ANY in the BasicOCSPResponse.
- *
- * Certs are likewise ASN_ANY since we use the CL to parse and create them. 
- */
-typedef struct {
-       SecAsn1Item                                             tbsResponseData;
-       SecAsn1AlgId    algId;
-       SecAsn1Item                                             sig;            // length in BITS
-       SecAsn1Item                                             **certs;        // optional
-} SecAsn1OCSPBasicResponse;
-
-extern const SecAsn1Template kSecAsn1OCSPBasicResponseTemplate[];
-
-/*
- * ResponseBytes ::=       SEQUENCE {
- *             responseType   OBJECT IDENTIFIER,
- *             response       OCTET STRING }
- *
- * The contents of response are actually an encoded SecAsn1OCSPBasicResponse (at 
- * least until another response type is defined). 
- */
-typedef struct {
-       SecAsn1Oid                                      responseType;
-       SecAsn1Item                                     response;
-} SecAsn1OCSPResponseBytes;
-
-extern const SecAsn1Template kSecAsn1OCSPResponseBytesTemplate[];
-
-/* 
- * OCSPResponse ::= SEQUENCE {
- *             responseStatus         OCSPResponseStatus,              -- an ENUM
- *             responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
- */
-typedef struct {
-       SecAsn1Item                                     responseStatus;         // see enum below
-       SecAsn1OCSPResponseBytes        *responseBytes;         // optional
-} SecAsn1OCSPResponse;
-
-extern const SecAsn1Template kSecAsn1OCSPResponseTemplate[];
-
-typedef enum {
-       RS_Success = 0,
-       RS_MalformedRequest = 1,
-       RS_InternalError = 2,
-       RS_TryLater = 3,
-       RS_Unused = 4,
-       RS_SigRequired = 5,
-       RS_Unauthorized = 6
-} SecAsn1OCSPResponseStatus;
-
-/* 
- * This is not part of the OCSP protocol; it's used in the communication between
- * the Apple X.509 TP module and the ocspd server.
- *
- * OCSPDRequest ::= SEQUENCE {
- *             cacheWriteDisable :: = EXPLICIT [0] BOOL OPTIONAL;      -- cache write disable
- *                                                                                                                     --  default FALSE
- *             cacheWriteDisable :: = EXPLICIT [1] BOOL OPTIONAL;      -- cache read disable
- *                                                                                                                     --  default FALSE
- *             certID          ::= OCTET STRING;                                               -- for cache lookup
- *             ocspReq         ::= EXPLICIT [2] OCTET STRING OPTIONAL; -- for net fetch
- *             localResp       ::= EXPLICIT [3] IA5String OPTIONAL;    -- for local responder
- *             urls            ::= EXPLICIT [4] SEQUENCE of IA5String OPTIONAL;
- *                                                                                                                     -- for normal net fetch
- * };
- */
-
-#define OCSPD_REQUEST_VERS     0
-
-typedef struct {
-       SecAsn1Item                     *cacheWriteDisable;
-       SecAsn1Item                     *cacheReadDisable;
-       SecAsn1Item                     certID;                         // DER encoded SecAsn1OCSPCertID
-       SecAsn1Item                     *ocspReq;                       // DER encoded SecAsn1OCSPSignedRequest
-       SecAsn1Item                     *localRespURI;          // local responder URI
-       SecAsn1Item                     **urls;                         // normal URIs
-       
-} SecAsn1OCSPDRequest;
-
-/* 
- * And this is a sequence of them, packaged up and sent to ocspd in one RPC.
- */
-typedef struct {
-       SecAsn1Item                     version;                        // OCSPD_REQUEST_VERS
-       SecAsn1OCSPDRequest     **requests;
-} SecAsn1OCSPDRequests;
-
-extern const SecAsn1Template kSecAsn1OCSPDRequestTemplate[];
-extern const SecAsn1Template kSecAsn1OCSPDRequestsTemplate[];
-
-/* 
- * Unordered set of replies from ocsdp; they map back to individual
- * SecAsn1OCSPDRequests by the encoded certID (which is obtained from the 
- * SecAsn1OCSPDRequest, NOT from the OCSP response).
- */
-typedef struct {
-       SecAsn1Item                     certID;                 // DER encoded SecAsn1OCSPCertID
-       SecAsn1Item                     ocspResp;               // DER encoded SecAsn1OCSPResponse
-} SecAsn1OCSPDReply;
-
-#define OCSPD_REPLY_VERS       0
-
-typedef struct {
-       SecAsn1Item                     version;                        // OCSPD_REPLY_VERS
-       SecAsn1OCSPDReply       **replies; 
-} SecAsn1OCSPReplies;
-
-extern const SecAsn1Template kSecAsn1OCSPDReplyTemplate[];
-extern const SecAsn1Template kSecAsn1OCSPDRepliesTemplate[];
-
-#ifdef  __cplusplus
-}
-#endif
-
-#endif /* _OCSP_TEMPLATES_H_ */