| |
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 #ifndef PKIT_H |
| |
6 #define PKIT_H |
| |
7 |
| |
8 /* |
| |
9 * pkit.h |
| |
10 * |
| |
11 * This file contains definitions for the types of the top-level PKI objects. |
| |
12 */ |
| |
13 |
| |
14 #ifndef NSSBASET_H |
| |
15 #include "nssbaset.h" |
| |
16 #endif /* NSSBASET_H */ |
| |
17 |
| |
18 #ifndef BASET_H |
| |
19 #include "baset.h" |
| |
20 #endif /* BASET_H */ |
| |
21 |
| |
22 #include "certt.h" |
| |
23 #include "pkcs11t.h" |
| |
24 |
| |
25 #ifndef NSSPKIT_H |
| |
26 #include "nsspkit.h" |
| |
27 #endif /* NSSPKIT_H */ |
| |
28 |
| |
29 #ifndef NSSDEVT_H |
| |
30 #include "nssdevt.h" |
| |
31 #endif /* NSSDEVT_H */ |
| |
32 |
| |
33 #ifndef DEVT_H |
| |
34 #include "devt.h" |
| |
35 #endif /* DEVT_H */ |
| |
36 |
| |
37 #ifndef nssrwlkt_h__ |
| |
38 #include "nssrwlkt.h" |
| |
39 #endif /* nssrwlkt_h__ */ |
| |
40 |
| |
41 PR_BEGIN_EXTERN_C |
| |
42 |
| |
43 /* |
| |
44 * A note on ephemeral certs |
| |
45 * |
| |
46 * The key objects defined here can only be created on tokens, and can only |
| |
47 * exist on tokens. Therefore, any instance of a key object must have |
| |
48 * a corresponding cryptoki instance. OTOH, certificates created in |
| |
49 * crypto contexts need not be stored as session objects on the token. |
| |
50 * There are good performance reasons for not doing so. The certificate |
| |
51 * and trust objects have been defined with a cryptoContext field to |
| |
52 * allow for ephemeral certs, which may have a single instance in a crypto |
| |
53 * context along with any number (including zero) of cryptoki instances. |
| |
54 * Since contexts may not share objects, there can be only one context |
| |
55 * for each object. |
| |
56 */ |
| |
57 |
| |
58 typedef enum { |
| |
59 nssPKILock = 1, |
| |
60 nssPKIMonitor = 2 |
| |
61 } nssPKILockType; |
| |
62 |
| |
63 /* nssPKIObject |
| |
64 * |
| |
65 * This is the base object class, common to all PKI objects defined in |
| |
66 * nsspkit.h |
| |
67 */ |
| |
68 struct nssPKIObjectStr |
| |
69 { |
| |
70 /* The arena for all object memory */ |
| |
71 NSSArena *arena; |
| |
72 /* Atomically incremented/decremented reference counting */ |
| |
73 PRInt32 refCount; |
| |
74 /* lock protects the array of nssCryptokiInstance's of the object */ |
| |
75 union { |
| |
76 PZLock* lock; |
| |
77 PZMonitor *mlock; |
| |
78 } sync; |
| |
79 nssPKILockType lockType; |
| |
80 /* XXX with LRU cache, this cannot be guaranteed up-to-date. It cannot |
| |
81 * be compared against the update level of the trust domain, since it is |
| |
82 * also affected by import/export. Where is this array needed? |
| |
83 */ |
| |
84 nssCryptokiObject **instances; |
| |
85 PRUint32 numInstances; |
| |
86 /* The object must live in a trust domain */ |
| |
87 NSSTrustDomain *trustDomain; |
| |
88 /* The object may live in a crypto context */ |
| |
89 NSSCryptoContext *cryptoContext; |
| |
90 /* XXX added so temp certs can have nickname, think more ... */ |
| |
91 NSSUTF8 *tempName; |
| |
92 }; |
| |
93 |
| |
94 typedef struct nssDecodedCertStr nssDecodedCert; |
| |
95 |
| |
96 typedef struct nssCertificateStoreStr nssCertificateStore; |
| |
97 |
| |
98 /* How wide is the scope of this? */ |
| |
99 typedef struct nssSMIMEProfileStr nssSMIMEProfile; |
| |
100 |
| |
101 typedef struct nssPKIObjectStr nssPKIObject; |
| |
102 |
| |
103 struct NSSTrustStr |
| |
104 { |
| |
105 nssPKIObject object; |
| |
106 NSSCertificate *certificate; |
| |
107 nssTrustLevel serverAuth; |
| |
108 nssTrustLevel clientAuth; |
| |
109 nssTrustLevel emailProtection; |
| |
110 nssTrustLevel codeSigning; |
| |
111 PRBool stepUpApproved; |
| |
112 }; |
| |
113 |
| |
114 struct nssSMIMEProfileStr |
| |
115 { |
| |
116 nssPKIObject object; |
| |
117 NSSCertificate *certificate; |
| |
118 NSSASCII7 *email; |
| |
119 NSSDER *subject; |
| |
120 NSSItem *profileTime; |
| |
121 NSSItem *profileData; |
| |
122 }; |
| |
123 |
| |
124 struct NSSCertificateStr |
| |
125 { |
| |
126 nssPKIObject object; |
| |
127 NSSCertificateType type; |
| |
128 NSSItem id; |
| |
129 NSSBER encoding; |
| |
130 NSSDER issuer; |
| |
131 NSSDER subject; |
| |
132 NSSDER serial; |
| |
133 NSSASCII7 *email; |
| |
134 nssDecodedCert *decoding; |
| |
135 }; |
| |
136 |
| |
137 struct NSSPrivateKeyStr; |
| |
138 |
| |
139 struct NSSPublicKeyStr; |
| |
140 |
| |
141 struct NSSSymmetricKeyStr; |
| |
142 |
| |
143 typedef struct nssTDCertificateCacheStr nssTDCertificateCache; |
| |
144 |
| |
145 struct NSSTrustDomainStr { |
| |
146 PRInt32 refCount; |
| |
147 NSSArena *arena; |
| |
148 NSSCallback *defaultCallback; |
| |
149 nssList *tokenList; |
| |
150 nssListIterator *tokens; |
| |
151 nssTDCertificateCache *cache; |
| |
152 NSSRWLock *tokensLock; |
| |
153 void *spkDigestInfo; |
| |
154 CERTStatusConfig *statusConfig; |
| |
155 }; |
| |
156 |
| |
157 struct NSSCryptoContextStr |
| |
158 { |
| |
159 PRInt32 refCount; |
| |
160 NSSArena *arena; |
| |
161 NSSTrustDomain *td; |
| |
162 NSSToken *token; |
| |
163 nssSession *session; |
| |
164 nssCertificateStore *certStore; |
| |
165 }; |
| |
166 |
| |
167 struct NSSTimeStr { |
| |
168 PRTime prTime; |
| |
169 }; |
| |
170 |
| |
171 struct NSSCRLStr { |
| |
172 nssPKIObject object; |
| |
173 NSSDER encoding; |
| |
174 NSSUTF8 *url; |
| |
175 PRBool isKRL; |
| |
176 }; |
| |
177 |
| |
178 typedef struct NSSCRLStr NSSCRL; |
| |
179 |
| |
180 struct NSSPoliciesStr; |
| |
181 |
| |
182 struct NSSAlgorithmAndParametersStr; |
| |
183 |
| |
184 struct NSSPKIXCertificateStr; |
| |
185 |
| |
186 PR_END_EXTERN_C |
| |
187 |
| |
188 #endif /* PKIT_H */ |