OLD | NEW |
| (Empty) |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
4 | |
5 #ifndef NSSCKMDT_H | |
6 #define NSSCKMDT_H | |
7 | |
8 #ifdef DEBUG | |
9 static const char NSSCKMDT_CVS_ID[] = "@(#) $RCSfile: nssckmdt.h,v $ $Revision:
1.7 $ $Date: 2012/04/25 14:49:28 $"; | |
10 #endif /* DEBUG */ | |
11 | |
12 /* | |
13 * nssckmdt.h | |
14 * | |
15 * This file specifies the basic types that must be implemented by | |
16 * any Module using the NSS Cryptoki Framework. | |
17 */ | |
18 | |
19 #ifndef NSSBASET_H | |
20 #include "nssbaset.h" | |
21 #endif /* NSSBASET_H */ | |
22 | |
23 #ifndef NSSCKT_H | |
24 #include "nssckt.h" | |
25 #endif /* NSSCKT_H */ | |
26 | |
27 #ifndef NSSCKFWT_H | |
28 #include "nssckfwt.h" | |
29 #endif /* NSSCKFWT_H */ | |
30 | |
31 typedef struct NSSCKMDInstanceStr NSSCKMDInstance; | |
32 typedef struct NSSCKMDSlotStr NSSCKMDSlot; | |
33 typedef struct NSSCKMDTokenStr NSSCKMDToken; | |
34 typedef struct NSSCKMDSessionStr NSSCKMDSession; | |
35 typedef struct NSSCKMDCryptoOperationStr NSSCKMDCryptoOperation; | |
36 typedef struct NSSCKMDFindObjectsStr NSSCKMDFindObjects; | |
37 typedef struct NSSCKMDMechanismStr NSSCKMDMechanism; | |
38 typedef struct NSSCKMDObjectStr NSSCKMDObject; | |
39 | |
40 /* | |
41 * NSSCKFWItem | |
42 * | |
43 * This is a structure used by modules to return object attributes. | |
44 * The needsFreeing bit indicates whether the object needs to be freed. | |
45 * If so, the framework will call the FreeAttribute function on the item | |
46 * after it is done using it. | |
47 * | |
48 */ | |
49 | |
50 typedef struct { | |
51 PRBool needsFreeing; | |
52 NSSItem* item; | |
53 } NSSCKFWItem ; | |
54 | |
55 /* | |
56 * NSSCKMDInstance | |
57 * | |
58 * This is the basic handle for an instance of a PKCS#11 Module. | |
59 * It is returned by the Module's CreateInstance routine, and | |
60 * may be obtained from the corresponding NSSCKFWInstance object. | |
61 * It contains a pointer for use by the Module, to store any | |
62 * instance-related data, and it contains the EPV for a set of | |
63 * routines which the Module may implement for use by the Framework. | |
64 * Some of these routines are optional; others are mandatory. | |
65 */ | |
66 | |
67 struct NSSCKMDInstanceStr { | |
68 /* | |
69 * The Module may use this pointer for its own purposes. | |
70 */ | |
71 void *etc; | |
72 | |
73 /* | |
74 * This routine is called by the Framework to initialize | |
75 * the Module. This routine is optional; if unimplemented, | |
76 * it won't be called. If this routine returns an error, | |
77 * then the initialization will fail. | |
78 */ | |
79 CK_RV (PR_CALLBACK *Initialize)( | |
80 NSSCKMDInstance *mdInstance, | |
81 NSSCKFWInstance *fwInstance, | |
82 NSSUTF8 *configurationData | |
83 ); | |
84 | |
85 /* | |
86 * This routine is called when the Framework is finalizing | |
87 * the PKCS#11 Module. It is the last thing called before | |
88 * the NSSCKFWInstance's NSSArena is destroyed. This routine | |
89 * is optional; if unimplemented, it merely won't be called. | |
90 */ | |
91 void (PR_CALLBACK *Finalize)( | |
92 NSSCKMDInstance *mdInstance, | |
93 NSSCKFWInstance *fwInstance | |
94 ); | |
95 | |
96 /* | |
97 * This routine gets the number of slots. This value must | |
98 * never change, once the instance is initialized. This | |
99 * routine must be implemented. It may return zero on error. | |
100 */ | |
101 CK_ULONG (PR_CALLBACK *GetNSlots)( | |
102 NSSCKMDInstance *mdInstance, | |
103 NSSCKFWInstance *fwInstance, | |
104 CK_RV *pError | |
105 ); | |
106 | |
107 /* | |
108 * This routine returns the version of the Cryptoki standard | |
109 * to which this Module conforms. This routine is optional; | |
110 * if unimplemented, the Framework uses the version to which | |
111 * ~it~ was implemented. | |
112 */ | |
113 CK_VERSION (PR_CALLBACK *GetCryptokiVersion)( | |
114 NSSCKMDInstance *mdInstance, | |
115 NSSCKFWInstance *fwInstance | |
116 ); | |
117 | |
118 /* | |
119 * This routine returns a pointer to a UTF8-encoded string | |
120 * containing the manufacturer ID for this Module. Only | |
121 * the characters completely encoded in the first thirty- | |
122 * two bytes are significant. This routine is optional. | |
123 * The string returned is never freed; if dynamically generated, | |
124 * the space for it should be allocated from the NSSArena | |
125 * that may be obtained from the NSSCKFWInstance. This | |
126 * routine may return NULL upon error; however if *pError | |
127 * is CKR_OK, the NULL will be considered the valid response. | |
128 */ | |
129 NSSUTF8 *(PR_CALLBACK *GetManufacturerID)( | |
130 NSSCKMDInstance *mdInstance, | |
131 NSSCKFWInstance *fwInstance, | |
132 CK_RV *pError | |
133 ); | |
134 | |
135 /* | |
136 * This routine returns a pointer to a UTF8-encoded string | |
137 * containing a description of this Module library. Only | |
138 * the characters completely encoded in the first thirty- | |
139 * two bytes are significant. This routine is optional. | |
140 * The string returned is never freed; if dynamically generated, | |
141 * the space for it should be allocated from the NSSArena | |
142 * that may be obtained from the NSSCKFWInstance. This | |
143 * routine may return NULL upon error; however if *pError | |
144 * is CKR_OK, the NULL will be considered the valid response. | |
145 */ | |
146 NSSUTF8 *(PR_CALLBACK *GetLibraryDescription)( | |
147 NSSCKMDInstance *mdInstance, | |
148 NSSCKFWInstance *fwInstance, | |
149 CK_RV *pError | |
150 ); | |
151 | |
152 /* | |
153 * This routine returns the version of this Module library. | |
154 * This routine is optional; if unimplemented, the Framework | |
155 * will assume a Module library version of 0.1. | |
156 */ | |
157 CK_VERSION (PR_CALLBACK *GetLibraryVersion)( | |
158 NSSCKMDInstance *mdInstance, | |
159 NSSCKFWInstance *fwInstance | |
160 ); | |
161 | |
162 /* | |
163 * This routine returns CK_TRUE if the Module wishes to | |
164 * handle session objects. This routine is optional. | |
165 * If this routine is NULL, or if it exists but returns | |
166 * CK_FALSE, the Framework will assume responsibility | |
167 * for managing session objects. | |
168 */ | |
169 CK_BBOOL (PR_CALLBACK *ModuleHandlesSessionObjects)( | |
170 NSSCKMDInstance *mdInstance, | |
171 NSSCKFWInstance *fwInstance | |
172 ); | |
173 | |
174 /* | |
175 * This routine stuffs pointers to NSSCKMDSlot objects into | |
176 * the specified array; one for each slot supported by this | |
177 * instance. The Framework will determine the size needed | |
178 * for the array by calling GetNSlots. This routine is | |
179 * required. | |
180 */ | |
181 CK_RV (PR_CALLBACK *GetSlots)( | |
182 NSSCKMDInstance *mdInstance, | |
183 NSSCKFWInstance *fwInstance, | |
184 NSSCKMDSlot *slots[] | |
185 ); | |
186 | |
187 /* | |
188 * This call returns a pointer to the slot in which an event | |
189 * has occurred. If the block argument is CK_TRUE, the call | |
190 * should block until a slot event occurs; if CK_FALSE, it | |
191 * should check to see if an event has occurred, occurred, | |
192 * but return NULL (and set *pError to CK_NO_EVENT) if one | |
193 * hasn't. This routine is optional; if unimplemented, the | |
194 * Framework will assume that no event has happened. This | |
195 * routine may return NULL upon error. | |
196 */ | |
197 NSSCKMDSlot *(PR_CALLBACK *WaitForSlotEvent)( | |
198 NSSCKMDInstance *mdInstance, | |
199 NSSCKFWInstance *fwInstance, | |
200 CK_BBOOL block, | |
201 CK_RV *pError | |
202 ); | |
203 | |
204 /* | |
205 * This object may be extended in future versions of the | |
206 * NSS Cryptoki Framework. To allow for some flexibility | |
207 * in the area of binary compatibility, this field should | |
208 * be NULL. | |
209 */ | |
210 void *null; | |
211 }; | |
212 | |
213 | |
214 /* | |
215 * NSSCKMDSlot | |
216 * | |
217 * This is the basic handle for a PKCS#11 Module Slot. It is | |
218 * created by the NSSCKMDInstance->GetSlots call, and may be | |
219 * obtained from the Framework's corresponding NSSCKFWSlot | |
220 * object. It contains a pointer for use by the Module, to | |
221 * store any slot-related data, and it contains the EPV for | |
222 * a set of routines which the Module may implement for use | |
223 * by the Framework. Some of these routines are optional. | |
224 */ | |
225 | |
226 struct NSSCKMDSlotStr { | |
227 /* | |
228 * The Module may use this pointer for its own purposes. | |
229 */ | |
230 void *etc; | |
231 | |
232 /* | |
233 * This routine is called during the Framework initialization | |
234 * step, after the Framework Instance has obtained the list | |
235 * of slots (by calling NSSCKMDInstance->GetSlots). Any slot- | |
236 * specific initialization can be done here. This routine is | |
237 * optional; if unimplemented, it won't be called. Note that | |
238 * if this routine returns an error, the entire Framework | |
239 * initialization for this Module will fail. | |
240 */ | |
241 CK_RV (PR_CALLBACK *Initialize)( | |
242 NSSCKMDSlot *mdSlot, | |
243 NSSCKFWSlot *fwSlot, | |
244 NSSCKMDInstance *mdInstance, | |
245 NSSCKFWInstance *fwInstance | |
246 ); | |
247 | |
248 /* | |
249 * This routine is called when the Framework is finalizing | |
250 * the PKCS#11 Module. This call (for each of the slots) | |
251 * is the last thing called before NSSCKMDInstance->Finalize. | |
252 * This routine is optional; if unimplemented, it merely | |
253 * won't be called. Note: In the rare circumstance that | |
254 * the Framework initialization cannot complete (due to, | |
255 * for example, memory limitations), this can be called with | |
256 * a NULL value for fwSlot. | |
257 */ | |
258 void (PR_CALLBACK *Destroy)( | |
259 NSSCKMDSlot *mdSlot, | |
260 NSSCKFWSlot *fwSlot, | |
261 NSSCKMDInstance *mdInstance, | |
262 NSSCKFWInstance *fwInstance | |
263 ); | |
264 | |
265 /* | |
266 * This routine returns a pointer to a UTF8-encoded string | |
267 * containing a description of this slot. Only the characters | |
268 * completely encoded in the first sixty-four bytes are | |
269 * significant. This routine is optional. The string | |
270 * returned is never freed; if dynamically generated, | |
271 * the space for it should be allocated from the NSSArena | |
272 * that may be obtained from the NSSCKFWInstance. This | |
273 * routine may return NULL upon error; however if *pError | |
274 * is CKR_OK, the NULL will be considered the valid response. | |
275 */ | |
276 NSSUTF8 *(PR_CALLBACK *GetSlotDescription)( | |
277 NSSCKMDSlot *mdSlot, | |
278 NSSCKFWSlot *fwSlot, | |
279 NSSCKMDInstance *mdInstance, | |
280 NSSCKFWInstance *fwInstance, | |
281 CK_RV *pError | |
282 ); | |
283 | |
284 /* | |
285 * This routine returns a pointer to a UTF8-encoded string | |
286 * containing a description of the manufacturer of this slot. | |
287 * Only the characters completely encoded in the first thirty- | |
288 * two bytes are significant. This routine is optional. | |
289 * The string returned is never freed; if dynamically generated, | |
290 * the space for it should be allocated from the NSSArena | |
291 * that may be obtained from the NSSCKFWInstance. This | |
292 * routine may return NULL upon error; however if *pError | |
293 * is CKR_OK, the NULL will be considered the valid response. | |
294 */ | |
295 NSSUTF8 *(PR_CALLBACK *GetManufacturerID)( | |
296 NSSCKMDSlot *mdSlot, | |
297 NSSCKFWSlot *fwSlot, | |
298 NSSCKMDInstance *mdInstance, | |
299 NSSCKFWInstance *fwInstance, | |
300 CK_RV *pError | |
301 ); | |
302 | |
303 /* | |
304 * This routine returns CK_TRUE if a token is present in this | |
305 * slot. This routine is optional; if unimplemented, CK_TRUE | |
306 * is assumed. | |
307 */ | |
308 CK_BBOOL (PR_CALLBACK *GetTokenPresent)( | |
309 NSSCKMDSlot *mdSlot, | |
310 NSSCKFWSlot *fwSlot, | |
311 NSSCKMDInstance *mdInstance, | |
312 NSSCKFWInstance *fwInstance | |
313 ); | |
314 | |
315 /* | |
316 * This routine returns CK_TRUE if the slot supports removable | |
317 * tokens. This routine is optional; if unimplemented, CK_FALSE | |
318 * is assumed. | |
319 */ | |
320 CK_BBOOL (PR_CALLBACK *GetRemovableDevice)( | |
321 NSSCKMDSlot *mdSlot, | |
322 NSSCKFWSlot *fwSlot, | |
323 NSSCKMDInstance *mdInstance, | |
324 NSSCKFWInstance *fwInstance | |
325 ); | |
326 | |
327 /* | |
328 * This routine returns CK_TRUE if this slot is a hardware | |
329 * device, or CK_FALSE if this slot is a software device. This | |
330 * routine is optional; if unimplemented, CK_FALSE is assumed. | |
331 */ | |
332 CK_BBOOL (PR_CALLBACK *GetHardwareSlot)( | |
333 NSSCKMDSlot *mdSlot, | |
334 NSSCKFWSlot *fwSlot, | |
335 NSSCKMDInstance *mdInstance, | |
336 NSSCKFWInstance *fwInstance | |
337 ); | |
338 | |
339 /* | |
340 * This routine returns the version of this slot's hardware. | |
341 * This routine is optional; if unimplemented, the Framework | |
342 * will assume a hardware version of 0.1. | |
343 */ | |
344 CK_VERSION (PR_CALLBACK *GetHardwareVersion)( | |
345 NSSCKMDSlot *mdSlot, | |
346 NSSCKFWSlot *fwSlot, | |
347 NSSCKMDInstance *mdInstance, | |
348 NSSCKFWInstance *fwInstance | |
349 ); | |
350 | |
351 /* | |
352 * This routine returns the version of this slot's firmware. | |
353 * This routine is optional; if unimplemented, the Framework | |
354 * will assume a hardware version of 0.1. | |
355 */ | |
356 CK_VERSION (PR_CALLBACK *GetFirmwareVersion)( | |
357 NSSCKMDSlot *mdSlot, | |
358 NSSCKFWSlot *fwSlot, | |
359 NSSCKMDInstance *mdInstance, | |
360 NSSCKFWInstance *fwInstance | |
361 ); | |
362 | |
363 /* | |
364 * This routine should return a pointer to an NSSCKMDToken | |
365 * object corresponding to the token in the specified slot. | |
366 * The NSSCKFWToken object passed in has an NSSArena | |
367 * available which is dedicated for this token. This routine | |
368 * must be implemented. This routine may return NULL upon | |
369 * error. | |
370 */ | |
371 NSSCKMDToken *(PR_CALLBACK *GetToken)( | |
372 NSSCKMDSlot *mdSlot, | |
373 NSSCKFWSlot *fwSlot, | |
374 NSSCKMDInstance *mdInstance, | |
375 NSSCKFWInstance *fwInstance, | |
376 CK_RV *pError | |
377 ); | |
378 | |
379 /* | |
380 * This object may be extended in future versions of the | |
381 * NSS Cryptoki Framework. To allow for some flexibility | |
382 * in the area of binary compatibility, this field should | |
383 * be NULL. | |
384 */ | |
385 void *null; | |
386 }; | |
387 | |
388 /* | |
389 * NSSCKMDToken | |
390 * | |
391 * This is the basic handle for a PKCS#11 Token. It is created by | |
392 * the NSSCKMDSlot->GetToken call, and may be obtained from the | |
393 * Framework's corresponding NSSCKFWToken object. It contains a | |
394 * pointer for use by the Module, to store any token-related | |
395 * data, and it contains the EPV for a set of routines which the | |
396 * Module may implement for use by the Framework. Some of these | |
397 * routines are optional. | |
398 */ | |
399 | |
400 struct NSSCKMDTokenStr { | |
401 /* | |
402 * The Module may use this pointer for its own purposes. | |
403 */ | |
404 void *etc; | |
405 | |
406 /* | |
407 * This routine is used to prepare a Module token object for | |
408 * use. It is called after the NSSCKMDToken object is obtained | |
409 * from NSSCKMDSlot->GetToken. It is named "Setup" here because | |
410 * Cryptoki already defines "InitToken" to do the process of | |
411 * wiping out any existing state on a token and preparing it for | |
412 * a new use. This routine is optional; if unimplemented, it | |
413 * merely won't be called. | |
414 */ | |
415 CK_RV (PR_CALLBACK *Setup)( | |
416 NSSCKMDToken *mdToken, | |
417 NSSCKFWToken *fwToken, | |
418 NSSCKMDInstance *mdInstance, | |
419 NSSCKFWInstance *fwInstance | |
420 ); | |
421 | |
422 /* | |
423 * This routine is called by the Framework whenever it notices | |
424 * that the token object is invalid. (Typically this is when a | |
425 * routine indicates an error such as CKR_DEVICE_REMOVED). This | |
426 * call is the last thing called before the NSSArena in the | |
427 * corresponding NSSCKFWToken is destroyed. This routine is | |
428 * optional; if unimplemented, it merely won't be called. | |
429 */ | |
430 void (PR_CALLBACK *Invalidate)( | |
431 NSSCKMDToken *mdToken, | |
432 NSSCKFWToken *fwToken, | |
433 NSSCKMDInstance *mdInstance, | |
434 NSSCKFWInstance *fwInstance | |
435 ); | |
436 | |
437 /* | |
438 * This routine initialises the token in the specified slot. | |
439 * This routine is optional; if unimplemented, the Framework | |
440 * will fail this operation with an error of CKR_DEVICE_ERROR. | |
441 */ | |
442 | |
443 CK_RV (PR_CALLBACK *InitToken)( | |
444 NSSCKMDToken *mdToken, | |
445 NSSCKFWToken *fwToken, | |
446 NSSCKMDInstance *mdInstance, | |
447 NSSCKFWInstance *fwInstance, | |
448 NSSItem *pin, | |
449 NSSUTF8 *label | |
450 ); | |
451 | |
452 /* | |
453 * This routine returns a pointer to a UTF8-encoded string | |
454 * containing this token's label. Only the characters | |
455 * completely encoded in the first thirty-two bytes are | |
456 * significant. This routine is optional. The string | |
457 * returned is never freed; if dynamically generated, | |
458 * the space for it should be allocated from the NSSArena | |
459 * that may be obtained from the NSSCKFWInstance. This | |
460 * routine may return NULL upon error; however if *pError | |
461 * is CKR_OK, the NULL will be considered the valid response. | |
462 */ | |
463 NSSUTF8 *(PR_CALLBACK *GetLabel)( | |
464 NSSCKMDToken *mdToken, | |
465 NSSCKFWToken *fwToken, | |
466 NSSCKMDInstance *mdInstance, | |
467 NSSCKFWInstance *fwInstance, | |
468 CK_RV *pError | |
469 ); | |
470 | |
471 /* | |
472 * This routine returns a pointer to a UTF8-encoded string | |
473 * containing this token's manufacturer ID. Only the characters | |
474 * completely encoded in the first thirty-two bytes are | |
475 * significant. This routine is optional. The string | |
476 * returned is never freed; if dynamically generated, | |
477 * the space for it should be allocated from the NSSArena | |
478 * that may be obtained from the NSSCKFWInstance. This | |
479 * routine may return NULL upon error; however if *pError | |
480 * is CKR_OK, the NULL will be considered the valid response. | |
481 */ | |
482 NSSUTF8 *(PR_CALLBACK *GetManufacturerID)( | |
483 NSSCKMDToken *mdToken, | |
484 NSSCKFWToken *fwToken, | |
485 NSSCKMDInstance *mdInstance, | |
486 NSSCKFWInstance *fwInstance, | |
487 CK_RV *pError | |
488 ); | |
489 | |
490 /* | |
491 * This routine returns a pointer to a UTF8-encoded string | |
492 * containing this token's model name. Only the characters | |
493 * completely encoded in the first thirty-two bytes are | |
494 * significant. This routine is optional. The string | |
495 * returned is never freed; if dynamically generated, | |
496 * the space for it should be allocated from the NSSArena | |
497 * that may be obtained from the NSSCKFWInstance. This | |
498 * routine may return NULL upon error; however if *pError | |
499 * is CKR_OK, the NULL will be considered the valid response. | |
500 */ | |
501 NSSUTF8 *(PR_CALLBACK *GetModel)( | |
502 NSSCKMDToken *mdToken, | |
503 NSSCKFWToken *fwToken, | |
504 NSSCKMDInstance *mdInstance, | |
505 NSSCKFWInstance *fwInstance, | |
506 CK_RV *pError | |
507 ); | |
508 | |
509 /* | |
510 * This routine returns a pointer to a UTF8-encoded string | |
511 * containing this token's serial number. Only the characters | |
512 * completely encoded in the first thirty-two bytes are | |
513 * significant. This routine is optional. The string | |
514 * returned is never freed; if dynamically generated, | |
515 * the space for it should be allocated from the NSSArena | |
516 * that may be obtained from the NSSCKFWInstance. This | |
517 * routine may return NULL upon error; however if *pError | |
518 * is CKR_OK, the NULL will be considered the valid response. | |
519 */ | |
520 NSSUTF8 *(PR_CALLBACK *GetSerialNumber)( | |
521 NSSCKMDToken *mdToken, | |
522 NSSCKFWToken *fwToken, | |
523 NSSCKMDInstance *mdInstance, | |
524 NSSCKFWInstance *fwInstance, | |
525 CK_RV *pError | |
526 ); | |
527 | |
528 /* | |
529 * This routine returns CK_TRUE if the token has its own | |
530 * random number generator. This routine is optional; if | |
531 * unimplemented, CK_FALSE is assumed. | |
532 */ | |
533 CK_BBOOL (PR_CALLBACK *GetHasRNG)( | |
534 NSSCKMDToken *mdToken, | |
535 NSSCKFWToken *fwToken, | |
536 NSSCKMDInstance *mdInstance, | |
537 NSSCKFWInstance *fwInstance | |
538 ); | |
539 | |
540 /* | |
541 * This routine returns CK_TRUE if this token is write-protected. | |
542 * This routine is optional; if unimplemented, CK_FALSE is | |
543 * assumed. | |
544 */ | |
545 CK_BBOOL (PR_CALLBACK *GetIsWriteProtected)( | |
546 NSSCKMDToken *mdToken, | |
547 NSSCKFWToken *fwToken, | |
548 NSSCKMDInstance *mdInstance, | |
549 NSSCKFWInstance *fwInstance | |
550 ); | |
551 | |
552 /* | |
553 * This routine returns CK_TRUE if this token requires a login. | |
554 * This routine is optional; if unimplemented, CK_FALSE is | |
555 * assumed. | |
556 */ | |
557 CK_BBOOL (PR_CALLBACK *GetLoginRequired)( | |
558 NSSCKMDToken *mdToken, | |
559 NSSCKFWToken *fwToken, | |
560 NSSCKMDInstance *mdInstance, | |
561 NSSCKFWInstance *fwInstance | |
562 ); | |
563 | |
564 /* | |
565 * This routine returns CK_TRUE if the normal user's PIN on this | |
566 * token has been initialised. This routine is optional; if | |
567 * unimplemented, CK_FALSE is assumed. | |
568 */ | |
569 CK_BBOOL (PR_CALLBACK *GetUserPinInitialized)( | |
570 NSSCKMDToken *mdToken, | |
571 NSSCKFWToken *fwToken, | |
572 NSSCKMDInstance *mdInstance, | |
573 NSSCKFWInstance *fwInstance | |
574 ); | |
575 | |
576 /* | |
577 * This routine returns CK_TRUE if a successful save of a | |
578 * session's cryptographic operations state ~always~ contains | |
579 * all keys needed to restore the state of the session. This | |
580 * routine is optional; if unimplemented, CK_FALSE is assumed. | |
581 */ | |
582 CK_BBOOL (PR_CALLBACK *GetRestoreKeyNotNeeded)( | |
583 NSSCKMDToken *mdToken, | |
584 NSSCKFWToken *fwToken, | |
585 NSSCKMDInstance *mdInstance, | |
586 NSSCKFWInstance *fwInstance | |
587 ); | |
588 | |
589 /* | |
590 * This routine returns CK_TRUE if the token has its own | |
591 * hardware clock. This routine is optional; if unimplemented, | |
592 * CK_FALSE is assumed. | |
593 */ | |
594 CK_BBOOL (PR_CALLBACK *GetHasClockOnToken)( | |
595 NSSCKMDToken *mdToken, | |
596 NSSCKFWToken *fwToken, | |
597 NSSCKMDInstance *mdInstance, | |
598 NSSCKFWInstance *fwInstance | |
599 ); | |
600 | |
601 /* | |
602 * This routine returns CK_TRUE if the token has a protected | |
603 * authentication path. This routine is optional; if | |
604 * unimplemented, CK_FALSE is assumed. | |
605 */ | |
606 CK_BBOOL (PR_CALLBACK *GetHasProtectedAuthenticationPath)( | |
607 NSSCKMDToken *mdToken, | |
608 NSSCKFWToken *fwToken, | |
609 NSSCKMDInstance *mdInstance, | |
610 NSSCKFWInstance *fwInstance | |
611 ); | |
612 | |
613 /* | |
614 * This routine returns CK_TRUE if the token supports dual | |
615 * cryptographic operations within a single session. This | |
616 * routine is optional; if unimplemented, CK_FALSE is assumed. | |
617 */ | |
618 CK_BBOOL (PR_CALLBACK *GetSupportsDualCryptoOperations)( | |
619 NSSCKMDToken *mdToken, | |
620 NSSCKFWToken *fwToken, | |
621 NSSCKMDInstance *mdInstance, | |
622 NSSCKFWInstance *fwInstance | |
623 ); | |
624 | |
625 /* | |
626 * XXX fgmr-- should we have a call to return all the flags | |
627 * at once, for folks who already know about Cryptoki? | |
628 */ | |
629 | |
630 /* | |
631 * This routine returns the maximum number of sessions that | |
632 * may be opened on this token. This routine is optional; | |
633 * if unimplemented, the special value CK_UNAVAILABLE_INFORMATION | |
634 * is assumed. XXX fgmr-- or CK_EFFECTIVELY_INFINITE? | |
635 */ | |
636 CK_ULONG (PR_CALLBACK *GetMaxSessionCount)( | |
637 NSSCKMDToken *mdToken, | |
638 NSSCKFWToken *fwToken, | |
639 NSSCKMDInstance *mdInstance, | |
640 NSSCKFWInstance *fwInstance | |
641 ); | |
642 | |
643 /* | |
644 * This routine returns the maximum number of read/write | |
645 * sesisons that may be opened on this token. This routine | |
646 * is optional; if unimplemented, the special value | |
647 * CK_UNAVAILABLE_INFORMATION is assumed. XXX fgmr-- or | |
648 * CK_EFFECTIVELY_INFINITE? | |
649 */ | |
650 CK_ULONG (PR_CALLBACK *GetMaxRwSessionCount)( | |
651 NSSCKMDToken *mdToken, | |
652 NSSCKFWToken *fwToken, | |
653 NSSCKMDInstance *mdInstance, | |
654 NSSCKFWInstance *fwInstance | |
655 ); | |
656 | |
657 /* | |
658 * This routine returns the maximum PIN code length that is | |
659 * supported on this token. This routine is optional; | |
660 * if unimplemented, the special value CK_UNAVAILABLE_INFORMATION | |
661 * is assumed. | |
662 */ | |
663 CK_ULONG (PR_CALLBACK *GetMaxPinLen)( | |
664 NSSCKMDToken *mdToken, | |
665 NSSCKFWToken *fwToken, | |
666 NSSCKMDInstance *mdInstance, | |
667 NSSCKFWInstance *fwInstance | |
668 ); | |
669 | |
670 /* | |
671 * This routine returns the minimum PIN code length that is | |
672 * supported on this token. This routine is optional; if | |
673 * unimplemented, the special value CK_UNAVAILABLE_INFORMATION | |
674 * is assumed. XXX fgmr-- or 0? | |
675 */ | |
676 CK_ULONG (PR_CALLBACK *GetMinPinLen)( | |
677 NSSCKMDToken *mdToken, | |
678 NSSCKFWToken *fwToken, | |
679 NSSCKMDInstance *mdInstance, | |
680 NSSCKFWInstance *fwInstance | |
681 ); | |
682 | |
683 /* | |
684 * This routine returns the total amount of memory on the token | |
685 * in which public objects may be stored. This routine is | |
686 * optional; if unimplemented, the special value | |
687 * CK_UNAVAILABLE_INFORMATION is assumed. | |
688 */ | |
689 CK_ULONG (PR_CALLBACK *GetTotalPublicMemory)( | |
690 NSSCKMDToken *mdToken, | |
691 NSSCKFWToken *fwToken, | |
692 NSSCKMDInstance *mdInstance, | |
693 NSSCKFWInstance *fwInstance | |
694 ); | |
695 | |
696 /* | |
697 * This routine returns the amount of unused memory on the | |
698 * token in which public objects may be stored. This routine | |
699 * is optional; if unimplemented, the special value | |
700 * CK_UNAVAILABLE_INFORMATION is assumed. | |
701 */ | |
702 CK_ULONG (PR_CALLBACK *GetFreePublicMemory)( | |
703 NSSCKMDToken *mdToken, | |
704 NSSCKFWToken *fwToken, | |
705 NSSCKMDInstance *mdInstance, | |
706 NSSCKFWInstance *fwInstance | |
707 ); | |
708 | |
709 /* | |
710 * This routine returns the total amount of memory on the token | |
711 * in which private objects may be stored. This routine is | |
712 * optional; if unimplemented, the special value | |
713 * CK_UNAVAILABLE_INFORMATION is assumed. | |
714 */ | |
715 CK_ULONG (PR_CALLBACK *GetTotalPrivateMemory)( | |
716 NSSCKMDToken *mdToken, | |
717 NSSCKFWToken *fwToken, | |
718 NSSCKMDInstance *mdInstance, | |
719 NSSCKFWInstance *fwInstance | |
720 ); | |
721 | |
722 /* | |
723 * This routine returns the amount of unused memory on the | |
724 * token in which private objects may be stored. This routine | |
725 * is optional; if unimplemented, the special value | |
726 * CK_UNAVAILABLE_INFORMATION is assumed. | |
727 */ | |
728 CK_ULONG (PR_CALLBACK *GetFreePrivateMemory)( | |
729 NSSCKMDToken *mdToken, | |
730 NSSCKFWToken *fwToken, | |
731 NSSCKMDInstance *mdInstance, | |
732 NSSCKFWInstance *fwInstance | |
733 ); | |
734 | |
735 /* | |
736 * This routine returns the version number of this token's | |
737 * hardware. This routine is optional; if unimplemented, | |
738 * the value 0.1 is assumed. | |
739 */ | |
740 CK_VERSION (PR_CALLBACK *GetHardwareVersion)( | |
741 NSSCKMDToken *mdToken, | |
742 NSSCKFWToken *fwToken, | |
743 NSSCKMDInstance *mdInstance, | |
744 NSSCKFWInstance *fwInstance | |
745 ); | |
746 | |
747 /* | |
748 * This routine returns the version number of this token's | |
749 * firmware. This routine is optional; if unimplemented, | |
750 * the value 0.1 is assumed. | |
751 */ | |
752 CK_VERSION (PR_CALLBACK *GetFirmwareVersion)( | |
753 NSSCKMDToken *mdToken, | |
754 NSSCKFWToken *fwToken, | |
755 NSSCKMDInstance *mdInstance, | |
756 NSSCKFWInstance *fwInstance | |
757 ); | |
758 | |
759 /* | |
760 * This routine stuffs the current UTC time, as obtained from | |
761 * the token, into the sixteen-byte buffer in the form | |
762 * YYYYMMDDhhmmss00. This routine need only be implemented | |
763 * by token which indicate that they have a real-time clock. | |
764 * XXX fgmr-- think about time formats. | |
765 */ | |
766 CK_RV (PR_CALLBACK *GetUTCTime)( | |
767 NSSCKMDToken *mdToken, | |
768 NSSCKFWToken *fwToken, | |
769 NSSCKMDInstance *mdInstance, | |
770 NSSCKFWInstance *fwInstance, | |
771 CK_CHAR utcTime[16] | |
772 ); | |
773 | |
774 /* | |
775 * This routine creates a session on the token, and returns | |
776 * the corresponding NSSCKMDSession object. The value of | |
777 * rw will be CK_TRUE if the session is to be a read/write | |
778 * session, or CK_FALSE otherwise. An NSSArena dedicated to | |
779 * the new session is available from the specified NSSCKFWSession. | |
780 * This routine may return NULL upon error. | |
781 */ | |
782 NSSCKMDSession *(PR_CALLBACK *OpenSession)( | |
783 NSSCKMDToken *mdToken, | |
784 NSSCKFWToken *fwToken, | |
785 NSSCKMDInstance *mdInstance, | |
786 NSSCKFWInstance *fwInstance, | |
787 NSSCKFWSession *fwSession, | |
788 CK_BBOOL rw, | |
789 CK_RV *pError | |
790 ); | |
791 | |
792 /* | |
793 * This routine returns the number of PKCS#11 Mechanisms | |
794 * supported by this token. This routine is optional; if | |
795 * unimplemented, zero is assumed. | |
796 */ | |
797 CK_ULONG (PR_CALLBACK *GetMechanismCount)( | |
798 NSSCKMDToken *mdToken, | |
799 NSSCKFWToken *fwToken, | |
800 NSSCKMDInstance *mdInstance, | |
801 NSSCKFWInstance *fwInstance | |
802 ); | |
803 | |
804 /* | |
805 * This routine stuffs into the specified array the types | |
806 * of the mechanisms supported by this token. The Framework | |
807 * determines the size of the array by calling GetMechanismCount. | |
808 */ | |
809 CK_RV (PR_CALLBACK *GetMechanismTypes)( | |
810 NSSCKMDToken *mdToken, | |
811 NSSCKFWToken *fwToken, | |
812 NSSCKMDInstance *mdInstance, | |
813 NSSCKFWInstance *fwInstance, | |
814 CK_MECHANISM_TYPE types[] | |
815 ); | |
816 | |
817 /* | |
818 * This routine returns a pointer to a Module mechanism | |
819 * object corresponding to a specified type. This routine | |
820 * need only exist for tokens implementing at least one | |
821 * mechanism. | |
822 */ | |
823 NSSCKMDMechanism *(PR_CALLBACK *GetMechanism)( | |
824 NSSCKMDToken *mdToken, | |
825 NSSCKFWToken *fwToken, | |
826 NSSCKMDInstance *mdInstance, | |
827 NSSCKFWInstance *fwInstance, | |
828 CK_MECHANISM_TYPE which, | |
829 CK_RV *pError | |
830 ); | |
831 | |
832 /* | |
833 * This object may be extended in future versions of the | |
834 * NSS Cryptoki Framework. To allow for some flexibility | |
835 * in the area of binary compatibility, this field should | |
836 * be NULL. | |
837 */ | |
838 void *null; | |
839 }; | |
840 | |
841 /* | |
842 * NSSCKMDSession | |
843 * | |
844 * This is the basic handle for a session on a PKCS#11 Token. It | |
845 * is created by NSSCKMDToken->OpenSession, and may be obtained | |
846 * from the Framework's corresponding NSSCKFWSession object. It | |
847 * contains a pointer for use by the Module, to store any session- | |
848 * realted data, and it contains the EPV for a set of routines | |
849 * which the Module may implement for use by the Framework. Some | |
850 * of these routines are optional. | |
851 */ | |
852 | |
853 struct NSSCKMDSessionStr { | |
854 /* | |
855 * The Module may use this pointer for its own purposes. | |
856 */ | |
857 void *etc; | |
858 | |
859 /* | |
860 * This routine is called by the Framework when a session is | |
861 * closed. This call is the last thing called before the | |
862 * NSSArena in the correspoinding NSSCKFWSession is destroyed. | |
863 * This routine is optional; if unimplemented, it merely won't | |
864 * be called. | |
865 */ | |
866 void (PR_CALLBACK *Close)( | |
867 NSSCKMDSession *mdSession, | |
868 NSSCKFWSession *fwSession, | |
869 NSSCKMDToken *mdToken, | |
870 NSSCKFWToken *fwToken, | |
871 NSSCKMDInstance *mdInstance, | |
872 NSSCKFWInstance *fwInstance | |
873 ); | |
874 | |
875 /* | |
876 * This routine is used to get any device-specific error. | |
877 * This routine is optional. | |
878 */ | |
879 CK_ULONG (PR_CALLBACK *GetDeviceError)( | |
880 NSSCKMDSession *mdSession, | |
881 NSSCKFWSession *fwSession, | |
882 NSSCKMDToken *mdToken, | |
883 NSSCKFWToken *fwToken, | |
884 NSSCKMDInstance *mdInstance, | |
885 NSSCKFWInstance *fwInstance | |
886 ); | |
887 | |
888 /* | |
889 * This routine is used to log in a user to the token. This | |
890 * routine is optional, since the Framework's NSSCKFWSession | |
891 * object keeps track of the login state. | |
892 */ | |
893 CK_RV (PR_CALLBACK *Login)( | |
894 NSSCKMDSession *mdSession, | |
895 NSSCKFWSession *fwSession, | |
896 NSSCKMDToken *mdToken, | |
897 NSSCKFWToken *fwToken, | |
898 NSSCKMDInstance *mdInstance, | |
899 NSSCKFWInstance *fwInstance, | |
900 CK_USER_TYPE userType, | |
901 NSSItem *pin, | |
902 CK_STATE oldState, | |
903 CK_STATE newState | |
904 ); | |
905 | |
906 /* | |
907 * This routine is used to log out a user from the token. This | |
908 * routine is optional, since the Framework's NSSCKFWSession | |
909 * object keeps track of the login state. | |
910 */ | |
911 CK_RV (PR_CALLBACK *Logout)( | |
912 NSSCKMDSession *mdSession, | |
913 NSSCKFWSession *fwSession, | |
914 NSSCKMDToken *mdToken, | |
915 NSSCKFWToken *fwToken, | |
916 NSSCKMDInstance *mdInstance, | |
917 NSSCKFWInstance *fwInstance, | |
918 CK_STATE oldState, | |
919 CK_STATE newState | |
920 ); | |
921 | |
922 /* | |
923 * This routine is used to initialize the normal user's PIN or | |
924 * password. This will only be called in the "read/write | |
925 * security officer functions" state. If this token has a | |
926 * protected authentication path, then the pin argument will | |
927 * be NULL. This routine is optional; if unimplemented, the | |
928 * Framework will return the error CKR_TOKEN_WRITE_PROTECTED. | |
929 */ | |
930 CK_RV (PR_CALLBACK *InitPIN)( | |
931 NSSCKMDSession *mdSession, | |
932 NSSCKFWSession *fwSession, | |
933 NSSCKMDToken *mdToken, | |
934 NSSCKFWToken *fwToken, | |
935 NSSCKMDInstance *mdInstance, | |
936 NSSCKFWInstance *fwInstance, | |
937 NSSItem *pin | |
938 ); | |
939 | |
940 /* | |
941 * This routine is used to modify a user's PIN or password. This | |
942 * routine will only be called in the "read/write security officer | |
943 * functions" or "read/write user functions" state. If this token | |
944 * has a protected authentication path, then the pin arguments | |
945 * will be NULL. This routine is optional; if unimplemented, the | |
946 * Framework will return the error CKR_TOKEN_WRITE_PROTECTED. | |
947 */ | |
948 CK_RV (PR_CALLBACK *SetPIN)( | |
949 NSSCKMDSession *mdSession, | |
950 NSSCKFWSession *fwSession, | |
951 NSSCKMDToken *mdToken, | |
952 NSSCKFWToken *fwToken, | |
953 NSSCKMDInstance *mdInstance, | |
954 NSSCKFWInstance *fwInstance, | |
955 NSSItem *oldPin, | |
956 NSSItem *newPin | |
957 ); | |
958 | |
959 /* | |
960 * This routine is used to find out how much space would be required | |
961 * to save the current operational state. This routine is optional; | |
962 * if unimplemented, the Framework will reject any attempts to save | |
963 * the operational state with the error CKR_STATE_UNSAVEABLE. This | |
964 * routine may return zero on error. | |
965 */ | |
966 CK_ULONG (PR_CALLBACK *GetOperationStateLen)( | |
967 NSSCKMDSession *mdSession, | |
968 NSSCKFWSession *fwSession, | |
969 NSSCKMDToken *mdToken, | |
970 NSSCKFWToken *fwToken, | |
971 NSSCKMDInstance *mdInstance, | |
972 NSSCKFWInstance *fwInstance, | |
973 CK_RV *pError | |
974 ); | |
975 | |
976 /* | |
977 * This routine is used to store the current operational state. This | |
978 * routine is only required if GetOperationStateLen is implemented | |
979 * and can return a nonzero value. The buffer in the specified item | |
980 * will be pre-allocated, and the length will specify the amount of | |
981 * space available (which may be more than GetOperationStateLen | |
982 * asked for, but which will not be smaller). | |
983 */ | |
984 CK_RV (PR_CALLBACK *GetOperationState)( | |
985 NSSCKMDSession *mdSession, | |
986 NSSCKFWSession *fwSession, | |
987 NSSCKMDToken *mdToken, | |
988 NSSCKFWToken *fwToken, | |
989 NSSCKMDInstance *mdInstance, | |
990 NSSCKFWInstance *fwInstance, | |
991 NSSItem *buffer | |
992 ); | |
993 | |
994 /* | |
995 * This routine is used to restore an operational state previously | |
996 * obtained with GetOperationState. The Framework will take pains | |
997 * to be sure that the state is (or was at one point) valid; if the | |
998 * Module notices that the state is invalid, it should return an | |
999 * error, but it is not required to be paranoid about the issue. | |
1000 * [XXX fgmr-- should (can?) the framework verify the keys match up?] | |
1001 * This routine is required only if GetOperationState is implemented. | |
1002 */ | |
1003 CK_RV (PR_CALLBACK *SetOperationState)( | |
1004 NSSCKMDSession *mdSession, | |
1005 NSSCKFWSession *fwSession, | |
1006 NSSCKMDToken *mdToken, | |
1007 NSSCKFWToken *fwToken, | |
1008 NSSCKMDInstance *mdInstance, | |
1009 NSSCKFWInstance *fwInstance, | |
1010 NSSItem *state, | |
1011 NSSCKMDObject *mdEncryptionKey, | |
1012 NSSCKFWObject *fwEncryptionKey, | |
1013 NSSCKMDObject *mdAuthenticationKey, | |
1014 NSSCKFWObject *fwAuthenticationKey | |
1015 ); | |
1016 | |
1017 /* | |
1018 * This routine is used to create an object. The specified template | |
1019 * will only specify a session object if the Module has indicated | |
1020 * that it wishes to handle its own session objects. This routine | |
1021 * is optional; if unimplemented, the Framework will reject the | |
1022 * operation with the error CKR_TOKEN_WRITE_PROTECTED. Space for | |
1023 * token objects should come from the NSSArena available from the | |
1024 * NSSCKFWToken object; space for session objects (if supported) | |
1025 * should come from the NSSArena available from the NSSCKFWSession | |
1026 * object. The appropriate NSSArena pointer will, as a convenience, | |
1027 * be passed as the handyArenaPointer argument. This routine may | |
1028 * return NULL upon error. | |
1029 */ | |
1030 NSSCKMDObject *(PR_CALLBACK *CreateObject)( | |
1031 NSSCKMDSession *mdSession, | |
1032 NSSCKFWSession *fwSession, | |
1033 NSSCKMDToken *mdToken, | |
1034 NSSCKFWToken *fwToken, | |
1035 NSSCKMDInstance *mdInstance, | |
1036 NSSCKFWInstance *fwInstance, | |
1037 NSSArena *handyArenaPointer, | |
1038 CK_ATTRIBUTE_PTR pTemplate, | |
1039 CK_ULONG ulAttributeCount, | |
1040 CK_RV *pError | |
1041 ); | |
1042 | |
1043 /* | |
1044 * This routine is used to make a copy of an object. It is entirely | |
1045 * optional; if unimplemented, the Framework will try to use | |
1046 * CreateObject instead. If the Module has indicated that it does | |
1047 * not wish to handle session objects, then this routine will only | |
1048 * be called to copy a token object to another token object. | |
1049 * Otherwise, either the original object or the new may be of | |
1050 * either the token or session variety. As with CreateObject, the | |
1051 * handyArenaPointer will point to the appropriate arena for the | |
1052 * new object. This routine may return NULL upon error. | |
1053 */ | |
1054 NSSCKMDObject *(PR_CALLBACK *CopyObject)( | |
1055 NSSCKMDSession *mdSession, | |
1056 NSSCKFWSession *fwSession, | |
1057 NSSCKMDToken *mdToken, | |
1058 NSSCKFWToken *fwToken, | |
1059 NSSCKMDInstance *mdInstance, | |
1060 NSSCKFWInstance *fwInstance, | |
1061 NSSCKMDObject *mdOldObject, | |
1062 NSSCKFWObject *fwOldObject, | |
1063 NSSArena *handyArenaPointer, | |
1064 CK_ATTRIBUTE_PTR pTemplate, | |
1065 CK_ULONG ulAttributeCount, | |
1066 CK_RV *pError | |
1067 ); | |
1068 | |
1069 /* | |
1070 * This routine is used to begin an object search. This routine may | |
1071 * be unimplemented only if the Module does not handle session | |
1072 * objects, and if none of its tokens have token objects. The | |
1073 * NSSCKFWFindObjects pointer has an NSSArena that may be used for | |
1074 * storage for the life of this "find" operation. This routine may | |
1075 * return NULL upon error. If the Module can determine immediately | |
1076 * that the search will not find any matching objects, it may return | |
1077 * NULL, and specify CKR_OK as the error. | |
1078 */ | |
1079 NSSCKMDFindObjects *(PR_CALLBACK *FindObjectsInit)( | |
1080 NSSCKMDSession *mdSession, | |
1081 NSSCKFWSession *fwSession, | |
1082 NSSCKMDToken *mdToken, | |
1083 NSSCKFWToken *fwToken, | |
1084 NSSCKMDInstance *mdInstance, | |
1085 NSSCKFWInstance *fwInstance, | |
1086 CK_ATTRIBUTE_PTR pTemplate, | |
1087 CK_ULONG ulAttributeCount, | |
1088 CK_RV *pError | |
1089 ); | |
1090 | |
1091 /* | |
1092 * This routine seeds the random-number generator. It is | |
1093 * optional, even if GetRandom is implemented. If unimplemented, | |
1094 * the Framework will issue the error CKR_RANDOM_SEED_NOT_SUPPORTED. | |
1095 */ | |
1096 CK_RV (PR_CALLBACK *SeedRandom)( | |
1097 NSSCKMDSession *mdSession, | |
1098 NSSCKFWSession *fwSession, | |
1099 NSSCKMDToken *mdToken, | |
1100 NSSCKFWToken *fwToken, | |
1101 NSSCKMDInstance *mdInstance, | |
1102 NSSCKFWInstance *fwInstance, | |
1103 NSSItem *seed | |
1104 ); | |
1105 | |
1106 /* | |
1107 * This routine gets random data. It is optional. If unimplemented, | |
1108 * the Framework will issue the error CKR_RANDOM_NO_RNG. | |
1109 */ | |
1110 CK_RV (PR_CALLBACK *GetRandom)( | |
1111 NSSCKMDSession *mdSession, | |
1112 NSSCKFWSession *fwSession, | |
1113 NSSCKMDToken *mdToken, | |
1114 NSSCKFWToken *fwToken, | |
1115 NSSCKMDInstance *mdInstance, | |
1116 NSSCKFWInstance *fwInstance, | |
1117 NSSItem *buffer | |
1118 ); | |
1119 | |
1120 /* | |
1121 * This object may be extended in future versions of the | |
1122 * NSS Cryptoki Framework. To allow for some flexibility | |
1123 * in the area of binary compatibility, this field should | |
1124 * be NULL. | |
1125 */ | |
1126 void *null; | |
1127 }; | |
1128 | |
1129 /* | |
1130 * NSSCKMDFindObjects | |
1131 * | |
1132 * This is the basic handle for an object search. It is | |
1133 * created by NSSCKMDSession->FindObjectsInit, and may be | |
1134 * obtained from the Framework's corresponding object. | |
1135 * It contains a pointer for use by the Module, to store | |
1136 * any search-related data, and it contains the EPV for a | |
1137 * set of routines which the Module may implement for use | |
1138 * by the Framework. Some of these routines are optional. | |
1139 */ | |
1140 | |
1141 struct NSSCKMDFindObjectsStr { | |
1142 /* | |
1143 * The Module may use this pointer for its own purposes. | |
1144 */ | |
1145 void *etc; | |
1146 | |
1147 /* | |
1148 * This routine is called by the Framework to finish a | |
1149 * search operation. Note that the Framework may finish | |
1150 * a search before it has completed. This routine is | |
1151 * optional; if unimplemented, it merely won't be called. | |
1152 */ | |
1153 void (PR_CALLBACK *Final)( | |
1154 NSSCKMDFindObjects *mdFindObjects, | |
1155 NSSCKFWFindObjects *fwFindObjects, | |
1156 NSSCKMDSession *mdSession, | |
1157 NSSCKFWSession *fwSession, | |
1158 NSSCKMDToken *mdToken, | |
1159 NSSCKFWToken *fwToken, | |
1160 NSSCKMDInstance *mdInstance, | |
1161 NSSCKFWInstance *fwInstance | |
1162 ); | |
1163 | |
1164 /* | |
1165 * This routine is used to obtain another pointer to an | |
1166 * object matching the search criteria. This routine is | |
1167 * required. If no (more) objects match the search, it | |
1168 * should return NULL and set the error to CKR_OK. | |
1169 */ | |
1170 NSSCKMDObject *(PR_CALLBACK *Next)( | |
1171 NSSCKMDFindObjects *mdFindObjects, | |
1172 NSSCKFWFindObjects *fwFindObjects, | |
1173 NSSCKMDSession *mdSession, | |
1174 NSSCKFWSession *fwSession, | |
1175 NSSCKMDToken *mdToken, | |
1176 NSSCKFWToken *fwToken, | |
1177 NSSCKMDInstance *mdInstance, | |
1178 NSSCKFWInstance *fwInstance, | |
1179 NSSArena *arena, | |
1180 CK_RV *pError | |
1181 ); | |
1182 | |
1183 /* | |
1184 * This object may be extended in future versions of the | |
1185 * NSS Cryptoki Framework. To allow for some flexibility | |
1186 * in the area of binary compatibility, this field should | |
1187 * be NULL. | |
1188 */ | |
1189 void *null; | |
1190 }; | |
1191 | |
1192 /* | |
1193 * NSSCKMDCryptoOperaion | |
1194 * | |
1195 * This is the basic handle for an encryption, decryption, | |
1196 * sign, verify, or hash opertion. | |
1197 * created by NSSCKMDMechanism->XXXXInit, and may be | |
1198 * obtained from the Framework's corresponding object. | |
1199 * It contains a pointer for use by the Module, to store | |
1200 * any intermediate data, and it contains the EPV for a | |
1201 * set of routines which the Module may implement for use | |
1202 * by the Framework. Some of these routines are optional. | |
1203 */ | |
1204 | |
1205 struct NSSCKMDCryptoOperationStr { | |
1206 /* | |
1207 * The Module may use this pointer for its own purposes. | |
1208 */ | |
1209 void *etc; | |
1210 | |
1211 /* | |
1212 * This routine is called by the Framework clean up the mdCryptoOperation | |
1213 * structure. | |
1214 * This routine is optional; if unimplemented, it will be ignored. | |
1215 */ | |
1216 void (PR_CALLBACK *Destroy)( | |
1217 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1218 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1219 NSSCKMDInstance *mdInstance, | |
1220 NSSCKFWInstance *fwInstance | |
1221 ); | |
1222 | |
1223 | |
1224 /* | |
1225 * how many bytes do we need to finish this buffer? | |
1226 * must be implemented if Final is implemented. | |
1227 */ | |
1228 CK_ULONG (PR_CALLBACK *GetFinalLength)( | |
1229 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1230 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1231 NSSCKMDSession *mdSession, | |
1232 NSSCKFWSession *fwSession, | |
1233 NSSCKMDToken *mdToken, | |
1234 NSSCKFWToken *fwToken, | |
1235 NSSCKMDInstance *mdInstance, | |
1236 NSSCKFWInstance *fwInstance, | |
1237 CK_RV *pError | |
1238 ); | |
1239 | |
1240 /* | |
1241 * how many bytes do we need to complete the next operation. | |
1242 * used in both Update and UpdateFinal. | |
1243 */ | |
1244 CK_ULONG (PR_CALLBACK *GetOperationLength)( | |
1245 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1246 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1247 NSSCKMDSession *mdSession, | |
1248 NSSCKFWSession *fwSession, | |
1249 NSSCKMDToken *mdToken, | |
1250 NSSCKFWToken *fwToken, | |
1251 NSSCKMDInstance *mdInstance, | |
1252 NSSCKFWInstance *fwInstance, | |
1253 const NSSItem *inputBuffer, | |
1254 CK_RV *pError | |
1255 ); | |
1256 | |
1257 /* | |
1258 * This routine is called by the Framework to finish a | |
1259 * search operation. Note that the Framework may finish | |
1260 * a search before it has completed. This routine is | |
1261 * optional; if unimplemented, it merely won't be called. | |
1262 * The respective final call with fail with CKR_FUNCTION_FAILED | |
1263 * Final should not free the mdCryptoOperation. | |
1264 */ | |
1265 CK_RV(PR_CALLBACK *Final)( | |
1266 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1267 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1268 NSSCKMDSession *mdSession, | |
1269 NSSCKFWSession *fwSession, | |
1270 NSSCKMDToken *mdToken, | |
1271 NSSCKFWToken *fwToken, | |
1272 NSSCKMDInstance *mdInstance, | |
1273 NSSCKFWInstance *fwInstance, | |
1274 NSSItem *outputBuffer | |
1275 ); | |
1276 | |
1277 | |
1278 /* | |
1279 * This routine is called by the Framework to complete the | |
1280 * next step in an encryption/decryption operation. | |
1281 * This routine is optional; if unimplemented, the respective | |
1282 * update call with fail with CKR_FUNCTION_FAILED. | |
1283 * Update should not be implemented for signing/verification/digest | |
1284 * mechanisms. | |
1285 */ | |
1286 CK_RV(PR_CALLBACK *Update)( | |
1287 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1288 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1289 NSSCKMDSession *mdSession, | |
1290 NSSCKFWSession *fwSession, | |
1291 NSSCKMDToken *mdToken, | |
1292 NSSCKFWToken *fwToken, | |
1293 NSSCKMDInstance *mdInstance, | |
1294 NSSCKFWInstance *fwInstance, | |
1295 const NSSItem *inputBuffer, | |
1296 NSSItem *outputBuffer | |
1297 ); | |
1298 | |
1299 /* | |
1300 * This routine is called by the Framework to complete the | |
1301 * next step in a signing/verification/digest operation. | |
1302 * This routine is optional; if unimplemented, the respective | |
1303 * update call with fail with CKR_FUNCTION_FAILED | |
1304 * Update should not be implemented for encryption/decryption | |
1305 * mechanisms. | |
1306 */ | |
1307 CK_RV(PR_CALLBACK *DigestUpdate)( | |
1308 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1309 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1310 NSSCKMDSession *mdSession, | |
1311 NSSCKFWSession *fwSession, | |
1312 NSSCKMDToken *mdToken, | |
1313 NSSCKFWToken *fwToken, | |
1314 NSSCKMDInstance *mdInstance, | |
1315 NSSCKFWInstance *fwInstance, | |
1316 const NSSItem *inputBuffer | |
1317 ); | |
1318 | |
1319 /* | |
1320 * This routine is called by the Framework to complete a | |
1321 * single step operation. This routine is optional; if unimplemented, | |
1322 * the framework will use the Update and Final functions to complete | |
1323 * the operation. | |
1324 */ | |
1325 CK_RV(PR_CALLBACK *UpdateFinal)( | |
1326 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1327 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1328 NSSCKMDSession *mdSession, | |
1329 NSSCKFWSession *fwSession, | |
1330 NSSCKMDToken *mdToken, | |
1331 NSSCKFWToken *fwToken, | |
1332 NSSCKMDInstance *mdInstance, | |
1333 NSSCKFWInstance *fwInstance, | |
1334 const NSSItem *inputBuffer, | |
1335 NSSItem *outputBuffer | |
1336 ); | |
1337 | |
1338 /* | |
1339 * This routine is called by the Framework to complete next | |
1340 * step in a combined operation. The Decrypt/Encrypt mechanism | |
1341 * should define and drive the combo step. | |
1342 * This routine is optional; if unimplemented, | |
1343 * the framework will use the appropriate Update functions to complete | |
1344 * the operation. | |
1345 */ | |
1346 CK_RV(PR_CALLBACK *UpdateCombo)( | |
1347 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1348 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1349 NSSCKMDCryptoOperation *mdPeerCryptoOperation, | |
1350 NSSCKFWCryptoOperation *fwPeerCryptoOperation, | |
1351 NSSCKMDSession *mdSession, | |
1352 NSSCKFWSession *fwSession, | |
1353 NSSCKMDToken *mdToken, | |
1354 NSSCKFWToken *fwToken, | |
1355 NSSCKMDInstance *mdInstance, | |
1356 NSSCKFWInstance *fwInstance, | |
1357 const NSSItem *inputBuffer, | |
1358 NSSItem *outputBuffer | |
1359 ); | |
1360 | |
1361 /* | |
1362 * Hash a key directly into the digest | |
1363 */ | |
1364 CK_RV(PR_CALLBACK *DigestKey)( | |
1365 NSSCKMDCryptoOperation *mdCryptoOperation, | |
1366 NSSCKFWCryptoOperation *fwCryptoOperation, | |
1367 NSSCKMDToken *mdToken, | |
1368 NSSCKFWToken *fwToken, | |
1369 NSSCKMDInstance *mdInstance, | |
1370 NSSCKFWInstance *fwInstance, | |
1371 NSSCKMDObject *mdKey, | |
1372 NSSCKFWObject *fwKey | |
1373 ); | |
1374 | |
1375 /* | |
1376 * This object may be extended in future versions of the | |
1377 * NSS Cryptoki Framework. To allow for some flexibility | |
1378 * in the area of binary compatibility, this field should | |
1379 * be NULL. | |
1380 */ | |
1381 void *null; | |
1382 }; | |
1383 | |
1384 /* | |
1385 * NSSCKMDMechanism | |
1386 * | |
1387 */ | |
1388 | |
1389 struct NSSCKMDMechanismStr { | |
1390 /* | |
1391 * The Module may use this pointer for its own purposes. | |
1392 */ | |
1393 void *etc; | |
1394 | |
1395 /* | |
1396 * This also frees the fwMechanism if appropriate. | |
1397 * If it is not supplied, the Framework will assume that the Token | |
1398 * Manages a static list of mechanisms and the function will not be called. | |
1399 */ | |
1400 void (PR_CALLBACK *Destroy)( | |
1401 NSSCKMDMechanism *mdMechanism, | |
1402 NSSCKFWMechanism *fwMechanism, | |
1403 NSSCKMDInstance *mdInstance, | |
1404 NSSCKFWInstance *fwInstance | |
1405 ); | |
1406 | |
1407 | |
1408 /* | |
1409 * This routine returns the minimum key size allowed for | |
1410 * this mechanism. This routine is optional; if unimplemented, | |
1411 * zero will be assumed. This routine may return zero on | |
1412 * error; if the error is CKR_OK, zero will be accepted as | |
1413 * a valid response. | |
1414 */ | |
1415 CK_ULONG (PR_CALLBACK *GetMinKeySize)( | |
1416 NSSCKMDMechanism *mdMechanism, | |
1417 NSSCKFWMechanism *fwMechanism, | |
1418 NSSCKMDToken *mdToken, | |
1419 NSSCKFWToken *fwToken, | |
1420 NSSCKMDInstance *mdInstance, | |
1421 NSSCKFWInstance *fwInstance, | |
1422 CK_RV *pError | |
1423 ); | |
1424 | |
1425 /* | |
1426 * This routine returns the maximum key size allowed for | |
1427 * this mechanism. This routine is optional; if unimplemented, | |
1428 * zero will be assumed. This routine may return zero on | |
1429 * error; if the error is CKR_OK, zero will be accepted as | |
1430 * a valid response. | |
1431 */ | |
1432 CK_ULONG (PR_CALLBACK *GetMaxKeySize)( | |
1433 NSSCKMDMechanism *mdMechanism, | |
1434 NSSCKFWMechanism *fwMechanism, | |
1435 NSSCKMDToken *mdToken, | |
1436 NSSCKFWToken *fwToken, | |
1437 NSSCKMDInstance *mdInstance, | |
1438 NSSCKFWInstance *fwInstance, | |
1439 CK_RV *pError | |
1440 ); | |
1441 | |
1442 /* | |
1443 * This routine is called to determine if the mechanism is | |
1444 * implemented in hardware or software. It returns CK_TRUE | |
1445 * if it is done in hardware. | |
1446 */ | |
1447 CK_BBOOL (PR_CALLBACK *GetInHardware)( | |
1448 NSSCKMDMechanism *mdMechanism, | |
1449 NSSCKFWMechanism *fwMechanism, | |
1450 NSSCKMDToken *mdToken, | |
1451 NSSCKFWToken *fwToken, | |
1452 NSSCKMDInstance *mdInstance, | |
1453 NSSCKFWInstance *fwInstance, | |
1454 CK_RV *pError | |
1455 ); | |
1456 | |
1457 /* | |
1458 * The crypto routines themselves. Most crypto operations may | |
1459 * be performed in two ways, streaming and single-part. The | |
1460 * streaming operations involve the use of (typically) three | |
1461 * calls-- an Init method to set up the operation, an Update | |
1462 * method to feed data to the operation, and a Final method to | |
1463 * obtain the final result. Single-part operations involve | |
1464 * one method, to perform the crypto operation all at once. | |
1465 * | |
1466 * The NSS Cryptoki Framework can implement the single-part | |
1467 * operations in terms of the streaming operations on behalf | |
1468 * of the Module. There are a few variances. | |
1469 * | |
1470 * Only the Init Functions are defined by the mechanism. Each | |
1471 * init function will return a NSSCKFWCryptoOperation which | |
1472 * can supply update, final, the single part updateFinal, and | |
1473 * the combo updateCombo functions. | |
1474 * | |
1475 * For simplicity, the routines are listed in summary here: | |
1476 * | |
1477 * EncryptInit, | |
1478 * DecryptInit, | |
1479 * DigestInit, | |
1480 * SignInit, | |
1481 * SignRecoverInit; | |
1482 * VerifyInit, | |
1483 * VerifyRecoverInit; | |
1484 * | |
1485 * The key-management routines are | |
1486 * | |
1487 * GenerateKey | |
1488 * GenerateKeyPair | |
1489 * WrapKey | |
1490 * UnwrapKey | |
1491 * DeriveKey | |
1492 * | |
1493 * All of these routines based on the Cryptoki API; | |
1494 * see PKCS#11 for further information. | |
1495 */ | |
1496 | |
1497 /* | |
1498 */ | |
1499 NSSCKMDCryptoOperation * (PR_CALLBACK *EncryptInit)( | |
1500 NSSCKMDMechanism *mdMechanism, | |
1501 NSSCKFWMechanism *fwMechanism, | |
1502 CK_MECHANISM_PTR pMechanism, | |
1503 NSSCKMDSession *mdSession, | |
1504 NSSCKFWSession *fwSession, | |
1505 NSSCKMDToken *mdToken, | |
1506 NSSCKFWToken *fwToken, | |
1507 NSSCKMDInstance *mdInstance, | |
1508 NSSCKFWInstance *fwInstance, | |
1509 NSSCKMDObject *mdKey, | |
1510 NSSCKFWObject *fwKey, | |
1511 CK_RV *pError | |
1512 ); | |
1513 | |
1514 /* | |
1515 */ | |
1516 NSSCKMDCryptoOperation * (PR_CALLBACK *DecryptInit)( | |
1517 NSSCKMDMechanism *mdMechanism, | |
1518 NSSCKFWMechanism *fwMechanism, | |
1519 CK_MECHANISM_PTR pMechanism, | |
1520 NSSCKMDSession *mdSession, | |
1521 NSSCKFWSession *fwSession, | |
1522 NSSCKMDToken *mdToken, | |
1523 NSSCKFWToken *fwToken, | |
1524 NSSCKMDInstance *mdInstance, | |
1525 NSSCKFWInstance *fwInstance, | |
1526 NSSCKMDObject *mdKey, | |
1527 NSSCKFWObject *fwKey, | |
1528 CK_RV *pError | |
1529 ); | |
1530 | |
1531 /* | |
1532 */ | |
1533 NSSCKMDCryptoOperation * (PR_CALLBACK *DigestInit)( | |
1534 NSSCKMDMechanism *mdMechanism, | |
1535 NSSCKFWMechanism *fwMechanism, | |
1536 CK_MECHANISM_PTR pMechanism, | |
1537 NSSCKMDSession *mdSession, | |
1538 NSSCKFWSession *fwSession, | |
1539 NSSCKMDToken *mdToken, | |
1540 NSSCKFWToken *fwToken, | |
1541 NSSCKMDInstance *mdInstance, | |
1542 NSSCKFWInstance *fwInstance, | |
1543 CK_RV *pError | |
1544 ); | |
1545 | |
1546 | |
1547 /* | |
1548 */ | |
1549 NSSCKMDCryptoOperation * (PR_CALLBACK *SignInit)( | |
1550 NSSCKMDMechanism *mdMechanism, | |
1551 NSSCKFWMechanism *fwMechanism, | |
1552 CK_MECHANISM_PTR pMechanism, | |
1553 NSSCKMDSession *mdSession, | |
1554 NSSCKFWSession *fwSession, | |
1555 NSSCKMDToken *mdToken, | |
1556 NSSCKFWToken *fwToken, | |
1557 NSSCKMDInstance *mdInstance, | |
1558 NSSCKFWInstance *fwInstance, | |
1559 NSSCKMDObject *mdKey, | |
1560 NSSCKFWObject *fwKey, | |
1561 CK_RV *pError | |
1562 ); | |
1563 | |
1564 /* | |
1565 */ | |
1566 NSSCKMDCryptoOperation * (PR_CALLBACK *VerifyInit)( | |
1567 NSSCKMDMechanism *mdMechanism, | |
1568 NSSCKFWMechanism *fwMechanism, | |
1569 CK_MECHANISM_PTR pMechanism, | |
1570 NSSCKMDSession *mdSession, | |
1571 NSSCKFWSession *fwSession, | |
1572 NSSCKMDToken *mdToken, | |
1573 NSSCKFWToken *fwToken, | |
1574 NSSCKMDInstance *mdInstance, | |
1575 NSSCKFWInstance *fwInstance, | |
1576 NSSCKMDObject *mdKey, | |
1577 NSSCKFWObject *fwKey, | |
1578 CK_RV *pError | |
1579 ); | |
1580 | |
1581 /* | |
1582 */ | |
1583 NSSCKMDCryptoOperation * (PR_CALLBACK *SignRecoverInit)( | |
1584 NSSCKMDMechanism *mdMechanism, | |
1585 NSSCKFWMechanism *fwMechanism, | |
1586 CK_MECHANISM_PTR pMechanism, | |
1587 NSSCKMDSession *mdSession, | |
1588 NSSCKFWSession *fwSession, | |
1589 NSSCKMDToken *mdToken, | |
1590 NSSCKFWToken *fwToken, | |
1591 NSSCKMDInstance *mdInstance, | |
1592 NSSCKFWInstance *fwInstance, | |
1593 NSSCKMDObject *mdKey, | |
1594 NSSCKFWObject *fwKey, | |
1595 CK_RV *pError | |
1596 ); | |
1597 | |
1598 /* | |
1599 */ | |
1600 NSSCKMDCryptoOperation * (PR_CALLBACK *VerifyRecoverInit)( | |
1601 NSSCKMDMechanism *mdMechanism, | |
1602 NSSCKFWMechanism *fwMechanism, | |
1603 CK_MECHANISM_PTR pMechanism, | |
1604 NSSCKMDSession *mdSession, | |
1605 NSSCKFWSession *fwSession, | |
1606 NSSCKMDToken *mdToken, | |
1607 NSSCKFWToken *fwToken, | |
1608 NSSCKMDInstance *mdInstance, | |
1609 NSSCKFWInstance *fwInstance, | |
1610 NSSCKMDObject *mdKey, | |
1611 NSSCKFWObject *fwKey, | |
1612 CK_RV *pError | |
1613 ); | |
1614 | |
1615 /* | |
1616 * Key management operations. | |
1617 */ | |
1618 | |
1619 /* | |
1620 * This routine generates a key. This routine may return NULL | |
1621 * upon error. | |
1622 */ | |
1623 NSSCKMDObject *(PR_CALLBACK *GenerateKey)( | |
1624 NSSCKMDMechanism *mdMechanism, | |
1625 NSSCKFWMechanism *fwMechanism, | |
1626 CK_MECHANISM_PTR pMechanism, | |
1627 NSSCKMDSession *mdSession, | |
1628 NSSCKFWSession *fwSession, | |
1629 NSSCKMDToken *mdToken, | |
1630 NSSCKFWToken *fwToken, | |
1631 NSSCKMDInstance *mdInstance, | |
1632 NSSCKFWInstance *fwInstance, | |
1633 CK_ATTRIBUTE_PTR pTemplate, | |
1634 CK_ULONG ulAttributeCount, | |
1635 CK_RV *pError | |
1636 ); | |
1637 | |
1638 /* | |
1639 * This routine generates a key pair. | |
1640 */ | |
1641 CK_RV (PR_CALLBACK *GenerateKeyPair)( | |
1642 NSSCKMDMechanism *mdMechanism, | |
1643 NSSCKFWMechanism *fwMechanism, | |
1644 CK_MECHANISM_PTR pMechanism, | |
1645 NSSCKMDSession *mdSession, | |
1646 NSSCKFWSession *fwSession, | |
1647 NSSCKMDToken *mdToken, | |
1648 NSSCKFWToken *fwToken, | |
1649 NSSCKMDInstance *mdInstance, | |
1650 NSSCKFWInstance *fwInstance, | |
1651 CK_ATTRIBUTE_PTR pPublicKeyTemplate, | |
1652 CK_ULONG ulPublicKeyAttributeCount, | |
1653 CK_ATTRIBUTE_PTR pPrivateKeyTemplate, | |
1654 CK_ULONG ulPrivateKeyAttributeCount, | |
1655 NSSCKMDObject **pPublicKey, | |
1656 NSSCKMDObject **pPrivateKey | |
1657 ); | |
1658 | |
1659 /* | |
1660 * This routine wraps a key. | |
1661 */ | |
1662 CK_ULONG (PR_CALLBACK *GetWrapKeyLength)( | |
1663 NSSCKMDMechanism *mdMechanism, | |
1664 NSSCKFWMechanism *fwMechanism, | |
1665 CK_MECHANISM_PTR pMechanism, | |
1666 NSSCKMDSession *mdSession, | |
1667 NSSCKFWSession *fwSession, | |
1668 NSSCKMDToken *mdToken, | |
1669 NSSCKFWToken *fwToken, | |
1670 NSSCKMDInstance *mdInstance, | |
1671 NSSCKFWInstance *fwInstance, | |
1672 NSSCKMDObject *mdWrappingKey, | |
1673 NSSCKFWObject *fwWrappingKey, | |
1674 NSSCKMDObject *mdWrappedKey, | |
1675 NSSCKFWObject *fwWrappedKey, | |
1676 CK_RV *pError | |
1677 ); | |
1678 | |
1679 /* | |
1680 * This routine wraps a key. | |
1681 */ | |
1682 CK_RV (PR_CALLBACK *WrapKey)( | |
1683 NSSCKMDMechanism *mdMechanism, | |
1684 NSSCKFWMechanism *fwMechanism, | |
1685 CK_MECHANISM_PTR pMechanism, | |
1686 NSSCKMDSession *mdSession, | |
1687 NSSCKFWSession *fwSession, | |
1688 NSSCKMDToken *mdToken, | |
1689 NSSCKFWToken *fwToken, | |
1690 NSSCKMDInstance *mdInstance, | |
1691 NSSCKFWInstance *fwInstance, | |
1692 NSSCKMDObject *mdWrappingKey, | |
1693 NSSCKFWObject *fwWrappingKey, | |
1694 NSSCKMDObject *mdKeyObject, | |
1695 NSSCKFWObject *fwKeyObject, | |
1696 NSSItem *wrappedKey | |
1697 ); | |
1698 | |
1699 /* | |
1700 * This routine unwraps a key. This routine may return NULL | |
1701 * upon error. | |
1702 */ | |
1703 NSSCKMDObject *(PR_CALLBACK *UnwrapKey)( | |
1704 NSSCKMDMechanism *mdMechanism, | |
1705 NSSCKFWMechanism *fwMechanism, | |
1706 CK_MECHANISM_PTR pMechanism, | |
1707 NSSCKMDSession *mdSession, | |
1708 NSSCKFWSession *fwSession, | |
1709 NSSCKMDToken *mdToken, | |
1710 NSSCKFWToken *fwToken, | |
1711 NSSCKMDInstance *mdInstance, | |
1712 NSSCKFWInstance *fwInstance, | |
1713 NSSCKMDObject *mdWrappingKey, | |
1714 NSSCKFWObject *fwWrappingKey, | |
1715 NSSItem *wrappedKey, | |
1716 CK_ATTRIBUTE_PTR pTemplate, | |
1717 CK_ULONG ulAttributeCount, | |
1718 CK_RV *pError | |
1719 ); | |
1720 | |
1721 /* | |
1722 * This routine derives a key. This routine may return NULL | |
1723 * upon error. | |
1724 */ | |
1725 NSSCKMDObject *(PR_CALLBACK *DeriveKey)( | |
1726 NSSCKMDMechanism *mdMechanism, | |
1727 NSSCKFWMechanism *fwMechanism, | |
1728 CK_MECHANISM_PTR pMechanism, | |
1729 NSSCKMDSession *mdSession, | |
1730 NSSCKFWSession *fwSession, | |
1731 NSSCKMDToken *mdToken, | |
1732 NSSCKFWToken *fwToken, | |
1733 NSSCKMDInstance *mdInstance, | |
1734 NSSCKFWInstance *fwInstance, | |
1735 NSSCKMDObject *mdBaseKey, | |
1736 NSSCKFWObject *fwBaseKey, | |
1737 CK_ATTRIBUTE_PTR pTemplate, | |
1738 CK_ULONG ulAttributeCount, | |
1739 CK_RV *pError | |
1740 ); | |
1741 | |
1742 /* | |
1743 * This object may be extended in future versions of the | |
1744 * NSS Cryptoki Framework. To allow for some flexibility | |
1745 * in the area of binary compatibility, this field should | |
1746 * be NULL. | |
1747 */ | |
1748 void *null; | |
1749 }; | |
1750 | |
1751 /* | |
1752 * NSSCKMDObject | |
1753 * | |
1754 * This is the basic handle for any object used by a PKCS#11 Module. | |
1755 * Modules must implement it if they support their own objects, and | |
1756 * the Framework supports it for Modules that do not handle session | |
1757 * objects. This type contains a pointer for use by the implementor, | |
1758 * to store any object-specific data, and it contains an EPV for a | |
1759 * set of routines used to access the object. | |
1760 */ | |
1761 | |
1762 struct NSSCKMDObjectStr { | |
1763 /* | |
1764 * The implementation my use this pointer for its own purposes. | |
1765 */ | |
1766 void *etc; | |
1767 | |
1768 /* | |
1769 * This routine is called by the Framework when it is letting | |
1770 * go of an object handle. It can be used by the Module to | |
1771 * free any resources tied up by an object "in use." It is | |
1772 * optional. | |
1773 */ | |
1774 void (PR_CALLBACK *Finalize)( | |
1775 NSSCKMDObject *mdObject, | |
1776 NSSCKFWObject *fwObject, | |
1777 NSSCKMDSession *mdSession, | |
1778 NSSCKFWSession *fwSession, | |
1779 NSSCKMDToken *mdToken, | |
1780 NSSCKFWToken *fwToken, | |
1781 NSSCKMDInstance *mdInstance, | |
1782 NSSCKFWInstance *fwInstance | |
1783 ); | |
1784 | |
1785 /* | |
1786 * This routine is used to completely destroy an object. | |
1787 * It is optional. The parameter fwObject might be NULL | |
1788 * if the framework runs out of memory at the wrong moment. | |
1789 */ | |
1790 CK_RV (PR_CALLBACK *Destroy)( | |
1791 NSSCKMDObject *mdObject, | |
1792 NSSCKFWObject *fwObject, | |
1793 NSSCKMDSession *mdSession, | |
1794 NSSCKFWSession *fwSession, | |
1795 NSSCKMDToken *mdToken, | |
1796 NSSCKFWToken *fwToken, | |
1797 NSSCKMDInstance *mdInstance, | |
1798 NSSCKFWInstance *fwInstance | |
1799 ); | |
1800 | |
1801 /* | |
1802 * This helper routine is used by the Framework, and is especially | |
1803 * useful when it is managing session objects on behalf of the | |
1804 * Module. This routine is optional; if unimplemented, the | |
1805 * Framework will actually look up the CKA_TOKEN attribute. In the | |
1806 * event of an error, just make something up-- the Framework will | |
1807 * find out soon enough anyway. | |
1808 */ | |
1809 CK_BBOOL (PR_CALLBACK *IsTokenObject)( | |
1810 NSSCKMDObject *mdObject, | |
1811 NSSCKFWObject *fwObject, | |
1812 NSSCKMDSession *mdSession, | |
1813 NSSCKFWSession *fwSession, | |
1814 NSSCKMDToken *mdToken, | |
1815 NSSCKFWToken *fwToken, | |
1816 NSSCKMDInstance *mdInstance, | |
1817 NSSCKFWInstance *fwInstance | |
1818 ); | |
1819 | |
1820 /* | |
1821 * This routine returns the number of attributes of which this | |
1822 * object consists. It is mandatory. It can return zero on | |
1823 * error. | |
1824 */ | |
1825 CK_ULONG (PR_CALLBACK *GetAttributeCount)( | |
1826 NSSCKMDObject *mdObject, | |
1827 NSSCKFWObject *fwObject, | |
1828 NSSCKMDSession *mdSession, | |
1829 NSSCKFWSession *fwSession, | |
1830 NSSCKMDToken *mdToken, | |
1831 NSSCKFWToken *fwToken, | |
1832 NSSCKMDInstance *mdInstance, | |
1833 NSSCKFWInstance *fwInstance, | |
1834 CK_RV *pError | |
1835 ); | |
1836 | |
1837 /* | |
1838 * This routine stuffs the attribute types into the provided array. | |
1839 * The array size (as obtained from GetAttributeCount) is passed in | |
1840 * as a check; return CKR_BUFFER_TOO_SMALL if the count is wrong | |
1841 * (either too big or too small). | |
1842 */ | |
1843 CK_RV (PR_CALLBACK *GetAttributeTypes)( | |
1844 NSSCKMDObject *mdObject, | |
1845 NSSCKFWObject *fwObject, | |
1846 NSSCKMDSession *mdSession, | |
1847 NSSCKFWSession *fwSession, | |
1848 NSSCKMDToken *mdToken, | |
1849 NSSCKFWToken *fwToken, | |
1850 NSSCKMDInstance *mdInstance, | |
1851 NSSCKFWInstance *fwInstance, | |
1852 CK_ATTRIBUTE_TYPE_PTR typeArray, | |
1853 CK_ULONG ulCount | |
1854 ); | |
1855 | |
1856 /* | |
1857 * This routine returns the size (in bytes) of the specified | |
1858 * attribute. It can return zero on error. | |
1859 */ | |
1860 CK_ULONG (PR_CALLBACK *GetAttributeSize)( | |
1861 NSSCKMDObject *mdObject, | |
1862 NSSCKFWObject *fwObject, | |
1863 NSSCKMDSession *mdSession, | |
1864 NSSCKFWSession *fwSession, | |
1865 NSSCKMDToken *mdToken, | |
1866 NSSCKFWToken *fwToken, | |
1867 NSSCKMDInstance *mdInstance, | |
1868 NSSCKFWInstance *fwInstance, | |
1869 CK_ATTRIBUTE_TYPE attribute, | |
1870 CK_RV *pError | |
1871 ); | |
1872 | |
1873 /* | |
1874 * This routine returns an NSSCKFWItem structure. | |
1875 * The item pointer points to an NSSItem containing the attribute value. | |
1876 * The needsFreeing bit tells the framework whether to call the | |
1877 * FreeAttribute function . Upon error, an NSSCKFWItem structure | |
1878 * with a NULL NSSItem item pointer will be returned | |
1879 */ | |
1880 NSSCKFWItem (PR_CALLBACK *GetAttribute)( | |
1881 NSSCKMDObject *mdObject, | |
1882 NSSCKFWObject *fwObject, | |
1883 NSSCKMDSession *mdSession, | |
1884 NSSCKFWSession *fwSession, | |
1885 NSSCKMDToken *mdToken, | |
1886 NSSCKFWToken *fwToken, | |
1887 NSSCKMDInstance *mdInstance, | |
1888 NSSCKFWInstance *fwInstance, | |
1889 CK_ATTRIBUTE_TYPE attribute, | |
1890 CK_RV *pError | |
1891 ); | |
1892 | |
1893 /* | |
1894 * This routine returns CKR_OK if the attribute could be freed. | |
1895 */ | |
1896 CK_RV (PR_CALLBACK *FreeAttribute)( | |
1897 NSSCKFWItem * item | |
1898 ); | |
1899 | |
1900 /* | |
1901 * This routine changes the specified attribute. If unimplemented, | |
1902 * the object will be considered read-only. | |
1903 */ | |
1904 CK_RV (PR_CALLBACK *SetAttribute)( | |
1905 NSSCKMDObject *mdObject, | |
1906 NSSCKFWObject *fwObject, | |
1907 NSSCKMDSession *mdSession, | |
1908 NSSCKFWSession *fwSession, | |
1909 NSSCKMDToken *mdToken, | |
1910 NSSCKFWToken *fwToken, | |
1911 NSSCKMDInstance *mdInstance, | |
1912 NSSCKFWInstance *fwInstance, | |
1913 CK_ATTRIBUTE_TYPE attribute, | |
1914 NSSItem *value | |
1915 ); | |
1916 | |
1917 /* | |
1918 * This routine returns the storage requirements of this object, | |
1919 * in bytes. Cryptoki doesn't strictly define the definition, | |
1920 * but it should relate to the values returned by the "Get Memory" | |
1921 * routines of the NSSCKMDToken. This routine is optional; if | |
1922 * unimplemented, the Framework will consider this information | |
1923 * sensitive. This routine may return zero on error. If the | |
1924 * specified error is CKR_OK, zero will be accepted as a valid | |
1925 * response. | |
1926 */ | |
1927 CK_ULONG (PR_CALLBACK *GetObjectSize)( | |
1928 NSSCKMDObject *mdObject, | |
1929 NSSCKFWObject *fwObject, | |
1930 NSSCKMDSession *mdSession, | |
1931 NSSCKFWSession *fwSession, | |
1932 NSSCKMDToken *mdToken, | |
1933 NSSCKFWToken *fwToken, | |
1934 NSSCKMDInstance *mdInstance, | |
1935 NSSCKFWInstance *fwInstance, | |
1936 CK_RV *pError | |
1937 ); | |
1938 | |
1939 /* | |
1940 * This object may be extended in future versions of the | |
1941 * NSS Cryptoki Framework. To allow for some flexibility | |
1942 * in the area of binary compatibility, this field should | |
1943 * be NULL. | |
1944 */ | |
1945 void *null; | |
1946 }; | |
1947 | |
1948 | |
1949 #endif /* NSSCKMDT_H */ | |
OLD | NEW |