|
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 CKMK_H |
|
6 #define CKMK_H 1 |
|
7 |
|
8 #include <Security/SecKeychainSearch.h> |
|
9 #include <Security/SecKeychainItem.h> |
|
10 #include <Security/SecKeychain.h> |
|
11 #include <Security/cssmtype.h> |
|
12 #include <Security/cssmapi.h> |
|
13 #include <Security/SecKey.h> |
|
14 #include <Security/SecCertificate.h> |
|
15 |
|
16 #define NTO |
|
17 |
|
18 #include "nssckmdt.h" |
|
19 #include "nssckfw.h" |
|
20 /* |
|
21 * I'm including this for access to the arena functions. |
|
22 * Looks like we should publish that API. |
|
23 */ |
|
24 #ifndef BASE_H |
|
25 #include "base.h" |
|
26 #endif /* BASE_H */ |
|
27 /* |
|
28 * This is where the Netscape extensions live, at least for now. |
|
29 */ |
|
30 #ifndef CKT_H |
|
31 #include "ckt.h" |
|
32 #endif /* CKT_H */ |
|
33 |
|
34 /* |
|
35 * statically defined raw objects. Allows us to data description objects |
|
36 * to this PKCS #11 module. |
|
37 */ |
|
38 struct ckmkRawObjectStr { |
|
39 CK_ULONG n; |
|
40 const CK_ATTRIBUTE_TYPE *types; |
|
41 const NSSItem *items; |
|
42 }; |
|
43 typedef struct ckmkRawObjectStr ckmkRawObject; |
|
44 |
|
45 /* |
|
46 * Key/Cert Items |
|
47 */ |
|
48 struct ckmkItemObjectStr { |
|
49 SecKeychainItemRef itemRef; |
|
50 SecItemClass itemClass; |
|
51 PRBool hasID; |
|
52 NSSItem modify; |
|
53 NSSItem private; |
|
54 NSSItem encrypt; |
|
55 NSSItem decrypt; |
|
56 NSSItem derive; |
|
57 NSSItem sign; |
|
58 NSSItem signRecover; |
|
59 NSSItem verify; |
|
60 NSSItem verifyRecover; |
|
61 NSSItem wrap; |
|
62 NSSItem unwrap; |
|
63 NSSItem label; |
|
64 NSSItem subject; |
|
65 NSSItem issuer; |
|
66 NSSItem serial; |
|
67 NSSItem derCert; |
|
68 NSSItem id; |
|
69 NSSItem modulus; |
|
70 NSSItem exponent; |
|
71 NSSItem privateExponent; |
|
72 NSSItem prime1; |
|
73 NSSItem prime2; |
|
74 NSSItem exponent1; |
|
75 NSSItem exponent2; |
|
76 NSSItem coefficient; |
|
77 }; |
|
78 typedef struct ckmkItemObjectStr ckmkItemObject; |
|
79 |
|
80 typedef enum { |
|
81 ckmkRaw, |
|
82 ckmkItem, |
|
83 } ckmkObjectType; |
|
84 |
|
85 /* |
|
86 * all the various types of objects are abstracted away in cobject and |
|
87 * cfind as ckmkInternalObjects. |
|
88 */ |
|
89 struct ckmkInternalObjectStr { |
|
90 ckmkObjectType type; |
|
91 union { |
|
92 ckmkRawObject raw; |
|
93 ckmkItemObject item; |
|
94 } u; |
|
95 CK_OBJECT_CLASS objClass; |
|
96 NSSItem hashKey; |
|
97 unsigned char hashKeyData[128]; |
|
98 NSSCKMDObject mdObject; |
|
99 }; |
|
100 typedef struct ckmkInternalObjectStr ckmkInternalObject; |
|
101 |
|
102 /* our raw object data array */ |
|
103 NSS_EXTERN_DATA ckmkInternalObject nss_ckmk_data[]; |
|
104 NSS_EXTERN_DATA const PRUint32 nss_ckmk_nObjects; |
|
105 |
|
106 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_CryptokiVersion; |
|
107 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_ManufacturerID; |
|
108 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_LibraryDescription; |
|
109 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_LibraryVersion; |
|
110 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_SlotDescription; |
|
111 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_HardwareVersion; |
|
112 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_FirmwareVersion; |
|
113 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenLabel; |
|
114 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenModel; |
|
115 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenSerialNumber; |
|
116 |
|
117 NSS_EXTERN_DATA const NSSCKMDInstance nss_ckmk_mdInstance; |
|
118 NSS_EXTERN_DATA const NSSCKMDSlot nss_ckmk_mdSlot; |
|
119 NSS_EXTERN_DATA const NSSCKMDToken nss_ckmk_mdToken; |
|
120 NSS_EXTERN_DATA const NSSCKMDMechanism nss_ckmk_mdMechanismRSA; |
|
121 |
|
122 NSS_EXTERN NSSCKMDSession * |
|
123 nss_ckmk_CreateSession |
|
124 ( |
|
125 NSSCKFWSession *fwSession, |
|
126 CK_RV *pError |
|
127 ); |
|
128 |
|
129 NSS_EXTERN NSSCKMDFindObjects * |
|
130 nss_ckmk_FindObjectsInit |
|
131 ( |
|
132 NSSCKFWSession *fwSession, |
|
133 CK_ATTRIBUTE_PTR pTemplate, |
|
134 CK_ULONG ulAttributeCount, |
|
135 CK_RV *pError |
|
136 ); |
|
137 |
|
138 /* |
|
139 * Object Utilities |
|
140 */ |
|
141 NSS_EXTERN NSSCKMDObject * |
|
142 nss_ckmk_CreateMDObject |
|
143 ( |
|
144 NSSArena *arena, |
|
145 ckmkInternalObject *io, |
|
146 CK_RV *pError |
|
147 ); |
|
148 |
|
149 NSS_EXTERN NSSCKMDObject * |
|
150 nss_ckmk_CreateObject |
|
151 ( |
|
152 NSSCKFWSession *fwSession, |
|
153 CK_ATTRIBUTE_PTR pTemplate, |
|
154 CK_ULONG ulAttributeCount, |
|
155 CK_RV *pError |
|
156 ); |
|
157 |
|
158 NSS_EXTERN const NSSItem * |
|
159 nss_ckmk_FetchAttribute |
|
160 ( |
|
161 ckmkInternalObject *io, |
|
162 CK_ATTRIBUTE_TYPE type, |
|
163 CK_RV *pError |
|
164 ); |
|
165 |
|
166 NSS_EXTERN void |
|
167 nss_ckmk_DestroyInternalObject |
|
168 ( |
|
169 ckmkInternalObject *io |
|
170 ); |
|
171 |
|
172 unsigned char * |
|
173 nss_ckmk_DERUnwrap |
|
174 ( |
|
175 unsigned char *src, |
|
176 int size, |
|
177 int *outSize, |
|
178 unsigned char **next |
|
179 ); |
|
180 |
|
181 CK_ULONG |
|
182 nss_ckmk_GetULongAttribute |
|
183 ( |
|
184 CK_ATTRIBUTE_TYPE type, |
|
185 CK_ATTRIBUTE *template, |
|
186 CK_ULONG templateSize, |
|
187 CK_RV *pError |
|
188 ); |
|
189 |
|
190 #define NSS_CKMK_ARRAY_SIZE(x) ((sizeof (x))/(sizeof ((x)[0]))) |
|
191 |
|
192 #ifdef DEBUG |
|
193 #define CKMK_MACERR(str,err) cssmPerror(str,err) |
|
194 #else |
|
195 #define CKMK_MACERR(str,err) |
|
196 #endif |
|
197 |
|
198 #endif |