comparison nss/lib/certdb/certt.h @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
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
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 /*
5 * certt.h - public data structures for the certificate library
6 */
7 #ifndef _CERTT_H_
8 #define _CERTT_H_
9
10 #include "prclist.h"
11 #include "pkcs11t.h"
12 #include "seccomon.h"
13 #include "secmodt.h"
14 #include "secoidt.h"
15 #include "plarena.h"
16 #include "prcvar.h"
17 #include "nssilock.h"
18 #include "prio.h"
19 #include "prmon.h"
20
21 /* Stan data types */
22 struct NSSCertificateStr;
23 struct NSSTrustDomainStr;
24
25 /* Non-opaque objects */
26 typedef struct CERTAVAStr CERTAVA;
27 typedef struct CERTAttributeStr CERTAttribute;
28 typedef struct CERTAuthInfoAccessStr CERTAuthInfoAccess;
29 typedef struct CERTAuthKeyIDStr CERTAuthKeyID;
30 typedef struct CERTBasicConstraintsStr CERTBasicConstraints;
31 typedef struct NSSTrustDomainStr CERTCertDBHandle;
32 typedef struct CERTCertExtensionStr CERTCertExtension;
33 typedef struct CERTCertKeyStr CERTCertKey;
34 typedef struct CERTCertListStr CERTCertList;
35 typedef struct CERTCertListNodeStr CERTCertListNode;
36 typedef struct CERTCertNicknamesStr CERTCertNicknames;
37 typedef struct CERTCertTrustStr CERTCertTrust;
38 typedef struct CERTCertificateStr CERTCertificate;
39 typedef struct CERTCertificateListStr CERTCertificateList;
40 typedef struct CERTCertificateRequestStr CERTCertificateRequest;
41 typedef struct CERTCrlStr CERTCrl;
42 typedef struct CERTCrlDistributionPointsStr CERTCrlDistributionPoints;
43 typedef struct CERTCrlEntryStr CERTCrlEntry;
44 typedef struct CERTCrlHeadNodeStr CERTCrlHeadNode;
45 typedef struct CERTCrlKeyStr CERTCrlKey;
46 typedef struct CERTCrlNodeStr CERTCrlNode;
47 typedef struct CERTDERCertsStr CERTDERCerts;
48 typedef struct CERTDistNamesStr CERTDistNames;
49 typedef struct CERTGeneralNameStr CERTGeneralName;
50 typedef struct CERTGeneralNameListStr CERTGeneralNameList;
51 typedef struct CERTIssuerAndSNStr CERTIssuerAndSN;
52 typedef struct CERTNameStr CERTName;
53 typedef struct CERTNameConstraintStr CERTNameConstraint;
54 typedef struct CERTNameConstraintsStr CERTNameConstraints;
55 typedef struct CERTOKDomainNameStr CERTOKDomainName;
56 typedef struct CERTPrivKeyUsagePeriodStr CERTPrivKeyUsagePeriod;
57 typedef struct CERTPublicKeyAndChallengeStr CERTPublicKeyAndChallenge;
58 typedef struct CERTRDNStr CERTRDN;
59 typedef struct CERTSignedCrlStr CERTSignedCrl;
60 typedef struct CERTSignedDataStr CERTSignedData;
61 typedef struct CERTStatusConfigStr CERTStatusConfig;
62 typedef struct CERTSubjectListStr CERTSubjectList;
63 typedef struct CERTSubjectNodeStr CERTSubjectNode;
64 typedef struct CERTSubjectPublicKeyInfoStr CERTSubjectPublicKeyInfo;
65 typedef struct CERTValidityStr CERTValidity;
66 typedef struct CERTVerifyLogStr CERTVerifyLog;
67 typedef struct CERTVerifyLogNodeStr CERTVerifyLogNode;
68 typedef struct CRLDistributionPointStr CRLDistributionPoint;
69
70 /* CRL extensions type */
71 typedef unsigned long CERTCrlNumber;
72
73 /*
74 ** An X.500 AVA object
75 */
76 struct CERTAVAStr {
77 SECItem type;
78 SECItem value;
79 };
80
81 /*
82 ** An X.500 RDN object
83 */
84 struct CERTRDNStr {
85 CERTAVA **avas;
86 };
87
88 /*
89 ** An X.500 name object
90 */
91 struct CERTNameStr {
92 PLArenaPool *arena;
93 CERTRDN **rdns;
94 };
95
96 /*
97 ** An X.509 validity object
98 */
99 struct CERTValidityStr {
100 PLArenaPool *arena;
101 SECItem notBefore;
102 SECItem notAfter;
103 };
104
105 /*
106 * A serial number and issuer name, which is used as a database key
107 */
108 struct CERTCertKeyStr {
109 SECItem serialNumber;
110 SECItem derIssuer;
111 };
112
113 /*
114 ** A signed data object. Used to implement the "signed" macro used
115 ** in the X.500 specs.
116 */
117 struct CERTSignedDataStr {
118 SECItem data;
119 SECAlgorithmID signatureAlgorithm;
120 SECItem signature;
121 };
122
123 /*
124 ** An X.509 subject-public-key-info object
125 */
126 struct CERTSubjectPublicKeyInfoStr {
127 PLArenaPool *arena;
128 SECAlgorithmID algorithm;
129 SECItem subjectPublicKey;
130 };
131
132 struct CERTPublicKeyAndChallengeStr {
133 SECItem spki;
134 SECItem challenge;
135 };
136
137 struct CERTCertTrustStr {
138 unsigned int sslFlags;
139 unsigned int emailFlags;
140 unsigned int objectSigningFlags;
141 };
142
143 /*
144 * defined the types of trust that exist
145 */
146 typedef enum SECTrustTypeEnum {
147 trustSSL = 0,
148 trustEmail = 1,
149 trustObjectSigning = 2,
150 trustTypeNone = 3
151 } SECTrustType;
152
153 #define SEC_GET_TRUST_FLAGS(trust,type) \
154 (((type)==trustSSL)?((trust)->sslFlags): \
155 (((type)==trustEmail)?((trust)->emailFlags): \
156 (((type)==trustObjectSigning)?((trust)->objectSigningFlags):0)))
157
158 /*
159 ** An X.509.3 certificate extension
160 */
161 struct CERTCertExtensionStr {
162 SECItem id;
163 SECItem critical;
164 SECItem value;
165 };
166
167 struct CERTSubjectNodeStr {
168 struct CERTSubjectNodeStr *next;
169 struct CERTSubjectNodeStr *prev;
170 SECItem certKey;
171 SECItem keyID;
172 };
173
174 struct CERTSubjectListStr {
175 PLArenaPool *arena;
176 int ncerts;
177 char *emailAddr;
178 CERTSubjectNode *head;
179 CERTSubjectNode *tail; /* do we need tail? */
180 void *entry;
181 };
182
183 /*
184 ** An X.509 certificate object (the unsigned form)
185 */
186 struct CERTCertificateStr {
187 /* the arena is used to allocate any data structures that have the same
188 * lifetime as the cert. This is all stuff that hangs off of the cert
189 * structure, and is all freed at the same time. I is used when the
190 * cert is decoded, destroyed, and at some times when it changes
191 * state
192 */
193 PLArenaPool *arena;
194
195 /* The following fields are static after the cert has been decoded */
196 char *subjectName;
197 char *issuerName;
198 CERTSignedData signatureWrap; /* XXX */
199 SECItem derCert; /* original DER for the cert */
200 SECItem derIssuer; /* DER for issuer name */
201 SECItem derSubject; /* DER for subject name */
202 SECItem derPublicKey; /* DER for the public key */
203 SECItem certKey; /* database key for this cert */
204 SECItem version;
205 SECItem serialNumber;
206 SECAlgorithmID signature;
207 CERTName issuer;
208 CERTValidity validity;
209 CERTName subject;
210 CERTSubjectPublicKeyInfo subjectPublicKeyInfo;
211 SECItem issuerID;
212 SECItem subjectID;
213 CERTCertExtension **extensions;
214 char *emailAddr;
215 CERTCertDBHandle *dbhandle;
216 SECItem subjectKeyID; /* x509v3 subject key identifier */
217 PRBool keyIDGenerated; /* was the keyid generated? */
218 unsigned int keyUsage; /* what uses are allowed for this cert */
219 unsigned int rawKeyUsage; /* value of the key usage extension */
220 PRBool keyUsagePresent; /* was the key usage extension present */
221 PRUint32 nsCertType; /* value of the ns cert type extension */
222 /* must be 32-bit for PR_ATOMIC_SET */
223
224 /* these values can be set by the application to bypass certain checks
225 * or to keep the cert in memory for an entire session.
226 * XXX - need an api to set these
227 */
228 PRBool keepSession; /* keep this cert for entire session*/
229 PRBool timeOK; /* is the bad validity time ok? */
230 CERTOKDomainName *domainOK; /* these domain names are ok */
231
232 /*
233 * these values can change when the cert changes state. These state
234 * changes include transitions from temp to perm or vice-versa, and
235 * changes of trust flags
236 */
237 PRBool isperm;
238 PRBool istemp;
239 char *nickname;
240 char *dbnickname;
241 struct NSSCertificateStr *nssCertificate; /* This is Stan stuff. */
242 CERTCertTrust *trust;
243
244 /* the reference count is modified whenever someone looks up, dups
245 * or destroys a certificate
246 */
247 int referenceCount;
248
249 /* The subject list is a list of all certs with the same subject name.
250 * It can be modified any time a cert is added or deleted from either
251 * the in-memory(temporary) or on-disk(permanent) database.
252 */
253 CERTSubjectList *subjectList;
254
255 /* these belong in the static section, but are here to maintain
256 * the structure's integrity
257 */
258 CERTAuthKeyID * authKeyID; /* x509v3 authority key identifier */
259 PRBool isRoot; /* cert is the end of a chain */
260
261 /* these fields are used by client GUI code to keep track of ssl sockets
262 * that are blocked waiting on GUI feedback related to this cert.
263 * XXX - these should be moved into some sort of application specific
264 * data structure. They are only used by the browser right now.
265 */
266 union {
267 void* apointer; /* was struct SECSocketNode* authsocketlist */
268 struct {
269 unsigned int hasUnsupportedCriticalExt :1;
270 /* add any new option bits needed here */
271 } bits;
272 } options;
273 int series; /* was int authsocketcount; record the series of the pkcs11ID */
274
275 /* This is PKCS #11 stuff. */
276 PK11SlotInfo *slot; /*if this cert came of a token, which is it*/
277 CK_OBJECT_HANDLE pkcs11ID; /*and which object on that token is it */
278 PRBool ownSlot; /*true if the cert owns the slot reference */
279 };
280 #define SEC_CERTIFICATE_VERSION_1 0 /* default created */
281 #define SEC_CERTIFICATE_VERSION_2 1 /* v2 */
282 #define SEC_CERTIFICATE_VERSION_3 2 /* v3 extensions */
283
284 #define SEC_CRL_VERSION_1 0 /* default */
285 #define SEC_CRL_VERSION_2 1 /* v2 extensions */
286
287 /*
288 * used to identify class of cert in mime stream code
289 */
290 #define SEC_CERT_CLASS_CA 1
291 #define SEC_CERT_CLASS_SERVER 2
292 #define SEC_CERT_CLASS_USER 3
293 #define SEC_CERT_CLASS_EMAIL 4
294
295 struct CERTDERCertsStr {
296 PLArenaPool *arena;
297 int numcerts;
298 SECItem *rawCerts;
299 };
300
301 /*
302 ** A PKCS ? Attribute
303 ** XXX this is duplicated through out the code, it *should* be moved
304 ** to a central location. Where would be appropriate?
305 */
306 struct CERTAttributeStr {
307 SECItem attrType;
308 SECItem **attrValue;
309 };
310
311 /*
312 ** A PKCS#10 certificate-request object (the unsigned form)
313 */
314 struct CERTCertificateRequestStr {
315 PLArenaPool *arena;
316 SECItem version;
317 CERTName subject;
318 CERTSubjectPublicKeyInfo subjectPublicKeyInfo;
319 CERTAttribute **attributes;
320 };
321 #define SEC_CERTIFICATE_REQUEST_VERSION 0 /* what we *create* */
322
323
324 /*
325 ** A certificate list object.
326 */
327 struct CERTCertificateListStr {
328 SECItem *certs;
329 int len; /* number of certs */
330 PLArenaPool *arena;
331 };
332
333 struct CERTCertListNodeStr {
334 PRCList links;
335 CERTCertificate *cert;
336 void *appData;
337 };
338
339 struct CERTCertListStr {
340 PRCList list;
341 PLArenaPool *arena;
342 };
343
344 #define CERT_LIST_HEAD(l) ((CERTCertListNode *)PR_LIST_HEAD(&l->list))
345 #define CERT_LIST_TAIL(l) ((CERTCertListNode *)PR_LIST_TAIL(&l->list))
346 #define CERT_LIST_NEXT(n) ((CERTCertListNode *)n->links.next)
347 #define CERT_LIST_END(n,l) (((void *)n) == ((void *)&l->list))
348 #define CERT_LIST_EMPTY(l) CERT_LIST_END(CERT_LIST_HEAD(l), l)
349
350 struct CERTCrlEntryStr {
351 SECItem serialNumber;
352 SECItem revocationDate;
353 CERTCertExtension **extensions;
354 };
355
356 struct CERTCrlStr {
357 PLArenaPool *arena;
358 SECItem version;
359 SECAlgorithmID signatureAlg;
360 SECItem derName;
361 CERTName name;
362 SECItem lastUpdate;
363 SECItem nextUpdate; /* optional for x.509 CRL */
364 CERTCrlEntry **entries;
365 CERTCertExtension **extensions;
366 /* can't add anything there for binary backwards compatibility reasons */
367 };
368
369 struct CERTCrlKeyStr {
370 SECItem derName;
371 SECItem dummy; /* The decoder can not skip a primitive,
372 this serves as a place holder for the
373 decoder to finish its task only
374 */
375 };
376
377 struct CERTSignedCrlStr {
378 PLArenaPool *arena;
379 CERTCrl crl;
380 void *reserved1;
381 PRBool reserved2;
382 PRBool isperm;
383 PRBool istemp;
384 int referenceCount;
385 CERTCertDBHandle *dbhandle;
386 CERTSignedData signatureWrap; /* XXX */
387 char *url;
388 SECItem *derCrl;
389 PK11SlotInfo *slot;
390 CK_OBJECT_HANDLE pkcs11ID;
391 void* opaque; /* do not touch */
392 };
393
394
395 struct CERTCrlHeadNodeStr {
396 PLArenaPool *arena;
397 CERTCertDBHandle *dbhandle;
398 CERTCrlNode *first;
399 CERTCrlNode *last;
400 };
401
402
403 struct CERTCrlNodeStr {
404 CERTCrlNode *next;
405 int type;
406 CERTSignedCrl *crl;
407 };
408
409
410 /*
411 * Array of X.500 Distinguished Names
412 */
413 struct CERTDistNamesStr {
414 PLArenaPool *arena;
415 int nnames;
416 SECItem *names;
417 void *head; /* private */
418 };
419
420
421 #define NS_CERT_TYPE_SSL_CLIENT (0x80) /* bit 0 */
422 #define NS_CERT_TYPE_SSL_SERVER (0x40) /* bit 1 */
423 #define NS_CERT_TYPE_EMAIL (0x20) /* bit 2 */
424 #define NS_CERT_TYPE_OBJECT_SIGNING (0x10) /* bit 3 */
425 #define NS_CERT_TYPE_RESERVED (0x08) /* bit 4 */
426 #define NS_CERT_TYPE_SSL_CA (0x04) /* bit 5 */
427 #define NS_CERT_TYPE_EMAIL_CA (0x02) /* bit 6 */
428 #define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */
429
430 #define EXT_KEY_USAGE_TIME_STAMP (0x8000)
431 #define EXT_KEY_USAGE_STATUS_RESPONDER (0x4000)
432
433 #define NS_CERT_TYPE_APP ( NS_CERT_TYPE_SSL_CLIENT | \
434 NS_CERT_TYPE_SSL_SERVER | \
435 NS_CERT_TYPE_EMAIL | \
436 NS_CERT_TYPE_OBJECT_SIGNING )
437
438 #define NS_CERT_TYPE_CA ( NS_CERT_TYPE_SSL_CA | \
439 NS_CERT_TYPE_EMAIL_CA | \
440 NS_CERT_TYPE_OBJECT_SIGNING_CA | \
441 EXT_KEY_USAGE_STATUS_RESPONDER )
442 typedef enum SECCertUsageEnum {
443 certUsageSSLClient = 0,
444 certUsageSSLServer = 1,
445 certUsageSSLServerWithStepUp = 2,
446 certUsageSSLCA = 3,
447 certUsageEmailSigner = 4,
448 certUsageEmailRecipient = 5,
449 certUsageObjectSigner = 6,
450 certUsageUserCertImport = 7,
451 certUsageVerifyCA = 8,
452 certUsageProtectedObjectSigner = 9,
453 certUsageStatusResponder = 10,
454 certUsageAnyCA = 11
455 } SECCertUsage;
456
457 typedef PRInt64 SECCertificateUsage;
458
459 #define certificateUsageCheckAllUsages (0x0000)
460 #define certificateUsageSSLClient (0x0001)
461 #define certificateUsageSSLServer (0x0002)
462 #define certificateUsageSSLServerWithStepUp (0x0004)
463 #define certificateUsageSSLCA (0x0008)
464 #define certificateUsageEmailSigner (0x0010)
465 #define certificateUsageEmailRecipient (0x0020)
466 #define certificateUsageObjectSigner (0x0040)
467 #define certificateUsageUserCertImport (0x0080)
468 #define certificateUsageVerifyCA (0x0100)
469 #define certificateUsageProtectedObjectSigner (0x0200)
470 #define certificateUsageStatusResponder (0x0400)
471 #define certificateUsageAnyCA (0x0800)
472
473 #define certificateUsageHighest certificateUsageAnyCA
474
475 /*
476 * Does the cert belong to the user, a peer, or a CA.
477 */
478 typedef enum CERTCertOwnerEnum {
479 certOwnerUser = 0,
480 certOwnerPeer = 1,
481 certOwnerCA = 2
482 } CERTCertOwner;
483
484 /*
485 * This enum represents the state of validity times of a certificate
486 */
487 typedef enum SECCertTimeValidityEnum {
488 secCertTimeValid = 0,
489 secCertTimeExpired = 1,
490 secCertTimeNotValidYet = 2,
491 secCertTimeUndetermined = 3 /* validity could not be decoded from the
492 cert, most likely because it was NULL */
493 } SECCertTimeValidity;
494
495 /*
496 * This is used as return status in functions that compare the validity
497 * periods of two certificates A and B, currently only
498 * CERT_CompareValidityTimes.
499 */
500
501 typedef enum CERTCompareValidityStatusEnum
502 {
503 certValidityUndetermined = 0, /* the function is unable to select one cert
504 over another */
505 certValidityChooseB = 1, /* cert B should be preferred */
506 certValidityEqual = 2, /* both certs have the same validity period */
507 certValidityChooseA = 3 /* cert A should be preferred */
508 } CERTCompareValidityStatus;
509
510 /*
511 * Interface for getting certificate nickname strings out of the database
512 */
513
514 /* these are values for the what argument below */
515 #define SEC_CERT_NICKNAMES_ALL 1
516 #define SEC_CERT_NICKNAMES_USER 2
517 #define SEC_CERT_NICKNAMES_SERVER 3
518 #define SEC_CERT_NICKNAMES_CA 4
519
520 struct CERTCertNicknamesStr {
521 PLArenaPool *arena;
522 void *head;
523 int numnicknames;
524 char **nicknames;
525 int what;
526 int totallen;
527 };
528
529 struct CERTIssuerAndSNStr {
530 SECItem derIssuer;
531 CERTName issuer;
532 SECItem serialNumber;
533 };
534
535
536 /* X.509 v3 Key Usage Extension flags */
537 #define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
538 #define KU_NON_REPUDIATION (0x40) /* bit 1 */
539 #define KU_KEY_ENCIPHERMENT (0x20) /* bit 2 */
540 #define KU_DATA_ENCIPHERMENT (0x10) /* bit 3 */
541 #define KU_KEY_AGREEMENT (0x08) /* bit 4 */
542 #define KU_KEY_CERT_SIGN (0x04) /* bit 5 */
543 #define KU_CRL_SIGN (0x02) /* bit 6 */
544 #define KU_ENCIPHER_ONLY (0x01) /* bit 7 */
545 #define KU_ALL (KU_DIGITAL_SIGNATURE | \
546 KU_NON_REPUDIATION | \
547 KU_KEY_ENCIPHERMENT | \
548 KU_DATA_ENCIPHERMENT | \
549 KU_KEY_AGREEMENT | \
550 KU_KEY_CERT_SIGN | \
551 KU_CRL_SIGN | \
552 KU_ENCIPHER_ONLY)
553
554 /* This value will not occur in certs. It is used internally for the case
555 * when either digital signature or non-repudiation is the correct value.
556 */
557 #define KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION (0x2000)
558
559 /* This value will not occur in certs. It is used internally for the case
560 * when the key type is not know ahead of time and either key agreement or
561 * key encipherment are the correct value based on key type
562 */
563 #define KU_KEY_AGREEMENT_OR_ENCIPHERMENT (0x4000)
564
565 /* internal bits that do not match bits in the x509v3 spec, but are used
566 * for similar purposes
567 */
568 #define KU_NS_GOVT_APPROVED (0x8000) /*don't make part of KU_ALL!*/
569 /*
570 * x.509 v3 Basic Constraints Extension
571 * If isCA is false, the pathLenConstraint is ignored.
572 * Otherwise, the following pathLenConstraint values will apply:
573 * < 0 - there is no limit to the certificate path
574 * 0 - CA can issues end-entity certificates only
575 * > 0 - the number of certificates in the certificate path is
576 * limited to this number
577 */
578 #define CERT_UNLIMITED_PATH_CONSTRAINT -2
579
580 struct CERTBasicConstraintsStr {
581 PRBool isCA; /* on if is CA */
582 int pathLenConstraint; /* maximum number of certificates that can be
583 in the cert path. Only applies to a CA
584 certificate; otherwise, it's ignored.
585 */
586 };
587
588 /* Maximum length of a certificate chain */
589 #define CERT_MAX_CERT_CHAIN 20
590
591 #define CERT_MAX_SERIAL_NUMBER_BYTES 20 /* from RFC 3280 */
592 #define CERT_MAX_DN_BYTES 4096 /* arbitrary */
593
594 /* x.509 v3 Reason Flags, used in CRLDistributionPoint Extension */
595 #define RF_UNUSED (0x80) /* bit 0 */
596 #define RF_KEY_COMPROMISE (0x40) /* bit 1 */
597 #define RF_CA_COMPROMISE (0x20) /* bit 2 */
598 #define RF_AFFILIATION_CHANGED (0x10) /* bit 3 */
599 #define RF_SUPERSEDED (0x08) /* bit 4 */
600 #define RF_CESSATION_OF_OPERATION (0x04) /* bit 5 */
601 #define RF_CERTIFICATE_HOLD (0x02) /* bit 6 */
602
603 /* enum for CRL Entry Reason Code */
604 typedef enum CERTCRLEntryReasonCodeEnum {
605 crlEntryReasonUnspecified = 0,
606 crlEntryReasonKeyCompromise = 1,
607 crlEntryReasonCaCompromise = 2,
608 crlEntryReasonAffiliationChanged = 3,
609 crlEntryReasonSuperseded = 4,
610 crlEntryReasonCessationOfOperation = 5,
611 crlEntryReasoncertificatedHold = 6,
612 crlEntryReasonRemoveFromCRL = 8,
613 crlEntryReasonPrivilegeWithdrawn = 9,
614 crlEntryReasonAaCompromise = 10
615 } CERTCRLEntryReasonCode;
616
617 /* If we needed to extract the general name field, use this */
618 /* General Name types */
619 typedef enum CERTGeneralNameTypeEnum {
620 certOtherName = 1,
621 certRFC822Name = 2,
622 certDNSName = 3,
623 certX400Address = 4,
624 certDirectoryName = 5,
625 certEDIPartyName = 6,
626 certURI = 7,
627 certIPAddress = 8,
628 certRegisterID = 9
629 } CERTGeneralNameType;
630
631
632 typedef struct OtherNameStr {
633 SECItem name;
634 SECItem oid;
635 }OtherName;
636
637
638
639 struct CERTGeneralNameStr {
640 CERTGeneralNameType type; /* name type */
641 union {
642 CERTName directoryName; /* distinguish name */
643 OtherName OthName; /* Other Name */
644 SECItem other; /* the rest of the name forms */
645 }name;
646 SECItem derDirectoryName; /* this is saved to simplify directory name
647 comparison */
648 PRCList l;
649 };
650
651 struct CERTGeneralNameListStr {
652 PLArenaPool *arena;
653 CERTGeneralName *name;
654 int refCount;
655 int len;
656 PZLock *lock;
657 };
658
659 struct CERTNameConstraintStr {
660 CERTGeneralName name;
661 SECItem DERName;
662 SECItem min;
663 SECItem max;
664 PRCList l;
665 };
666
667
668 struct CERTNameConstraintsStr {
669 CERTNameConstraint *permited;
670 CERTNameConstraint *excluded;
671 SECItem **DERPermited;
672 SECItem **DERExcluded;
673 };
674
675
676 /* Private Key Usage Period extension struct. */
677 struct CERTPrivKeyUsagePeriodStr {
678 SECItem notBefore;
679 SECItem notAfter;
680 PLArenaPool *arena;
681 };
682
683 /* X.509 v3 Authority Key Identifier extension. For the authority certificate
684 issuer field, we only support URI now.
685 */
686 struct CERTAuthKeyIDStr {
687 SECItem keyID; /* unique key identifier */
688 CERTGeneralName *authCertIssuer; /* CA's issuer name. End with a NULL */
689 SECItem authCertSerialNumber; /* CA's certificate serial number */
690 SECItem **DERAuthCertIssuer; /* This holds the DER encoded format of
691 the authCertIssuer field. It is used
692 by the encoding engine. It should be
693 used as a read only field by the caller.
694 */
695 };
696
697 /* x.509 v3 CRL Distributeion Point */
698
699 /*
700 * defined the types of CRL Distribution points
701 */
702 typedef enum DistributionPointTypesEnum {
703 generalName = 1, /* only support this for now */
704 relativeDistinguishedName = 2
705 } DistributionPointTypes;
706
707 struct CRLDistributionPointStr {
708 DistributionPointTypes distPointType;
709 union {
710 CERTGeneralName *fullName;
711 CERTRDN relativeName;
712 } distPoint;
713 SECItem reasons;
714 CERTGeneralName *crlIssuer;
715
716 /* Reserved for internal use only*/
717 SECItem derDistPoint;
718 SECItem derRelativeName;
719 SECItem **derCrlIssuer;
720 SECItem **derFullName;
721 SECItem bitsmap;
722 };
723
724 struct CERTCrlDistributionPointsStr {
725 CRLDistributionPoint **distPoints;
726 };
727
728 /*
729 * This structure is used to keep a log of errors when verifying
730 * a cert chain. This allows multiple errors to be reported all at
731 * once.
732 */
733 struct CERTVerifyLogNodeStr {
734 CERTCertificate *cert; /* what cert had the error */
735 long error; /* what error was it? */
736 unsigned int depth; /* how far up the chain are we */
737 void *arg; /* error specific argument */
738 struct CERTVerifyLogNodeStr *next; /* next in the list */
739 struct CERTVerifyLogNodeStr *prev; /* next in the list */
740 };
741
742
743 struct CERTVerifyLogStr {
744 PLArenaPool *arena;
745 unsigned int count;
746 struct CERTVerifyLogNodeStr *head;
747 struct CERTVerifyLogNodeStr *tail;
748 };
749
750
751 struct CERTOKDomainNameStr {
752 CERTOKDomainName *next;
753 char name[1]; /* actual length may be longer. */
754 };
755
756
757 typedef SECStatus (PR_CALLBACK *CERTStatusChecker) (CERTCertDBHandle *handle,
758 CERTCertificate *cert,
759 PRTime time,
760 void *pwArg);
761
762 typedef SECStatus (PR_CALLBACK *CERTStatusDestroy) (CERTStatusConfig *handle);
763
764 struct CERTStatusConfigStr {
765 CERTStatusChecker statusChecker; /* NULL means no checking enabled */
766 CERTStatusDestroy statusDestroy; /* enabled or no, will clean up */
767 void *statusContext; /* cx specific to checking protocol */
768 };
769
770 struct CERTAuthInfoAccessStr {
771 SECItem method;
772 SECItem derLocation;
773 CERTGeneralName *location; /* decoded location */
774 };
775
776
777 /* This is the typedef for the callback passed to CERT_OpenCertDB() */
778 /* callback to return database name based on version number */
779 typedef char * (*CERTDBNameFunc)(void *arg, int dbVersion);
780
781 /*
782 * types of cert packages that we can decode
783 */
784 typedef enum CERTPackageTypeEnum {
785 certPackageNone = 0,
786 certPackageCert = 1,
787 certPackagePKCS7 = 2,
788 certPackageNSCertSeq = 3,
789 certPackageNSCertWrap = 4
790 } CERTPackageType;
791
792 /*
793 * these types are for the PKIX Certificate Policies extension
794 */
795 typedef struct {
796 SECOidTag oid;
797 SECItem qualifierID;
798 SECItem qualifierValue;
799 } CERTPolicyQualifier;
800
801 typedef struct {
802 SECOidTag oid;
803 SECItem policyID;
804 CERTPolicyQualifier **policyQualifiers;
805 } CERTPolicyInfo;
806
807 typedef struct {
808 PLArenaPool *arena;
809 CERTPolicyInfo **policyInfos;
810 } CERTCertificatePolicies;
811
812 typedef struct {
813 SECItem organization;
814 SECItem **noticeNumbers;
815 } CERTNoticeReference;
816
817 typedef struct {
818 PLArenaPool *arena;
819 CERTNoticeReference noticeReference;
820 SECItem derNoticeReference;
821 SECItem displayText;
822 } CERTUserNotice;
823
824 typedef struct {
825 PLArenaPool *arena;
826 SECItem **oids;
827 } CERTOidSequence;
828
829 /*
830 * these types are for the PKIX Policy Mappings extension
831 */
832 typedef struct {
833 SECItem issuerDomainPolicy;
834 SECItem subjectDomainPolicy;
835 } CERTPolicyMap;
836
837 typedef struct {
838 PLArenaPool *arena;
839 CERTPolicyMap **policyMaps;
840 } CERTCertificatePolicyMappings;
841
842 /*
843 * these types are for the PKIX inhibitAnyPolicy extension
844 */
845 typedef struct {
846 SECItem inhibitAnySkipCerts;
847 } CERTCertificateInhibitAny;
848
849 /*
850 * these types are for the PKIX Policy Constraints extension
851 */
852 typedef struct {
853 SECItem explicitPolicySkipCerts;
854 SECItem inhibitMappingSkipCerts;
855 } CERTCertificatePolicyConstraints;
856
857 /*
858 * These types are for the validate chain callback param.
859 *
860 * CERTChainVerifyCallback is an application-supplied callback that can be used
861 * to augment libpkix's certificate chain validation with additional
862 * application-specific checks. It may be called multiple times if there are
863 * multiple potentially-valid paths for the certificate being validated. This
864 * callback is called before revocation checking is done on the certificates in
865 * the given chain.
866 *
867 * - isValidChainArg contains the application-provided opaque argument
868 * - currentChain is the currently validated chain. It is ordered with the leaf
869 * certificate at the head and the trust anchor at the tail.
870 *
871 * The callback should set *chainOK = PR_TRUE and return SECSuccess if the
872 * certificate chain is acceptable. It should set *chainOK = PR_FALSE and
873 * return SECSuccess if the chain is unacceptable, to indicate that the given
874 * chain is bad and path building should continue. It should return SECFailure
875 * to indicate an fatal error that will cause path validation to fail
876 * immediately.
877 */
878 typedef SECStatus (*CERTChainVerifyCallbackFunc)
879 (void *isChainValidArg,
880 const CERTCertList *currentChain,
881 PRBool *chainOK);
882
883 /*
884 * Note: If extending this structure, it will be necessary to change the
885 * associated CERTValParamInType
886 */
887 typedef struct {
888 CERTChainVerifyCallbackFunc isChainValid;
889 void *isChainValidArg;
890 } CERTChainVerifyCallback;
891
892 /*
893 * these types are for the CERT_PKIX* Verification functions
894 * These are all optional parameters.
895 */
896
897 typedef enum {
898 cert_pi_end = 0, /* SPECIAL: signifies end of array of
899 * CERTValParam* */
900 cert_pi_nbioContext = 1, /* specify a non-blocking IO context used to
901 * resume a session. If this argument is
902 * specified, no other arguments should be.
903 * Specified in value.pointer.p. If the
904 * operation completes the context will be
905 * freed. */
906 cert_pi_nbioAbort = 2, /* specify a non-blocking IO context for an
907 * existing operation which the caller wants
908 * to abort. If this argument is
909 * specified, no other arguments should be.
910 * Specified in value.pointer.p. If the
911 * operation succeeds the context will be
912 * freed. */
913 cert_pi_certList = 3, /* specify the chain to validate against. If
914 * this value is given, then the path
915 * construction step in the validation is
916 * skipped. Specified in value.pointer.chain */
917 cert_pi_policyOID = 4, /* validate certificate for policy OID.
918 * Specified in value.array.oids. Cert must
919 * be good for at least one OID in order
920 * to validate. Default is that the user is not
921 * concerned about certificate policy. */
922 cert_pi_policyFlags = 5, /* flags for each policy specified in policyOID.
923 * Specified in value.scalar.ul. Policy flags
924 * apply to all specified oids.
925 * Use CERT_POLICY_FLAG_* macros below. If not
926 * specified policy flags default to 0 */
927 cert_pi_keyusage = 6, /* specify what the keyusages the certificate
928 * will be evaluated against, specified in
929 * value.scalar.ui. The cert must validate for
930 * at least one of the specified key usages.
931 * Values match the KU_ bit flags defined
932 * in this file. Default is derived from
933 * the 'usages' function argument */
934 cert_pi_extendedKeyusage= 7, /* specify what the required extended key
935 * usage of the certificate. Specified as
936 * an array of oidTags in value.array.oids.
937 * The cert must validate for at least one
938 * of the specified extended key usages.
939 * If not specified, no extended key usages
940 * will be checked. */
941 cert_pi_date = 8, /* validate certificate is valid as of date
942 * specified in value.scalar.time. A special
943 * value '0' indicates 'now'. default is '0' */
944 cert_pi_revocationFlags = 9, /* Specify what revocation checking to do.
945 * See CERT_REV_FLAG_* macros below
946 * Set in value.pointer.revocation */
947 cert_pi_certStores = 10,/* Bitmask of Cert Store flags (see below)
948 * Set in value.scalar.ui */
949 cert_pi_trustAnchors = 11,/* Specify the list of trusted roots to
950 * validate against.
951 * The default set of trusted roots, these are
952 * root CA certs from libnssckbi.so or CA
953 * certs trusted by user, are used in any of
954 * the following cases:
955 * * when the parameter is not set.
956 * * when the list of trust anchors is empty.
957 * Note that this handling can be further altered by altering the
958 * cert_pi_useOnlyTrustAnchors flag
959 * Specified in value.pointer.chain */
960 cert_pi_useAIACertFetch = 12, /* Enables cert fetching using AIA extension.
961 * In NSS 3.12.1 or later. Default is off.
962 * Value is in value.scalar.b */
963 cert_pi_chainVerifyCallback = 13,
964 /* The callback container for doing extra
965 * validation on the currently calculated chain.
966 * Value is in value.pointer.chainVerifyCallback */
967 cert_pi_useOnlyTrustAnchors = 14,/* If true, disables trusting any
968 * certificates other than the ones passed in via cert_pi_trustAnchors.
969 * If false, then the certificates specified via cert_pi_trustAnchors
970 * will be combined with the pre-existing trusted roots, but only for
971 * the certificate validation being performed.
972 * If no value has been supplied via cert_pi_trustAnchors, this has no
973 * effect.
974 * The default value is true, meaning if this is not supplied, only
975 * trust anchors supplied via cert_pi_trustAnchors are trusted.
976 * Specified in value.scalar.b */
977 cert_pi_max /* SPECIAL: signifies maximum allowed value,
978 * can increase in future releases */
979 } CERTValParamInType;
980
981 /*
982 * for all out parameters:
983 * out parameters are only returned if the caller asks for them in
984 * the CERTValOutParam array. Caller is responsible for the CERTValOutParam
985 * array itself. The pkix verify function will allocate and other arrays
986 * pointers, or objects. The Caller is responsible for freeing those results.
987 * If SECWouldBlock is returned, only cert_pi_nbioContext is returned.
988 */
989 typedef enum {
990 cert_po_end = 0, /* SPECIAL: signifies end of array of
991 * CERTValParam* */
992 cert_po_nbioContext = 1, /* Return a nonblocking context. If no
993 * non-blocking context is specified, then
994 * blocking IO will be used.
995 * Returned in value.pointer.p. The context is
996 * freed after an abort or a complete operation.
997 * This value is only returned on SECWouldBlock.
998 */
999 cert_po_trustAnchor = 2, /* Return the trust anchor for the chain that
1000 * was validated. Returned in
1001 * value.pointer.cert, this value is only
1002 * returned on SECSuccess. */
1003 cert_po_certList = 3, /* Return the entire chain that was validated.
1004 * Returned in value.pointer.certList. If no
1005 * chain could be constructed, this value
1006 * would be NULL. */
1007 cert_po_policyOID = 4, /* Return the policies that were found to be
1008 * valid. Returned in value.array.oids as an
1009 * array. This is only returned on
1010 * SECSuccess. */
1011 cert_po_errorLog = 5, /* Return a log of problems with the chain.
1012 * Returned in value.pointer.log */
1013 cert_po_usages = 6, /* Return what usages the certificate is valid
1014 for. Returned in value.scalar.usages */
1015 cert_po_keyUsage = 7, /* Return what key usages the certificate
1016 * is valid for.
1017 * Returned in value.scalar.usage */
1018 cert_po_extendedKeyusage= 8, /* Return what extended key usages the
1019 * certificate is valid for.
1020 * Returned in value.array.oids */
1021 cert_po_max /* SPECIAL: signifies maximum allowed value,
1022 * can increase in future releases */
1023
1024 } CERTValParamOutType;
1025
1026 typedef enum {
1027 cert_revocation_method_crl = 0,
1028 cert_revocation_method_ocsp,
1029 cert_revocation_method_count
1030 } CERTRevocationMethodIndex;
1031
1032
1033 /*
1034 * The following flags are supposed to be used to control bits in
1035 * each integer contained in the array pointed to be:
1036 * CERTRevocationTests.cert_rev_flags_per_method
1037 * All Flags are prefixed by CERT_REV_M_, where _M_ indicates
1038 * this is a method dependent flag.
1039 */
1040
1041 /*
1042 * Whether or not to use a method for revocation testing.
1043 * If set to "do not test", then all other flags are ignored.
1044 */
1045 #define CERT_REV_M_DO_NOT_TEST_USING_THIS_METHOD 0UL
1046 #define CERT_REV_M_TEST_USING_THIS_METHOD 1UL
1047
1048 /*
1049 * Whether or not NSS is allowed to attempt to fetch fresh information
1050 * from the network.
1051 * (Although fetching will never happen if fresh information for the
1052 * method is already locally available.)
1053 */
1054 #define CERT_REV_M_ALLOW_NETWORK_FETCHING 0UL
1055 #define CERT_REV_M_FORBID_NETWORK_FETCHING 2UL
1056
1057 /*
1058 * Example for an implicit default source:
1059 * The globally configured default OCSP responder.
1060 * IGNORE means:
1061 * ignore the implicit default source, whether it's configured or not.
1062 * ALLOW means:
1063 * if an implicit default source is configured,
1064 * then it overrides any available or missing source in the cert.
1065 * if no implicit default source is configured,
1066 * then we continue to use what's available (or not available)
1067 * in the certs.
1068 */
1069 #define CERT_REV_M_ALLOW_IMPLICIT_DEFAULT_SOURCE 0UL
1070 #define CERT_REV_M_IGNORE_IMPLICIT_DEFAULT_SOURCE 4UL
1071
1072 /*
1073 * Defines the behavior if no fresh information is available,
1074 * fetching from the network is allowed, but the source of revocation
1075 * information is unknown (even after considering implicit sources,
1076 * if allowed by other flags).
1077 * SKIPT_TEST means:
1078 * We ignore that no fresh information is available and
1079 * skip this test.
1080 * REQUIRE_INFO means:
1081 * We still require that fresh information is available.
1082 * Other flags define what happens on missing fresh info.
1083 */
1084 #define CERT_REV_M_SKIP_TEST_ON_MISSING_SOURCE 0UL
1085 #define CERT_REV_M_REQUIRE_INFO_ON_MISSING_SOURCE 8UL
1086
1087 /*
1088 * Defines the behavior if we are unable to obtain fresh information.
1089 * INGORE means:
1090 * Return "cert status unknown"
1091 * FAIL means:
1092 * Return "cert revoked".
1093 */
1094 #define CERT_REV_M_IGNORE_MISSING_FRESH_INFO 0UL
1095 #define CERT_REV_M_FAIL_ON_MISSING_FRESH_INFO 16UL
1096
1097 /*
1098 * What should happen if we were able to find fresh information using
1099 * this method, and the data indicated the cert is good?
1100 * STOP_TESTING means:
1101 * Our success is sufficient, do not continue testing
1102 * other methods.
1103 * CONTINUE_TESTING means:
1104 * We will continue and test the next allowed
1105 * specified method.
1106 */
1107 #define CERT_REV_M_STOP_TESTING_ON_FRESH_INFO 0UL
1108 #define CERT_REV_M_CONTINUE_TESTING_ON_FRESH_INFO 32UL
1109
1110 /* When this flag is used, libpkix will never attempt to use the GET HTTP
1111 * method for OCSP requests; it will always use POST.
1112 */
1113 #define CERT_REV_M_FORCE_POST_METHOD_FOR_OCSP 64UL
1114
1115 /*
1116 * The following flags are supposed to be used to control bits in
1117 * CERTRevocationTests.cert_rev_method_independent_flags
1118 * All Flags are prefixed by CERT_REV_M_, where _M_ indicates
1119 * this is a method independent flag.
1120 */
1121
1122 /*
1123 * This defines the order to checking.
1124 * EACH_METHOD_SEPARATELY means:
1125 * Do all tests related to a particular allowed method
1126 * (both local information and network fetching) in a single step.
1127 * Only after testing for a particular method is done,
1128 * then switching to the next method will happen.
1129 * ALL_LOCAL_INFORMATION_FIRST means:
1130 * Start by testing the information for all allowed methods
1131 * which are already locally available. Only after that is done
1132 * consider to fetch from the network (as allowed by other flags).
1133 */
1134 #define CERT_REV_MI_TEST_EACH_METHOD_SEPARATELY 0UL
1135 #define CERT_REV_MI_TEST_ALL_LOCAL_INFORMATION_FIRST 1UL
1136
1137 /*
1138 * Use this flag to specify that it's necessary that fresh information
1139 * is available for at least one of the allowed methods, but it's
1140 * irrelevant which of the mechanisms succeeded.
1141 * NO_OVERALL_INFO_REQUIREMENT means:
1142 * We strictly follow the requirements for each individual method.
1143 * REQUIRE_SOME_FRESH_INFO_AVAILABLE means:
1144 * After the individual tests have been executed, we must have
1145 * been able to find fresh information using at least one method.
1146 * If we were unable to find fresh info, it's a failure.
1147 * This setting overrides the CERT_REV_M_FAIL_ON_MISSING_FRESH_INFO
1148 * flag on all methods.
1149 */
1150 #define CERT_REV_MI_NO_OVERALL_INFO_REQUIREMENT 0UL
1151 #define CERT_REV_MI_REQUIRE_SOME_FRESH_INFO_AVAILABLE 2UL
1152
1153
1154 typedef struct {
1155 /*
1156 * The size of the array that cert_rev_flags_per_method points to,
1157 * meaning, the number of methods that are known and defined
1158 * by the caller.
1159 */
1160 PRUint32 number_of_defined_methods;
1161
1162 /*
1163 * A pointer to an array of integers.
1164 * Each integer defines revocation checking for a single method,
1165 * by having individual CERT_REV_M_* bits set or not set.
1166 * The meaning of index numbers into this array are defined by
1167 * enum CERTRevocationMethodIndex
1168 * The size of the array must be specified by the caller in the separate
1169 * variable number_of_defined_methods.
1170 * The size of the array may be smaller than
1171 * cert_revocation_method_count, it can happen if a caller
1172 * is not yet aware of the latest revocation methods
1173 * (or does not want to use them).
1174 */
1175 PRUint64 *cert_rev_flags_per_method;
1176
1177 /*
1178 * How many preferred methods are specified?
1179 * This is equivalent to the size of the array that
1180 * preferred_revocation_methods points to.
1181 * It's allowed to set this value to zero,
1182 * then NSS will decide which methods to prefer.
1183 */
1184 PRUint32 number_of_preferred_methods;
1185
1186 /* Array that may specify an optional order of preferred methods.
1187 * Each array entry shall contain a method identifier as defined
1188 * by CERTRevocationMethodIndex.
1189 * The entry at index [0] specifies the method with highest preferrence.
1190 * These methods will be tested first for locally available information.
1191 * Methods allowed for downloading will be attempted in the same order.
1192 */
1193 CERTRevocationMethodIndex *preferred_methods;
1194
1195 /*
1196 * An integer which defines certain aspects of revocation checking
1197 * (independent of individual methods) by having individual
1198 * CERT_REV_MI_* bits set or not set.
1199 */
1200 PRUint64 cert_rev_method_independent_flags;
1201 } CERTRevocationTests;
1202
1203 typedef struct {
1204 CERTRevocationTests leafTests;
1205 CERTRevocationTests chainTests;
1206 } CERTRevocationFlags;
1207
1208 typedef struct CERTValParamInValueStr {
1209 union {
1210 PRBool b;
1211 PRInt32 i;
1212 PRUint32 ui;
1213 PRInt64 l;
1214 PRUint64 ul;
1215 PRTime time;
1216 } scalar;
1217 union {
1218 const void* p;
1219 const char* s;
1220 const CERTCertificate* cert;
1221 const CERTCertList *chain;
1222 const CERTRevocationFlags *revocation;
1223 const CERTChainVerifyCallback *chainVerifyCallback;
1224 } pointer;
1225 union {
1226 const PRInt32 *pi;
1227 const PRUint32 *pui;
1228 const PRInt64 *pl;
1229 const PRUint64 *pul;
1230 const SECOidTag *oids;
1231 } array;
1232 int arraySize;
1233 } CERTValParamInValue;
1234
1235
1236 typedef struct CERTValParamOutValueStr {
1237 union {
1238 PRBool b;
1239 PRInt32 i;
1240 PRUint32 ui;
1241 PRInt64 l;
1242 PRUint64 ul;
1243 SECCertificateUsage usages;
1244 } scalar;
1245 union {
1246 void* p;
1247 char* s;
1248 CERTVerifyLog *log;
1249 CERTCertificate* cert;
1250 CERTCertList *chain;
1251 } pointer;
1252 union {
1253 void *p;
1254 SECOidTag *oids;
1255 } array;
1256 int arraySize;
1257 } CERTValParamOutValue;
1258
1259 typedef struct {
1260 CERTValParamInType type;
1261 CERTValParamInValue value;
1262 } CERTValInParam;
1263
1264 typedef struct {
1265 CERTValParamOutType type;
1266 CERTValParamOutValue value;
1267 } CERTValOutParam;
1268
1269 /*
1270 * Levels of standards conformance strictness for CERT_NameToAsciiInvertible
1271 */
1272 typedef enum CertStrictnessLevels {
1273 CERT_N2A_READABLE = 0, /* maximum human readability */
1274 CERT_N2A_STRICT = 10, /* strict RFC compliance */
1275 CERT_N2A_INVERTIBLE = 20 /* maximum invertibility,
1276 all DirectoryStrings encoded in hex */
1277 } CertStrictnessLevel;
1278
1279 /*
1280 * policy flag defines
1281 */
1282 #define CERT_POLICY_FLAG_NO_MAPPING 1
1283 #define CERT_POLICY_FLAG_EXPLICIT 2
1284 #define CERT_POLICY_FLAG_NO_ANY 4
1285
1286 /*
1287 * CertStore flags
1288 */
1289 #define CERT_ENABLE_LDAP_FETCH 1
1290 #define CERT_ENABLE_HTTP_FETCH 2
1291
1292 /* This functin pointer type may be used for any function that takes
1293 * a CERTCertificate * and returns an allocated string, which must be
1294 * freed by a call to PORT_Free.
1295 */
1296 typedef char * (*CERT_StringFromCertFcn)(CERTCertificate *cert);
1297
1298 /* XXX Lisa thinks the template declarations belong in cert.h, not here? */
1299
1300 #include "secasn1t.h" /* way down here because I expect template stuff to
1301 * move out of here anyway */
1302
1303 SEC_BEGIN_PROTOS
1304
1305 extern const SEC_ASN1Template CERT_CertificateRequestTemplate[];
1306 extern const SEC_ASN1Template CERT_CertificateTemplate[];
1307 extern const SEC_ASN1Template SEC_SignedCertificateTemplate[];
1308 extern const SEC_ASN1Template CERT_CertExtensionTemplate[];
1309 extern const SEC_ASN1Template CERT_SequenceOfCertExtensionTemplate[];
1310 extern const SEC_ASN1Template SECKEY_PublicKeyTemplate[];
1311 extern const SEC_ASN1Template CERT_SubjectPublicKeyInfoTemplate[];
1312 extern const SEC_ASN1Template CERT_TimeChoiceTemplate[];
1313 extern const SEC_ASN1Template CERT_ValidityTemplate[];
1314 extern const SEC_ASN1Template CERT_PublicKeyAndChallengeTemplate[];
1315 extern const SEC_ASN1Template SEC_CertSequenceTemplate[];
1316
1317 extern const SEC_ASN1Template CERT_IssuerAndSNTemplate[];
1318 extern const SEC_ASN1Template CERT_NameTemplate[];
1319 extern const SEC_ASN1Template CERT_SetOfSignedCrlTemplate[];
1320 extern const SEC_ASN1Template CERT_RDNTemplate[];
1321 extern const SEC_ASN1Template CERT_SignedDataTemplate[];
1322 extern const SEC_ASN1Template CERT_CrlTemplate[];
1323 extern const SEC_ASN1Template CERT_SignedCrlTemplate[];
1324
1325 /*
1326 ** XXX should the attribute stuff be centralized for all of ns/security?
1327 */
1328 extern const SEC_ASN1Template CERT_AttributeTemplate[];
1329 extern const SEC_ASN1Template CERT_SetOfAttributeTemplate[];
1330
1331 /* These functions simply return the address of the above-declared templates.
1332 ** This is necessary for Windows DLLs. Sigh.
1333 */
1334 SEC_ASN1_CHOOSER_DECLARE(CERT_CertificateRequestTemplate)
1335 SEC_ASN1_CHOOSER_DECLARE(CERT_CertificateTemplate)
1336 SEC_ASN1_CHOOSER_DECLARE(CERT_CrlTemplate)
1337 SEC_ASN1_CHOOSER_DECLARE(CERT_IssuerAndSNTemplate)
1338 SEC_ASN1_CHOOSER_DECLARE(CERT_NameTemplate)
1339 SEC_ASN1_CHOOSER_DECLARE(CERT_SequenceOfCertExtensionTemplate)
1340 SEC_ASN1_CHOOSER_DECLARE(CERT_SetOfSignedCrlTemplate)
1341 SEC_ASN1_CHOOSER_DECLARE(CERT_SignedDataTemplate)
1342 SEC_ASN1_CHOOSER_DECLARE(CERT_SubjectPublicKeyInfoTemplate)
1343 SEC_ASN1_CHOOSER_DECLARE(SEC_SignedCertificateTemplate)
1344 SEC_ASN1_CHOOSER_DECLARE(CERT_SignedCrlTemplate)
1345 SEC_ASN1_CHOOSER_DECLARE(CERT_TimeChoiceTemplate)
1346
1347 SEC_END_PROTOS
1348
1349 #endif /* _CERTT_H_ */
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)