|
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 #include "ckmk.h" |
|
6 |
|
7 /* |
|
8 * nssmkey/mtoken.c |
|
9 * |
|
10 * This file implements the NSSCKMDToken object for the |
|
11 * "nssmkey" cryptoki module. |
|
12 */ |
|
13 |
|
14 static NSSUTF8 * |
|
15 ckmk_mdToken_GetLabel |
|
16 ( |
|
17 NSSCKMDToken *mdToken, |
|
18 NSSCKFWToken *fwToken, |
|
19 NSSCKMDInstance *mdInstance, |
|
20 NSSCKFWInstance *fwInstance, |
|
21 CK_RV *pError |
|
22 ) |
|
23 { |
|
24 return (NSSUTF8 *)nss_ckmk_TokenLabel; |
|
25 } |
|
26 |
|
27 static NSSUTF8 * |
|
28 ckmk_mdToken_GetManufacturerID |
|
29 ( |
|
30 NSSCKMDToken *mdToken, |
|
31 NSSCKFWToken *fwToken, |
|
32 NSSCKMDInstance *mdInstance, |
|
33 NSSCKFWInstance *fwInstance, |
|
34 CK_RV *pError |
|
35 ) |
|
36 { |
|
37 return (NSSUTF8 *)nss_ckmk_ManufacturerID; |
|
38 } |
|
39 |
|
40 static NSSUTF8 * |
|
41 ckmk_mdToken_GetModel |
|
42 ( |
|
43 NSSCKMDToken *mdToken, |
|
44 NSSCKFWToken *fwToken, |
|
45 NSSCKMDInstance *mdInstance, |
|
46 NSSCKFWInstance *fwInstance, |
|
47 CK_RV *pError |
|
48 ) |
|
49 { |
|
50 return (NSSUTF8 *)nss_ckmk_TokenModel; |
|
51 } |
|
52 |
|
53 static NSSUTF8 * |
|
54 ckmk_mdToken_GetSerialNumber |
|
55 ( |
|
56 NSSCKMDToken *mdToken, |
|
57 NSSCKFWToken *fwToken, |
|
58 NSSCKMDInstance *mdInstance, |
|
59 NSSCKFWInstance *fwInstance, |
|
60 CK_RV *pError |
|
61 ) |
|
62 { |
|
63 return (NSSUTF8 *)nss_ckmk_TokenSerialNumber; |
|
64 } |
|
65 |
|
66 static CK_BBOOL |
|
67 ckmk_mdToken_GetIsWriteProtected |
|
68 ( |
|
69 NSSCKMDToken *mdToken, |
|
70 NSSCKFWToken *fwToken, |
|
71 NSSCKMDInstance *mdInstance, |
|
72 NSSCKFWInstance *fwInstance |
|
73 ) |
|
74 { |
|
75 return CK_FALSE; |
|
76 } |
|
77 |
|
78 /* fake out Mozilla so we don't try to initialize the token */ |
|
79 static CK_BBOOL |
|
80 ckmk_mdToken_GetUserPinInitialized |
|
81 ( |
|
82 NSSCKMDToken *mdToken, |
|
83 NSSCKFWToken *fwToken, |
|
84 NSSCKMDInstance *mdInstance, |
|
85 NSSCKFWInstance *fwInstance |
|
86 ) |
|
87 { |
|
88 return CK_TRUE; |
|
89 } |
|
90 |
|
91 static CK_VERSION |
|
92 ckmk_mdToken_GetHardwareVersion |
|
93 ( |
|
94 NSSCKMDToken *mdToken, |
|
95 NSSCKFWToken *fwToken, |
|
96 NSSCKMDInstance *mdInstance, |
|
97 NSSCKFWInstance *fwInstance |
|
98 ) |
|
99 { |
|
100 return nss_ckmk_HardwareVersion; |
|
101 } |
|
102 |
|
103 static CK_VERSION |
|
104 ckmk_mdToken_GetFirmwareVersion |
|
105 ( |
|
106 NSSCKMDToken *mdToken, |
|
107 NSSCKFWToken *fwToken, |
|
108 NSSCKMDInstance *mdInstance, |
|
109 NSSCKFWInstance *fwInstance |
|
110 ) |
|
111 { |
|
112 return nss_ckmk_FirmwareVersion; |
|
113 } |
|
114 |
|
115 static NSSCKMDSession * |
|
116 ckmk_mdToken_OpenSession |
|
117 ( |
|
118 NSSCKMDToken *mdToken, |
|
119 NSSCKFWToken *fwToken, |
|
120 NSSCKMDInstance *mdInstance, |
|
121 NSSCKFWInstance *fwInstance, |
|
122 NSSCKFWSession *fwSession, |
|
123 CK_BBOOL rw, |
|
124 CK_RV *pError |
|
125 ) |
|
126 { |
|
127 return nss_ckmk_CreateSession(fwSession, pError); |
|
128 } |
|
129 |
|
130 static CK_ULONG |
|
131 ckmk_mdToken_GetMechanismCount |
|
132 ( |
|
133 NSSCKMDToken *mdToken, |
|
134 NSSCKFWToken *fwToken, |
|
135 NSSCKMDInstance *mdInstance, |
|
136 NSSCKFWInstance *fwInstance |
|
137 ) |
|
138 { |
|
139 return (CK_ULONG)1; |
|
140 } |
|
141 |
|
142 static CK_RV |
|
143 ckmk_mdToken_GetMechanismTypes |
|
144 ( |
|
145 NSSCKMDToken *mdToken, |
|
146 NSSCKFWToken *fwToken, |
|
147 NSSCKMDInstance *mdInstance, |
|
148 NSSCKFWInstance *fwInstance, |
|
149 CK_MECHANISM_TYPE types[] |
|
150 ) |
|
151 { |
|
152 types[0] = CKM_RSA_PKCS; |
|
153 return CKR_OK; |
|
154 } |
|
155 |
|
156 static NSSCKMDMechanism * |
|
157 ckmk_mdToken_GetMechanism |
|
158 ( |
|
159 NSSCKMDToken *mdToken, |
|
160 NSSCKFWToken *fwToken, |
|
161 NSSCKMDInstance *mdInstance, |
|
162 NSSCKFWInstance *fwInstance, |
|
163 CK_MECHANISM_TYPE which, |
|
164 CK_RV *pError |
|
165 ) |
|
166 { |
|
167 if (which != CKM_RSA_PKCS) { |
|
168 *pError = CKR_MECHANISM_INVALID; |
|
169 return (NSSCKMDMechanism *)NULL; |
|
170 } |
|
171 return (NSSCKMDMechanism *)&nss_ckmk_mdMechanismRSA; |
|
172 } |
|
173 |
|
174 NSS_IMPLEMENT_DATA const NSSCKMDToken |
|
175 nss_ckmk_mdToken = { |
|
176 (void *)NULL, /* etc */ |
|
177 NULL, /* Setup */ |
|
178 NULL, /* Invalidate */ |
|
179 NULL, /* InitToken -- default errs */ |
|
180 ckmk_mdToken_GetLabel, |
|
181 ckmk_mdToken_GetManufacturerID, |
|
182 ckmk_mdToken_GetModel, |
|
183 ckmk_mdToken_GetSerialNumber, |
|
184 NULL, /* GetHasRNG -- default is false */ |
|
185 ckmk_mdToken_GetIsWriteProtected, |
|
186 NULL, /* GetLoginRequired -- default is false */ |
|
187 ckmk_mdToken_GetUserPinInitialized, |
|
188 NULL, /* GetRestoreKeyNotNeeded -- irrelevant */ |
|
189 NULL, /* GetHasClockOnToken -- default is false */ |
|
190 NULL, /* GetHasProtectedAuthenticationPath -- default is false */ |
|
191 NULL, /* GetSupportsDualCryptoOperations -- default is false */ |
|
192 NULL, /* GetMaxSessionCount -- default is CK_UNAVAILABLE_INFORMATION */ |
|
193 NULL, /* GetMaxRwSessionCount -- default is CK_UNAVAILABLE_INFORMATION */ |
|
194 NULL, /* GetMaxPinLen -- irrelevant */ |
|
195 NULL, /* GetMinPinLen -- irrelevant */ |
|
196 NULL, /* GetTotalPublicMemory -- default is CK_UNAVAILABLE_INFORMATION */ |
|
197 NULL, /* GetFreePublicMemory -- default is CK_UNAVAILABLE_INFORMATION */ |
|
198 NULL, /* GetTotalPrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */ |
|
199 NULL, /* GetFreePrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */ |
|
200 ckmk_mdToken_GetHardwareVersion, |
|
201 ckmk_mdToken_GetFirmwareVersion, |
|
202 NULL, /* GetUTCTime -- no clock */ |
|
203 ckmk_mdToken_OpenSession, |
|
204 ckmk_mdToken_GetMechanismCount, |
|
205 ckmk_mdToken_GetMechanismTypes, |
|
206 ckmk_mdToken_GetMechanism, |
|
207 (void *)NULL /* null terminator */ |
|
208 }; |