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

Side by Side Diff: nss/lib/certdb/certi.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 * certi.h - private data structures for the certificate library 5 * certi.h - private data structures for the certificate library
6 */ 6 */
7 #ifndef _CERTI_H_ 7 #ifndef _CERTI_H_
8 #define _CERTI_H_ 8 #define _CERTI_H_
9 9
10 #include "certt.h" 10 #include "certt.h"
(...skipping 20 matching lines...) Expand all
31 PRBool partial; 31 PRBool partial;
32 PRBool decodingError; 32 PRBool decodingError;
33 PRBool badEntries; 33 PRBool badEntries;
34 PRBool badDER; 34 PRBool badDER;
35 PRBool badExtensions; 35 PRBool badExtensions;
36 PRBool heapDER; 36 PRBool heapDER;
37 }; 37 };
38 38
39 typedef struct PreAllocatorStr PreAllocator; 39 typedef struct PreAllocatorStr PreAllocator;
40 40
41 struct PreAllocatorStr 41 struct PreAllocatorStr {
42 {
43 PRSize len; 42 PRSize len;
44 void* data; 43 void* data;
45 PRSize used; 44 PRSize used;
46 PLArenaPool* arena; 45 PLArenaPool* arena;
47 PRSize extra; 46 PRSize extra;
48 }; 47 };
49 48
50 /* CRL entry cache. 49 /* CRL entry cache.
51 This is the same as an entry plus the next/prev pointers for the hash table 50 This is the same as an entry plus the next/prev pointers for the hash table
52 */ 51 */
53 52
54 struct CRLEntryCacheStr { 53 struct CRLEntryCacheStr {
55 CERTCrlEntry entry; 54 CERTCrlEntry entry;
56 CRLEntryCache *prev, *next; 55 CRLEntryCache *prev, *next;
57 }; 56 };
58 57
59 #define CRL_CACHE_INVALID_CRLS 0x0001 /* this state will be set 58 #define CRL_CACHE_INVALID_CRLS 0x0001 /* this state will be set
60 if we have CRL objects with an invalid DER or signature. Can be 59 if we have CRL objects with an invalid DER or signature. Can be
61 cleared if the invalid objects are deleted from the token */ 60 cleared if the invalid objects are deleted from the token */
62 #define CRL_CACHE_LAST_FETCH_FAILED 0x0002 /* this state will be set 61 #define CRL_CACHE_LAST_FETCH_FAILED 0x0002 /* this state will be set
63 if the last CRL fetch encountered an error. Can be cleared if a 62 if the last CRL fetch encountered an error. Can be cleared if a
64 new fetch succeeds */ 63 new fetch succeeds */
65 64
66 #define CRL_CACHE_OUT_OF_MEMORY 0x0004 /* this state will be set 65 #define CRL_CACHE_OUT_OF_MEMORY 0x0004 /* this state will be set
67 if we don't have enough memory to build the hash table of entries */ 66 if we don't have enough memory to build the hash table of entries */
68 67
69 typedef enum { 68 typedef enum {
70 CRL_OriginToken = 0, /* CRL came from PKCS#11 token */ 69 CRL_OriginToken = 0, /* CRL came from PKCS#11 token */
71 CRL_OriginExplicit = 1 /* CRL was explicitly added to the cache, from RAM * / 70 CRL_OriginExplicit = 1 /* CRL was explicitly added to the cache, from RAM */
72 } CRLOrigin; 71 } CRLOrigin;
73 72
74 typedef enum { 73 typedef enum {
75 dpcacheNoEntry = 0, /* no entry found for this SN */ 74 dpcacheNoEntry = 0, /* no entry found for this SN */
76 dpcacheFoundEntry = 1, /* entry found for this SN */ 75 dpcacheFoundEntry = 1, /* entry found for this SN */
77 dpcacheCallerError = 2, /* invalid args */ 76 dpcacheCallerError = 2, /* invalid args */
78 dpcacheInvalidCacheError = 3, /* CRL in cache may be bad DER */ 77 dpcacheInvalidCacheError = 3, /* CRL in cache may be bad DER */
79 /* or unverified */ 78 /* or unverified */
80 dpcacheEmpty = 4, /* no CRL in cache */ 79 dpcacheEmpty = 4, /* no CRL in cache */
81 dpcacheLookupError = 5 /* internal error */ 80 dpcacheLookupError = 5 /* internal error */
82 } dpcacheStatus; 81 } dpcacheStatus;
83 82
84
85 struct CachedCrlStr { 83 struct CachedCrlStr {
86 CERTSignedCrl* crl; 84 CERTSignedCrl* crl;
87 CRLOrigin origin; 85 CRLOrigin origin;
88 /* hash table of entries. We use a PLHashTable and pre-allocate the 86 /* hash table of entries. We use a PLHashTable and pre-allocate the
89 required amount of memory in one shot, so that our allocator can 87 required amount of memory in one shot, so that our allocator can
90 simply pass offsets into it when hashing. 88 simply pass offsets into it when hashing.
91 89
92 This won't work anymore when we support delta CRLs and iCRLs, because 90 This won't work anymore when we support delta CRLs and iCRLs, because
93 the size of the hash table will vary over time. At that point, the best 91 the size of the hash table will vary over time. At that point, the best
94 solution will be to allocate large CRLEntry structures by modifying 92 solution will be to allocate large CRLEntry structures by modifying
95 the DER decoding template. The extra space would be for next/prev 93 the DER decoding template. The extra space would be for next/prev
96 pointers. This would allow entries from different CRLs to be mixed in 94 pointers. This would allow entries from different CRLs to be mixed in
97 the same hash table. 95 the same hash table.
98 */ 96 */
99 PLHashTable* entries; 97 PLHashTable* entries;
100 PreAllocator* prebuffer; /* big pre-allocated buffer mentioned above */ 98 PreAllocator* prebuffer; /* big pre-allocated buffer mentioned above */
101 PRBool sigChecked; /* this CRL signature has already been checked */ 99 PRBool sigChecked; /* this CRL signature has already been checked */
102 PRBool sigValid; /* signature verification status . 100 PRBool sigValid; /* signature verification status .
103 Only meaningful if checked is PR_TRUE . */ 101 Only meaningful if checked is PR_TRUE . */
104 PRBool unbuildable; /* Avoid using assosiated CRL is it fails 102 PRBool unbuildable; /* Avoid using assosiated CRL is it fails
105 * a decoding step */ 103 * a decoding step */
106 }; 104 };
107 105
108 /* CRL distribution point cache object 106 /* CRL distribution point cache object
109 This is a cache of CRL entries for a given distribution point of an issuer 107 This is a cache of CRL entries for a given distribution point of an issuer
110 It is built from a collection of one full and 0 or more delta CRLs. 108 It is built from a collection of one full and 0 or more delta CRLs.
111 */ 109 */
112 110
113 struct CRLDPCacheStr { 111 struct CRLDPCacheStr {
114 #ifdef DPC_RWLOCK 112 #ifdef DPC_RWLOCK
115 NSSRWLock* lock; 113 NSSRWLock* lock;
116 #else 114 #else
117 PRLock* lock; 115 PRLock* lock;
118 #endif 116 #endif
119 SECItem *issuerDERCert; /* issuer DER cert. Don't hold a reference 117 SECItem* issuerDERCert; /* issuer DER cert. Don't hold a reference
120 » » » » to the actual cert so the trust can be 118 to the actual cert so the trust can be
121 » » » » updated on the cert automatically. 119 updated on the cert automatically.
122 » » » » XXX there may be multiple issuer certs, 120 XXX there may be multiple issuer certs,
123 » » » » with different validity dates. Also 121 with different validity dates. Also
124 » » » » need to deal with SKID/AKID . See 122 need to deal with SKID/AKID . See
125 » » » » bugzilla 217387, 233118 */ 123 bugzilla 217387, 233118 */
126 124
127 CERTCertDBHandle *dbHandle; 125 CERTCertDBHandle* dbHandle;
128 126
129 SECItem* subject; /* DER of issuer subject */ 127 SECItem* subject; /* DER of issuer subject */
130 SECItem* distributionPoint; /* DER of distribution point. This may be 128 SECItem* distributionPoint; /* DER of distribution point. This may be
131 NULL when distribution points aren't 129 NULL when distribution points aren't
132 in use (ie. the CA has a single CRL). 130 in use (ie. the CA has a single CRL).
133 Currently not used. */ 131 Currently not used. */
134 132
135 /* array of full CRLs matching this distribution point */ 133 /* array of full CRLs matching this distribution point */
136 PRUint32 ncrls; /* total number of CRLs in crls */ 134 PRUint32 ncrls; /* total number of CRLs in crls */
137 CachedCrl** crls; /* array of all matching CRLs */ 135 CachedCrl** crls; /* array of all matching CRLs */
138 /* XCRL With iCRLs and multiple DPs, the CRL can be shared accross several 136 /* XCRL With iCRLs and multiple DPs, the CRL can be shared accross several
139 issuers. In the future, we'll need to globally recycle the CRL in a 137 issuers. In the future, we'll need to globally recycle the CRL in a
140 separate list in order to avoid extra lookups, decodes, and copies */ 138 separate list in order to avoid extra lookups, decodes, and copies */
141 139
142 /* pointers to good decoded CRLs used to build the cache */ 140 /* pointers to good decoded CRLs used to build the cache */
143 CachedCrl* selected; /* full CRL selected for use in the cache */ 141 CachedCrl* selected; /* full CRL selected for use in the cache */
144 #if 0 142 #if 0
145 /* for future use */ 143 /* for future use */
146 PRInt32 numdeltas; /* number of delta CRLs used for the cache */ 144 PRInt32 numdeltas; /* number of delta CRLs used for the cache */
147 CachedCrl** deltas; /* delta CRLs used for the cache */ 145 CachedCrl** deltas; /* delta CRLs used for the cache */
148 #endif 146 #endif
149 /* cache invalidity bitflag */ 147 /* cache invalidity bitflag */
150 PRUint16 invalid; /* this state will be set if either 148 PRUint16 invalid; /* this state will be set if either
151 CRL_CACHE_INVALID_CRLS or CRL_CACHE_LAST_FETCH_FAILED is set. 149 CRL_CACHE_INVALID_CRLS or CRL_CACHE_LAST_FETCH_FAILED is set.
152 In those cases, all certs are considered to have unknown status. 150 In those cases, all certs are considered to have unknown status.
153 The invalid state can only be cleared during an update if all 151 The invalid state can only be cleared during an update if all
154 error states are cleared */ 152 error states are cleared */
155 PRBool refresh; /* manual refresh from tokens has been forced */ 153 PRBool refresh; /* manual refresh from tokens has been forced */
156 PRBool mustchoose; /* trigger reselection algorithm, for case when 154 PRBool mustchoose; /* trigger reselection algorithm, for case when
157 RAM CRL objects are dropped from the cache */ 155 RAM CRL objects are dropped from the cache */
158 PRTime lastfetch; /* time a CRL token fetch was last performed */ 156 PRTime lastfetch; /* time a CRL token fetch was last performed */
159 PRTime lastcheck; /* time CRL token objects were last checked for 157 PRTime lastcheck; /* time CRL token objects were last checked for
160 existence */ 158 existence */
161 }; 159 };
162 160
163 /* CRL issuer cache object 161 /* CRL issuer cache object
164 This object tracks all the distribution point caches for a given issuer. 162 This object tracks all the distribution point caches for a given issuer.
165 XCRL once we support multiple issuing distribution points, this object 163 XCRL once we support multiple issuing distribution points, this object
166 will be a hash table. For now, it just holds the single CRL distribution 164 will be a hash table. For now, it just holds the single CRL distribution
167 point cache structure. 165 point cache structure.
168 */ 166 */
169 167
170 struct CRLIssuerCacheStr { 168 struct CRLIssuerCacheStr {
171 SECItem* subject; /* DER of issuer subject */ 169 SECItem* subject; /* DER of issuer subject */
172 CRLDPCache* dpp; 170 CRLDPCache* dpp;
173 }; 171 };
174 172
175 /* CRL revocation cache object 173 /* CRL revocation cache object
176 This object tracks all the issuer caches 174 This object tracks all the issuer caches
177 */ 175 */
178 176
179 struct CRLCacheStr { 177 struct CRLCacheStr {
180 #ifdef GLOBAL_RWLOCK 178 #ifdef GLOBAL_RWLOCK
181 NSSRWLock* lock; 179 NSSRWLock* lock;
182 #else 180 #else
183 PRLock* lock; 181 PRLock* lock;
184 #endif 182 #endif
185 /* hash table of issuer to CRLIssuerCacheStr, 183 /* hash table of issuer to CRLIssuerCacheStr,
186 indexed by issuer DER subject */ 184 indexed by issuer DER subject */
187 PLHashTable* issuers; 185 PLHashTable* issuers;
188 }; 186 };
189 187
190 SECStatus InitCRLCache(void); 188 SECStatus InitCRLCache(void);
191 SECStatus ShutdownCRLCache(void); 189 SECStatus ShutdownCRLCache(void);
192 190
193 /* Returns a pointer to an environment-like string, a series of 191 /* Returns a pointer to an environment-like string, a series of
194 ** null-terminated strings, terminated by a zero-length string. 192 ** null-terminated strings, terminated by a zero-length string.
195 ** This function is intended to be internal to NSS. 193 ** This function is intended to be internal to NSS.
196 */ 194 */
197 extern char * cert_GetCertificateEmailAddresses(CERTCertificate *cert); 195 extern char* cert_GetCertificateEmailAddresses(CERTCertificate* cert);
198 196
199 /* 197 /*
200 * These functions are used to map subjectKeyID extension values to certs 198 * These functions are used to map subjectKeyID extension values to certs
201 * and to keep track of the checks for user certificates in each slot 199 * and to keep track of the checks for user certificates in each slot
202 */ 200 */
203 SECStatus 201 SECStatus cert_CreateSubjectKeyIDHashTable(void);
204 cert_CreateSubjectKeyIDHashTable(void);
205 202
206 SECStatus 203 SECStatus cert_AddSubjectKeyIDMapping(SECItem* subjKeyID,
207 cert_AddSubjectKeyIDMapping(SECItem *subjKeyID, CERTCertificate *cert); 204 CERTCertificate* cert);
208 205
209 SECStatus 206 SECStatus cert_UpdateSubjectKeyIDSlotCheck(SECItem* slotid, int series);
210 cert_UpdateSubjectKeyIDSlotCheck(SECItem *slotid, int series);
211 207
212 int 208 int cert_SubjectKeyIDSlotCheckSeries(SECItem* slotid);
213 cert_SubjectKeyIDSlotCheckSeries(SECItem *slotid);
214 209
215 /* 210 /*
216 * Call this function to remove an entry from the mapping table. 211 * Call this function to remove an entry from the mapping table.
217 */ 212 */
218 SECStatus 213 SECStatus cert_RemoveSubjectKeyIDMapping(SECItem* subjKeyID);
219 cert_RemoveSubjectKeyIDMapping(SECItem *subjKeyID);
220 214
221 SECStatus 215 SECStatus cert_DestroySubjectKeyIDHashTable(void);
222 cert_DestroySubjectKeyIDHashTable(void);
223 216
224 SECItem* 217 SECItem* cert_FindDERCertBySubjectKeyID(SECItem* subjKeyID);
225 cert_FindDERCertBySubjectKeyID(SECItem *subjKeyID);
226 218
227 /* return maximum length of AVA value based on its type OID tag. */ 219 /* return maximum length of AVA value based on its type OID tag. */
228 extern int cert_AVAOidTagToMaxLen(SECOidTag tag); 220 extern int cert_AVAOidTagToMaxLen(SECOidTag tag);
229 221
230 /* Make an AVA, allocated from pool, from OID and DER encoded value */ 222 /* Make an AVA, allocated from pool, from OID and DER encoded value */
231 extern CERTAVA * CERT_CreateAVAFromRaw(PLArenaPool *pool, 223 extern CERTAVA* CERT_CreateAVAFromRaw(PLArenaPool* pool, const SECItem* OID,
232 const SECItem * OID, const SECItem * value); 224 const SECItem* value);
233 225
234 /* Make an AVA from binary input specified by SECItem */ 226 /* Make an AVA from binary input specified by SECItem */
235 extern CERTAVA * CERT_CreateAVAFromSECItem(PLArenaPool *arena, SECOidTag kind, 227 extern CERTAVA* CERT_CreateAVAFromSECItem(PLArenaPool* arena, SECOidTag kind,
236 int valueType, SECItem *value); 228 int valueType, SECItem* value);
237 229
238 /* 230 /*
239 * get a DPCache object for the given issuer subject and dp 231 * get a DPCache object for the given issuer subject and dp
240 * Automatically creates the cache object if it doesn't exist yet. 232 * Automatically creates the cache object if it doesn't exist yet.
241 */ 233 */
242 SECStatus AcquireDPCache(CERTCertificate* issuer, const SECItem* subject, 234 SECStatus AcquireDPCache(CERTCertificate* issuer, const SECItem* subject,
243 const SECItem* dp, PRTime t, void* wincx, 235 const SECItem* dp, PRTime t, void* wincx,
244 CRLDPCache** dpcache, PRBool* writeLocked); 236 CRLDPCache** dpcache, PRBool* writeLocked);
245 237
246 /* check if a particular SN is in the CRL cache and return its entry */ 238 /* check if a particular SN is in the CRL cache and return its entry */
247 dpcacheStatus DPCache_Lookup(CRLDPCache* cache, const SECItem* sn, 239 dpcacheStatus DPCache_Lookup(CRLDPCache* cache, const SECItem* sn,
248 CERTCrlEntry** returned); 240 CERTCrlEntry** returned);
249 241
250 /* release a DPCache object that was previously acquired */ 242 /* release a DPCache object that was previously acquired */
251 void ReleaseDPCache(CRLDPCache* dpcache, PRBool writeLocked); 243 void ReleaseDPCache(CRLDPCache* dpcache, PRBool writeLocked);
252 244
253 /* 245 /*
254 * map Stan errors into NSS errors 246 * map Stan errors into NSS errors
255 * This function examines the stan error stack and automatically sets 247 * This function examines the stan error stack and automatically sets
256 * PORT_SetError(); to the appropriate SEC_ERROR value. 248 * PORT_SetError(); to the appropriate SEC_ERROR value.
257 */ 249 */
258 void CERT_MapStanError(); 250 void CERT_MapStanError();
259 251
260 /* Like CERT_VerifyCert, except with an additional argument, flags. The 252 /* Like CERT_VerifyCert, except with an additional argument, flags. The
261 * flags are defined immediately below. 253 * flags are defined immediately below.
262 */ 254 */
263 SECStatus 255 SECStatus cert_VerifyCertWithFlags(CERTCertDBHandle* handle,
264 cert_VerifyCertWithFlags(CERTCertDBHandle *handle, CERTCertificate *cert, 256 CERTCertificate* cert, PRBool checkSig,
265 PRBool checkSig, SECCertUsage certUsage, PRTime t, 257 SECCertUsage certUsage, PRTime t,
266 PRUint32 flags, void *wincx, CERTVerifyLog *log); 258 PRUint32 flags, void* wincx,
259 CERTVerifyLog* log);
267 260
268 /* Use the default settings. 261 /* Use the default settings.
269 * cert_VerifyCertWithFlags(..., CERT_VERIFYCERT_USE_DEFAULTS, ...) is 262 * cert_VerifyCertWithFlags(..., CERT_VERIFYCERT_USE_DEFAULTS, ...) is
270 * equivalent to CERT_VerifyCert(...); 263 * equivalent to CERT_VerifyCert(...);
271 */ 264 */
272 #define CERT_VERIFYCERT_USE_DEFAULTS 0 265 #define CERT_VERIFYCERT_USE_DEFAULTS 0
273 266
274 /* Skip all the OCSP checks during certificate verification, regardless of 267 /* Skip all the OCSP checks during certificate verification, regardless of
275 * the global OCSP settings. By default, certificate |cert| will have its 268 * the global OCSP settings. By default, certificate |cert| will have its
276 * revocation status checked via OCSP according to the global OCSP settings. 269 * revocation status checked via OCSP according to the global OCSP settings.
277 * 270 *
278 * OCSP checking is always skipped when certUsage is certUsageStatusResponder. 271 * OCSP checking is always skipped when certUsage is certUsageStatusResponder.
279 */ 272 */
280 #define CERT_VERIFYCERT_SKIP_OCSP 1 273 #define CERT_VERIFYCERT_SKIP_OCSP 1
281 274
282 /* Interface function for libpkix cert validation engine: 275 /* Interface function for libpkix cert validation engine:
283 * cert_verify wrapper. */ 276 * cert_verify wrapper. */
284 SECStatus 277 SECStatus cert_VerifyCertChainPkix(CERTCertificate* cert, PRBool checkSig,
285 cert_VerifyCertChainPkix(CERTCertificate *cert, 278 SECCertUsage requiredUsage, PRTime time,
286 PRBool checkSig, 279 void* wincx, CERTVerifyLog* log,
287 SECCertUsage requiredUsage, 280 PRBool* sigError, PRBool* revoked);
288 PRTime time,
289 void *wincx,
290 CERTVerifyLog *log,
291 PRBool *sigError,
292 PRBool *revoked);
293 281
294 SECStatus cert_InitLocks(void); 282 SECStatus cert_InitLocks(void);
295 283
296 SECStatus cert_DestroyLocks(void); 284 SECStatus cert_DestroyLocks(void);
297 285
298 /* 286 /*
299 * fill in nsCertType field of the cert based on the cert extension 287 * fill in nsCertType field of the cert based on the cert extension
300 */ 288 */
301 extern SECStatus cert_GetCertType(CERTCertificate *cert); 289 extern SECStatus cert_GetCertType(CERTCertificate* cert);
302 290
303 /* 291 /*
304 * compute and return the value of nsCertType for cert, but do not 292 * compute and return the value of nsCertType for cert, but do not
305 * update the CERTCertificate. 293 * update the CERTCertificate.
306 */ 294 */
307 extern PRUint32 cert_ComputeCertType(CERTCertificate *cert); 295 extern PRUint32 cert_ComputeCertType(CERTCertificate* cert);
308 296
309 void cert_AddToVerifyLog(CERTVerifyLog *log,CERTCertificate *cert, 297 void cert_AddToVerifyLog(CERTVerifyLog* log, CERTCertificate* cert,
310 long errorCode, unsigned int depth, 298 long errorCode, unsigned int depth, void* arg);
311 void *arg);
312 299
313 /* Insert a DER CRL into the CRL cache, and take ownership of it. 300 /* Insert a DER CRL into the CRL cache, and take ownership of it.
314 * 301 *
315 * cert_CacheCRLByGeneralName takes ownership of the memory in crl argument 302 * cert_CacheCRLByGeneralName takes ownership of the memory in crl argument
316 * completely. crl must be freeable by SECITEM_FreeItem. It will be freed 303 * completely. crl must be freeable by SECITEM_FreeItem. It will be freed
317 * immediately if it is rejected from the CRL cache, or later during cache 304 * immediately if it is rejected from the CRL cache, or later during cache
318 * updates when a new crl is available, or at shutdown time. 305 * updates when a new crl is available, or at shutdown time.
319 * 306 *
320 * canonicalizedName represents the source of the CRL, a GeneralName. 307 * canonicalizedName represents the source of the CRL, a GeneralName.
321 * The format of the encoding is not restricted, but all callers of 308 * The format of the encoding is not restricted, but all callers of
322 * cert_CacheCRLByGeneralName and cert_FindCRLByGeneralName must use 309 * cert_CacheCRLByGeneralName and cert_FindCRLByGeneralName must use
323 * the same encoding. To facilitate X.500 name matching, a canonicalized 310 * the same encoding. To facilitate X.500 name matching, a canonicalized
324 * encoding of the GeneralName should be used, if available. 311 * encoding of the GeneralName should be used, if available.
325 */ 312 */
326 313
327 SECStatus cert_CacheCRLByGeneralName(CERTCertDBHandle* dbhandle, SECItem* crl, 314 SECStatus cert_CacheCRLByGeneralName(CERTCertDBHandle* dbhandle, SECItem* crl,
328 const SECItem* canonicalizedName); 315 const SECItem* canonicalizedName);
329 316
330 struct NamedCRLCacheStr { 317 struct NamedCRLCacheStr {
331 PRLock* lock; 318 PRLock* lock;
332 PLHashTable* entries; 319 PLHashTable* entries;
333 }; 320 };
334 321
335 /* NamedCRLCacheEntryStr is filled in by cert_CacheCRLByGeneralName, 322 /* NamedCRLCacheEntryStr is filled in by cert_CacheCRLByGeneralName,
336 * and read by cert_FindCRLByGeneralName */ 323 * and read by cert_FindCRLByGeneralName */
337 struct NamedCRLCacheEntryStr { 324 struct NamedCRLCacheEntryStr {
338 SECItem* canonicalizedName; 325 SECItem* canonicalizedName;
339 SECItem* crl; /* DER, kept only if CRL 326 SECItem* crl; /* DER, kept only if CRL
340 * is successfully cached */ 327 * is successfully cached */
341 PRBool inCRLCache; 328 PRBool inCRLCache;
342 PRTime successfulInsertionTime; /* insertion time */ 329 PRTime successfulInsertionTime; /* insertion time */
343 PRTime lastAttemptTime; /* time of last call to 330 PRTime lastAttemptTime; /* time of last call to
344 cert_CacheCRLByGeneralName with this name */ 331 cert_CacheCRLByGeneralName with this name */
345 PRBool badDER; /* ASN.1 error */ 332 PRBool badDER; /* ASN.1 error */
346 PRBool dupe; /* matching DER CRL already in CRL cache */ 333 PRBool dupe; /* matching DER CRL already in CRL cache */
347 PRBool unsupported; /* IDP, delta, any other reason */ 334 PRBool unsupported; /* IDP, delta, any other reason */
348 }; 335 };
349 336
350 typedef enum { 337 typedef enum {
351 certRevocationStatusRevoked = 0, 338 certRevocationStatusRevoked = 0,
352 certRevocationStatusValid = 1, 339 certRevocationStatusValid = 1,
353 certRevocationStatusUnknown = 2 340 certRevocationStatusUnknown = 2
354 } CERTRevocationStatus; 341 } CERTRevocationStatus;
355 342
356 /* Returns detailed status of the cert(revStatus variable). Tells if 343 /* Returns detailed status of the cert(revStatus variable). Tells if
357 * issuer cache has OriginFetchedWithTimeout crl in it. */ 344 * issuer cache has OriginFetchedWithTimeout crl in it. */
358 SECStatus 345 SECStatus cert_CheckCertRevocationStatus(CERTCertificate* cert,
359 cert_CheckCertRevocationStatus(CERTCertificate* cert, CERTCertificate* issuer, 346 CERTCertificate* issuer,
360 const SECItem* dp, PRTime t, void *wincx, 347 const SECItem* dp, PRTime t,
361 CERTRevocationStatus *revStatus, 348 void* wincx,
362 CERTCRLEntryReasonCode *revReason); 349 CERTRevocationStatus* revStatus,
363 350 CERTCRLEntryReasonCode* revReason);
364 351
365 SECStatus cert_AcquireNamedCRLCache(NamedCRLCache** returned); 352 SECStatus cert_AcquireNamedCRLCache(NamedCRLCache** returned);
366 353
367 /* cert_FindCRLByGeneralName must be called only while the named cache is 354 /* cert_FindCRLByGeneralName must be called only while the named cache is
368 * acquired, and the entry is only valid until cache is released. 355 * acquired, and the entry is only valid until cache is released.
369 */ 356 */
370 SECStatus cert_FindCRLByGeneralName(NamedCRLCache* ncc, 357 SECStatus cert_FindCRLByGeneralName(NamedCRLCache* ncc,
371 const SECItem* canonicalizedName, 358 const SECItem* canonicalizedName,
372 NamedCRLCacheEntry** retEntry); 359 NamedCRLCacheEntry** retEntry);
373 360
374 SECStatus cert_ReleaseNamedCRLCache(NamedCRLCache* ncc); 361 SECStatus cert_ReleaseNamedCRLCache(NamedCRLCache* ncc);
375 362
376 /* This is private for now. Maybe shoule be public. */ 363 /* This is private for now. Maybe shoule be public. */
377 CERTGeneralName * 364 CERTGeneralName* cert_GetSubjectAltNameList(const CERTCertificate* cert,
378 cert_GetSubjectAltNameList(const CERTCertificate *cert, PLArenaPool *arena); 365 PLArenaPool* arena);
379 366
380 /* Count DNS names and IP addresses in a list of GeneralNames */ 367 /* Count DNS names and IP addresses in a list of GeneralNames */
381 PRUint32 368 PRUint32 cert_CountDNSPatterns(CERTGeneralName* firstName);
382 cert_CountDNSPatterns(CERTGeneralName *firstName);
383 369
384 /* 370 /*
385 * returns the trust status of the leaf certificate based on usage. 371 * returns the trust status of the leaf certificate based on usage.
386 * If the leaf is explicitly untrusted, this function will fail and 372 * If the leaf is explicitly untrusted, this function will fail and
387 * failedFlags will be set to the trust bit value that lead to the failure. 373 * failedFlags will be set to the trust bit value that lead to the failure.
388 * If the leaf is trusted, isTrusted is set to true and the function returns 374 * If the leaf is trusted, isTrusted is set to true and the function returns
389 * SECSuccess. This function does not check if the cert is fit for a 375 * SECSuccess. This function does not check if the cert is fit for a
390 * particular usage. 376 * particular usage.
391 */ 377 */
392 SECStatus 378 SECStatus cert_CheckLeafTrust(CERTCertificate* cert, SECCertUsage usage,
393 cert_CheckLeafTrust(CERTCertificate *cert, 379 unsigned int* failedFlags, PRBool* isTrusted);
394 SECCertUsage usage,
395 unsigned int *failedFlags,
396 PRBool *isTrusted);
397 380
398 #endif /* _CERTI_H_ */ 381 #endif /* _CERTI_H_ */
399
OLDNEW
« no previous file with comments | « nss/lib/certdb/certdb.c ('k') | nss/lib/certdb/certt.h » ('j') | nss/lib/util/secoid.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698