Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(787)

Side by Side Diff: nss/lib/certhigh/ocspti.h

Issue 1843333003: Update NSPR to 4.12 and NSS to 3.23 on iOS (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* This Source Code Form is subject to the terms of the Mozilla Public 1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 4
5 /* 5 /*
6 * Private header defining OCSP types. 6 * Private header defining OCSP types.
7 */ 7 */
8 8
9 #ifndef _OCSPTI_H_ 9 #ifndef _OCSPTI_H_
10 #define _OCSPTI_H_ 10 #define _OCSPTI_H_
11 11
12 #include "ocspt.h" 12 #include "ocspt.h"
13 13
14 #include "certt.h" 14 #include "certt.h"
15 #include "plarena.h" 15 #include "plarena.h"
16 #include "seccomon.h" 16 #include "seccomon.h"
17 #include "secoidt.h" 17 #include "secoidt.h"
18 18
19
20 /* 19 /*
21 * Some notes about naming conventions... 20 * Some notes about naming conventions...
22 * 21 *
23 * The public data types all start with "CERTOCSP" (e.g. CERTOCSPRequest). 22 * The public data types all start with "CERTOCSP" (e.g. CERTOCSPRequest).
24 * (Even the public types are opaque, however. Only their names are 23 * (Even the public types are opaque, however. Only their names are
25 * "exported".) 24 * "exported".)
26 * 25 *
27 * Internal-only data types drop the "CERT" prefix and use only the 26 * Internal-only data types drop the "CERT" prefix and use only the
28 * lower-case "ocsp" (e.g. ocspTBSRequest), for brevity sake. 27 * lower-case "ocsp" (e.g. ocspTBSRequest), for brevity sake.
29 * 28 *
(...skipping 12 matching lines...) Expand all
42 * The definitions laid out in this header file are intended to follow 41 * The definitions laid out in this header file are intended to follow
43 * the same order as the definitions in the OCSP specification itself. 42 * the same order as the definitions in the OCSP specification itself.
44 * With the OCSP standard in hand, you should be able to move through 43 * With the OCSP standard in hand, you should be able to move through
45 * this file and follow along. To future modifiers of this file: please 44 * this file and follow along. To future modifiers of this file: please
46 * try to keep it that way. The only exceptions are the few cases where 45 * try to keep it that way. The only exceptions are the few cases where
47 * we need to define a type before it is referenced (e.g. enumerations), 46 * we need to define a type before it is referenced (e.g. enumerations),
48 * whereas in the OCSP specification these are usually defined the other 47 * whereas in the OCSP specification these are usually defined the other
49 * way around (reference before definition). 48 * way around (reference before definition).
50 */ 49 */
51 50
52
53 /* 51 /*
54 * Forward-declarations of internal-only data structures. 52 * Forward-declarations of internal-only data structures.
55 * 53 *
56 * These are in alphabetical order (case-insensitive); please keep it that way! 54 * These are in alphabetical order (case-insensitive); please keep it that way!
57 */ 55 */
58 typedef struct ocspBasicOCSPResponseStr ocspBasicOCSPResponse; 56 typedef struct ocspBasicOCSPResponseStr ocspBasicOCSPResponse;
59 typedef struct ocspCertStatusStr ocspCertStatus; 57 typedef struct ocspCertStatusStr ocspCertStatus;
60 typedef struct ocspResponderIDStr ocspResponderID; 58 typedef struct ocspResponderIDStr ocspResponderID;
61 typedef struct ocspResponseBytesStr ocspResponseBytes; 59 typedef struct ocspResponseBytesStr ocspResponseBytes;
62 typedef struct ocspResponseDataStr ocspResponseData; 60 typedef struct ocspResponseDataStr ocspResponseData;
63 typedef struct ocspRevokedInfoStr ocspRevokedInfo; 61 typedef struct ocspRevokedInfoStr ocspRevokedInfo;
64 typedef struct ocspServiceLocatorStr ocspServiceLocator; 62 typedef struct ocspServiceLocatorStr ocspServiceLocator;
65 typedef struct ocspSignatureStr ocspSignature; 63 typedef struct ocspSignatureStr ocspSignature;
66 typedef struct ocspSingleRequestStr ocspSingleRequest; 64 typedef struct ocspSingleRequestStr ocspSingleRequest;
67 typedef struct ocspSingleResponseStr ocspSingleResponse; 65 typedef struct ocspSingleResponseStr ocspSingleResponse;
68 typedef struct ocspTBSRequestStr ocspTBSRequest; 66 typedef struct ocspTBSRequestStr ocspTBSRequest;
69 67
70
71 /* 68 /*
72 * An OCSPRequest; this is what is sent (encoded) to an OCSP responder. 69 * An OCSPRequest; this is what is sent (encoded) to an OCSP responder.
73 */ 70 */
74 struct CERTOCSPRequestStr { 71 struct CERTOCSPRequestStr {
75 PLArenaPool *arena;»» » /* local; not part of encoding */ 72 PLArenaPool *arena; /* local; not part of encoding */
76 ocspTBSRequest *tbsRequest; 73 ocspTBSRequest *tbsRequest;
77 ocspSignature *optionalSignature; 74 ocspSignature *optionalSignature;
78 }; 75 };
79 76
80 /* 77 /*
81 * A TBSRequest; when an OCSPRequest is signed, the encoding of this 78 * A TBSRequest; when an OCSPRequest is signed, the encoding of this
82 * is what the signature is actually applied to. ("TBS" == To Be Signed) 79 * is what the signature is actually applied to. ("TBS" == To Be Signed)
83 * Whether signed or not, however, this structure will be present, and 80 * Whether signed or not, however, this structure will be present, and
84 * is the "meat" of the OCSPRequest. 81 * is the "meat" of the OCSPRequest.
85 * 82 *
86 * Note that the "requestorName" field cannot be encoded/decoded in the 83 * Note that the "requestorName" field cannot be encoded/decoded in the
87 * same pass as the entire request -- it needs to be handled with a special 84 * same pass as the entire request -- it needs to be handled with a special
88 * call to convert to/from our internal form of a GeneralName. Thus the 85 * call to convert to/from our internal form of a GeneralName. Thus the
89 * "derRequestorName" field, which is the actual DER-encoded bytes. 86 * "derRequestorName" field, which is the actual DER-encoded bytes.
90 * 87 *
91 * The "extensionHandle" field is used on creation only; it holds 88 * The "extensionHandle" field is used on creation only; it holds
92 * in-progress extensions as they are optionally added to the request. 89 * in-progress extensions as they are optionally added to the request.
93 */ 90 */
94 struct ocspTBSRequestStr { 91 struct ocspTBSRequestStr {
95 SECItem version;» » » /* an INTEGER */ 92 SECItem version; /* an INTEGER */
96 SECItem *derRequestorName;» » /* encoded GeneralName; see above */ 93 SECItem *derRequestorName; /* encoded GeneralName; see above */
97 CERTGeneralNameList *requestorName;»/* local; not part of encoding */ 94 CERTGeneralNameList *requestorName; /* local; not part of encoding */
98 ocspSingleRequest **requestList; 95 ocspSingleRequest **requestList;
99 CERTCertExtension **requestExtensions; 96 CERTCertExtension **requestExtensions;
100 void *extensionHandle;» » /* local; not part of encoding */ 97 void *extensionHandle; /* local; not part of encoding */
101 }; 98 };
102 99
103 /* 100 /*
104 * This is the actual signature information for an OCSPRequest (applied to 101 * This is the actual signature information for an OCSPRequest (applied to
105 * the TBSRequest structure) or for a BasicOCSPResponse (applied to a 102 * the TBSRequest structure) or for a BasicOCSPResponse (applied to a
106 * ResponseData structure). 103 * ResponseData structure).
107 * 104 *
108 * Note that the "signature" field itself is a BIT STRING; operations on 105 * Note that the "signature" field itself is a BIT STRING; operations on
109 * it need to keep that in mind, converting the length to bytes as needed 106 * it need to keep that in mind, converting the length to bytes as needed
110 * and back again afterward (so that the length is usually expressing bits). 107 * and back again afterward (so that the length is usually expressing bits).
111 * 108 *
112 * The "cert" field is the signer's certificate. In the case of a received 109 * The "cert" field is the signer's certificate. In the case of a received
113 * signature, it will be filled in when the signature is verified. In the 110 * signature, it will be filled in when the signature is verified. In the
114 * case of a created signature, it is filled in on creation and will be the 111 * case of a created signature, it is filled in on creation and will be the
115 * cert used to create the signature when the signing-and-encoding occurs, 112 * cert used to create the signature when the signing-and-encoding occurs,
116 * as well as the cert (and its chain) to fill in derCerts if requested. 113 * as well as the cert (and its chain) to fill in derCerts if requested.
117 * 114 *
118 * The extra fields cache information about the signature after we have 115 * The extra fields cache information about the signature after we have
119 * attempted a verification. "wasChecked", if true, means the signature 116 * attempted a verification. "wasChecked", if true, means the signature
120 * has been checked against the appropriate data and thus that "status" 117 * has been checked against the appropriate data and thus that "status"
121 * contains the result of that verification. If "status" is not SECSuccess, 118 * contains the result of that verification. If "status" is not SECSuccess,
122 * "failureReason" is a copy of the error code that was set at the time; 119 * "failureReason" is a copy of the error code that was set at the time;
123 * presumably it tells why the signature verification failed. 120 * presumably it tells why the signature verification failed.
124 */ 121 */
125 struct ocspSignatureStr { 122 struct ocspSignatureStr {
126 SECAlgorithmID signatureAlgorithm; 123 SECAlgorithmID signatureAlgorithm;
127 SECItem signature;» » » /* a BIT STRING */ 124 SECItem signature; /* a BIT STRING */
128 SECItem **derCerts;»» » /* a SEQUENCE OF Certificate */ 125 SECItem **derCerts; /* a SEQUENCE OF Certificate */
129 CERTCertificate *cert;» » /* local; not part of encoding */ 126 CERTCertificate *cert; /* local; not part of encoding */
130 PRBool wasChecked;» » » /* local; not part of encoding */ 127 PRBool wasChecked; /* local; not part of encoding */
131 SECStatus status;» » » /* local; not part of encoding */ 128 SECStatus status; /* local; not part of encoding */
132 int failureReason;» » » /* local; not part of encoding */ 129 int failureReason; /* local; not part of encoding */
133 }; 130 };
134 131
135 /* 132 /*
136 * An OCSPRequest contains a SEQUENCE OF these, one for each certificate 133 * An OCSPRequest contains a SEQUENCE OF these, one for each certificate
137 * whose status is being checked. 134 * whose status is being checked.
138 * 135 *
139 * Note that in the OCSP specification this is just called "Request", 136 * Note that in the OCSP specification this is just called "Request",
140 * but since that seemed confusing (vs. an OCSPRequest) and to be more 137 * but since that seemed confusing (vs. an OCSPRequest) and to be more
141 * consistent with the parallel type "SingleResponse", I called it a 138 * consistent with the parallel type "SingleResponse", I called it a
142 * "SingleRequest". 139 * "SingleRequest".
143 * 140 *
144 * XXX figure out how to get rid of that arena -- there must be a way 141 * XXX figure out how to get rid of that arena -- there must be a way
145 */ 142 */
146 struct ocspSingleRequestStr { 143 struct ocspSingleRequestStr {
147 PLArenaPool *arena;»» » /* just a copy of the response arena, 144 PLArenaPool *arena; /* just a copy of the response arena,
148 * needed here for extension handling 145 * needed here for extension handling
149 * routines, on creation only */ 146 * routines, on creation only */
150 CERTOCSPCertID *reqCert; 147 CERTOCSPCertID *reqCert;
151 CERTCertExtension **singleRequestExtensions; 148 CERTCertExtension **singleRequestExtensions;
152 }; 149 };
153 150
154 /* 151 /*
155 * A CertID is the means of identifying a certificate, used both in requests 152 * A CertID is the means of identifying a certificate, used both in requests
156 * and in responses. 153 * and in responses.
157 * 154 *
158 * When in a SingleRequest it specifies the certificate to be checked. 155 * When in a SingleRequest it specifies the certificate to be checked.
159 * When in a SingleResponse it is the cert whose status is being given. 156 * When in a SingleResponse it is the cert whose status is being given.
160 */ 157 */
161 struct CERTOCSPCertIDStr { 158 struct CERTOCSPCertIDStr {
162 SECAlgorithmID hashAlgorithm; 159 SECAlgorithmID hashAlgorithm;
163 SECItem issuerNameHash;» » /* an OCTET STRING */ 160 SECItem issuerNameHash; /* an OCTET STRING */
164 SECItem issuerKeyHash;» » /* an OCTET STRING */ 161 SECItem issuerKeyHash; /* an OCTET STRING */
165 SECItem serialNumber;» » /* an INTEGER */ 162 SECItem serialNumber; /* an INTEGER */
166 SECItem issuerSHA1NameHash;»» /* keep other hashes around when */ 163 SECItem issuerSHA1NameHash; /* keep other hashes around when */
167 SECItem issuerMD5NameHash; /* we have them */ 164 SECItem issuerMD5NameHash; /* we have them */
168 SECItem issuerMD2NameHash; 165 SECItem issuerMD2NameHash;
169 SECItem issuerSHA1KeyHash;» » /* keep other hashes around when */ 166 SECItem issuerSHA1KeyHash; /* keep other hashes around when */
170 SECItem issuerMD5KeyHash; /* we have them */ 167 SECItem issuerMD5KeyHash; /* we have them */
171 SECItem issuerMD2KeyHash; 168 SECItem issuerMD2KeyHash;
172 PLArenaPool *poolp; 169 PLArenaPool *poolp;
173 }; 170 };
174 171
175 /* 172 /*
176 * This describes the value of the responseStatus field in an OCSPResponse. 173 * This describes the value of the responseStatus field in an OCSPResponse.
177 * The corresponding ASN.1 definition is: 174 * The corresponding ASN.1 definition is:
178 * 175 *
179 * OCSPResponseStatus ::= ENUMERATED { 176 * OCSPResponseStatus ::= ENUMERATED {
180 * successful (0), --Response has valid confirmations 177 * successful (0), --Response has valid confirmations
(...skipping 21 matching lines...) Expand all
202 } ocspResponseStatus; 199 } ocspResponseStatus;
203 200
204 /* 201 /*
205 * An OCSPResponse is what is sent (encoded) by an OCSP responder. 202 * An OCSPResponse is what is sent (encoded) by an OCSP responder.
206 * 203 *
207 * The field "responseStatus" is the ASN.1 encoded value; the field 204 * The field "responseStatus" is the ASN.1 encoded value; the field
208 * "statusValue" is simply that same value translated into our local 205 * "statusValue" is simply that same value translated into our local
209 * type ocspResponseStatus. 206 * type ocspResponseStatus.
210 */ 207 */
211 struct CERTOCSPResponseStr { 208 struct CERTOCSPResponseStr {
212 PLArenaPool *arena;»» » /* local; not part of encoding */ 209 PLArenaPool *arena; /* local; not part of encoding */
213 SECItem responseStatus;» » /* an ENUMERATED, see above */ 210 SECItem responseStatus; /* an ENUMERATED, see above */
214 ocspResponseStatus statusValue;» /* local; not part of encoding */ 211 ocspResponseStatus statusValue; /* local; not part of encoding */
215 ocspResponseBytes *responseBytes;» /* only when status is successful */ 212 ocspResponseBytes *responseBytes; /* only when status is successful */
216 }; 213 };
217 214
218 /* 215 /*
219 * A ResponseBytes (despite appearances) is what contains the meat 216 * A ResponseBytes (despite appearances) is what contains the meat
220 * of a successful response -- but still in encoded form. The type 217 * of a successful response -- but still in encoded form. The type
221 * given as "responseType" tells you how to decode the string. 218 * given as "responseType" tells you how to decode the string.
222 * 219 *
223 * We look at the OID and translate it into our local OID representation 220 * We look at the OID and translate it into our local OID representation
224 * "responseTypeTag", and use that value to tell us how to decode the 221 * "responseTypeTag", and use that value to tell us how to decode the
225 * actual response itself. For now the only kind of OCSP response we 222 * actual response itself. For now the only kind of OCSP response we
226 * know about is a BasicOCSPResponse. However, the intention in the 223 * know about is a BasicOCSPResponse. However, the intention in the
227 * OCSP specification is to allow for other response types, so we are 224 * OCSP specification is to allow for other response types, so we are
228 * building in that flexibility from the start and thus put a pointer 225 * building in that flexibility from the start and thus put a pointer
229 * to that data structure inside of a union. Whenever OCSP adds more 226 * to that data structure inside of a union. Whenever OCSP adds more
230 * response types, just add them to the union. 227 * response types, just add them to the union.
231 */ 228 */
232 struct ocspResponseBytesStr { 229 struct ocspResponseBytesStr {
233 SECItem responseType;» » /* an OBJECT IDENTIFIER */ 230 SECItem responseType; /* an OBJECT IDENTIFIER */
234 SECOidTag responseTypeTag;» » /* local; not part of encoding */ 231 SECOidTag responseTypeTag; /* local; not part of encoding */
235 SECItem response;» » » /* an OCTET STRING */ 232 SECItem response; /* an OCTET STRING */
236 union { 233 union {
237 » ocspBasicOCSPResponse *basic;» /* when type is id-pkix-ocsp-basic */ 234 ocspBasicOCSPResponse *basic; /* when type is id-pkix-ocsp-basic */
238 } decodedResponse;» » » /* local; not part of encoding */ 235 } decodedResponse; /* local; not part of encoding */
239 }; 236 };
240 237
241 /* 238 /*
242 * A BasicOCSPResponse -- when the responseType in a ResponseBytes is 239 * A BasicOCSPResponse -- when the responseType in a ResponseBytes is
243 * id-pkix-ocsp-basic, the "response" OCTET STRING above is the DER 240 * id-pkix-ocsp-basic, the "response" OCTET STRING above is the DER
244 * encoding of one of these. 241 * encoding of one of these.
245 * 242 *
246 * Note that in the OCSP specification, the signature fields are not 243 * Note that in the OCSP specification, the signature fields are not
247 * part of a separate sub-structure. But since they are the same fields 244 * part of a separate sub-structure. But since they are the same fields
248 * as we define for the signature in a request, it made sense to share 245 * as we define for the signature in a request, it made sense to share
249 * the C data structure here and in some shared code to operate on them. 246 * the C data structure here and in some shared code to operate on them.
250 */ 247 */
251 struct ocspBasicOCSPResponseStr { 248 struct ocspBasicOCSPResponseStr {
252 SECItem tbsResponseDataDER; 249 SECItem tbsResponseDataDER;
253 ocspResponseData *tbsResponseData;» /* "tbs" == To Be Signed */ 250 ocspResponseData *tbsResponseData; /* "tbs" == To Be Signed */
254 ocspSignature responseSignature; 251 ocspSignature responseSignature;
255 }; 252 };
256 253
257 /* 254 /*
258 * A ResponseData is the part of a BasicOCSPResponse that is signed 255 * A ResponseData is the part of a BasicOCSPResponse that is signed
259 * (after it is DER encoded). It contains the real details of the response 256 * (after it is DER encoded). It contains the real details of the response
260 * (a per-certificate status). 257 * (a per-certificate status).
261 */ 258 */
262 struct ocspResponseDataStr { 259 struct ocspResponseDataStr {
263 SECItem version;» » » /* an INTEGER */ 260 SECItem version; /* an INTEGER */
264 SECItem derResponderID; 261 SECItem derResponderID;
265 ocspResponderID *responderID;» /* local; not part of encoding */ 262 ocspResponderID *responderID; /* local; not part of encoding */
266 SECItem producedAt;»» » /* a GeneralizedTime */ 263 SECItem producedAt; /* a GeneralizedTime */
267 CERTOCSPSingleResponse **responses; 264 CERTOCSPSingleResponse **responses;
268 CERTCertExtension **responseExtensions; 265 CERTCertExtension **responseExtensions;
269 }; 266 };
270 267
271 struct ocspResponderIDStr { 268 struct ocspResponderIDStr {
272 CERTOCSPResponderIDType responderIDType;/* local; not part of encoding */ 269 CERTOCSPResponderIDType responderIDType; /* local; not part of encoding */
273 union { 270 union {
274 » CERTName name;» » » /* when ocspResponderID_byName */ 271 CERTName name; /* when ocspResponderID_byName */
275 » SECItem keyHash;» » /* when ocspResponderID_byKey */ 272 SECItem keyHash; /* when ocspResponderID_byKey */
276 » SECItem other;» » » /* when ocspResponderID_other */ 273 SECItem other; /* when ocspResponderID_other */
277 } responderIDValue; 274 } responderIDValue;
278 }; 275 };
279 276
280 /* 277 /*
281 * The ResponseData in a BasicOCSPResponse contains a SEQUENCE OF 278 * The ResponseData in a BasicOCSPResponse contains a SEQUENCE OF
282 * SingleResponse -- one for each certificate whose status is being supplied. 279 * SingleResponse -- one for each certificate whose status is being supplied.
283 * 280 *
284 * XXX figure out how to get rid of that arena -- there must be a way 281 * XXX figure out how to get rid of that arena -- there must be a way
285 */ 282 */
286 struct CERTOCSPSingleResponseStr { 283 struct CERTOCSPSingleResponseStr {
287 PLArenaPool *arena;»» » /* just a copy of the response arena, 284 PLArenaPool *arena; /* just a copy of the response arena,
288 * needed here for extension handling 285 * needed here for extension handling
289 * routines, on creation only */ 286 * routines, on creation only */
290 CERTOCSPCertID *certID; 287 CERTOCSPCertID *certID;
291 SECItem derCertStatus; 288 SECItem derCertStatus;
292 ocspCertStatus *certStatus;»» /* local; not part of encoding */ 289 ocspCertStatus *certStatus; /* local; not part of encoding */
293 SECItem thisUpdate;»» » /* a GeneralizedTime */ 290 SECItem thisUpdate; /* a GeneralizedTime */
294 SECItem *nextUpdate;» » /* a GeneralizedTime */ 291 SECItem *nextUpdate; /* a GeneralizedTime */
295 CERTCertExtension **singleExtensions; 292 CERTCertExtension **singleExtensions;
296 }; 293 };
297 294
298 /* 295 /*
299 * A CertStatus is the actual per-certificate status. Its ASN.1 definition: 296 * A CertStatus is the actual per-certificate status. Its ASN.1 definition:
300 * 297 *
301 * CertStatus ::= CHOICE { 298 * CertStatus ::= CHOICE {
302 * good [0] IMPLICIT NULL, 299 * good [0] IMPLICIT NULL,
303 * revoked [1] IMPLICIT RevokedInfo, 300 * revoked [1] IMPLICIT RevokedInfo,
304 * unknown [2] IMPLICIT UnknownInfo } 301 * unknown [2] IMPLICIT UnknownInfo }
305 * 302 *
306 * (where for now UnknownInfo is defined to be NULL but in the 303 * (where for now UnknownInfo is defined to be NULL but in the
307 * future may be replaced with an enumeration). 304 * future may be replaced with an enumeration).
308 * 305 *
309 * Because it is CHOICE, the status value and its associated information 306 * Because it is CHOICE, the status value and its associated information
310 * (if any) are actually encoded together. To represent this same 307 * (if any) are actually encoded together. To represent this same
311 * information internally, we explicitly define a type and save it, 308 * information internally, we explicitly define a type and save it,
312 * along with the value, into a data structure. 309 * along with the value, into a data structure.
313 */ 310 */
314 311
315 typedef enum { 312 typedef enum {
316 ocspCertStatus_good,» » /* cert is not revoked */ 313 ocspCertStatus_good, /* cert is not revoked */
317 ocspCertStatus_revoked,» » /* cert is revoked */ 314 ocspCertStatus_revoked, /* cert is revoked */
318 ocspCertStatus_unknown,» » /* cert was unknown to the responder */ 315 ocspCertStatus_unknown, /* cert was unknown to the responder */
319 ocspCertStatus_other» » /* status was not an expected value */ 316 ocspCertStatus_other /* status was not an expected value */
320 } ocspCertStatusType; 317 } ocspCertStatusType;
321 318
322 /* 319 /*
323 * This is the actual per-certificate status. 320 * This is the actual per-certificate status.
324 * 321 *
325 * The "goodInfo" and "unknownInfo" items are only place-holders for a NULL. 322 * The "goodInfo" and "unknownInfo" items are only place-holders for a NULL.
326 * (Though someday OCSP may replace UnknownInfo with an enumeration that 323 * (Though someday OCSP may replace UnknownInfo with an enumeration that
327 * gives more detailed information.) 324 * gives more detailed information.)
328 */ 325 */
329 struct ocspCertStatusStr { 326 struct ocspCertStatusStr {
330 ocspCertStatusType certStatusType;» /* local; not part of encoding */ 327 ocspCertStatusType certStatusType; /* local; not part of encoding */
331 union { 328 union {
332 » SECItem *goodInfo;» » /* when ocspCertStatus_good */ 329 SECItem *goodInfo; /* when ocspCertStatus_good */
333 » ocspRevokedInfo *revokedInfo;» /* when ocspCertStatus_revoked */ 330 ocspRevokedInfo *revokedInfo; /* when ocspCertStatus_revoked */
334 » SECItem *unknownInfo;» » /* when ocspCertStatus_unknown */ 331 SECItem *unknownInfo; /* when ocspCertStatus_unknown */
335 » SECItem *otherInfo;» » /* when ocspCertStatus_other */ 332 SECItem *otherInfo; /* when ocspCertStatus_other */
336 } certStatusInfo; 333 } certStatusInfo;
337 }; 334 };
338 335
339 /* 336 /*
340 * A RevokedInfo gives information about a revoked certificate -- when it 337 * A RevokedInfo gives information about a revoked certificate -- when it
341 * was revoked and why. 338 * was revoked and why.
342 */ 339 */
343 struct ocspRevokedInfoStr { 340 struct ocspRevokedInfoStr {
344 SECItem revocationTime;» » /* a GeneralizedTime */ 341 SECItem revocationTime; /* a GeneralizedTime */
345 SECItem *revocationReason;» » /* a CRLReason; ignored for now */ 342 SECItem *revocationReason; /* a CRLReason; ignored for now */
346 }; 343 };
347 344
348 /* 345 /*
349 * ServiceLocator can be included as one of the singleRequestExtensions. 346 * ServiceLocator can be included as one of the singleRequestExtensions.
350 * When added, it specifies the (name of the) issuer of the cert being 347 * When added, it specifies the (name of the) issuer of the cert being
351 * checked, and optionally the value of the AuthorityInfoAccess extension 348 * checked, and optionally the value of the AuthorityInfoAccess extension
352 * if the cert has one. 349 * if the cert has one.
353 */ 350 */
354 struct ocspServiceLocatorStr { 351 struct ocspServiceLocatorStr {
355 CERTName *issuer; 352 CERTName *issuer;
356 SECItem locator;» /* DER encoded authInfoAccess extension from cert */ 353 SECItem locator; /* DER encoded authInfoAccess extension from cert */
357 }; 354 };
358 355
359 #endif /* _OCSPTI_H_ */ 356 #endif /* _OCSPTI_H_ */
OLDNEW
« no previous file with comments | « nss/lib/certhigh/ocspt.h ('k') | nss/lib/certhigh/xcrldist.c » ('j') | nss/lib/util/secoid.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698