OLD | NEW |
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 /* | 5 /* |
6 * token.c | 6 * token.c |
7 * | 7 * |
8 * This file implements the NSSCKFWToken type and methods. | 8 * This file implements the NSSCKFWToken type and methods. |
9 */ | 9 */ |
10 | 10 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 * nssCKFWToken_GetHardwareVersion | 68 * nssCKFWToken_GetHardwareVersion |
69 * nssCKFWToken_GetFirmwareVersion | 69 * nssCKFWToken_GetFirmwareVersion |
70 * nssCKFWToken_GetUTCTime | 70 * nssCKFWToken_GetUTCTime |
71 * nssCKFWToken_OpenSession | 71 * nssCKFWToken_OpenSession |
72 * nssCKFWToken_GetMechanismCount | 72 * nssCKFWToken_GetMechanismCount |
73 * nssCKFWToken_GetMechanismTypes | 73 * nssCKFWToken_GetMechanismTypes |
74 * nssCKFWToken_GetMechanism | 74 * nssCKFWToken_GetMechanism |
75 */ | 75 */ |
76 | 76 |
77 struct NSSCKFWTokenStr { | 77 struct NSSCKFWTokenStr { |
78 NSSCKFWMutex *mutex; | 78 NSSCKFWMutex *mutex; |
79 NSSArena *arena; | 79 NSSArena *arena; |
80 NSSCKMDToken *mdToken; | 80 NSSCKMDToken *mdToken; |
81 NSSCKFWSlot *fwSlot; | 81 NSSCKFWSlot *fwSlot; |
82 NSSCKMDSlot *mdSlot; | 82 NSSCKMDSlot *mdSlot; |
83 NSSCKFWInstance *fwInstance; | 83 NSSCKFWInstance *fwInstance; |
84 NSSCKMDInstance *mdInstance; | 84 NSSCKMDInstance *mdInstance; |
85 | 85 |
86 /* | 86 /* |
87 * Everything above is set at creation time, and then not modified. | 87 * Everything above is set at creation time, and then not modified. |
88 * The invariants the mutex protects are: | 88 * The invariants the mutex protects are: |
89 * | 89 * |
90 * 1) Each of the cached descriptions (versions, etc.) are in an | 90 * 1) Each of the cached descriptions (versions, etc.) are in an |
91 * internally consistant state. | 91 * internally consistant state. |
92 * | 92 * |
93 * 2) The session counts and hashes are consistant. | 93 * 2) The session counts and hashes are consistant. |
94 * | 94 * |
95 * 3) The object hashes are consistant. | 95 * 3) The object hashes are consistant. |
96 * | 96 * |
97 * Note that the calls accessing the cached descriptions will call | 97 * Note that the calls accessing the cached descriptions will call |
98 * the NSSCKMDToken methods with the mutex locked. Those methods | 98 * the NSSCKMDToken methods with the mutex locked. Those methods |
99 * may then call the public NSSCKFWToken routines. Those public | 99 * may then call the public NSSCKFWToken routines. Those public |
100 * routines only access the constant data above and the atomic | 100 * routines only access the constant data above and the atomic |
101 * CK_STATE session state variable below, so there's no problem. | 101 * CK_STATE session state variable below, so there's no problem. |
102 * But be careful if you add to this object; mutexes are in | 102 * But be careful if you add to this object; mutexes are in |
103 * general not reentrant, so don't create deadlock situations. | 103 * general not reentrant, so don't create deadlock situations. |
104 */ | 104 */ |
105 | 105 |
106 NSSUTF8 *label; | 106 NSSUTF8 *label; |
107 NSSUTF8 *manufacturerID; | 107 NSSUTF8 *manufacturerID; |
108 NSSUTF8 *model; | 108 NSSUTF8 *model; |
109 NSSUTF8 *serialNumber; | 109 NSSUTF8 *serialNumber; |
110 CK_VERSION hardwareVersion; | 110 CK_VERSION hardwareVersion; |
111 CK_VERSION firmwareVersion; | 111 CK_VERSION firmwareVersion; |
112 | 112 |
113 CK_ULONG sessionCount; | 113 CK_ULONG sessionCount; |
114 CK_ULONG rwSessionCount; | 114 CK_ULONG rwSessionCount; |
115 nssCKFWHash *sessions; | 115 nssCKFWHash *sessions; |
116 nssCKFWHash *sessionObjectHash; | 116 nssCKFWHash *sessionObjectHash; |
117 nssCKFWHash *mdObjectHash; | 117 nssCKFWHash *mdObjectHash; |
118 nssCKFWHash *mdMechanismHash; | 118 nssCKFWHash *mdMechanismHash; |
119 | 119 |
120 CK_STATE state; | 120 CK_STATE state; |
121 }; | 121 }; |
122 | 122 |
123 #ifdef DEBUG | 123 #ifdef DEBUG |
124 /* | 124 /* |
125 * But first, the pointer-tracking stuff. | 125 * But first, the pointer-tracking stuff. |
126 * | 126 * |
127 * NOTE: the pointer-tracking support in NSS/base currently relies | 127 * NOTE: the pointer-tracking support in NSS/base currently relies |
128 * upon NSPR's CallOnce support. That, however, relies upon NSPR's | 128 * upon NSPR's CallOnce support. That, however, relies upon NSPR's |
129 * locking, which is tied into the runtime. We need a pointer-tracker | 129 * locking, which is tied into the runtime. We need a pointer-tracker |
130 * implementation that uses the locks supplied through C_Initialize. | 130 * implementation that uses the locks supplied through C_Initialize. |
131 * That support, however, can be filled in later. So for now, I'll | 131 * That support, however, can be filled in later. So for now, I'll |
132 * just do this routines as no-ops. | 132 * just do this routines as no-ops. |
133 */ | 133 */ |
134 | 134 |
135 static CK_RV | 135 static CK_RV |
136 token_add_pointer | 136 token_add_pointer( |
137 ( | 137 const NSSCKFWToken *fwToken) |
138 const NSSCKFWToken *fwToken | |
139 ) | |
140 { | 138 { |
141 return CKR_OK; | 139 return CKR_OK; |
142 } | 140 } |
143 | 141 |
144 static CK_RV | 142 static CK_RV |
145 token_remove_pointer | 143 token_remove_pointer( |
146 ( | 144 const NSSCKFWToken *fwToken) |
147 const NSSCKFWToken *fwToken | |
148 ) | |
149 { | 145 { |
150 return CKR_OK; | 146 return CKR_OK; |
151 } | 147 } |
152 | 148 |
153 NSS_IMPLEMENT CK_RV | 149 NSS_IMPLEMENT CK_RV |
154 nssCKFWToken_verifyPointer | 150 nssCKFWToken_verifyPointer( |
155 ( | 151 const NSSCKFWToken *fwToken) |
156 const NSSCKFWToken *fwToken | |
157 ) | |
158 { | 152 { |
159 return CKR_OK; | 153 return CKR_OK; |
160 } | 154 } |
161 | 155 |
162 #endif /* DEBUG */ | 156 #endif /* DEBUG */ |
163 | 157 |
164 /* | 158 /* |
165 * nssCKFWToken_Create | 159 * nssCKFWToken_Create |
166 * | 160 * |
167 */ | 161 */ |
168 NSS_IMPLEMENT NSSCKFWToken * | 162 NSS_IMPLEMENT NSSCKFWToken * |
169 nssCKFWToken_Create | 163 nssCKFWToken_Create( |
170 ( | 164 NSSCKFWSlot *fwSlot, |
171 NSSCKFWSlot *fwSlot, | 165 NSSCKMDToken *mdToken, |
172 NSSCKMDToken *mdToken, | 166 CK_RV *pError) |
173 CK_RV *pError | |
174 ) | |
175 { | 167 { |
176 NSSArena *arena = (NSSArena *)NULL; | 168 NSSArena *arena = (NSSArena *)NULL; |
177 NSSCKFWToken *fwToken = (NSSCKFWToken *)NULL; | 169 NSSCKFWToken *fwToken = (NSSCKFWToken *)NULL; |
178 CK_BBOOL called_setup = CK_FALSE; | 170 CK_BBOOL called_setup = CK_FALSE; |
179 | 171 |
180 /* | 172 /* |
181 * We have already verified the arguments in nssCKFWSlot_GetToken. | 173 * We have already verified the arguments in nssCKFWSlot_GetToken. |
182 */ | 174 */ |
183 | 175 |
184 arena = NSSArena_Create(); | 176 arena = NSSArena_Create(); |
185 if (!arena) { | 177 if (!arena) { |
186 *pError = CKR_HOST_MEMORY; | 178 *pError = CKR_HOST_MEMORY; |
187 goto loser; | 179 goto loser; |
188 } | 180 } |
189 | 181 |
190 fwToken = nss_ZNEW(arena, NSSCKFWToken); | 182 fwToken = nss_ZNEW(arena, NSSCKFWToken); |
191 if (!fwToken) { | 183 if (!fwToken) { |
192 *pError = CKR_HOST_MEMORY; | 184 *pError = CKR_HOST_MEMORY; |
193 goto loser; | 185 goto loser; |
194 } | 186 } |
195 | 187 |
196 fwToken->arena = arena; | 188 fwToken->arena = arena; |
197 fwToken->mdToken = mdToken; | 189 fwToken->mdToken = mdToken; |
198 fwToken->fwSlot = fwSlot; | 190 fwToken->fwSlot = fwSlot; |
199 fwToken->fwInstance = nssCKFWSlot_GetFWInstance(fwSlot); | 191 fwToken->fwInstance = nssCKFWSlot_GetFWInstance(fwSlot); |
200 fwToken->mdInstance = nssCKFWSlot_GetMDInstance(fwSlot); | 192 fwToken->mdInstance = nssCKFWSlot_GetMDInstance(fwSlot); |
201 fwToken->state = CKS_RO_PUBLIC_SESSION; /* some default */ | 193 fwToken->state = CKS_RO_PUBLIC_SESSION; /* some default */ |
202 fwToken->sessionCount = 0; | 194 fwToken->sessionCount = 0; |
203 fwToken->rwSessionCount = 0; | 195 fwToken->rwSessionCount = 0; |
204 | 196 |
205 fwToken->mutex = nssCKFWInstance_CreateMutex(fwToken->fwInstance, arena, pErro
r); | 197 fwToken->mutex = nssCKFWInstance_CreateMutex(fwToken->fwInstance, arena, pEr
ror); |
206 if (!fwToken->mutex) { | 198 if (!fwToken->mutex) { |
207 if( CKR_OK == *pError ) { | 199 if (CKR_OK == *pError) { |
208 *pError = CKR_GENERAL_ERROR; | 200 *pError = CKR_GENERAL_ERROR; |
| 201 } |
| 202 goto loser; |
209 } | 203 } |
210 goto loser; | |
211 } | |
212 | 204 |
213 fwToken->sessions = nssCKFWHash_Create(fwToken->fwInstance, arena, pError); | 205 fwToken->sessions = nssCKFWHash_Create(fwToken->fwInstance, arena, pError); |
214 if (!fwToken->sessions) { | 206 if (!fwToken->sessions) { |
215 if( CKR_OK == *pError ) { | 207 if (CKR_OK == *pError) { |
216 *pError = CKR_GENERAL_ERROR; | 208 *pError = CKR_GENERAL_ERROR; |
| 209 } |
| 210 goto loser; |
217 } | 211 } |
218 goto loser; | |
219 } | |
220 | 212 |
221 if( CK_TRUE != nssCKFWInstance_GetModuleHandlesSessionObjects( | 213 if (CK_TRUE != nssCKFWInstance_GetModuleHandlesSessionObjects( |
222 fwToken->fwInstance) ) { | 214 fwToken->fwInstance)) { |
223 fwToken->sessionObjectHash = nssCKFWHash_Create(fwToken->fwInstance, | 215 fwToken->sessionObjectHash = nssCKFWHash_Create(fwToken->fwInstance, |
224 arena, pError); | 216 arena, pError); |
225 if (!fwToken->sessionObjectHash) { | 217 if (!fwToken->sessionObjectHash) { |
226 if( CKR_OK == *pError ) { | 218 if (CKR_OK == *pError) { |
227 *pError = CKR_GENERAL_ERROR; | 219 *pError = CKR_GENERAL_ERROR; |
228 } | 220 } |
229 goto loser; | 221 goto loser; |
| 222 } |
230 } | 223 } |
231 } | |
232 | 224 |
233 fwToken->mdObjectHash = nssCKFWHash_Create(fwToken->fwInstance, | 225 fwToken->mdObjectHash = nssCKFWHash_Create(fwToken->fwInstance, |
234 arena, pError); | 226 arena, pError); |
235 if (!fwToken->mdObjectHash) { | 227 if (!fwToken->mdObjectHash) { |
236 if( CKR_OK == *pError ) { | 228 if (CKR_OK == *pError) { |
237 *pError = CKR_GENERAL_ERROR; | 229 *pError = CKR_GENERAL_ERROR; |
| 230 } |
| 231 goto loser; |
238 } | 232 } |
239 goto loser; | |
240 } | |
241 | 233 |
242 fwToken->mdMechanismHash = nssCKFWHash_Create(fwToken->fwInstance, | 234 fwToken->mdMechanismHash = nssCKFWHash_Create(fwToken->fwInstance, |
243 arena, pError); | 235 arena, pError); |
244 if (!fwToken->mdMechanismHash) { | 236 if (!fwToken->mdMechanismHash) { |
245 if( CKR_OK == *pError ) { | 237 if (CKR_OK == *pError) { |
246 *pError = CKR_GENERAL_ERROR; | 238 *pError = CKR_GENERAL_ERROR; |
| 239 } |
| 240 goto loser; |
247 } | 241 } |
248 goto loser; | |
249 } | |
250 | 242 |
251 /* More here */ | 243 /* More here */ |
252 | 244 |
253 if (mdToken->Setup) { | 245 if (mdToken->Setup) { |
254 *pError = mdToken->Setup(mdToken, fwToken, fwToken->mdInstance, fwToken->fwI
nstance); | 246 *pError = mdToken->Setup(mdToken, fwToken, fwToken->mdInstance, fwToken-
>fwInstance); |
255 if( CKR_OK != *pError ) { | 247 if (CKR_OK != *pError) { |
256 goto loser; | 248 goto loser; |
| 249 } |
257 } | 250 } |
258 } | |
259 | 251 |
260 called_setup = CK_TRUE; | 252 called_setup = CK_TRUE; |
261 | 253 |
262 #ifdef DEBUG | 254 #ifdef DEBUG |
263 *pError = token_add_pointer(fwToken); | 255 *pError = token_add_pointer(fwToken); |
264 if( CKR_OK != *pError ) { | 256 if (CKR_OK != *pError) { |
265 goto loser; | 257 goto loser; |
266 } | 258 } |
267 #endif /* DEBUG */ | 259 #endif /* DEBUG */ |
268 | 260 |
269 *pError = CKR_OK; | 261 *pError = CKR_OK; |
270 return fwToken; | 262 return fwToken; |
271 | 263 |
272 loser: | 264 loser: |
273 | 265 |
274 if( CK_TRUE == called_setup ) { | 266 if (CK_TRUE == called_setup) { |
275 if (mdToken->Invalidate) { | 267 if (mdToken->Invalidate) { |
276 mdToken->Invalidate(mdToken, fwToken, fwToken->mdInstance, fwToken->fwInst
ance); | 268 mdToken->Invalidate(mdToken, fwToken, fwToken->mdInstance, fwToken->
fwInstance); |
| 269 } |
277 } | 270 } |
278 } | |
279 | 271 |
280 if (arena) { | 272 if (arena) { |
281 (void)NSSArena_Destroy(arena); | 273 (void)NSSArena_Destroy(arena); |
282 } | 274 } |
283 | 275 |
284 return (NSSCKFWToken *)NULL; | 276 return (NSSCKFWToken *)NULL; |
285 } | 277 } |
286 | 278 |
287 static void | 279 static void |
288 nss_ckfwtoken_session_iterator | 280 nss_ckfwtoken_session_iterator( |
289 ( | 281 const void *key, |
290 const void *key, | 282 void *value, |
291 void *value, | 283 void *closure) |
292 void *closure | |
293 ) | |
294 { | 284 { |
295 /* | 285 /* |
296 * Remember that the fwToken->mutex is locked | 286 * Remember that the fwToken->mutex is locked |
297 */ | 287 */ |
298 NSSCKFWSession *fwSession = (NSSCKFWSession *)value; | 288 NSSCKFWSession *fwSession = (NSSCKFWSession *)value; |
299 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); | 289 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); |
300 return; | 290 return; |
301 } | 291 } |
302 | 292 |
303 static void | 293 static void |
304 nss_ckfwtoken_object_iterator | 294 nss_ckfwtoken_object_iterator( |
305 ( | 295 const void *key, |
306 const void *key, | 296 void *value, |
307 void *value, | 297 void *closure) |
308 void *closure | |
309 ) | |
310 { | 298 { |
311 /* | 299 /* |
312 * Remember that the fwToken->mutex is locked | 300 * Remember that the fwToken->mutex is locked |
313 */ | 301 */ |
314 NSSCKFWObject *fwObject = (NSSCKFWObject *)value; | 302 NSSCKFWObject *fwObject = (NSSCKFWObject *)value; |
315 (void)nssCKFWObject_Finalize(fwObject, CK_FALSE); | 303 (void)nssCKFWObject_Finalize(fwObject, CK_FALSE); |
316 return; | 304 return; |
317 } | 305 } |
318 | 306 |
319 /* | 307 /* |
320 * nssCKFWToken_Destroy | 308 * nssCKFWToken_Destroy |
321 * | 309 * |
322 */ | 310 */ |
323 NSS_IMPLEMENT CK_RV | 311 NSS_IMPLEMENT CK_RV |
324 nssCKFWToken_Destroy | 312 nssCKFWToken_Destroy( |
325 ( | 313 NSSCKFWToken *fwToken) |
326 NSSCKFWToken *fwToken | |
327 ) | |
328 { | 314 { |
329 CK_RV error = CKR_OK; | 315 CK_RV error = CKR_OK; |
330 | 316 |
331 #ifdef NSSDEBUG | 317 #ifdef NSSDEBUG |
332 error = nssCKFWToken_verifyPointer(fwToken); | 318 error = nssCKFWToken_verifyPointer(fwToken); |
333 if( CKR_OK != error ) { | 319 if (CKR_OK != error) { |
334 return error; | 320 return error; |
335 } | 321 } |
336 #endif /* NSSDEBUG */ | 322 #endif /* NSSDEBUG */ |
337 | 323 |
338 (void)nssCKFWMutex_Destroy(fwToken->mutex); | 324 (void)nssCKFWMutex_Destroy(fwToken->mutex); |
339 | |
340 if (fwToken->mdToken->Invalidate) { | |
341 fwToken->mdToken->Invalidate(fwToken->mdToken, fwToken, | |
342 fwToken->mdInstance, fwToken->fwInstance); | |
343 } | |
344 /* we can destroy the list without locking now because no one else is | |
345 * referencing us (or _Destroy was invalidly called!) | |
346 */ | |
347 nssCKFWHash_Iterate(fwToken->sessions, nss_ckfwtoken_session_iterator, | |
348 (void *)NULL); | |
349 nssCKFWHash_Destroy(fwToken->sessions); | |
350 | 325 |
351 /* session objects go away when their sessions are removed */ | 326 if (fwToken->mdToken->Invalidate) { |
352 if (fwToken->sessionObjectHash) { | 327 fwToken->mdToken->Invalidate(fwToken->mdToken, fwToken, |
353 nssCKFWHash_Destroy(fwToken->sessionObjectHash); | 328 fwToken->mdInstance, fwToken->fwInstance); |
354 } | 329 } |
| 330 /* we can destroy the list without locking now because no one else is |
| 331 * referencing us (or _Destroy was invalidly called!) |
| 332 */ |
| 333 nssCKFWHash_Iterate(fwToken->sessions, nss_ckfwtoken_session_iterator, |
| 334 (void *)NULL); |
| 335 nssCKFWHash_Destroy(fwToken->sessions); |
355 | 336 |
356 /* free up the token objects */ | 337 /* session objects go away when their sessions are removed */ |
357 if (fwToken->mdObjectHash) { | 338 if (fwToken->sessionObjectHash) { |
358 nssCKFWHash_Iterate(fwToken->mdObjectHash, nss_ckfwtoken_object_iterator, | 339 nssCKFWHash_Destroy(fwToken->sessionObjectHash); |
359 (void *)NULL); | 340 } |
360 nssCKFWHash_Destroy(fwToken->mdObjectHash); | |
361 } | |
362 if (fwToken->mdMechanismHash) { | |
363 nssCKFWHash_Destroy(fwToken->mdMechanismHash); | |
364 } | |
365 | 341 |
366 nssCKFWSlot_ClearToken(fwToken->fwSlot); | 342 /* free up the token objects */ |
367 | 343 if (fwToken->mdObjectHash) { |
| 344 nssCKFWHash_Iterate(fwToken->mdObjectHash, nss_ckfwtoken_object_iterator
, |
| 345 (void *)NULL); |
| 346 nssCKFWHash_Destroy(fwToken->mdObjectHash); |
| 347 } |
| 348 if (fwToken->mdMechanismHash) { |
| 349 nssCKFWHash_Destroy(fwToken->mdMechanismHash); |
| 350 } |
| 351 |
| 352 nssCKFWSlot_ClearToken(fwToken->fwSlot); |
| 353 |
368 #ifdef DEBUG | 354 #ifdef DEBUG |
369 error = token_remove_pointer(fwToken); | 355 error = token_remove_pointer(fwToken); |
370 #endif /* DEBUG */ | 356 #endif /* DEBUG */ |
371 | 357 |
372 (void)NSSArena_Destroy(fwToken->arena); | 358 (void)NSSArena_Destroy(fwToken->arena); |
373 return error; | 359 return error; |
374 } | 360 } |
375 | 361 |
376 /* | 362 /* |
377 * nssCKFWToken_GetMDToken | 363 * nssCKFWToken_GetMDToken |
378 * | 364 * |
379 */ | 365 */ |
380 NSS_IMPLEMENT NSSCKMDToken * | 366 NSS_IMPLEMENT NSSCKMDToken * |
381 nssCKFWToken_GetMDToken | 367 nssCKFWToken_GetMDToken( |
382 ( | 368 NSSCKFWToken *fwToken) |
383 NSSCKFWToken *fwToken | |
384 ) | |
385 { | 369 { |
386 #ifdef NSSDEBUG | 370 #ifdef NSSDEBUG |
387 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 371 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
388 return (NSSCKMDToken *)NULL; | 372 return (NSSCKMDToken *)NULL; |
389 } | 373 } |
390 #endif /* NSSDEBUG */ | 374 #endif /* NSSDEBUG */ |
391 | 375 |
392 return fwToken->mdToken; | 376 return fwToken->mdToken; |
393 } | 377 } |
394 | 378 |
395 /* | 379 /* |
396 * nssCKFWToken_GetArena | 380 * nssCKFWToken_GetArena |
397 * | 381 * |
398 */ | 382 */ |
399 NSS_IMPLEMENT NSSArena * | 383 NSS_IMPLEMENT NSSArena * |
400 nssCKFWToken_GetArena | 384 nssCKFWToken_GetArena( |
401 ( | 385 NSSCKFWToken *fwToken, |
402 NSSCKFWToken *fwToken, | 386 CK_RV *pError) |
403 CK_RV *pError | |
404 ) | |
405 { | 387 { |
406 #ifdef NSSDEBUG | 388 #ifdef NSSDEBUG |
407 if (!pError) { | 389 if (!pError) { |
408 return (NSSArena *)NULL; | 390 return (NSSArena *)NULL; |
409 } | 391 } |
410 | 392 |
411 *pError = nssCKFWToken_verifyPointer(fwToken); | 393 *pError = nssCKFWToken_verifyPointer(fwToken); |
412 if( CKR_OK != *pError ) { | 394 if (CKR_OK != *pError) { |
413 return (NSSArena *)NULL; | 395 return (NSSArena *)NULL; |
414 } | 396 } |
415 #endif /* NSSDEBUG */ | 397 #endif /* NSSDEBUG */ |
416 | 398 |
417 return fwToken->arena; | 399 return fwToken->arena; |
418 } | 400 } |
419 | 401 |
420 /* | 402 /* |
421 * nssCKFWToken_GetFWSlot | 403 * nssCKFWToken_GetFWSlot |
422 * | 404 * |
423 */ | 405 */ |
424 NSS_IMPLEMENT NSSCKFWSlot * | 406 NSS_IMPLEMENT NSSCKFWSlot * |
425 nssCKFWToken_GetFWSlot | 407 nssCKFWToken_GetFWSlot( |
426 ( | 408 NSSCKFWToken *fwToken) |
427 NSSCKFWToken *fwToken | |
428 ) | |
429 { | 409 { |
430 #ifdef NSSDEBUG | 410 #ifdef NSSDEBUG |
431 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 411 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
432 return (NSSCKFWSlot *)NULL; | 412 return (NSSCKFWSlot *)NULL; |
433 } | 413 } |
434 #endif /* NSSDEBUG */ | 414 #endif /* NSSDEBUG */ |
435 | 415 |
436 return fwToken->fwSlot; | 416 return fwToken->fwSlot; |
437 } | 417 } |
438 | 418 |
439 /* | 419 /* |
440 * nssCKFWToken_GetMDSlot | 420 * nssCKFWToken_GetMDSlot |
441 * | 421 * |
442 */ | 422 */ |
443 NSS_IMPLEMENT NSSCKMDSlot * | 423 NSS_IMPLEMENT NSSCKMDSlot * |
444 nssCKFWToken_GetMDSlot | 424 nssCKFWToken_GetMDSlot( |
445 ( | 425 NSSCKFWToken *fwToken) |
446 NSSCKFWToken *fwToken | |
447 ) | |
448 { | 426 { |
449 #ifdef NSSDEBUG | 427 #ifdef NSSDEBUG |
450 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 428 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
451 return (NSSCKMDSlot *)NULL; | 429 return (NSSCKMDSlot *)NULL; |
452 } | 430 } |
453 #endif /* NSSDEBUG */ | 431 #endif /* NSSDEBUG */ |
454 | 432 |
455 return fwToken->mdSlot; | 433 return fwToken->mdSlot; |
456 } | 434 } |
457 | 435 |
458 /* | 436 /* |
459 * nssCKFWToken_GetSessionState | 437 * nssCKFWToken_GetSessionState |
460 * | 438 * |
461 */ | 439 */ |
462 NSS_IMPLEMENT CK_STATE | 440 NSS_IMPLEMENT CK_STATE |
463 nssCKFWToken_GetSessionState | 441 nssCKFWToken_GetSessionState( |
464 ( | 442 NSSCKFWToken *fwToken) |
465 NSSCKFWToken *fwToken | |
466 ) | |
467 { | 443 { |
468 #ifdef NSSDEBUG | 444 #ifdef NSSDEBUG |
469 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 445 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
470 return CKS_RO_PUBLIC_SESSION; /* whatever */ | 446 return CKS_RO_PUBLIC_SESSION; /* whatever */ |
471 } | 447 } |
472 #endif /* NSSDEBUG */ | 448 #endif /* NSSDEBUG */ |
473 | 449 |
474 /* | 450 /* |
475 * BTW, do not lock the token in this method. | 451 * BTW, do not lock the token in this method. |
476 */ | 452 */ |
477 | 453 |
478 /* | 454 /* |
479 * Theoretically, there is no state if there aren't any | 455 * Theoretically, there is no state if there aren't any |
480 * sessions open. But then we'd need to worry about | 456 * sessions open. But then we'd need to worry about |
481 * reporting an error, etc. What the heck-- let's just | 457 * reporting an error, etc. What the heck-- let's just |
482 * revert to CKR_RO_PUBLIC_SESSION as the "default." | 458 * revert to CKR_RO_PUBLIC_SESSION as the "default." |
483 */ | 459 */ |
484 | 460 |
485 return fwToken->state; | 461 return fwToken->state; |
486 } | 462 } |
487 | 463 |
488 /* | 464 /* |
489 * nssCKFWToken_InitToken | 465 * nssCKFWToken_InitToken |
490 * | 466 * |
491 */ | 467 */ |
492 NSS_IMPLEMENT CK_RV | 468 NSS_IMPLEMENT CK_RV |
493 nssCKFWToken_InitToken | 469 nssCKFWToken_InitToken( |
494 ( | 470 NSSCKFWToken *fwToken, |
495 NSSCKFWToken *fwToken, | 471 NSSItem *pin, |
496 NSSItem *pin, | 472 NSSUTF8 *label) |
497 NSSUTF8 *label | |
498 ) | |
499 { | 473 { |
500 CK_RV error; | 474 CK_RV error; |
501 | 475 |
502 #ifdef NSSDEBUG | 476 #ifdef NSSDEBUG |
503 error = nssCKFWToken_verifyPointer(fwToken); | 477 error = nssCKFWToken_verifyPointer(fwToken); |
504 if( CKR_OK != error ) { | 478 if (CKR_OK != error) { |
505 return CKR_ARGUMENTS_BAD; | 479 return CKR_ARGUMENTS_BAD; |
506 } | 480 } |
507 #endif /* NSSDEBUG */ | 481 #endif /* NSSDEBUG */ |
508 | 482 |
509 error = nssCKFWMutex_Lock(fwToken->mutex); | 483 error = nssCKFWMutex_Lock(fwToken->mutex); |
510 if( CKR_OK != error ) { | 484 if (CKR_OK != error) { |
| 485 return error; |
| 486 } |
| 487 |
| 488 if (fwToken->sessionCount > 0) { |
| 489 error = CKR_SESSION_EXISTS; |
| 490 goto done; |
| 491 } |
| 492 |
| 493 if (!fwToken->mdToken->InitToken) { |
| 494 error = CKR_DEVICE_ERROR; |
| 495 goto done; |
| 496 } |
| 497 |
| 498 if (!pin) { |
| 499 if (nssCKFWToken_GetHasProtectedAuthenticationPath(fwToken)) { |
| 500 ; /* okay */ |
| 501 } else { |
| 502 error = CKR_PIN_INCORRECT; |
| 503 goto done; |
| 504 } |
| 505 } |
| 506 |
| 507 if (!label) { |
| 508 label = (NSSUTF8 *)""; |
| 509 } |
| 510 |
| 511 error = fwToken->mdToken->InitToken(fwToken->mdToken, fwToken, |
| 512 fwToken->mdInstance, fwToken->fwInstance
, pin, label); |
| 513 |
| 514 done: |
| 515 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
511 return error; | 516 return error; |
512 } | |
513 | |
514 if( fwToken->sessionCount > 0 ) { | |
515 error = CKR_SESSION_EXISTS; | |
516 goto done; | |
517 } | |
518 | |
519 if (!fwToken->mdToken->InitToken) { | |
520 error = CKR_DEVICE_ERROR; | |
521 goto done; | |
522 } | |
523 | |
524 if (!pin) { | |
525 if( nssCKFWToken_GetHasProtectedAuthenticationPath(fwToken) ) { | |
526 ; /* okay */ | |
527 } else { | |
528 error = CKR_PIN_INCORRECT; | |
529 goto done; | |
530 } | |
531 } | |
532 | |
533 if (!label) { | |
534 label = (NSSUTF8 *) ""; | |
535 } | |
536 | |
537 error = fwToken->mdToken->InitToken(fwToken->mdToken, fwToken, | |
538 fwToken->mdInstance, fwToken->fwInstance, pin, label); | |
539 | |
540 done: | |
541 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
542 return error; | |
543 } | 517 } |
544 | 518 |
545 /* | 519 /* |
546 * nssCKFWToken_GetLabel | 520 * nssCKFWToken_GetLabel |
547 * | 521 * |
548 */ | 522 */ |
549 NSS_IMPLEMENT CK_RV | 523 NSS_IMPLEMENT CK_RV |
550 nssCKFWToken_GetLabel | 524 nssCKFWToken_GetLabel( |
551 ( | 525 NSSCKFWToken *fwToken, |
552 NSSCKFWToken *fwToken, | 526 CK_CHAR label[32]) |
553 CK_CHAR label[32] | |
554 ) | |
555 { | 527 { |
556 CK_RV error = CKR_OK; | 528 CK_RV error = CKR_OK; |
557 | 529 |
558 #ifdef NSSDEBUG | 530 #ifdef NSSDEBUG |
559 if( (CK_CHAR_PTR)NULL == label ) { | 531 if ((CK_CHAR_PTR)NULL == label) { |
560 return CKR_ARGUMENTS_BAD; | 532 return CKR_ARGUMENTS_BAD; |
561 } | 533 } |
562 | 534 |
563 error = nssCKFWToken_verifyPointer(fwToken); | 535 error = nssCKFWToken_verifyPointer(fwToken); |
564 if( CKR_OK != error ) { | 536 if (CKR_OK != error) { |
565 return error; | 537 return error; |
566 } | 538 } |
567 #endif /* NSSDEBUG */ | 539 #endif /* NSSDEBUG */ |
568 | 540 |
569 error = nssCKFWMutex_Lock(fwToken->mutex); | 541 error = nssCKFWMutex_Lock(fwToken->mutex); |
570 if( CKR_OK != error ) { | 542 if (CKR_OK != error) { |
| 543 return error; |
| 544 } |
| 545 |
| 546 if (!fwToken->label) { |
| 547 if (fwToken->mdToken->GetLabel) { |
| 548 fwToken->label = fwToken->mdToken->GetLabel(fwToken->mdToken, fwToke
n, |
| 549 fwToken->mdInstance, fwT
oken->fwInstance, &error); |
| 550 if ((!fwToken->label) && (CKR_OK != error)) { |
| 551 goto done; |
| 552 } |
| 553 } else { |
| 554 fwToken->label = (NSSUTF8 *)""; |
| 555 } |
| 556 } |
| 557 |
| 558 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->label, (char *)label, 32, ' '); |
| 559 error = CKR_OK; |
| 560 |
| 561 done: |
| 562 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
571 return error; | 563 return error; |
572 } | |
573 | |
574 if (!fwToken->label) { | |
575 if (fwToken->mdToken->GetLabel) { | |
576 fwToken->label = fwToken->mdToken->GetLabel(fwToken->mdToken, fwToken, | |
577 fwToken->mdInstance, fwToken->fwInstance, &error); | |
578 if ((!fwToken->label) && (CKR_OK != error)) { | |
579 goto done; | |
580 } | |
581 } else { | |
582 fwToken->label = (NSSUTF8 *) ""; | |
583 } | |
584 } | |
585 | |
586 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->label, (char *)label, 32, ' '); | |
587 error = CKR_OK; | |
588 | |
589 done: | |
590 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
591 return error; | |
592 } | 564 } |
593 | 565 |
594 /* | 566 /* |
595 * nssCKFWToken_GetManufacturerID | 567 * nssCKFWToken_GetManufacturerID |
596 * | 568 * |
597 */ | 569 */ |
598 NSS_IMPLEMENT CK_RV | 570 NSS_IMPLEMENT CK_RV |
599 nssCKFWToken_GetManufacturerID | 571 nssCKFWToken_GetManufacturerID( |
600 ( | 572 NSSCKFWToken *fwToken, |
601 NSSCKFWToken *fwToken, | 573 CK_CHAR manufacturerID[32]) |
602 CK_CHAR manufacturerID[32] | |
603 ) | |
604 { | 574 { |
605 CK_RV error = CKR_OK; | 575 CK_RV error = CKR_OK; |
606 | 576 |
607 #ifdef NSSDEBUG | 577 #ifdef NSSDEBUG |
608 if( (CK_CHAR_PTR)NULL == manufacturerID ) { | 578 if ((CK_CHAR_PTR)NULL == manufacturerID) { |
609 return CKR_ARGUMENTS_BAD; | 579 return CKR_ARGUMENTS_BAD; |
610 } | 580 } |
611 | 581 |
612 error = nssCKFWToken_verifyPointer(fwToken); | 582 error = nssCKFWToken_verifyPointer(fwToken); |
613 if( CKR_OK != error ) { | 583 if (CKR_OK != error) { |
614 return error; | 584 return error; |
615 } | 585 } |
616 #endif /* NSSDEBUG */ | 586 #endif /* NSSDEBUG */ |
617 | 587 |
618 error = nssCKFWMutex_Lock(fwToken->mutex); | 588 error = nssCKFWMutex_Lock(fwToken->mutex); |
619 if( CKR_OK != error ) { | 589 if (CKR_OK != error) { |
| 590 return error; |
| 591 } |
| 592 |
| 593 if (!fwToken->manufacturerID) { |
| 594 if (fwToken->mdToken->GetManufacturerID) { |
| 595 fwToken->manufacturerID = fwToken->mdToken->GetManufacturerID(fwToke
n->mdToken, |
| 596 fwToke
n, fwToken->mdInstance, fwToken->fwInstance, &error); |
| 597 if ((!fwToken->manufacturerID) && (CKR_OK != error)) { |
| 598 goto done; |
| 599 } |
| 600 } else { |
| 601 fwToken->manufacturerID = (NSSUTF8 *)""; |
| 602 } |
| 603 } |
| 604 |
| 605 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->manufacturerID, (char *)manufactu
rerID, 32, ' '); |
| 606 error = CKR_OK; |
| 607 |
| 608 done: |
| 609 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
620 return error; | 610 return error; |
621 } | |
622 | |
623 if (!fwToken->manufacturerID) { | |
624 if (fwToken->mdToken->GetManufacturerID) { | |
625 fwToken->manufacturerID = fwToken->mdToken->GetManufacturerID(fwToken->mdT
oken, | |
626 fwToken, fwToken->mdInstance, fwToken->fwInstance, &error); | |
627 if ((!fwToken->manufacturerID) && (CKR_OK != error)) { | |
628 goto done; | |
629 } | |
630 } else { | |
631 fwToken->manufacturerID = (NSSUTF8 *)""; | |
632 } | |
633 } | |
634 | |
635 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->manufacturerID, (char *)manufacture
rID, 32, ' '); | |
636 error = CKR_OK; | |
637 | |
638 done: | |
639 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
640 return error; | |
641 } | 611 } |
642 | 612 |
643 /* | 613 /* |
644 * nssCKFWToken_GetModel | 614 * nssCKFWToken_GetModel |
645 * | 615 * |
646 */ | 616 */ |
647 NSS_IMPLEMENT CK_RV | 617 NSS_IMPLEMENT CK_RV |
648 nssCKFWToken_GetModel | 618 nssCKFWToken_GetModel( |
649 ( | 619 NSSCKFWToken *fwToken, |
650 NSSCKFWToken *fwToken, | 620 CK_CHAR model[16]) |
651 CK_CHAR model[16] | |
652 ) | |
653 { | 621 { |
654 CK_RV error = CKR_OK; | 622 CK_RV error = CKR_OK; |
655 | 623 |
656 #ifdef NSSDEBUG | 624 #ifdef NSSDEBUG |
657 if( (CK_CHAR_PTR)NULL == model ) { | 625 if ((CK_CHAR_PTR)NULL == model) { |
658 return CKR_ARGUMENTS_BAD; | 626 return CKR_ARGUMENTS_BAD; |
659 } | 627 } |
660 | 628 |
661 error = nssCKFWToken_verifyPointer(fwToken); | 629 error = nssCKFWToken_verifyPointer(fwToken); |
662 if( CKR_OK != error ) { | 630 if (CKR_OK != error) { |
663 return error; | 631 return error; |
664 } | 632 } |
665 #endif /* NSSDEBUG */ | 633 #endif /* NSSDEBUG */ |
666 | 634 |
667 error = nssCKFWMutex_Lock(fwToken->mutex); | 635 error = nssCKFWMutex_Lock(fwToken->mutex); |
668 if( CKR_OK != error ) { | 636 if (CKR_OK != error) { |
| 637 return error; |
| 638 } |
| 639 |
| 640 if (!fwToken->model) { |
| 641 if (fwToken->mdToken->GetModel) { |
| 642 fwToken->model = fwToken->mdToken->GetModel(fwToken->mdToken, fwToke
n, |
| 643 fwToken->mdInstance, fwT
oken->fwInstance, &error); |
| 644 if ((!fwToken->model) && (CKR_OK != error)) { |
| 645 goto done; |
| 646 } |
| 647 } else { |
| 648 fwToken->model = (NSSUTF8 *)""; |
| 649 } |
| 650 } |
| 651 |
| 652 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->model, (char *)model, 16, ' '); |
| 653 error = CKR_OK; |
| 654 |
| 655 done: |
| 656 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
669 return error; | 657 return error; |
670 } | |
671 | |
672 if (!fwToken->model) { | |
673 if (fwToken->mdToken->GetModel) { | |
674 fwToken->model = fwToken->mdToken->GetModel(fwToken->mdToken, fwToken, | |
675 fwToken->mdInstance, fwToken->fwInstance, &error); | |
676 if ((!fwToken->model) && (CKR_OK != error)) { | |
677 goto done; | |
678 } | |
679 } else { | |
680 fwToken->model = (NSSUTF8 *)""; | |
681 } | |
682 } | |
683 | |
684 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->model, (char *)model, 16, ' '); | |
685 error = CKR_OK; | |
686 | |
687 done: | |
688 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
689 return error; | |
690 } | 658 } |
691 | 659 |
692 /* | 660 /* |
693 * nssCKFWToken_GetSerialNumber | 661 * nssCKFWToken_GetSerialNumber |
694 * | 662 * |
695 */ | 663 */ |
696 NSS_IMPLEMENT CK_RV | 664 NSS_IMPLEMENT CK_RV |
697 nssCKFWToken_GetSerialNumber | 665 nssCKFWToken_GetSerialNumber( |
698 ( | 666 NSSCKFWToken *fwToken, |
699 NSSCKFWToken *fwToken, | 667 CK_CHAR serialNumber[16]) |
700 CK_CHAR serialNumber[16] | |
701 ) | |
702 { | 668 { |
703 CK_RV error = CKR_OK; | 669 CK_RV error = CKR_OK; |
704 | 670 |
705 #ifdef NSSDEBUG | 671 #ifdef NSSDEBUG |
706 if( (CK_CHAR_PTR)NULL == serialNumber ) { | 672 if ((CK_CHAR_PTR)NULL == serialNumber) { |
707 return CKR_ARGUMENTS_BAD; | 673 return CKR_ARGUMENTS_BAD; |
708 } | 674 } |
709 | 675 |
710 error = nssCKFWToken_verifyPointer(fwToken); | 676 error = nssCKFWToken_verifyPointer(fwToken); |
711 if( CKR_OK != error ) { | 677 if (CKR_OK != error) { |
712 return error; | 678 return error; |
713 } | 679 } |
714 #endif /* NSSDEBUG */ | 680 #endif /* NSSDEBUG */ |
715 | 681 |
716 error = nssCKFWMutex_Lock(fwToken->mutex); | 682 error = nssCKFWMutex_Lock(fwToken->mutex); |
717 if( CKR_OK != error ) { | 683 if (CKR_OK != error) { |
| 684 return error; |
| 685 } |
| 686 |
| 687 if (!fwToken->serialNumber) { |
| 688 if (fwToken->mdToken->GetSerialNumber) { |
| 689 fwToken->serialNumber = fwToken->mdToken->GetSerialNumber(fwToken->m
dToken, |
| 690 fwToken, f
wToken->mdInstance, fwToken->fwInstance, &error); |
| 691 if ((!fwToken->serialNumber) && (CKR_OK != error)) { |
| 692 goto done; |
| 693 } |
| 694 } else { |
| 695 fwToken->serialNumber = (NSSUTF8 *)""; |
| 696 } |
| 697 } |
| 698 |
| 699 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->serialNumber, (char *)serialNumbe
r, 16, ' '); |
| 700 error = CKR_OK; |
| 701 |
| 702 done: |
| 703 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
718 return error; | 704 return error; |
719 } | |
720 | |
721 if (!fwToken->serialNumber) { | |
722 if (fwToken->mdToken->GetSerialNumber) { | |
723 fwToken->serialNumber = fwToken->mdToken->GetSerialNumber(fwToken->mdToken
, | |
724 fwToken, fwToken->mdInstance, fwToken->fwInstance, &error); | |
725 if ((!fwToken->serialNumber) && (CKR_OK != error)) { | |
726 goto done; | |
727 } | |
728 } else { | |
729 fwToken->serialNumber = (NSSUTF8 *)""; | |
730 } | |
731 } | |
732 | |
733 (void)nssUTF8_CopyIntoFixedBuffer(fwToken->serialNumber, (char *)serialNumber,
16, ' '); | |
734 error = CKR_OK; | |
735 | |
736 done: | |
737 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
738 return error; | |
739 } | 705 } |
740 | 706 |
741 | |
742 /* | 707 /* |
743 * nssCKFWToken_GetHasRNG | 708 * nssCKFWToken_GetHasRNG |
744 * | 709 * |
745 */ | 710 */ |
746 NSS_IMPLEMENT CK_BBOOL | 711 NSS_IMPLEMENT CK_BBOOL |
747 nssCKFWToken_GetHasRNG | 712 nssCKFWToken_GetHasRNG( |
748 ( | 713 NSSCKFWToken *fwToken) |
749 NSSCKFWToken *fwToken | |
750 ) | |
751 { | 714 { |
752 #ifdef NSSDEBUG | 715 #ifdef NSSDEBUG |
753 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 716 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
754 return CK_FALSE; | 717 return CK_FALSE; |
755 } | 718 } |
756 #endif /* NSSDEBUG */ | 719 #endif /* NSSDEBUG */ |
757 | 720 |
758 if (!fwToken->mdToken->GetHasRNG) { | 721 if (!fwToken->mdToken->GetHasRNG) { |
759 return CK_FALSE; | 722 return CK_FALSE; |
760 } | 723 } |
761 | 724 |
762 return fwToken->mdToken->GetHasRNG(fwToken->mdToken, fwToken, | 725 return fwToken->mdToken->GetHasRNG(fwToken->mdToken, fwToken, |
763 fwToken->mdInstance, fwToken->fwInstance); | 726 fwToken->mdInstance, fwToken->fwInstance)
; |
764 } | 727 } |
765 | 728 |
766 /* | 729 /* |
767 * nssCKFWToken_GetIsWriteProtected | 730 * nssCKFWToken_GetIsWriteProtected |
768 * | 731 * |
769 */ | 732 */ |
770 NSS_IMPLEMENT CK_BBOOL | 733 NSS_IMPLEMENT CK_BBOOL |
771 nssCKFWToken_GetIsWriteProtected | 734 nssCKFWToken_GetIsWriteProtected( |
772 ( | 735 NSSCKFWToken *fwToken) |
773 NSSCKFWToken *fwToken | |
774 ) | |
775 { | 736 { |
776 #ifdef NSSDEBUG | 737 #ifdef NSSDEBUG |
777 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 738 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
778 return CK_FALSE; | 739 return CK_FALSE; |
779 } | 740 } |
780 #endif /* NSSDEBUG */ | 741 #endif /* NSSDEBUG */ |
781 | 742 |
782 if (!fwToken->mdToken->GetIsWriteProtected) { | 743 if (!fwToken->mdToken->GetIsWriteProtected) { |
783 return CK_FALSE; | 744 return CK_FALSE; |
784 } | 745 } |
785 | 746 |
786 return fwToken->mdToken->GetIsWriteProtected(fwToken->mdToken, fwToken, | 747 return fwToken->mdToken->GetIsWriteProtected(fwToken->mdToken, fwToken, |
787 fwToken->mdInstance, fwToken->fwInstance); | 748 fwToken->mdInstance, fwToken->f
wInstance); |
788 } | 749 } |
789 | 750 |
790 /* | 751 /* |
791 * nssCKFWToken_GetLoginRequired | 752 * nssCKFWToken_GetLoginRequired |
792 * | 753 * |
793 */ | 754 */ |
794 NSS_IMPLEMENT CK_BBOOL | 755 NSS_IMPLEMENT CK_BBOOL |
795 nssCKFWToken_GetLoginRequired | 756 nssCKFWToken_GetLoginRequired( |
796 ( | 757 NSSCKFWToken *fwToken) |
797 NSSCKFWToken *fwToken | |
798 ) | |
799 { | 758 { |
800 #ifdef NSSDEBUG | 759 #ifdef NSSDEBUG |
801 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 760 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
802 return CK_FALSE; | 761 return CK_FALSE; |
803 } | 762 } |
804 #endif /* NSSDEBUG */ | 763 #endif /* NSSDEBUG */ |
805 | 764 |
806 if (!fwToken->mdToken->GetLoginRequired) { | 765 if (!fwToken->mdToken->GetLoginRequired) { |
807 return CK_FALSE; | 766 return CK_FALSE; |
808 } | 767 } |
809 | 768 |
810 return fwToken->mdToken->GetLoginRequired(fwToken->mdToken, fwToken, | 769 return fwToken->mdToken->GetLoginRequired(fwToken->mdToken, fwToken, |
811 fwToken->mdInstance, fwToken->fwInstance); | 770 fwToken->mdInstance, fwToken->fwIn
stance); |
812 } | 771 } |
813 | 772 |
814 /* | 773 /* |
815 * nssCKFWToken_GetUserPinInitialized | 774 * nssCKFWToken_GetUserPinInitialized |
816 * | 775 * |
817 */ | 776 */ |
818 NSS_IMPLEMENT CK_BBOOL | 777 NSS_IMPLEMENT CK_BBOOL |
819 nssCKFWToken_GetUserPinInitialized | 778 nssCKFWToken_GetUserPinInitialized( |
820 ( | 779 NSSCKFWToken *fwToken) |
821 NSSCKFWToken *fwToken | |
822 ) | |
823 { | 780 { |
824 #ifdef NSSDEBUG | 781 #ifdef NSSDEBUG |
825 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 782 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
826 return CK_FALSE; | 783 return CK_FALSE; |
827 } | 784 } |
828 #endif /* NSSDEBUG */ | 785 #endif /* NSSDEBUG */ |
829 | 786 |
830 if (!fwToken->mdToken->GetUserPinInitialized) { | 787 if (!fwToken->mdToken->GetUserPinInitialized) { |
831 return CK_FALSE; | 788 return CK_FALSE; |
832 } | 789 } |
833 | 790 |
834 return fwToken->mdToken->GetUserPinInitialized(fwToken->mdToken, fwToken, | 791 return fwToken->mdToken->GetUserPinInitialized(fwToken->mdToken, fwToken, |
835 fwToken->mdInstance, fwToken->fwInstance); | 792 fwToken->mdInstance, fwToken-
>fwInstance); |
836 } | 793 } |
837 | 794 |
838 /* | 795 /* |
839 * nssCKFWToken_GetRestoreKeyNotNeeded | 796 * nssCKFWToken_GetRestoreKeyNotNeeded |
840 * | 797 * |
841 */ | 798 */ |
842 NSS_IMPLEMENT CK_BBOOL | 799 NSS_IMPLEMENT CK_BBOOL |
843 nssCKFWToken_GetRestoreKeyNotNeeded | 800 nssCKFWToken_GetRestoreKeyNotNeeded( |
844 ( | 801 NSSCKFWToken *fwToken) |
845 NSSCKFWToken *fwToken | |
846 ) | |
847 { | 802 { |
848 #ifdef NSSDEBUG | 803 #ifdef NSSDEBUG |
849 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 804 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
850 return CK_FALSE; | 805 return CK_FALSE; |
851 } | 806 } |
852 #endif /* NSSDEBUG */ | 807 #endif /* NSSDEBUG */ |
853 | 808 |
854 if (!fwToken->mdToken->GetRestoreKeyNotNeeded) { | 809 if (!fwToken->mdToken->GetRestoreKeyNotNeeded) { |
855 return CK_FALSE; | 810 return CK_FALSE; |
856 } | 811 } |
857 | 812 |
858 return fwToken->mdToken->GetRestoreKeyNotNeeded(fwToken->mdToken, fwToken, | 813 return fwToken->mdToken->GetRestoreKeyNotNeeded(fwToken->mdToken, fwToken, |
859 fwToken->mdInstance, fwToken->fwInstance); | 814 fwToken->mdInstance, fwToken
->fwInstance); |
860 } | 815 } |
861 | 816 |
862 /* | 817 /* |
863 * nssCKFWToken_GetHasClockOnToken | 818 * nssCKFWToken_GetHasClockOnToken |
864 * | 819 * |
865 */ | 820 */ |
866 NSS_IMPLEMENT CK_BBOOL | 821 NSS_IMPLEMENT CK_BBOOL |
867 nssCKFWToken_GetHasClockOnToken | 822 nssCKFWToken_GetHasClockOnToken( |
868 ( | 823 NSSCKFWToken *fwToken) |
869 NSSCKFWToken *fwToken | |
870 ) | |
871 { | 824 { |
872 #ifdef NSSDEBUG | 825 #ifdef NSSDEBUG |
873 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 826 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
874 return CK_FALSE; | 827 return CK_FALSE; |
875 } | 828 } |
876 #endif /* NSSDEBUG */ | 829 #endif /* NSSDEBUG */ |
877 | 830 |
878 if (!fwToken->mdToken->GetHasClockOnToken) { | 831 if (!fwToken->mdToken->GetHasClockOnToken) { |
879 return CK_FALSE; | 832 return CK_FALSE; |
880 } | 833 } |
881 | 834 |
882 return fwToken->mdToken->GetHasClockOnToken(fwToken->mdToken, fwToken, | 835 return fwToken->mdToken->GetHasClockOnToken(fwToken->mdToken, fwToken, |
883 fwToken->mdInstance, fwToken->fwInstance); | 836 fwToken->mdInstance, fwToken->fw
Instance); |
884 } | 837 } |
885 | 838 |
886 /* | 839 /* |
887 * nssCKFWToken_GetHasProtectedAuthenticationPath | 840 * nssCKFWToken_GetHasProtectedAuthenticationPath |
888 * | 841 * |
889 */ | 842 */ |
890 NSS_IMPLEMENT CK_BBOOL | 843 NSS_IMPLEMENT CK_BBOOL |
891 nssCKFWToken_GetHasProtectedAuthenticationPath | 844 nssCKFWToken_GetHasProtectedAuthenticationPath( |
892 ( | 845 NSSCKFWToken *fwToken) |
893 NSSCKFWToken *fwToken | |
894 ) | |
895 { | 846 { |
896 #ifdef NSSDEBUG | 847 #ifdef NSSDEBUG |
897 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 848 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
898 return CK_FALSE; | 849 return CK_FALSE; |
899 } | 850 } |
900 #endif /* NSSDEBUG */ | 851 #endif /* NSSDEBUG */ |
901 | 852 |
902 if (!fwToken->mdToken->GetHasProtectedAuthenticationPath) { | 853 if (!fwToken->mdToken->GetHasProtectedAuthenticationPath) { |
903 return CK_FALSE; | 854 return CK_FALSE; |
904 } | 855 } |
905 | 856 |
906 return fwToken->mdToken->GetHasProtectedAuthenticationPath(fwToken->mdToken, | 857 return fwToken->mdToken->GetHasProtectedAuthenticationPath(fwToken->mdToken, |
907 fwToken, fwToken->mdInstance, fwToken->fwInstance); | 858 fwToken, fwToken-
>mdInstance, fwToken->fwInstance); |
908 } | 859 } |
909 | 860 |
910 /* | 861 /* |
911 * nssCKFWToken_GetSupportsDualCryptoOperations | 862 * nssCKFWToken_GetSupportsDualCryptoOperations |
912 * | 863 * |
913 */ | 864 */ |
914 NSS_IMPLEMENT CK_BBOOL | 865 NSS_IMPLEMENT CK_BBOOL |
915 nssCKFWToken_GetSupportsDualCryptoOperations | 866 nssCKFWToken_GetSupportsDualCryptoOperations( |
916 ( | 867 NSSCKFWToken *fwToken) |
917 NSSCKFWToken *fwToken | |
918 ) | |
919 { | 868 { |
920 #ifdef NSSDEBUG | 869 #ifdef NSSDEBUG |
921 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 870 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
922 return CK_FALSE; | 871 return CK_FALSE; |
923 } | 872 } |
924 #endif /* NSSDEBUG */ | 873 #endif /* NSSDEBUG */ |
925 | 874 |
926 if (!fwToken->mdToken->GetSupportsDualCryptoOperations) { | 875 if (!fwToken->mdToken->GetSupportsDualCryptoOperations) { |
927 return CK_FALSE; | 876 return CK_FALSE; |
928 } | 877 } |
929 | 878 |
930 return fwToken->mdToken->GetSupportsDualCryptoOperations(fwToken->mdToken, | 879 return fwToken->mdToken->GetSupportsDualCryptoOperations(fwToken->mdToken, |
931 fwToken, fwToken->mdInstance, fwToken->fwInstance); | 880 fwToken, fwToken->m
dInstance, fwToken->fwInstance); |
932 } | 881 } |
933 | 882 |
934 /* | 883 /* |
935 * nssCKFWToken_GetMaxSessionCount | 884 * nssCKFWToken_GetMaxSessionCount |
936 * | 885 * |
937 */ | 886 */ |
938 NSS_IMPLEMENT CK_ULONG | 887 NSS_IMPLEMENT CK_ULONG |
939 nssCKFWToken_GetMaxSessionCount | 888 nssCKFWToken_GetMaxSessionCount( |
940 ( | 889 NSSCKFWToken *fwToken) |
941 NSSCKFWToken *fwToken | |
942 ) | |
943 { | 890 { |
944 #ifdef NSSDEBUG | 891 #ifdef NSSDEBUG |
945 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 892 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
946 return CK_UNAVAILABLE_INFORMATION; | 893 return CK_UNAVAILABLE_INFORMATION; |
947 } | 894 } |
948 #endif /* NSSDEBUG */ | 895 #endif /* NSSDEBUG */ |
949 | 896 |
950 if (!fwToken->mdToken->GetMaxSessionCount) { | 897 if (!fwToken->mdToken->GetMaxSessionCount) { |
951 return CK_UNAVAILABLE_INFORMATION; | 898 return CK_UNAVAILABLE_INFORMATION; |
952 } | 899 } |
953 | 900 |
954 return fwToken->mdToken->GetMaxSessionCount(fwToken->mdToken, fwToken, | 901 return fwToken->mdToken->GetMaxSessionCount(fwToken->mdToken, fwToken, |
955 fwToken->mdInstance, fwToken->fwInstance); | 902 fwToken->mdInstance, fwToken->fw
Instance); |
956 } | 903 } |
957 | 904 |
958 /* | 905 /* |
959 * nssCKFWToken_GetMaxRwSessionCount | 906 * nssCKFWToken_GetMaxRwSessionCount |
960 * | 907 * |
961 */ | 908 */ |
962 NSS_IMPLEMENT CK_ULONG | 909 NSS_IMPLEMENT CK_ULONG |
963 nssCKFWToken_GetMaxRwSessionCount | 910 nssCKFWToken_GetMaxRwSessionCount( |
964 ( | 911 NSSCKFWToken *fwToken) |
965 NSSCKFWToken *fwToken | |
966 ) | |
967 { | 912 { |
968 #ifdef NSSDEBUG | 913 #ifdef NSSDEBUG |
969 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 914 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
970 return CK_UNAVAILABLE_INFORMATION; | 915 return CK_UNAVAILABLE_INFORMATION; |
971 } | 916 } |
972 #endif /* NSSDEBUG */ | 917 #endif /* NSSDEBUG */ |
973 | 918 |
974 if (!fwToken->mdToken->GetMaxRwSessionCount) { | 919 if (!fwToken->mdToken->GetMaxRwSessionCount) { |
975 return CK_UNAVAILABLE_INFORMATION; | 920 return CK_UNAVAILABLE_INFORMATION; |
976 } | 921 } |
977 | 922 |
978 return fwToken->mdToken->GetMaxRwSessionCount(fwToken->mdToken, fwToken, | 923 return fwToken->mdToken->GetMaxRwSessionCount(fwToken->mdToken, fwToken, |
979 fwToken->mdInstance, fwToken->fwInstance); | 924 fwToken->mdInstance, fwToken->
fwInstance); |
980 } | 925 } |
981 | 926 |
982 /* | 927 /* |
983 * nssCKFWToken_GetMaxPinLen | 928 * nssCKFWToken_GetMaxPinLen |
984 * | 929 * |
985 */ | 930 */ |
986 NSS_IMPLEMENT CK_ULONG | 931 NSS_IMPLEMENT CK_ULONG |
987 nssCKFWToken_GetMaxPinLen | 932 nssCKFWToken_GetMaxPinLen( |
988 ( | 933 NSSCKFWToken *fwToken) |
989 NSSCKFWToken *fwToken | |
990 ) | |
991 { | 934 { |
992 #ifdef NSSDEBUG | 935 #ifdef NSSDEBUG |
993 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 936 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
994 return CK_UNAVAILABLE_INFORMATION; | 937 return CK_UNAVAILABLE_INFORMATION; |
995 } | 938 } |
996 #endif /* NSSDEBUG */ | 939 #endif /* NSSDEBUG */ |
997 | 940 |
998 if (!fwToken->mdToken->GetMaxPinLen) { | 941 if (!fwToken->mdToken->GetMaxPinLen) { |
999 return CK_UNAVAILABLE_INFORMATION; | 942 return CK_UNAVAILABLE_INFORMATION; |
1000 } | 943 } |
1001 | 944 |
1002 return fwToken->mdToken->GetMaxPinLen(fwToken->mdToken, fwToken, | 945 return fwToken->mdToken->GetMaxPinLen(fwToken->mdToken, fwToken, |
1003 fwToken->mdInstance, fwToken->fwInstance); | 946 fwToken->mdInstance, fwToken->fwInstan
ce); |
1004 } | 947 } |
1005 | 948 |
1006 /* | 949 /* |
1007 * nssCKFWToken_GetMinPinLen | 950 * nssCKFWToken_GetMinPinLen |
1008 * | 951 * |
1009 */ | 952 */ |
1010 NSS_IMPLEMENT CK_ULONG | 953 NSS_IMPLEMENT CK_ULONG |
1011 nssCKFWToken_GetMinPinLen | 954 nssCKFWToken_GetMinPinLen( |
1012 ( | 955 NSSCKFWToken *fwToken) |
1013 NSSCKFWToken *fwToken | |
1014 ) | |
1015 { | 956 { |
1016 #ifdef NSSDEBUG | 957 #ifdef NSSDEBUG |
1017 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 958 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1018 return CK_UNAVAILABLE_INFORMATION; | 959 return CK_UNAVAILABLE_INFORMATION; |
1019 } | 960 } |
1020 #endif /* NSSDEBUG */ | 961 #endif /* NSSDEBUG */ |
1021 | 962 |
1022 if (!fwToken->mdToken->GetMinPinLen) { | 963 if (!fwToken->mdToken->GetMinPinLen) { |
1023 return CK_UNAVAILABLE_INFORMATION; | 964 return CK_UNAVAILABLE_INFORMATION; |
1024 } | 965 } |
1025 | 966 |
1026 return fwToken->mdToken->GetMinPinLen(fwToken->mdToken, fwToken, | 967 return fwToken->mdToken->GetMinPinLen(fwToken->mdToken, fwToken, |
1027 fwToken->mdInstance, fwToken->fwInstance); | 968 fwToken->mdInstance, fwToken->fwInstan
ce); |
1028 } | 969 } |
1029 | 970 |
1030 /* | 971 /* |
1031 * nssCKFWToken_GetTotalPublicMemory | 972 * nssCKFWToken_GetTotalPublicMemory |
1032 * | 973 * |
1033 */ | 974 */ |
1034 NSS_IMPLEMENT CK_ULONG | 975 NSS_IMPLEMENT CK_ULONG |
1035 nssCKFWToken_GetTotalPublicMemory | 976 nssCKFWToken_GetTotalPublicMemory( |
1036 ( | 977 NSSCKFWToken *fwToken) |
1037 NSSCKFWToken *fwToken | |
1038 ) | |
1039 { | 978 { |
1040 #ifdef NSSDEBUG | 979 #ifdef NSSDEBUG |
1041 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 980 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1042 return CK_UNAVAILABLE_INFORMATION; | 981 return CK_UNAVAILABLE_INFORMATION; |
1043 } | 982 } |
1044 #endif /* NSSDEBUG */ | 983 #endif /* NSSDEBUG */ |
1045 | 984 |
1046 if (!fwToken->mdToken->GetTotalPublicMemory) { | 985 if (!fwToken->mdToken->GetTotalPublicMemory) { |
1047 return CK_UNAVAILABLE_INFORMATION; | 986 return CK_UNAVAILABLE_INFORMATION; |
1048 } | 987 } |
1049 | 988 |
1050 return fwToken->mdToken->GetTotalPublicMemory(fwToken->mdToken, fwToken, | 989 return fwToken->mdToken->GetTotalPublicMemory(fwToken->mdToken, fwToken, |
1051 fwToken->mdInstance, fwToken->fwInstance); | 990 fwToken->mdInstance, fwToken->
fwInstance); |
1052 } | 991 } |
1053 | 992 |
1054 /* | 993 /* |
1055 * nssCKFWToken_GetFreePublicMemory | 994 * nssCKFWToken_GetFreePublicMemory |
1056 * | 995 * |
1057 */ | 996 */ |
1058 NSS_IMPLEMENT CK_ULONG | 997 NSS_IMPLEMENT CK_ULONG |
1059 nssCKFWToken_GetFreePublicMemory | 998 nssCKFWToken_GetFreePublicMemory( |
1060 ( | 999 NSSCKFWToken *fwToken) |
1061 NSSCKFWToken *fwToken | |
1062 ) | |
1063 { | 1000 { |
1064 #ifdef NSSDEBUG | 1001 #ifdef NSSDEBUG |
1065 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1002 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1066 return CK_UNAVAILABLE_INFORMATION; | 1003 return CK_UNAVAILABLE_INFORMATION; |
1067 } | 1004 } |
1068 #endif /* NSSDEBUG */ | 1005 #endif /* NSSDEBUG */ |
1069 | 1006 |
1070 if (!fwToken->mdToken->GetFreePublicMemory) { | 1007 if (!fwToken->mdToken->GetFreePublicMemory) { |
1071 return CK_UNAVAILABLE_INFORMATION; | 1008 return CK_UNAVAILABLE_INFORMATION; |
1072 } | 1009 } |
1073 | 1010 |
1074 return fwToken->mdToken->GetFreePublicMemory(fwToken->mdToken, fwToken, | 1011 return fwToken->mdToken->GetFreePublicMemory(fwToken->mdToken, fwToken, |
1075 fwToken->mdInstance, fwToken->fwInstance); | 1012 fwToken->mdInstance, fwToken->f
wInstance); |
1076 } | 1013 } |
1077 | 1014 |
1078 /* | 1015 /* |
1079 * nssCKFWToken_GetTotalPrivateMemory | 1016 * nssCKFWToken_GetTotalPrivateMemory |
1080 * | 1017 * |
1081 */ | 1018 */ |
1082 NSS_IMPLEMENT CK_ULONG | 1019 NSS_IMPLEMENT CK_ULONG |
1083 nssCKFWToken_GetTotalPrivateMemory | 1020 nssCKFWToken_GetTotalPrivateMemory( |
1084 ( | 1021 NSSCKFWToken *fwToken) |
1085 NSSCKFWToken *fwToken | |
1086 ) | |
1087 { | 1022 { |
1088 #ifdef NSSDEBUG | 1023 #ifdef NSSDEBUG |
1089 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1024 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1090 return CK_UNAVAILABLE_INFORMATION; | 1025 return CK_UNAVAILABLE_INFORMATION; |
1091 } | 1026 } |
1092 #endif /* NSSDEBUG */ | 1027 #endif /* NSSDEBUG */ |
1093 | 1028 |
1094 if (!fwToken->mdToken->GetTotalPrivateMemory) { | 1029 if (!fwToken->mdToken->GetTotalPrivateMemory) { |
1095 return CK_UNAVAILABLE_INFORMATION; | 1030 return CK_UNAVAILABLE_INFORMATION; |
1096 } | 1031 } |
1097 | 1032 |
1098 return fwToken->mdToken->GetTotalPrivateMemory(fwToken->mdToken, fwToken, | 1033 return fwToken->mdToken->GetTotalPrivateMemory(fwToken->mdToken, fwToken, |
1099 fwToken->mdInstance, fwToken->fwInstance); | 1034 fwToken->mdInstance, fwToken-
>fwInstance); |
1100 } | 1035 } |
1101 | 1036 |
1102 /* | 1037 /* |
1103 * nssCKFWToken_GetFreePrivateMemory | 1038 * nssCKFWToken_GetFreePrivateMemory |
1104 * | 1039 * |
1105 */ | 1040 */ |
1106 NSS_IMPLEMENT CK_ULONG | 1041 NSS_IMPLEMENT CK_ULONG |
1107 nssCKFWToken_GetFreePrivateMemory | 1042 nssCKFWToken_GetFreePrivateMemory( |
1108 ( | 1043 NSSCKFWToken *fwToken) |
1109 NSSCKFWToken *fwToken | |
1110 ) | |
1111 { | 1044 { |
1112 #ifdef NSSDEBUG | 1045 #ifdef NSSDEBUG |
1113 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1046 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1114 return CK_UNAVAILABLE_INFORMATION; | 1047 return CK_UNAVAILABLE_INFORMATION; |
1115 } | 1048 } |
1116 #endif /* NSSDEBUG */ | 1049 #endif /* NSSDEBUG */ |
1117 | 1050 |
1118 if (!fwToken->mdToken->GetFreePrivateMemory) { | 1051 if (!fwToken->mdToken->GetFreePrivateMemory) { |
1119 return CK_UNAVAILABLE_INFORMATION; | 1052 return CK_UNAVAILABLE_INFORMATION; |
1120 } | 1053 } |
1121 | 1054 |
1122 return fwToken->mdToken->GetFreePrivateMemory(fwToken->mdToken, fwToken, | 1055 return fwToken->mdToken->GetFreePrivateMemory(fwToken->mdToken, fwToken, |
1123 fwToken->mdInstance, fwToken->fwInstance); | 1056 fwToken->mdInstance, fwToken->
fwInstance); |
1124 } | 1057 } |
1125 | 1058 |
1126 /* | 1059 /* |
1127 * nssCKFWToken_GetHardwareVersion | 1060 * nssCKFWToken_GetHardwareVersion |
1128 * | 1061 * |
1129 */ | 1062 */ |
1130 NSS_IMPLEMENT CK_VERSION | 1063 NSS_IMPLEMENT CK_VERSION |
1131 nssCKFWToken_GetHardwareVersion | 1064 nssCKFWToken_GetHardwareVersion( |
1132 ( | 1065 NSSCKFWToken *fwToken) |
1133 NSSCKFWToken *fwToken | |
1134 ) | |
1135 { | 1066 { |
1136 CK_VERSION rv; | 1067 CK_VERSION rv; |
1137 | 1068 |
1138 #ifdef NSSDEBUG | 1069 #ifdef NSSDEBUG |
1139 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1070 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1140 rv.major = rv.minor = 0; | 1071 rv.major = rv.minor = 0; |
1141 return rv; | 1072 return rv; |
1142 } | 1073 } |
1143 #endif /* NSSDEBUG */ | 1074 #endif /* NSSDEBUG */ |
1144 | 1075 |
1145 if( CKR_OK != nssCKFWMutex_Lock(fwToken->mutex) ) { | 1076 if (CKR_OK != nssCKFWMutex_Lock(fwToken->mutex)) { |
1146 rv.major = rv.minor = 0; | 1077 rv.major = rv.minor = 0; |
| 1078 return rv; |
| 1079 } |
| 1080 |
| 1081 if ((0 != fwToken->hardwareVersion.major) || |
| 1082 (0 != fwToken->hardwareVersion.minor)) { |
| 1083 rv = fwToken->hardwareVersion; |
| 1084 goto done; |
| 1085 } |
| 1086 |
| 1087 if (fwToken->mdToken->GetHardwareVersion) { |
| 1088 fwToken->hardwareVersion = fwToken->mdToken->GetHardwareVersion( |
| 1089 fwToken->mdToken, fwToken, fwToken->mdInstance, fwToken->fwInstance)
; |
| 1090 } else { |
| 1091 fwToken->hardwareVersion.major = 0; |
| 1092 fwToken->hardwareVersion.minor = 1; |
| 1093 } |
| 1094 |
| 1095 rv = fwToken->hardwareVersion; |
| 1096 |
| 1097 done: |
| 1098 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1147 return rv; | 1099 return rv; |
1148 } | |
1149 | |
1150 if( (0 != fwToken->hardwareVersion.major) || | |
1151 (0 != fwToken->hardwareVersion.minor) ) { | |
1152 rv = fwToken->hardwareVersion; | |
1153 goto done; | |
1154 } | |
1155 | |
1156 if (fwToken->mdToken->GetHardwareVersion) { | |
1157 fwToken->hardwareVersion = fwToken->mdToken->GetHardwareVersion( | |
1158 fwToken->mdToken, fwToken, fwToken->mdInstance, fwToken->fwInstance); | |
1159 } else { | |
1160 fwToken->hardwareVersion.major = 0; | |
1161 fwToken->hardwareVersion.minor = 1; | |
1162 } | |
1163 | |
1164 rv = fwToken->hardwareVersion; | |
1165 | |
1166 done: | |
1167 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
1168 return rv; | |
1169 } | 1100 } |
1170 | 1101 |
1171 /* | 1102 /* |
1172 * nssCKFWToken_GetFirmwareVersion | 1103 * nssCKFWToken_GetFirmwareVersion |
1173 * | 1104 * |
1174 */ | 1105 */ |
1175 NSS_IMPLEMENT CK_VERSION | 1106 NSS_IMPLEMENT CK_VERSION |
1176 nssCKFWToken_GetFirmwareVersion | 1107 nssCKFWToken_GetFirmwareVersion( |
1177 ( | 1108 NSSCKFWToken *fwToken) |
1178 NSSCKFWToken *fwToken | |
1179 ) | |
1180 { | 1109 { |
1181 CK_VERSION rv; | 1110 CK_VERSION rv; |
1182 | 1111 |
1183 #ifdef NSSDEBUG | 1112 #ifdef NSSDEBUG |
1184 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1113 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1185 rv.major = rv.minor = 0; | 1114 rv.major = rv.minor = 0; |
1186 return rv; | 1115 return rv; |
1187 } | 1116 } |
1188 #endif /* NSSDEBUG */ | 1117 #endif /* NSSDEBUG */ |
1189 | 1118 |
1190 if( CKR_OK != nssCKFWMutex_Lock(fwToken->mutex) ) { | 1119 if (CKR_OK != nssCKFWMutex_Lock(fwToken->mutex)) { |
1191 rv.major = rv.minor = 0; | 1120 rv.major = rv.minor = 0; |
| 1121 return rv; |
| 1122 } |
| 1123 |
| 1124 if ((0 != fwToken->firmwareVersion.major) || |
| 1125 (0 != fwToken->firmwareVersion.minor)) { |
| 1126 rv = fwToken->firmwareVersion; |
| 1127 goto done; |
| 1128 } |
| 1129 |
| 1130 if (fwToken->mdToken->GetFirmwareVersion) { |
| 1131 fwToken->firmwareVersion = fwToken->mdToken->GetFirmwareVersion( |
| 1132 fwToken->mdToken, fwToken, fwToken->mdInstance, fwToken->fwInstance)
; |
| 1133 } else { |
| 1134 fwToken->firmwareVersion.major = 0; |
| 1135 fwToken->firmwareVersion.minor = 1; |
| 1136 } |
| 1137 |
| 1138 rv = fwToken->firmwareVersion; |
| 1139 |
| 1140 done: |
| 1141 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1192 return rv; | 1142 return rv; |
1193 } | |
1194 | |
1195 if( (0 != fwToken->firmwareVersion.major) || | |
1196 (0 != fwToken->firmwareVersion.minor) ) { | |
1197 rv = fwToken->firmwareVersion; | |
1198 goto done; | |
1199 } | |
1200 | |
1201 if (fwToken->mdToken->GetFirmwareVersion) { | |
1202 fwToken->firmwareVersion = fwToken->mdToken->GetFirmwareVersion( | |
1203 fwToken->mdToken, fwToken, fwToken->mdInstance, fwToken->fwInstance); | |
1204 } else { | |
1205 fwToken->firmwareVersion.major = 0; | |
1206 fwToken->firmwareVersion.minor = 1; | |
1207 } | |
1208 | |
1209 rv = fwToken->firmwareVersion; | |
1210 | |
1211 done: | |
1212 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
1213 return rv; | |
1214 } | 1143 } |
1215 | 1144 |
1216 /* | 1145 /* |
1217 * nssCKFWToken_GetUTCTime | 1146 * nssCKFWToken_GetUTCTime |
1218 * | 1147 * |
1219 */ | 1148 */ |
1220 NSS_IMPLEMENT CK_RV | 1149 NSS_IMPLEMENT CK_RV |
1221 nssCKFWToken_GetUTCTime | 1150 nssCKFWToken_GetUTCTime( |
1222 ( | 1151 NSSCKFWToken *fwToken, |
1223 NSSCKFWToken *fwToken, | 1152 CK_CHAR utcTime[16]) |
1224 CK_CHAR utcTime[16] | |
1225 ) | |
1226 { | 1153 { |
1227 CK_RV error = CKR_OK; | 1154 CK_RV error = CKR_OK; |
1228 | 1155 |
1229 #ifdef NSSDEBUG | 1156 #ifdef NSSDEBUG |
1230 error = nssCKFWToken_verifyPointer(fwToken); | 1157 error = nssCKFWToken_verifyPointer(fwToken); |
1231 if( CKR_OK != error ) { | 1158 if (CKR_OK != error) { |
1232 return error; | 1159 return error; |
1233 } | 1160 } |
1234 | 1161 |
1235 if( (CK_CHAR_PTR)NULL == utcTime ) { | 1162 if ((CK_CHAR_PTR)NULL == utcTime) { |
1236 return CKR_ARGUMENTS_BAD; | 1163 return CKR_ARGUMENTS_BAD; |
1237 } | 1164 } |
1238 #endif /* DEBUG */ | 1165 #endif /* DEBUG */ |
1239 | 1166 |
1240 if( CK_TRUE != nssCKFWToken_GetHasClockOnToken(fwToken) ) { | 1167 if (CK_TRUE != nssCKFWToken_GetHasClockOnToken(fwToken)) { |
1241 /* return CKR_DEVICE_ERROR; */ | 1168 /* return CKR_DEVICE_ERROR; */ |
1242 (void)nssUTF8_CopyIntoFixedBuffer((NSSUTF8 *)NULL, (char *)utcTime, 16, ' ')
; | 1169 (void)nssUTF8_CopyIntoFixedBuffer((NSSUTF8 *)NULL, (char *)utcTime, 16,
' '); |
1243 return CKR_OK; | 1170 return CKR_OK; |
1244 } | |
1245 | |
1246 if (!fwToken->mdToken->GetUTCTime) { | |
1247 /* It said it had one! */ | |
1248 return CKR_GENERAL_ERROR; | |
1249 } | |
1250 | |
1251 error = fwToken->mdToken->GetUTCTime(fwToken->mdToken, fwToken, | |
1252 fwToken->mdInstance, fwToken->fwInstance, utcTime); | |
1253 if( CKR_OK != error ) { | |
1254 return error; | |
1255 } | |
1256 | |
1257 /* Sanity-check the data */ | |
1258 { | |
1259 /* Format is YYYYMMDDhhmmss00 */ | |
1260 int i; | |
1261 int Y, M, D, h, m, s; | |
1262 static int dims[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; | |
1263 | |
1264 for( i = 0; i < 16; i++ ) { | |
1265 if( (utcTime[i] < '0') || (utcTime[i] > '9') ) { | |
1266 goto badtime; | |
1267 } | |
1268 } | 1171 } |
1269 | 1172 |
1270 Y = ((utcTime[ 0] - '0') * 1000) + ((utcTime[1] - '0') * 100) + | 1173 if (!fwToken->mdToken->GetUTCTime) { |
1271 ((utcTime[ 2] - '0') * 10) + (utcTime[ 3] - '0'); | 1174 /* It said it had one! */ |
1272 M = ((utcTime[ 4] - '0') * 10) + (utcTime[ 5] - '0'); | 1175 return CKR_GENERAL_ERROR; |
1273 D = ((utcTime[ 6] - '0') * 10) + (utcTime[ 7] - '0'); | 1176 } |
1274 h = ((utcTime[ 8] - '0') * 10) + (utcTime[ 9] - '0'); | |
1275 m = ((utcTime[10] - '0') * 10) + (utcTime[11] - '0'); | |
1276 s = ((utcTime[12] - '0') * 10) + (utcTime[13] - '0'); | |
1277 | 1177 |
1278 if( (Y < 1990) || (Y > 3000) ) goto badtime; /* Y3K problem. heh heh heh */ | 1178 error = fwToken->mdToken->GetUTCTime(fwToken->mdToken, fwToken, |
1279 if( (M < 1) || (M > 12) ) goto badtime; | 1179 fwToken->mdInstance, fwToken->fwInstanc
e, utcTime); |
1280 if( (D < 1) || (D > 31) ) goto badtime; | 1180 if (CKR_OK != error) { |
| 1181 return error; |
| 1182 } |
1281 | 1183 |
1282 if( D > dims[M-1] ) goto badtime; /* per-month check */ | 1184 /* Sanity-check the data */ |
1283 if( (2 == M) && (((Y%4)||!(Y%100))&&(Y%400)) && (D > 28) ) goto badtime; /*
leap years */ | 1185 { |
| 1186 /* Format is YYYYMMDDhhmmss00 */ |
| 1187 int i; |
| 1188 int Y, M, D, h, m, s; |
| 1189 static int dims[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; |
1284 | 1190 |
1285 if( (h < 0) || (h > 23) ) goto badtime; | 1191 for (i = 0; i < 16; i++) { |
1286 if( (m < 0) || (m > 60) ) goto badtime; | 1192 if ((utcTime[i] < '0') || (utcTime[i] > '9')) { |
1287 if( (s < 0) || (s > 61) ) goto badtime; | 1193 goto badtime; |
| 1194 } |
| 1195 } |
1288 | 1196 |
1289 /* 60m and 60 or 61s is only allowed for leap seconds. */ | 1197 Y = ((utcTime[0] - '0') * 1000) + ((utcTime[1] - '0') * 100) + |
1290 if( (60 == m) || (s >= 60) ) { | 1198 ((utcTime[2] - '0') * 10) + (utcTime[3] - '0'); |
1291 if( (23 != h) || (60 != m) || (s < 60) ) goto badtime; | 1199 M = ((utcTime[4] - '0') * 10) + (utcTime[5] - '0'); |
1292 /* leap seconds can only happen on June 30 or Dec 31.. I think */ | 1200 D = ((utcTime[6] - '0') * 10) + (utcTime[7] - '0'); |
1293 /* if( ((6 != M) || (30 != D)) && ((12 != M) || (31 != D)) ) goto badtime;
*/ | 1201 h = ((utcTime[8] - '0') * 10) + (utcTime[9] - '0'); |
| 1202 m = ((utcTime[10] - '0') * 10) + (utcTime[11] - '0'); |
| 1203 s = ((utcTime[12] - '0') * 10) + (utcTime[13] - '0'); |
| 1204 |
| 1205 if ((Y < 1990) || (Y > 3000)) |
| 1206 goto badtime; /* Y3K problem. heh heh heh */ |
| 1207 if ((M < 1) || (M > 12)) |
| 1208 goto badtime; |
| 1209 if ((D < 1) || (D > 31)) |
| 1210 goto badtime; |
| 1211 |
| 1212 if (D > dims[M - 1]) |
| 1213 goto badtime; /* per-month check */ |
| 1214 if ((2 == M) && (((Y % 4) || !(Y % 100)) && |
| 1215 (Y % 400)) && |
| 1216 (D > 28)) |
| 1217 goto badtime; /* leap years */ |
| 1218 |
| 1219 if ((h < 0) || (h > 23)) |
| 1220 goto badtime; |
| 1221 if ((m < 0) || (m > 60)) |
| 1222 goto badtime; |
| 1223 if ((s < 0) || (s > 61)) |
| 1224 goto badtime; |
| 1225 |
| 1226 /* 60m and 60 or 61s is only allowed for leap seconds. */ |
| 1227 if ((60 == m) || (s >= 60)) { |
| 1228 if ((23 != h) || (60 != m) || (s < 60)) |
| 1229 goto badtime; |
| 1230 /* leap seconds can only happen on June 30 or Dec 31.. I think */ |
| 1231 /* if( ((6 != M) || (30 != D)) && ((12 != M) || (31 != D)) ) goto ba
dtime; */ |
| 1232 } |
1294 } | 1233 } |
1295 } | |
1296 | 1234 |
1297 return CKR_OK; | 1235 return CKR_OK; |
1298 | 1236 |
1299 badtime: | 1237 badtime: |
1300 return CKR_GENERAL_ERROR; | 1238 return CKR_GENERAL_ERROR; |
1301 } | 1239 } |
1302 | 1240 |
1303 /* | 1241 /* |
1304 * nssCKFWToken_OpenSession | 1242 * nssCKFWToken_OpenSession |
1305 * | 1243 * |
1306 */ | 1244 */ |
1307 NSS_IMPLEMENT NSSCKFWSession * | 1245 NSS_IMPLEMENT NSSCKFWSession * |
1308 nssCKFWToken_OpenSession | 1246 nssCKFWToken_OpenSession( |
1309 ( | 1247 NSSCKFWToken *fwToken, |
1310 NSSCKFWToken *fwToken, | 1248 CK_BBOOL rw, |
1311 CK_BBOOL rw, | 1249 CK_VOID_PTR pApplication, |
1312 CK_VOID_PTR pApplication, | 1250 CK_NOTIFY Notify, |
1313 CK_NOTIFY Notify, | 1251 CK_RV *pError) |
1314 CK_RV *pError | |
1315 ) | |
1316 { | 1252 { |
1317 NSSCKFWSession *fwSession = (NSSCKFWSession *)NULL; | 1253 NSSCKFWSession *fwSession = (NSSCKFWSession *)NULL; |
1318 NSSCKMDSession *mdSession; | 1254 NSSCKMDSession *mdSession; |
1319 | 1255 |
1320 #ifdef NSSDEBUG | 1256 #ifdef NSSDEBUG |
1321 if (!pError) { | 1257 if (!pError) { |
1322 return (NSSCKFWSession *)NULL; | 1258 return (NSSCKFWSession *)NULL; |
1323 } | 1259 } |
1324 | 1260 |
1325 *pError = nssCKFWToken_verifyPointer(fwToken); | 1261 *pError = nssCKFWToken_verifyPointer(fwToken); |
1326 if( CKR_OK != *pError ) { | 1262 if (CKR_OK != *pError) { |
1327 return (NSSCKFWSession *)NULL; | 1263 return (NSSCKFWSession *)NULL; |
1328 } | 1264 } |
1329 | 1265 |
1330 switch( rw ) { | 1266 switch (rw) { |
1331 case CK_TRUE: | 1267 case CK_TRUE: |
1332 case CK_FALSE: | 1268 case CK_FALSE: |
1333 break; | 1269 break; |
1334 default: | 1270 default: |
1335 *pError = CKR_ARGUMENTS_BAD; | 1271 *pError = CKR_ARGUMENTS_BAD; |
1336 return (NSSCKFWSession *)NULL; | 1272 return (NSSCKFWSession *)NULL; |
1337 } | 1273 } |
1338 #endif /* NSSDEBUG */ | 1274 #endif /* NSSDEBUG */ |
1339 | 1275 |
1340 *pError = nssCKFWMutex_Lock(fwToken->mutex); | 1276 *pError = nssCKFWMutex_Lock(fwToken->mutex); |
1341 if( CKR_OK != *pError ) { | 1277 if (CKR_OK != *pError) { |
1342 return (NSSCKFWSession *)NULL; | 1278 return (NSSCKFWSession *)NULL; |
1343 } | 1279 } |
1344 | 1280 |
1345 if( CK_TRUE == rw ) { | 1281 if (CK_TRUE == rw) { |
1346 /* Read-write session desired */ | 1282 /* Read-write session desired */ |
1347 if( CK_TRUE == nssCKFWToken_GetIsWriteProtected(fwToken) ) { | 1283 if (CK_TRUE == nssCKFWToken_GetIsWriteProtected(fwToken)) { |
1348 *pError = CKR_TOKEN_WRITE_PROTECTED; | 1284 *pError = CKR_TOKEN_WRITE_PROTECTED; |
1349 goto done; | 1285 goto done; |
| 1286 } |
| 1287 } else { |
| 1288 /* Read-only session desired */ |
| 1289 if (CKS_RW_SO_FUNCTIONS == nssCKFWToken_GetSessionState(fwToken)) { |
| 1290 *pError = CKR_SESSION_READ_WRITE_SO_EXISTS; |
| 1291 goto done; |
| 1292 } |
1350 } | 1293 } |
1351 } else { | 1294 |
1352 /* Read-only session desired */ | 1295 /* We could compare sesion counts to any limits we know of, I guess.. */ |
1353 if( CKS_RW_SO_FUNCTIONS == nssCKFWToken_GetSessionState(fwToken) ) { | 1296 |
1354 *pError = CKR_SESSION_READ_WRITE_SO_EXISTS; | 1297 if (!fwToken->mdToken->OpenSession) { |
1355 goto done; | 1298 /* |
| 1299 * I'm not sure that the Module actually needs to implement |
| 1300 * mdSessions -- the Framework can keep track of everything |
| 1301 * needed, really. But I'll sort out that detail later.. |
| 1302 */ |
| 1303 *pError = CKR_GENERAL_ERROR; |
| 1304 goto done; |
1356 } | 1305 } |
1357 } | |
1358 | 1306 |
1359 /* We could compare sesion counts to any limits we know of, I guess.. */ | 1307 fwSession = nssCKFWSession_Create(fwToken, rw, pApplication, Notify, pError)
; |
| 1308 if (!fwSession) { |
| 1309 if (CKR_OK == *pError) { |
| 1310 *pError = CKR_GENERAL_ERROR; |
| 1311 } |
| 1312 goto done; |
| 1313 } |
1360 | 1314 |
1361 if (!fwToken->mdToken->OpenSession) { | 1315 mdSession = fwToken->mdToken->OpenSession(fwToken->mdToken, fwToken, |
1362 /* | 1316 fwToken->mdInstance, fwToken->fwIn
stance, fwSession, |
1363 * I'm not sure that the Module actually needs to implement | 1317 rw, pError); |
1364 * mdSessions -- the Framework can keep track of everything | 1318 if (!mdSession) { |
1365 * needed, really. But I'll sort out that detail later.. | 1319 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); |
1366 */ | 1320 if (CKR_OK == *pError) { |
1367 *pError = CKR_GENERAL_ERROR; | 1321 *pError = CKR_GENERAL_ERROR; |
1368 goto done; | 1322 } |
1369 } | 1323 goto done; |
| 1324 } |
1370 | 1325 |
1371 fwSession = nssCKFWSession_Create(fwToken, rw, pApplication, Notify, pError); | 1326 *pError = nssCKFWSession_SetMDSession(fwSession, mdSession); |
1372 if (!fwSession) { | 1327 if (CKR_OK != *pError) { |
1373 if( CKR_OK == *pError ) { | 1328 if (mdSession->Close) { |
1374 *pError = CKR_GENERAL_ERROR; | 1329 mdSession->Close(mdSession, fwSession, fwToken->mdToken, fwToken, |
| 1330 fwToken->mdInstance, fwToken->fwInstance); |
| 1331 } |
| 1332 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); |
| 1333 goto done; |
1375 } | 1334 } |
1376 goto done; | |
1377 } | |
1378 | 1335 |
1379 mdSession = fwToken->mdToken->OpenSession(fwToken->mdToken, fwToken, | 1336 *pError = nssCKFWHash_Add(fwToken->sessions, fwSession, fwSession); |
1380 fwToken->mdInstance, fwToken->fwInstance, fwSession, | 1337 if (CKR_OK != *pError) { |
1381 rw, pError); | 1338 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); |
1382 if (!mdSession) { | 1339 fwSession = (NSSCKFWSession *)NULL; |
1383 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); | 1340 goto done; |
1384 if( CKR_OK == *pError ) { | |
1385 *pError = CKR_GENERAL_ERROR; | |
1386 } | 1341 } |
1387 goto done; | |
1388 } | |
1389 | 1342 |
1390 *pError = nssCKFWSession_SetMDSession(fwSession, mdSession); | 1343 done: |
1391 if( CKR_OK != *pError ) { | 1344 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1392 if (mdSession->Close) { | 1345 return fwSession; |
1393 mdSession->Close(mdSession, fwSession, fwToken->mdToken, fwToken, | |
1394 fwToken->mdInstance, fwToken->fwInstance); | |
1395 } | |
1396 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); | |
1397 goto done; | |
1398 } | |
1399 | |
1400 *pError = nssCKFWHash_Add(fwToken->sessions, fwSession, fwSession); | |
1401 if( CKR_OK != *pError ) { | |
1402 (void)nssCKFWSession_Destroy(fwSession, CK_FALSE); | |
1403 fwSession = (NSSCKFWSession *)NULL; | |
1404 goto done; | |
1405 } | |
1406 | |
1407 done: | |
1408 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
1409 return fwSession; | |
1410 } | 1346 } |
1411 | 1347 |
1412 /* | 1348 /* |
1413 * nssCKFWToken_GetMechanismCount | 1349 * nssCKFWToken_GetMechanismCount |
1414 * | 1350 * |
1415 */ | 1351 */ |
1416 NSS_IMPLEMENT CK_ULONG | 1352 NSS_IMPLEMENT CK_ULONG |
1417 nssCKFWToken_GetMechanismCount | 1353 nssCKFWToken_GetMechanismCount( |
1418 ( | 1354 NSSCKFWToken *fwToken) |
1419 NSSCKFWToken *fwToken | |
1420 ) | |
1421 { | 1355 { |
1422 #ifdef NSSDEBUG | 1356 #ifdef NSSDEBUG |
1423 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1357 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1424 return 0; | 1358 return 0; |
1425 } | 1359 } |
1426 #endif /* NSSDEBUG */ | 1360 #endif /* NSSDEBUG */ |
1427 | 1361 |
1428 if (!fwToken->mdToken->GetMechanismCount) { | 1362 if (!fwToken->mdToken->GetMechanismCount) { |
1429 return 0; | 1363 return 0; |
1430 } | 1364 } |
1431 | 1365 |
1432 return fwToken->mdToken->GetMechanismCount(fwToken->mdToken, fwToken, | 1366 return fwToken->mdToken->GetMechanismCount(fwToken->mdToken, fwToken, |
1433 fwToken->mdInstance, fwToken->fwInstance); | 1367 fwToken->mdInstance, fwToken->fwI
nstance); |
1434 } | 1368 } |
1435 | 1369 |
1436 /* | 1370 /* |
1437 * nssCKFWToken_GetMechanismTypes | 1371 * nssCKFWToken_GetMechanismTypes |
1438 * | 1372 * |
1439 */ | 1373 */ |
1440 NSS_IMPLEMENT CK_RV | 1374 NSS_IMPLEMENT CK_RV |
1441 nssCKFWToken_GetMechanismTypes | 1375 nssCKFWToken_GetMechanismTypes( |
1442 ( | 1376 NSSCKFWToken *fwToken, |
1443 NSSCKFWToken *fwToken, | 1377 CK_MECHANISM_TYPE types[]) |
1444 CK_MECHANISM_TYPE types[] | |
1445 ) | |
1446 { | 1378 { |
1447 #ifdef NSSDEBUG | 1379 #ifdef NSSDEBUG |
1448 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1380 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1449 return CKR_ARGUMENTS_BAD; | 1381 return CKR_ARGUMENTS_BAD; |
1450 } | 1382 } |
1451 | 1383 |
1452 if (!types) { | 1384 if (!types) { |
1453 return CKR_ARGUMENTS_BAD; | 1385 return CKR_ARGUMENTS_BAD; |
1454 } | 1386 } |
1455 #endif /* NSSDEBUG */ | 1387 #endif /* NSSDEBUG */ |
1456 | 1388 |
1457 if (!fwToken->mdToken->GetMechanismTypes) { | 1389 if (!fwToken->mdToken->GetMechanismTypes) { |
1458 /* | 1390 /* |
1459 * This should only be called with a sufficiently-large | 1391 * This should only be called with a sufficiently-large |
1460 * "types" array, which can only be done if GetMechanismCount | 1392 * "types" array, which can only be done if GetMechanismCount |
1461 * is implemented. If that's implemented (and returns nonzero), | 1393 * is implemented. If that's implemented (and returns nonzero), |
1462 * then this should be too. So return an error. | 1394 * then this should be too. So return an error. |
1463 */ | 1395 */ |
1464 return CKR_GENERAL_ERROR; | 1396 return CKR_GENERAL_ERROR; |
1465 } | 1397 } |
1466 | 1398 |
1467 return fwToken->mdToken->GetMechanismTypes(fwToken->mdToken, fwToken, | 1399 return fwToken->mdToken->GetMechanismTypes(fwToken->mdToken, fwToken, |
1468 fwToken->mdInstance, fwToken->fwInstance, types); | 1400 fwToken->mdInstance, fwToken->fwI
nstance, types); |
1469 } | 1401 } |
1470 | 1402 |
1471 | |
1472 /* | 1403 /* |
1473 * nssCKFWToken_GetMechanism | 1404 * nssCKFWToken_GetMechanism |
1474 * | 1405 * |
1475 */ | 1406 */ |
1476 NSS_IMPLEMENT NSSCKFWMechanism * | 1407 NSS_IMPLEMENT NSSCKFWMechanism * |
1477 nssCKFWToken_GetMechanism | 1408 nssCKFWToken_GetMechanism( |
1478 ( | 1409 NSSCKFWToken *fwToken, |
1479 NSSCKFWToken *fwToken, | 1410 CK_MECHANISM_TYPE which, |
1480 CK_MECHANISM_TYPE which, | 1411 CK_RV *pError) |
1481 CK_RV *pError | |
1482 ) | |
1483 { | 1412 { |
1484 NSSCKMDMechanism *mdMechanism; | 1413 NSSCKMDMechanism *mdMechanism; |
1485 if (!fwToken->mdMechanismHash) { | 1414 if (!fwToken->mdMechanismHash) { |
1486 *pError = CKR_GENERAL_ERROR; | 1415 *pError = CKR_GENERAL_ERROR; |
1487 return (NSSCKFWMechanism *)NULL; | 1416 return (NSSCKFWMechanism *)NULL; |
1488 } | 1417 } |
1489 | |
1490 if (!fwToken->mdToken->GetMechanism) { | |
1491 /* | |
1492 * If we don't implement any GetMechanism function, then we must | |
1493 * not support any. | |
1494 */ | |
1495 *pError = CKR_MECHANISM_INVALID; | |
1496 return (NSSCKFWMechanism *)NULL; | |
1497 } | |
1498 | 1418 |
1499 /* lookup in hash table */ | 1419 if (!fwToken->mdToken->GetMechanism) { |
1500 mdMechanism = fwToken->mdToken->GetMechanism(fwToken->mdToken, fwToken, | 1420 /* |
1501 fwToken->mdInstance, fwToken->fwInstance, which, pError); | 1421 * If we don't implement any GetMechanism function, then we must |
1502 if (!mdMechanism) { | 1422 * not support any. |
1503 return (NSSCKFWMechanism *) NULL; | 1423 */ |
1504 } | 1424 *pError = CKR_MECHANISM_INVALID; |
1505 /* store in hash table */ | 1425 return (NSSCKFWMechanism *)NULL; |
1506 return nssCKFWMechanism_Create(mdMechanism, fwToken->mdToken, fwToken, | 1426 } |
1507 fwToken->mdInstance, fwToken->fwInstance); | 1427 |
| 1428 /* lookup in hash table */ |
| 1429 mdMechanism = fwToken->mdToken->GetMechanism(fwToken->mdToken, fwToken, |
| 1430 fwToken->mdInstance, fwToken->f
wInstance, which, pError); |
| 1431 if (!mdMechanism) { |
| 1432 return (NSSCKFWMechanism *)NULL; |
| 1433 } |
| 1434 /* store in hash table */ |
| 1435 return nssCKFWMechanism_Create(mdMechanism, fwToken->mdToken, fwToken, |
| 1436 fwToken->mdInstance, fwToken->fwInstance); |
1508 } | 1437 } |
1509 | 1438 |
1510 NSS_IMPLEMENT CK_RV | 1439 NSS_IMPLEMENT CK_RV |
1511 nssCKFWToken_SetSessionState | 1440 nssCKFWToken_SetSessionState( |
1512 ( | 1441 NSSCKFWToken *fwToken, |
1513 NSSCKFWToken *fwToken, | 1442 CK_STATE newState) |
1514 CK_STATE newState | |
1515 ) | |
1516 { | 1443 { |
1517 CK_RV error = CKR_OK; | 1444 CK_RV error = CKR_OK; |
1518 | 1445 |
1519 #ifdef NSSDEBUG | 1446 #ifdef NSSDEBUG |
1520 error = nssCKFWToken_verifyPointer(fwToken); | 1447 error = nssCKFWToken_verifyPointer(fwToken); |
1521 if( CKR_OK != error ) { | 1448 if (CKR_OK != error) { |
1522 return error; | 1449 return error; |
1523 } | 1450 } |
1524 | 1451 |
1525 switch( newState ) { | 1452 switch (newState) { |
1526 case CKS_RO_PUBLIC_SESSION: | 1453 case CKS_RO_PUBLIC_SESSION: |
1527 case CKS_RO_USER_FUNCTIONS: | 1454 case CKS_RO_USER_FUNCTIONS: |
1528 case CKS_RW_PUBLIC_SESSION: | 1455 case CKS_RW_PUBLIC_SESSION: |
1529 case CKS_RW_USER_FUNCTIONS: | 1456 case CKS_RW_USER_FUNCTIONS: |
1530 case CKS_RW_SO_FUNCTIONS: | 1457 case CKS_RW_SO_FUNCTIONS: |
1531 break; | 1458 break; |
1532 default: | 1459 default: |
1533 return CKR_ARGUMENTS_BAD; | 1460 return CKR_ARGUMENTS_BAD; |
1534 } | 1461 } |
1535 #endif /* NSSDEBUG */ | 1462 #endif /* NSSDEBUG */ |
1536 | 1463 |
1537 error = nssCKFWMutex_Lock(fwToken->mutex); | 1464 error = nssCKFWMutex_Lock(fwToken->mutex); |
1538 if( CKR_OK != error ) { | 1465 if (CKR_OK != error) { |
1539 return error; | 1466 return error; |
1540 } | 1467 } |
1541 | 1468 |
1542 fwToken->state = newState; | 1469 fwToken->state = newState; |
1543 (void)nssCKFWMutex_Unlock(fwToken->mutex); | 1470 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1544 return CKR_OK; | 1471 return CKR_OK; |
1545 } | 1472 } |
1546 | 1473 |
1547 /* | 1474 /* |
1548 * nssCKFWToken_RemoveSession | 1475 * nssCKFWToken_RemoveSession |
1549 * | 1476 * |
1550 */ | 1477 */ |
1551 NSS_IMPLEMENT CK_RV | 1478 NSS_IMPLEMENT CK_RV |
1552 nssCKFWToken_RemoveSession | 1479 nssCKFWToken_RemoveSession( |
1553 ( | 1480 NSSCKFWToken *fwToken, |
1554 NSSCKFWToken *fwToken, | 1481 NSSCKFWSession *fwSession) |
1555 NSSCKFWSession *fwSession | |
1556 ) | |
1557 { | 1482 { |
1558 CK_RV error = CKR_OK; | 1483 CK_RV error = CKR_OK; |
1559 | 1484 |
1560 #ifdef NSSDEBUG | 1485 #ifdef NSSDEBUG |
1561 error = nssCKFWToken_verifyPointer(fwToken); | 1486 error = nssCKFWToken_verifyPointer(fwToken); |
1562 if( CKR_OK != error ) { | 1487 if (CKR_OK != error) { |
1563 return error; | 1488 return error; |
1564 } | 1489 } |
1565 | 1490 |
1566 error = nssCKFWSession_verifyPointer(fwSession); | 1491 error = nssCKFWSession_verifyPointer(fwSession); |
1567 if( CKR_OK != error ) { | 1492 if (CKR_OK != error) { |
1568 return error; | 1493 return error; |
1569 } | 1494 } |
1570 #endif /* NSSDEBUG */ | 1495 #endif /* NSSDEBUG */ |
1571 | 1496 |
1572 error = nssCKFWMutex_Lock(fwToken->mutex); | 1497 error = nssCKFWMutex_Lock(fwToken->mutex); |
1573 if( CKR_OK != error ) { | 1498 if (CKR_OK != error) { |
| 1499 return error; |
| 1500 } |
| 1501 |
| 1502 if (CK_TRUE != nssCKFWHash_Exists(fwToken->sessions, fwSession)) { |
| 1503 error = CKR_SESSION_HANDLE_INVALID; |
| 1504 goto done; |
| 1505 } |
| 1506 |
| 1507 nssCKFWHash_Remove(fwToken->sessions, fwSession); |
| 1508 fwToken->sessionCount--; |
| 1509 |
| 1510 if (nssCKFWSession_IsRWSession(fwSession)) { |
| 1511 fwToken->rwSessionCount--; |
| 1512 } |
| 1513 |
| 1514 if (0 == fwToken->sessionCount) { |
| 1515 fwToken->rwSessionCount = 0; /* sanity */ |
| 1516 fwToken->state = CKS_RO_PUBLIC_SESSION; /* some default */ |
| 1517 } |
| 1518 |
| 1519 error = CKR_OK; |
| 1520 |
| 1521 done: |
| 1522 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1574 return error; | 1523 return error; |
1575 } | |
1576 | |
1577 if( CK_TRUE != nssCKFWHash_Exists(fwToken->sessions, fwSession) ) { | |
1578 error = CKR_SESSION_HANDLE_INVALID; | |
1579 goto done; | |
1580 } | |
1581 | |
1582 nssCKFWHash_Remove(fwToken->sessions, fwSession); | |
1583 fwToken->sessionCount--; | |
1584 | |
1585 if( nssCKFWSession_IsRWSession(fwSession) ) { | |
1586 fwToken->rwSessionCount--; | |
1587 } | |
1588 | |
1589 if( 0 == fwToken->sessionCount ) { | |
1590 fwToken->rwSessionCount = 0; /* sanity */ | |
1591 fwToken->state = CKS_RO_PUBLIC_SESSION; /* some default */ | |
1592 } | |
1593 | |
1594 error = CKR_OK; | |
1595 | |
1596 done: | |
1597 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
1598 return error; | |
1599 } | 1524 } |
1600 | 1525 |
1601 | |
1602 /* | 1526 /* |
1603 * nssCKFWToken_CloseAllSessions | 1527 * nssCKFWToken_CloseAllSessions |
1604 * | 1528 * |
1605 */ | 1529 */ |
1606 NSS_IMPLEMENT CK_RV | 1530 NSS_IMPLEMENT CK_RV |
1607 nssCKFWToken_CloseAllSessions | 1531 nssCKFWToken_CloseAllSessions( |
1608 ( | 1532 NSSCKFWToken *fwToken) |
1609 NSSCKFWToken *fwToken | |
1610 ) | |
1611 { | 1533 { |
1612 CK_RV error = CKR_OK; | 1534 CK_RV error = CKR_OK; |
1613 | 1535 |
1614 #ifdef NSSDEBUG | 1536 #ifdef NSSDEBUG |
1615 error = nssCKFWToken_verifyPointer(fwToken); | 1537 error = nssCKFWToken_verifyPointer(fwToken); |
1616 if( CKR_OK != error ) { | 1538 if (CKR_OK != error) { |
1617 return error; | 1539 return error; |
1618 } | 1540 } |
1619 #endif /* NSSDEBUG */ | 1541 #endif /* NSSDEBUG */ |
1620 | 1542 |
1621 error = nssCKFWMutex_Lock(fwToken->mutex); | 1543 error = nssCKFWMutex_Lock(fwToken->mutex); |
1622 if( CKR_OK != error ) { | 1544 if (CKR_OK != error) { |
| 1545 return error; |
| 1546 } |
| 1547 |
| 1548 nssCKFWHash_Iterate(fwToken->sessions, nss_ckfwtoken_session_iterator, (void
*)NULL); |
| 1549 |
| 1550 nssCKFWHash_Destroy(fwToken->sessions); |
| 1551 |
| 1552 fwToken->sessions = nssCKFWHash_Create(fwToken->fwInstance, fwToken->arena,
&error); |
| 1553 if (!fwToken->sessions) { |
| 1554 if (CKR_OK == error) { |
| 1555 error = CKR_GENERAL_ERROR; |
| 1556 } |
| 1557 goto done; |
| 1558 } |
| 1559 |
| 1560 fwToken->state = CKS_RO_PUBLIC_SESSION; /* some default */ |
| 1561 fwToken->sessionCount = 0; |
| 1562 fwToken->rwSessionCount = 0; |
| 1563 |
| 1564 error = CKR_OK; |
| 1565 |
| 1566 done: |
| 1567 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1623 return error; | 1568 return error; |
1624 } | |
1625 | |
1626 nssCKFWHash_Iterate(fwToken->sessions, nss_ckfwtoken_session_iterator, (void *
)NULL); | |
1627 | |
1628 nssCKFWHash_Destroy(fwToken->sessions); | |
1629 | |
1630 fwToken->sessions = nssCKFWHash_Create(fwToken->fwInstance, fwToken->arena, &e
rror); | |
1631 if (!fwToken->sessions) { | |
1632 if( CKR_OK == error ) { | |
1633 error = CKR_GENERAL_ERROR; | |
1634 } | |
1635 goto done; | |
1636 } | |
1637 | |
1638 fwToken->state = CKS_RO_PUBLIC_SESSION; /* some default */ | |
1639 fwToken->sessionCount = 0; | |
1640 fwToken->rwSessionCount = 0; | |
1641 | |
1642 error = CKR_OK; | |
1643 | |
1644 done: | |
1645 (void)nssCKFWMutex_Unlock(fwToken->mutex); | |
1646 return error; | |
1647 } | 1569 } |
1648 | 1570 |
1649 /* | 1571 /* |
1650 * nssCKFWToken_GetSessionCount | 1572 * nssCKFWToken_GetSessionCount |
1651 * | 1573 * |
1652 */ | 1574 */ |
1653 NSS_IMPLEMENT CK_ULONG | 1575 NSS_IMPLEMENT CK_ULONG |
1654 nssCKFWToken_GetSessionCount | 1576 nssCKFWToken_GetSessionCount( |
1655 ( | 1577 NSSCKFWToken *fwToken) |
1656 NSSCKFWToken *fwToken | |
1657 ) | |
1658 { | 1578 { |
1659 CK_ULONG rv; | 1579 CK_ULONG rv; |
1660 | 1580 |
1661 #ifdef NSSDEBUG | 1581 #ifdef NSSDEBUG |
1662 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1582 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1663 return (CK_ULONG)0; | 1583 return (CK_ULONG)0; |
1664 } | 1584 } |
1665 #endif /* NSSDEBUG */ | 1585 #endif /* NSSDEBUG */ |
1666 | 1586 |
1667 if( CKR_OK != nssCKFWMutex_Lock(fwToken->mutex) ) { | 1587 if (CKR_OK != nssCKFWMutex_Lock(fwToken->mutex)) { |
1668 return (CK_ULONG)0; | 1588 return (CK_ULONG)0; |
1669 } | 1589 } |
1670 | 1590 |
1671 rv = fwToken->sessionCount; | 1591 rv = fwToken->sessionCount; |
1672 (void)nssCKFWMutex_Unlock(fwToken->mutex); | 1592 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1673 return rv; | 1593 return rv; |
1674 } | 1594 } |
1675 | 1595 |
1676 /* | 1596 /* |
1677 * nssCKFWToken_GetRwSessionCount | 1597 * nssCKFWToken_GetRwSessionCount |
1678 * | 1598 * |
1679 */ | 1599 */ |
1680 NSS_IMPLEMENT CK_ULONG | 1600 NSS_IMPLEMENT CK_ULONG |
1681 nssCKFWToken_GetRwSessionCount | 1601 nssCKFWToken_GetRwSessionCount( |
1682 ( | 1602 NSSCKFWToken *fwToken) |
1683 NSSCKFWToken *fwToken | |
1684 ) | |
1685 { | 1603 { |
1686 CK_ULONG rv; | 1604 CK_ULONG rv; |
1687 | 1605 |
1688 #ifdef NSSDEBUG | 1606 #ifdef NSSDEBUG |
1689 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1607 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1690 return (CK_ULONG)0; | 1608 return (CK_ULONG)0; |
1691 } | 1609 } |
1692 #endif /* NSSDEBUG */ | 1610 #endif /* NSSDEBUG */ |
1693 | 1611 |
1694 if( CKR_OK != nssCKFWMutex_Lock(fwToken->mutex) ) { | 1612 if (CKR_OK != nssCKFWMutex_Lock(fwToken->mutex)) { |
1695 return (CK_ULONG)0; | 1613 return (CK_ULONG)0; |
1696 } | 1614 } |
1697 | 1615 |
1698 rv = fwToken->rwSessionCount; | 1616 rv = fwToken->rwSessionCount; |
1699 (void)nssCKFWMutex_Unlock(fwToken->mutex); | 1617 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1700 return rv; | 1618 return rv; |
1701 } | 1619 } |
1702 | 1620 |
1703 /* | 1621 /* |
1704 * nssCKFWToken_GetRoSessionCount | 1622 * nssCKFWToken_GetRoSessionCount |
1705 * | 1623 * |
1706 */ | 1624 */ |
1707 NSS_IMPLEMENT CK_ULONG | 1625 NSS_IMPLEMENT CK_ULONG |
1708 nssCKFWToken_GetRoSessionCount | 1626 nssCKFWToken_GetRoSessionCount( |
1709 ( | 1627 NSSCKFWToken *fwToken) |
1710 NSSCKFWToken *fwToken | |
1711 ) | |
1712 { | 1628 { |
1713 CK_ULONG rv; | 1629 CK_ULONG rv; |
1714 | 1630 |
1715 #ifdef NSSDEBUG | 1631 #ifdef NSSDEBUG |
1716 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1632 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1717 return (CK_ULONG)0; | 1633 return (CK_ULONG)0; |
1718 } | 1634 } |
1719 #endif /* NSSDEBUG */ | 1635 #endif /* NSSDEBUG */ |
1720 | 1636 |
1721 if( CKR_OK != nssCKFWMutex_Lock(fwToken->mutex) ) { | 1637 if (CKR_OK != nssCKFWMutex_Lock(fwToken->mutex)) { |
1722 return (CK_ULONG)0; | 1638 return (CK_ULONG)0; |
1723 } | 1639 } |
1724 | 1640 |
1725 rv = fwToken->sessionCount - fwToken->rwSessionCount; | 1641 rv = fwToken->sessionCount - fwToken->rwSessionCount; |
1726 (void)nssCKFWMutex_Unlock(fwToken->mutex); | 1642 (void)nssCKFWMutex_Unlock(fwToken->mutex); |
1727 return rv; | 1643 return rv; |
1728 } | 1644 } |
1729 | 1645 |
1730 /* | 1646 /* |
1731 * nssCKFWToken_GetSessionObjectHash | 1647 * nssCKFWToken_GetSessionObjectHash |
1732 * | 1648 * |
1733 */ | 1649 */ |
1734 NSS_IMPLEMENT nssCKFWHash * | 1650 NSS_IMPLEMENT nssCKFWHash * |
1735 nssCKFWToken_GetSessionObjectHash | 1651 nssCKFWToken_GetSessionObjectHash( |
1736 ( | 1652 NSSCKFWToken *fwToken) |
1737 NSSCKFWToken *fwToken | |
1738 ) | |
1739 { | 1653 { |
1740 #ifdef NSSDEBUG | 1654 #ifdef NSSDEBUG |
1741 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1655 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1742 return (nssCKFWHash *)NULL; | 1656 return (nssCKFWHash *)NULL; |
1743 } | 1657 } |
1744 #endif /* NSSDEBUG */ | 1658 #endif /* NSSDEBUG */ |
1745 | 1659 |
1746 return fwToken->sessionObjectHash; | 1660 return fwToken->sessionObjectHash; |
1747 } | 1661 } |
1748 | 1662 |
1749 /* | 1663 /* |
1750 * nssCKFWToken_GetMDObjectHash | 1664 * nssCKFWToken_GetMDObjectHash |
1751 * | 1665 * |
1752 */ | 1666 */ |
1753 NSS_IMPLEMENT nssCKFWHash * | 1667 NSS_IMPLEMENT nssCKFWHash * |
1754 nssCKFWToken_GetMDObjectHash | 1668 nssCKFWToken_GetMDObjectHash( |
1755 ( | 1669 NSSCKFWToken *fwToken) |
1756 NSSCKFWToken *fwToken | |
1757 ) | |
1758 { | 1670 { |
1759 #ifdef NSSDEBUG | 1671 #ifdef NSSDEBUG |
1760 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1672 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1761 return (nssCKFWHash *)NULL; | 1673 return (nssCKFWHash *)NULL; |
1762 } | 1674 } |
1763 #endif /* NSSDEBUG */ | 1675 #endif /* NSSDEBUG */ |
1764 | 1676 |
1765 return fwToken->mdObjectHash; | 1677 return fwToken->mdObjectHash; |
1766 } | 1678 } |
1767 | 1679 |
1768 /* | 1680 /* |
1769 * nssCKFWToken_GetObjectHandleHash | 1681 * nssCKFWToken_GetObjectHandleHash |
1770 * | 1682 * |
1771 */ | 1683 */ |
1772 NSS_IMPLEMENT nssCKFWHash * | 1684 NSS_IMPLEMENT nssCKFWHash * |
1773 nssCKFWToken_GetObjectHandleHash | 1685 nssCKFWToken_GetObjectHandleHash( |
1774 ( | 1686 NSSCKFWToken *fwToken) |
1775 NSSCKFWToken *fwToken | |
1776 ) | |
1777 { | 1687 { |
1778 #ifdef NSSDEBUG | 1688 #ifdef NSSDEBUG |
1779 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1689 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1780 return (nssCKFWHash *)NULL; | 1690 return (nssCKFWHash *)NULL; |
1781 } | 1691 } |
1782 #endif /* NSSDEBUG */ | 1692 #endif /* NSSDEBUG */ |
1783 | 1693 |
1784 return fwToken->mdObjectHash; | 1694 return fwToken->mdObjectHash; |
1785 } | 1695 } |
1786 | 1696 |
1787 /* | 1697 /* |
1788 * NSSCKFWToken_GetMDToken | 1698 * NSSCKFWToken_GetMDToken |
1789 * | 1699 * |
1790 */ | 1700 */ |
1791 | 1701 |
1792 NSS_IMPLEMENT NSSCKMDToken * | 1702 NSS_IMPLEMENT NSSCKMDToken * |
1793 NSSCKFWToken_GetMDToken | 1703 NSSCKFWToken_GetMDToken( |
1794 ( | 1704 NSSCKFWToken *fwToken) |
1795 NSSCKFWToken *fwToken | |
1796 ) | |
1797 { | 1705 { |
1798 #ifdef DEBUG | 1706 #ifdef DEBUG |
1799 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1707 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1800 return (NSSCKMDToken *)NULL; | 1708 return (NSSCKMDToken *)NULL; |
1801 } | 1709 } |
1802 #endif /* DEBUG */ | 1710 #endif /* DEBUG */ |
1803 | 1711 |
1804 return nssCKFWToken_GetMDToken(fwToken); | 1712 return nssCKFWToken_GetMDToken(fwToken); |
1805 } | 1713 } |
1806 | 1714 |
1807 /* | 1715 /* |
1808 * NSSCKFWToken_GetArena | 1716 * NSSCKFWToken_GetArena |
1809 * | 1717 * |
1810 */ | 1718 */ |
1811 | 1719 |
1812 NSS_IMPLEMENT NSSArena * | 1720 NSS_IMPLEMENT NSSArena * |
1813 NSSCKFWToken_GetArena | 1721 NSSCKFWToken_GetArena( |
1814 ( | 1722 NSSCKFWToken *fwToken, |
1815 NSSCKFWToken *fwToken, | 1723 CK_RV *pError) |
1816 CK_RV *pError | |
1817 ) | |
1818 { | 1724 { |
1819 #ifdef DEBUG | 1725 #ifdef DEBUG |
1820 if (!pError) { | 1726 if (!pError) { |
1821 return (NSSArena *)NULL; | 1727 return (NSSArena *)NULL; |
1822 } | 1728 } |
1823 | 1729 |
1824 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1730 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1825 *pError = CKR_ARGUMENTS_BAD; | 1731 *pError = CKR_ARGUMENTS_BAD; |
1826 return (NSSArena *)NULL; | 1732 return (NSSArena *)NULL; |
1827 } | 1733 } |
1828 #endif /* DEBUG */ | 1734 #endif /* DEBUG */ |
1829 | 1735 |
1830 return nssCKFWToken_GetArena(fwToken, pError); | 1736 return nssCKFWToken_GetArena(fwToken, pError); |
1831 } | 1737 } |
1832 | 1738 |
1833 /* | 1739 /* |
1834 * NSSCKFWToken_GetFWSlot | 1740 * NSSCKFWToken_GetFWSlot |
1835 * | 1741 * |
1836 */ | 1742 */ |
1837 | 1743 |
1838 NSS_IMPLEMENT NSSCKFWSlot * | 1744 NSS_IMPLEMENT NSSCKFWSlot * |
1839 NSSCKFWToken_GetFWSlot | 1745 NSSCKFWToken_GetFWSlot( |
1840 ( | 1746 NSSCKFWToken *fwToken) |
1841 NSSCKFWToken *fwToken | |
1842 ) | |
1843 { | 1747 { |
1844 #ifdef DEBUG | 1748 #ifdef DEBUG |
1845 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1749 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1846 return (NSSCKFWSlot *)NULL; | 1750 return (NSSCKFWSlot *)NULL; |
1847 } | 1751 } |
1848 #endif /* DEBUG */ | 1752 #endif /* DEBUG */ |
1849 | 1753 |
1850 return nssCKFWToken_GetFWSlot(fwToken); | 1754 return nssCKFWToken_GetFWSlot(fwToken); |
1851 } | 1755 } |
1852 | 1756 |
1853 /* | 1757 /* |
1854 * NSSCKFWToken_GetMDSlot | 1758 * NSSCKFWToken_GetMDSlot |
1855 * | 1759 * |
1856 */ | 1760 */ |
1857 | 1761 |
1858 NSS_IMPLEMENT NSSCKMDSlot * | 1762 NSS_IMPLEMENT NSSCKMDSlot * |
1859 NSSCKFWToken_GetMDSlot | 1763 NSSCKFWToken_GetMDSlot( |
1860 ( | 1764 NSSCKFWToken *fwToken) |
1861 NSSCKFWToken *fwToken | |
1862 ) | |
1863 { | 1765 { |
1864 #ifdef DEBUG | 1766 #ifdef DEBUG |
1865 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1767 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1866 return (NSSCKMDSlot *)NULL; | 1768 return (NSSCKMDSlot *)NULL; |
1867 } | 1769 } |
1868 #endif /* DEBUG */ | 1770 #endif /* DEBUG */ |
1869 | 1771 |
1870 return nssCKFWToken_GetMDSlot(fwToken); | 1772 return nssCKFWToken_GetMDSlot(fwToken); |
1871 } | 1773 } |
1872 | 1774 |
1873 /* | 1775 /* |
1874 * NSSCKFWToken_GetSessionState | 1776 * NSSCKFWToken_GetSessionState |
1875 * | 1777 * |
1876 */ | 1778 */ |
1877 | 1779 |
1878 NSS_IMPLEMENT CK_STATE | 1780 NSS_IMPLEMENT CK_STATE |
1879 NSSCKFWSession_GetSessionState | 1781 NSSCKFWSession_GetSessionState( |
1880 ( | 1782 NSSCKFWToken *fwToken) |
1881 NSSCKFWToken *fwToken | |
1882 ) | |
1883 { | 1783 { |
1884 #ifdef DEBUG | 1784 #ifdef DEBUG |
1885 if( CKR_OK != nssCKFWToken_verifyPointer(fwToken) ) { | 1785 if (CKR_OK != nssCKFWToken_verifyPointer(fwToken)) { |
1886 return CKS_RO_PUBLIC_SESSION; | 1786 return CKS_RO_PUBLIC_SESSION; |
1887 } | 1787 } |
1888 #endif /* DEBUG */ | 1788 #endif /* DEBUG */ |
1889 | 1789 |
1890 return nssCKFWToken_GetSessionState(fwToken); | 1790 return nssCKFWToken_GetSessionState(fwToken); |
1891 } | 1791 } |
OLD | NEW |