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