Index: mozilla/security/nss/lib/certhigh/ocspti.h |
=================================================================== |
--- mozilla/security/nss/lib/certhigh/ocspti.h (revision 191424) |
+++ mozilla/security/nss/lib/certhigh/ocspti.h (working copy) |
@@ -1,361 +0,0 @@ |
-/* This Source Code Form is subject to the terms of the Mozilla Public |
- * License, v. 2.0. If a copy of the MPL was not distributed with this |
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
- |
-/* |
- * Private header defining OCSP types. |
- * |
- * $Id: ocspti.h,v 1.11 2013/01/23 23:05:51 kaie%kuix.de Exp $ |
- */ |
- |
-#ifndef _OCSPTI_H_ |
-#define _OCSPTI_H_ |
- |
-#include "ocspt.h" |
- |
-#include "certt.h" |
-#include "plarena.h" |
-#include "seccomon.h" |
-#include "secoidt.h" |
- |
- |
-/* |
- * Some notes about naming conventions... |
- * |
- * The public data types all start with "CERTOCSP" (e.g. CERTOCSPRequest). |
- * (Even the public types are opaque, however. Only their names are |
- * "exported".) |
- * |
- * Internal-only data types drop the "CERT" prefix and use only the |
- * lower-case "ocsp" (e.g. ocspTBSRequest), for brevity sake. |
- * |
- * In either case, the base/suffix of the type name usually matches the |
- * name as defined in the OCSP specification. The exceptions to this are: |
- * - When there is overlap between the "OCSP" or "ocsp" prefix and |
- * the name used in the standard. That is, you cannot strip off the |
- * "CERTOCSP" or "ocsp" prefix and necessarily get the name of the |
- * type as it is defined in the standard; the "real" name will be |
- * *either* "OCSPSuffix" or just "Suffix". |
- * - When the name in the standard was a little too generic. (e.g. The |
- * standard defines "Request" but we call it a "SingleRequest".) |
- * In this case a comment above the type definition calls attention |
- * to the difference. |
- * |
- * The definitions laid out in this header file are intended to follow |
- * the same order as the definitions in the OCSP specification itself. |
- * With the OCSP standard in hand, you should be able to move through |
- * this file and follow along. To future modifiers of this file: please |
- * try to keep it that way. The only exceptions are the few cases where |
- * we need to define a type before it is referenced (e.g. enumerations), |
- * whereas in the OCSP specification these are usually defined the other |
- * way around (reference before definition). |
- */ |
- |
- |
-/* |
- * Forward-declarations of internal-only data structures. |
- * |
- * These are in alphabetical order (case-insensitive); please keep it that way! |
- */ |
-typedef struct ocspBasicOCSPResponseStr ocspBasicOCSPResponse; |
-typedef struct ocspCertStatusStr ocspCertStatus; |
-typedef struct ocspResponderIDStr ocspResponderID; |
-typedef struct ocspResponseBytesStr ocspResponseBytes; |
-typedef struct ocspResponseDataStr ocspResponseData; |
-typedef struct ocspRevokedInfoStr ocspRevokedInfo; |
-typedef struct ocspServiceLocatorStr ocspServiceLocator; |
-typedef struct ocspSignatureStr ocspSignature; |
-typedef struct ocspSingleRequestStr ocspSingleRequest; |
-typedef struct ocspSingleResponseStr ocspSingleResponse; |
-typedef struct ocspTBSRequestStr ocspTBSRequest; |
- |
- |
-/* |
- * An OCSPRequest; this is what is sent (encoded) to an OCSP responder. |
- */ |
-struct CERTOCSPRequestStr { |
- PRArenaPool *arena; /* local; not part of encoding */ |
- ocspTBSRequest *tbsRequest; |
- ocspSignature *optionalSignature; |
-}; |
- |
-/* |
- * A TBSRequest; when an OCSPRequest is signed, the encoding of this |
- * is what the signature is actually applied to. ("TBS" == To Be Signed) |
- * Whether signed or not, however, this structure will be present, and |
- * is the "meat" of the OCSPRequest. |
- * |
- * Note that the "requestorName" field cannot be encoded/decoded in the |
- * same pass as the entire request -- it needs to be handled with a special |
- * call to convert to/from our internal form of a GeneralName. Thus the |
- * "derRequestorName" field, which is the actual DER-encoded bytes. |
- * |
- * The "extensionHandle" field is used on creation only; it holds |
- * in-progress extensions as they are optionally added to the request. |
- */ |
-struct ocspTBSRequestStr { |
- SECItem version; /* an INTEGER */ |
- SECItem *derRequestorName; /* encoded GeneralName; see above */ |
- CERTGeneralNameList *requestorName; /* local; not part of encoding */ |
- ocspSingleRequest **requestList; |
- CERTCertExtension **requestExtensions; |
- void *extensionHandle; /* local; not part of encoding */ |
-}; |
- |
-/* |
- * This is the actual signature information for an OCSPRequest (applied to |
- * the TBSRequest structure) or for a BasicOCSPResponse (applied to a |
- * ResponseData structure). |
- * |
- * Note that the "signature" field itself is a BIT STRING; operations on |
- * it need to keep that in mind, converting the length to bytes as needed |
- * and back again afterward (so that the length is usually expressing bits). |
- * |
- * The "cert" field is the signer's certificate. In the case of a received |
- * signature, it will be filled in when the signature is verified. In the |
- * case of a created signature, it is filled in on creation and will be the |
- * cert used to create the signature when the signing-and-encoding occurs, |
- * as well as the cert (and its chain) to fill in derCerts if requested. |
- * |
- * The extra fields cache information about the signature after we have |
- * attempted a verification. "wasChecked", if true, means the signature |
- * has been checked against the appropriate data and thus that "status" |
- * contains the result of that verification. If "status" is not SECSuccess, |
- * "failureReason" is a copy of the error code that was set at the time; |
- * presumably it tells why the signature verification failed. |
- */ |
-struct ocspSignatureStr { |
- SECAlgorithmID signatureAlgorithm; |
- SECItem signature; /* a BIT STRING */ |
- SECItem **derCerts; /* a SEQUENCE OF Certificate */ |
- CERTCertificate *cert; /* local; not part of encoding */ |
- PRBool wasChecked; /* local; not part of encoding */ |
- SECStatus status; /* local; not part of encoding */ |
- int failureReason; /* local; not part of encoding */ |
-}; |
- |
-/* |
- * An OCSPRequest contains a SEQUENCE OF these, one for each certificate |
- * whose status is being checked. |
- * |
- * Note that in the OCSP specification this is just called "Request", |
- * but since that seemed confusing (vs. an OCSPRequest) and to be more |
- * consistent with the parallel type "SingleResponse", I called it a |
- * "SingleRequest". |
- * |
- * XXX figure out how to get rid of that arena -- there must be a way |
- */ |
-struct ocspSingleRequestStr { |
- PRArenaPool *arena; /* just a copy of the response arena, |
- * needed here for extension handling |
- * routines, on creation only */ |
- CERTOCSPCertID *reqCert; |
- CERTCertExtension **singleRequestExtensions; |
-}; |
- |
-/* |
- * A CertID is the means of identifying a certificate, used both in requests |
- * and in responses. |
- * |
- * When in a SingleRequest it specifies the certificate to be checked. |
- * When in a SingleResponse it is the cert whose status is being given. |
- */ |
-struct CERTOCSPCertIDStr { |
- SECAlgorithmID hashAlgorithm; |
- SECItem issuerNameHash; /* an OCTET STRING */ |
- SECItem issuerKeyHash; /* an OCTET STRING */ |
- SECItem serialNumber; /* an INTEGER */ |
- SECItem issuerSHA1NameHash; /* keep other hashes around when */ |
- SECItem issuerMD5NameHash; /* we have them */ |
- SECItem issuerMD2NameHash; |
- SECItem issuerSHA1KeyHash; /* keep other hashes around when */ |
- SECItem issuerMD5KeyHash; /* we have them */ |
- SECItem issuerMD2KeyHash; |
- PRArenaPool *poolp; |
-}; |
- |
-/* |
- * This describes the value of the responseStatus field in an OCSPResponse. |
- * The corresponding ASN.1 definition is: |
- * |
- * OCSPResponseStatus ::= ENUMERATED { |
- * successful (0), --Response has valid confirmations |
- * malformedRequest (1), --Illegal confirmation request |
- * internalError (2), --Internal error in issuer |
- * tryLater (3), --Try again later |
- * --(4) is not used |
- * sigRequired (5), --Must sign the request |
- * unauthorized (6), --Request unauthorized |
- * } |
- */ |
-typedef enum { |
- ocspResponse_min = 0, |
- ocspResponse_successful = 0, |
- ocspResponse_malformedRequest = 1, |
- ocspResponse_internalError = 2, |
- ocspResponse_tryLater = 3, |
- ocspResponse_unused = 4, |
- ocspResponse_sigRequired = 5, |
- ocspResponse_unauthorized = 6, |
- ocspResponse_max = 6 /* Please update max when adding values. |
- * Remember to also update arrays, e.g. |
- * "responseStatusNames" in ocspclnt.c |
- * and potentially other places. */ |
-} ocspResponseStatus; |
- |
-/* |
- * An OCSPResponse is what is sent (encoded) by an OCSP responder. |
- * |
- * The field "responseStatus" is the ASN.1 encoded value; the field |
- * "statusValue" is simply that same value translated into our local |
- * type ocspResponseStatus. |
- */ |
-struct CERTOCSPResponseStr { |
- PRArenaPool *arena; /* local; not part of encoding */ |
- SECItem responseStatus; /* an ENUMERATED, see above */ |
- ocspResponseStatus statusValue; /* local; not part of encoding */ |
- ocspResponseBytes *responseBytes; /* only when status is successful */ |
-}; |
- |
-/* |
- * A ResponseBytes (despite appearances) is what contains the meat |
- * of a successful response -- but still in encoded form. The type |
- * given as "responseType" tells you how to decode the string. |
- * |
- * We look at the OID and translate it into our local OID representation |
- * "responseTypeTag", and use that value to tell us how to decode the |
- * actual response itself. For now the only kind of OCSP response we |
- * know about is a BasicOCSPResponse. However, the intention in the |
- * OCSP specification is to allow for other response types, so we are |
- * building in that flexibility from the start and thus put a pointer |
- * to that data structure inside of a union. Whenever OCSP adds more |
- * response types, just add them to the union. |
- */ |
-struct ocspResponseBytesStr { |
- SECItem responseType; /* an OBJECT IDENTIFIER */ |
- SECOidTag responseTypeTag; /* local; not part of encoding */ |
- SECItem response; /* an OCTET STRING */ |
- union { |
- ocspBasicOCSPResponse *basic; /* when type is id-pkix-ocsp-basic */ |
- } decodedResponse; /* local; not part of encoding */ |
-}; |
- |
-/* |
- * A BasicOCSPResponse -- when the responseType in a ResponseBytes is |
- * id-pkix-ocsp-basic, the "response" OCTET STRING above is the DER |
- * encoding of one of these. |
- * |
- * Note that in the OCSP specification, the signature fields are not |
- * part of a separate sub-structure. But since they are the same fields |
- * as we define for the signature in a request, it made sense to share |
- * the C data structure here and in some shared code to operate on them. |
- */ |
-struct ocspBasicOCSPResponseStr { |
- SECItem tbsResponseDataDER; |
- ocspResponseData *tbsResponseData; /* "tbs" == To Be Signed */ |
- ocspSignature responseSignature; |
-}; |
- |
-/* |
- * A ResponseData is the part of a BasicOCSPResponse that is signed |
- * (after it is DER encoded). It contains the real details of the response |
- * (a per-certificate status). |
- */ |
-struct ocspResponseDataStr { |
- SECItem version; /* an INTEGER */ |
- SECItem derResponderID; |
- ocspResponderID *responderID; /* local; not part of encoding */ |
- SECItem producedAt; /* a GeneralizedTime */ |
- CERTOCSPSingleResponse **responses; |
- CERTCertExtension **responseExtensions; |
-}; |
- |
-struct ocspResponderIDStr { |
- CERTOCSPResponderIDType responderIDType;/* local; not part of encoding */ |
- union { |
- CERTName name; /* when ocspResponderID_byName */ |
- SECItem keyHash; /* when ocspResponderID_byKey */ |
- SECItem other; /* when ocspResponderID_other */ |
- } responderIDValue; |
-}; |
- |
-/* |
- * The ResponseData in a BasicOCSPResponse contains a SEQUENCE OF |
- * SingleResponse -- one for each certificate whose status is being supplied. |
- * |
- * XXX figure out how to get rid of that arena -- there must be a way |
- */ |
-struct CERTOCSPSingleResponseStr { |
- PRArenaPool *arena; /* just a copy of the response arena, |
- * needed here for extension handling |
- * routines, on creation only */ |
- CERTOCSPCertID *certID; |
- SECItem derCertStatus; |
- ocspCertStatus *certStatus; /* local; not part of encoding */ |
- SECItem thisUpdate; /* a GeneralizedTime */ |
- SECItem *nextUpdate; /* a GeneralizedTime */ |
- CERTCertExtension **singleExtensions; |
-}; |
- |
-/* |
- * A CertStatus is the actual per-certificate status. Its ASN.1 definition: |
- * |
- * CertStatus ::= CHOICE { |
- * good [0] IMPLICIT NULL, |
- * revoked [1] IMPLICIT RevokedInfo, |
- * unknown [2] IMPLICIT UnknownInfo } |
- * |
- * (where for now UnknownInfo is defined to be NULL but in the |
- * future may be replaced with an enumeration). |
- * |
- * Because it is CHOICE, the status value and its associated information |
- * (if any) are actually encoded together. To represent this same |
- * information internally, we explicitly define a type and save it, |
- * along with the value, into a data structure. |
- */ |
- |
-typedef enum { |
- ocspCertStatus_good, /* cert is not revoked */ |
- ocspCertStatus_revoked, /* cert is revoked */ |
- ocspCertStatus_unknown, /* cert was unknown to the responder */ |
- ocspCertStatus_other /* status was not an expected value */ |
-} ocspCertStatusType; |
- |
-/* |
- * This is the actual per-certificate status. |
- * |
- * The "goodInfo" and "unknownInfo" items are only place-holders for a NULL. |
- * (Though someday OCSP may replace UnknownInfo with an enumeration that |
- * gives more detailed information.) |
- */ |
-struct ocspCertStatusStr { |
- ocspCertStatusType certStatusType; /* local; not part of encoding */ |
- union { |
- SECItem *goodInfo; /* when ocspCertStatus_good */ |
- ocspRevokedInfo *revokedInfo; /* when ocspCertStatus_revoked */ |
- SECItem *unknownInfo; /* when ocspCertStatus_unknown */ |
- SECItem *otherInfo; /* when ocspCertStatus_other */ |
- } certStatusInfo; |
-}; |
- |
-/* |
- * A RevokedInfo gives information about a revoked certificate -- when it |
- * was revoked and why. |
- */ |
-struct ocspRevokedInfoStr { |
- SECItem revocationTime; /* a GeneralizedTime */ |
- SECItem *revocationReason; /* a CRLReason; ignored for now */ |
-}; |
- |
-/* |
- * ServiceLocator can be included as one of the singleRequestExtensions. |
- * When added, it specifies the (name of the) issuer of the cert being |
- * checked, and optionally the value of the AuthorityInfoAccess extension |
- * if the cert has one. |
- */ |
-struct ocspServiceLocatorStr { |
- CERTName *issuer; |
- SECItem locator; /* DER encoded authInfoAccess extension from cert */ |
-}; |
- |
-#endif /* _OCSPTI_H_ */ |