1 /** 2 * Copyright(c) 2011 Trusted Logic. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name Trusted Logic nor the names of its 15 * contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 /* 32 * This header file contains the definition of the PKCS#11 types and functions 33 * supported by the Trusted Foundations Software. This header file is 34 * derived from the RSA Security Inc. PKCS #11 Cryptographic Token Interface 35 * (Cryptoki) 36 */ 37 #ifndef __PKCS11_H__ 38 #define __PKCS11_H__ 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 /*------------------------------------------ 45 * Types and constants 46 *------------------------------------------*/ 47 48 #include "s_type.h" 49 50 #define CK_TRUE true 51 #define CK_FALSE false 52 53 #ifndef FALSE 54 #define FALSE CK_FALSE 55 #endif 56 57 #ifndef TRUE 58 #define TRUE CK_TRUE 59 #endif 60 61 #define NULL_PTR NULL 62 63 typedef uint8_t CK_BYTE, *CK_BYTE_PTR; 64 typedef CK_BYTE CK_CHAR, *CK_CHAR_PTR; 65 typedef CK_BYTE CK_UTF8CHAR, *CK_UTF8CHAR_PTR; 66 typedef bool CK_BBOOL; 67 typedef uint32_t CK_ULONG, *CK_ULONG_PTR; 68 typedef int32_t CK_LONG; 69 typedef CK_ULONG CK_FLAGS; 70 typedef void* CK_VOID_PTR, *CK_VOID_PTR_PTR; 71 72 #define CK_INVALID_HANDLE 0 73 74 typedef struct CK_VERSION 75 { 76 CK_BYTE major; 77 CK_BYTE minor; 78 } 79 CK_VERSION, *CK_VERSION_PTR; 80 81 typedef struct CK_INFO 82 { 83 CK_VERSION cryptokiVersion; 84 CK_UTF8CHAR manufacturerID[32]; 85 CK_FLAGS flags; 86 CK_UTF8CHAR libraryDescription[32]; 87 CK_VERSION libraryVersion; 88 } 89 CK_INFO, *CK_INFO_PTR; 90 91 typedef CK_ULONG CK_NOTIFICATION; 92 typedef CK_ULONG CK_SLOT_ID, *CK_SLOT_ID_PTR; 93 typedef CK_ULONG CK_SESSION_HANDLE, *CK_SESSION_HANDLE_PTR; 94 95 typedef CK_ULONG CK_USER_TYPE; 96 #define CKU_SO 0 97 #define CKU_USER 1 98 #define CKU_CONTEXT_SPECIFIC 2 99 100 typedef CK_ULONG CK_STATE; 101 #define CKS_RO_PUBLIC_SESSION 0 102 #define CKS_RO_USER_FUNCTIONS 1 103 #define CKS_RW_PUBLIC_SESSION 2 104 #define CKS_RW_USER_FUNCTIONS 3 105 #define CKS_RW_SO_FUNCTIONS 4 106 107 typedef struct CK_SESSION_INFO 108 { 109 CK_SLOT_ID slotID; 110 CK_STATE state; 111 CK_FLAGS flags; 112 CK_ULONG ulDeviceError; 113 } 114 CK_SESSION_INFO, *CK_SESSION_INFO_PTR; 115 116 #define CKF_RW_SESSION 0x00000002 117 #define CKF_SERIAL_SESSION 0x00000004 118 #define CKVF_OPEN_SUB_SESSION 0x00000008 119 120 typedef CK_ULONG CK_OBJECT_HANDLE, *CK_OBJECT_HANDLE_PTR; 121 122 typedef CK_ULONG CK_OBJECT_CLASS, *CK_OBJECT_CLASS_PTR; 123 124 #define CKO_DATA 0x00000000 125 #define CKO_PUBLIC_KEY 0x00000002 126 #define CKO_PRIVATE_KEY 0x00000003 127 #define CKO_SECRET_KEY 0x00000004 128 129 typedef CK_ULONG CK_KEY_TYPE; 130 131 #define CKK_RSA 0x00000000 132 #define CKK_DSA 0x00000001 133 #define CKK_DH 0x00000002 134 #define CKK_EC 0x00000003 135 136 #define CKK_GENERIC_SECRET 0x00000010 137 138 #define CKK_RC4 0x00000012 139 #define CKK_DES 0x00000013 140 #define CKK_DES2 0x00000014 141 #define CKK_DES3 0x00000015 142 143 #define CKK_AES 0x0000001F 144 145 #define CKK_VENDOR_DEFINED 0x80000000 146 147 typedef CK_ULONG CK_ATTRIBUTE_TYPE; 148 149 #define CKF_ARRAY_ATTRIBUTE 0x40000000 150 151 #define CKA_CLASS 0x00000000 152 #define CKA_TOKEN 0x00000001 153 #define CKA_PRIVATE 0x00000002 154 #define CKA_VALUE 0x00000011 155 156 #define CKA_OBJECT_ID 0x00000012 157 158 #define CKA_KEY_TYPE 0x00000100 159 #define CKA_ID 0x00000102 160 #define CKA_SENSITIVE 0x00000103 161 #define CKA_ENCRYPT 0x00000104 162 #define CKA_DECRYPT 0x00000105 163 #define CKA_WRAP 0x00000106 164 #define CKA_UNWRAP 0x00000107 165 #define CKA_SIGN 0x00000108 166 #define CKA_VERIFY 0x0000010A 167 #define CKA_DERIVE 0x0000010C 168 #define CKA_MODULUS 0x00000120 169 #define CKA_MODULUS_BITS 0x00000121 170 #define CKA_PUBLIC_EXPONENT 0x00000122 171 #define CKA_PRIVATE_EXPONENT 0x00000123 172 #define CKA_PRIME_1 0x00000124 173 #define CKA_PRIME_2 0x00000125 174 #define CKA_EXPONENT_1 0x00000126 175 #define CKA_EXPONENT_2 0x00000127 176 #define CKA_COEFFICIENT 0x00000128 177 #define CKA_PRIME 0x00000130 178 #define CKA_SUBPRIME 0x00000131 179 #define CKA_BASE 0x00000132 180 181 #define CKA_VALUE_BITS 0x00000160 182 #define CKA_VALUE_LEN 0x00000161 183 184 #define CKA_EXTRACTABLE 0x00000162 185 186 #define CKA_MODIFIABLE 0x00000170 187 #define CKA_COPYABLE 0x00000171 188 #define CKA_ALWAYS_AUTHENTICATE 0x00000202 189 190 #define CKA_VENDOR_DEFINED 0x80000000 191 192 #define CKAV_ALLOW_NON_SENSITIVE_DERIVED_KEY 0x80000001 193 194 typedef struct CK_ATTRIBUTE 195 { 196 CK_ATTRIBUTE_TYPE type; 197 void* pValue; 198 CK_ULONG ulValueLen; 199 } 200 CK_ATTRIBUTE, *CK_ATTRIBUTE_PTR; 201 202 typedef CK_ULONG CK_MECHANISM_TYPE, *CK_MECHANISM_TYPE_PTR; 203 204 #define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000 205 #define CKM_RSA_PKCS 0x00000001 206 #define CKM_RSA_X_509 0x00000003 207 #define CKM_MD5_RSA_PKCS 0x00000005 208 #define CKM_SHA1_RSA_PKCS 0x00000006 209 #define CKM_RSA_PKCS_OAEP 0x00000009 210 #define CKM_RSA_PKCS_PSS 0x0000000D 211 #define CKM_SHA1_RSA_PKCS_PSS 0x0000000E 212 #define CKM_DSA_KEY_PAIR_GEN 0x00000010 213 #define CKM_DSA 0x00000011 214 #define CKM_DSA_SHA1 0x00000012 215 #define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020 216 #define CKM_DH_PKCS_DERIVE 0x00000021 217 #define CKM_SHA256_RSA_PKCS 0x00000040 218 #define CKM_SHA384_RSA_PKCS 0x00000041 219 #define CKM_SHA512_RSA_PKCS 0x00000042 220 #define CKM_SHA256_RSA_PKCS_PSS 0x00000043 221 #define CKM_SHA384_RSA_PKCS_PSS 0x00000044 222 #define CKM_SHA512_RSA_PKCS_PSS 0x00000045 223 #define CKM_SHA224_RSA_PKCS 0x00000046 224 #define CKM_SHA224_RSA_PKCS_PSS 0x00000047 225 #define CKM_RC4_KEY_GEN 0x00000110 226 #define CKM_RC4 0x00000111 227 #define CKM_DES_KEY_GEN 0x00000120 228 #define CKM_DES_ECB 0x00000121 229 #define CKM_DES_CBC 0x00000122 230 #define CKM_DES_MAC 0x00000123 231 #define CKM_DES2_KEY_GEN 0x00000130 232 #define CKM_DES3_KEY_GEN 0x00000131 233 #define CKM_DES3_ECB 0x00000132 234 #define CKM_DES3_CBC 0x00000133 235 #define CKM_DES3_MAC 0x00000134 236 #define CKM_MD5 0x00000210 237 #define CKM_MD5_HMAC 0x00000211 238 #define CKM_SHA_1 0x00000220 239 #define CKM_SHA_1_HMAC 0x00000221 240 #define CKM_SHA256 0x00000250 241 #define CKM_SHA256_HMAC 0x00000251 242 #define CKM_SHA224 0x00000255 243 #define CKM_SHA224_HMAC 0x00000256 244 #define CKM_SHA384 0x00000260 245 #define CKM_SHA384_HMAC 0x00000261 246 #define CKM_SHA512 0x00000270 247 #define CKM_SHA512_HMAC 0x00000271 248 #define CKM_GENERIC_SECRET_KEY_GEN 0x00000350 249 #define CKM_AES_KEY_GEN 0x00001080 250 #define CKM_AES_ECB 0x00001081 251 #define CKM_AES_CBC 0x00001082 252 #define CKM_AES_MAC 0x00001083 253 #define CKM_AES_CTR 0x00001086 254 #define CKM_VENDOR_DEFINED 0x80000000 255 #define CKMV_AES_CTR 0x80000001 256 257 #define CKMV_IMPLEMENTATION_DEFINED_0 0xC0000000 258 #define CKMV_IMPLEMENTATION_DEFINED_1 0xC0000001 259 #define CKMV_IMPLEMENTATION_DEFINED_2 0xC0000002 260 #define CKMV_IMPLEMENTATION_DEFINED_3 0xC0000003 261 #define CKMV_IMPLEMENTATION_DEFINED_4 0xC0000004 262 #define CKMV_IMPLEMENTATION_DEFINED_5 0xC0000005 263 #define CKMV_IMPLEMENTATION_DEFINED_6 0xC0000006 264 #define CKMV_IMPLEMENTATION_DEFINED_7 0xC0000007 265 #define CKMV_IMPLEMENTATION_DEFINED_8 0xC0000008 266 #define CKMV_IMPLEMENTATION_DEFINED_9 0xC0000009 267 #define CKMV_IMPLEMENTATION_DEFINED_10 0xC000000A 268 #define CKMV_IMPLEMENTATION_DEFINED_11 0xC000000B 269 #define CKMV_IMPLEMENTATION_DEFINED_12 0xC000000C 270 #define CKMV_IMPLEMENTATION_DEFINED_13 0xC000000D 271 #define CKMV_IMPLEMENTATION_DEFINED_14 0xC000000E 272 #define CKMV_IMPLEMENTATION_DEFINED_15 0xC000000F 273 274 typedef struct CK_MECHANISM 275 { 276 CK_MECHANISM_TYPE mechanism; 277 void* pParameter; 278 CK_ULONG ulParameterLen; /* in bytes */ 279 } 280 CK_MECHANISM, *CK_MECHANISM_PTR; 281 282 typedef CK_ULONG CK_RV; 283 284 #define CKR_OK 0x00000000 285 #define CKR_CANCEL 0x00000001 286 #define CKR_HOST_MEMORY 0x00000002 287 #define CKR_SLOT_ID_INVALID 0x00000003 288 #define CKR_GENERAL_ERROR 0x00000005 289 #define CKR_ARGUMENTS_BAD 0x00000007 290 #define CKR_ATTRIBUTE_SENSITIVE 0x00000011 291 #define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012 292 #define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013 293 #define CKR_COPY_PROHIBITED 0x0000001A 294 #define CKR_DATA_INVALID 0x00000020 295 #define CKR_DATA_LEN_RANGE 0x00000021 296 #define CKR_DEVICE_ERROR 0x00000030 297 #define CKR_DEVICE_MEMORY 0x00000031 298 #define CKR_ENCRYPTED_DATA_INVALID 0x00000040 299 #define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041 300 #define CKR_KEY_HANDLE_INVALID 0x00000060 301 #define CKR_KEY_SIZE_RANGE 0x00000062 302 #define CKR_KEY_TYPE_INCONSISTENT 0x00000063 303 #define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068 304 #define CKR_KEY_NOT_WRAPPABLE 0x00000069 305 #define CKR_MECHANISM_INVALID 0x00000070 306 #define CKR_MECHANISM_PARAM_INVALID 0x00000071 307 #define CKR_OBJECT_HANDLE_INVALID 0x00000082 308 #define CKR_OPERATION_ACTIVE 0x00000090 309 #define CKR_OPERATION_NOT_INITIALIZED 0x00000091 310 #define CKR_PIN_INCORRECT 0x000000A0 311 #define CKR_SESSION_COUNT 0x000000B1 312 #define CKR_SESSION_HANDLE_INVALID 0x000000B3 313 #define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4 314 #define CKR_SESSION_READ_ONLY 0x000000B5 315 #define CKR_SIGNATURE_INVALID 0x000000C0 316 #define CKR_SIGNATURE_LEN_RANGE 0x000000C1 317 #define CKR_TEMPLATE_INCOMPLETE 0x000000D0 318 #define CKR_TEMPLATE_INCONSISTENT 0x000000D1 319 #define CKR_TOKEN_NOT_PRESENT 0x000000E0 320 #define CKR_USER_ALREADY_LOGGED_IN 0x00000100 321 #define CKR_USER_NOT_LOGGED_IN 0x00000101 322 #define CKR_USER_TYPE_INVALID 0x00000103 323 #define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112 324 #define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113 325 #define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120 326 #define CKR_RANDOM_NO_RNG 0x00000121 327 #define CKR_BUFFER_TOO_SMALL 0x00000150 328 #define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190 329 #define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191 330 #define CKR_VENDOR_DEFINED 0x80000000 331 332 typedef CK_RV (*CK_NOTIFY)( 333 CK_SESSION_HANDLE hSession, 334 CK_NOTIFICATION event, 335 void* pApplication 336 ); 337 338 typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE, *CK_RSA_PKCS_MGF_TYPE_PTR; 339 340 #define CKG_MGF1_SHA1 0x00000001 341 #define CKG_MGF1_SHA256 0x00000002 342 #define CKG_MGF1_SHA384 0x00000003 343 #define CKG_MGF1_SHA512 0x00000004 344 #define CKG_MGF1_SHA224 0x00000005 345 346 typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE, *CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR; 347 348 #define CKZ_DATA_SPECIFIED 0x00000001 349 typedef struct CK_RSA_PKCS_OAEP_PARAMS 350 { 351 CK_MECHANISM_TYPE hashAlg; 352 CK_RSA_PKCS_MGF_TYPE mgf; 353 CK_RSA_PKCS_OAEP_SOURCE_TYPE source; 354 void* pSourceData; 355 CK_ULONG ulSourceDataLen; 356 } 357 CK_RSA_PKCS_OAEP_PARAMS, *CK_RSA_PKCS_OAEP_PARAMS_PTR; 358 359 typedef struct CK_RSA_PKCS_PSS_PARAMS 360 { 361 CK_MECHANISM_TYPE hashAlg; 362 CK_RSA_PKCS_MGF_TYPE mgf; 363 CK_ULONG sLen; 364 } 365 CK_RSA_PKCS_PSS_PARAMS, *CK_RSA_PKCS_PSS_PARAMS_PTR; 366 367 typedef struct CK_AES_CTR_PARAMS 368 { 369 CK_ULONG ulCounterBits; 370 CK_BYTE cb[16]; 371 } 372 CK_AES_CTR_PARAMS, *CK_AES_CTR_PARAMS_PTR; 373 374 /*------------------------------------------ 375 * Functions 376 *------------------------------------------*/ 377 CK_RV PKCS11_EXPORT C_Initialize(void* pInitArgs); 378 379 CK_RV PKCS11_EXPORT C_Finalize(void* pReserved); 380 381 CK_RV PKCS11_EXPORT C_GetInfo(CK_INFO* pInfo); 382 383 CK_RV PKCS11_EXPORT C_OpenSession( 384 CK_SLOT_ID slotID, 385 CK_FLAGS flags, 386 void* pApplication, 387 CK_NOTIFY Notify, 388 CK_SESSION_HANDLE* phSession); 389 390 CK_RV PKCS11_EXPORT C_CloseSession( 391 CK_SESSION_HANDLE hSession); 392 393 CK_RV PKCS11_EXPORT C_Login( 394 CK_SESSION_HANDLE hSession, 395 CK_USER_TYPE userType, 396 const CK_UTF8CHAR* pPin, 397 CK_ULONG ulPinLen); 398 399 CK_RV PKCS11_EXPORT C_Logout( 400 CK_SESSION_HANDLE hSession); 401 402 CK_RV PKCS11_EXPORT C_CreateObject( 403 CK_SESSION_HANDLE hSession, 404 const CK_ATTRIBUTE* pTemplate, 405 CK_ULONG ulCount, 406 CK_OBJECT_HANDLE* phObject); 407 408 CK_RV PKCS11_EXPORT C_DestroyObject( 409 CK_SESSION_HANDLE hSession, 410 CK_OBJECT_HANDLE hObject); 411 412 CK_RV PKCS11_EXPORT C_GetAttributeValue( 413 CK_SESSION_HANDLE hSession, 414 CK_OBJECT_HANDLE hObject, 415 CK_ATTRIBUTE* pTemplate, 416 CK_ULONG ulCount); 417 418 CK_RV PKCS11_EXPORT C_FindObjectsInit( 419 CK_SESSION_HANDLE hSession, 420 const CK_ATTRIBUTE* pTemplate, 421 CK_ULONG ulCount); 422 423 CK_RV PKCS11_EXPORT C_FindObjects( 424 CK_SESSION_HANDLE hSession, 425 CK_OBJECT_HANDLE* phObject, 426 CK_ULONG ulMaxObjectCount, 427 CK_ULONG* pulObjectCount); 428 429 CK_RV PKCS11_EXPORT C_FindObjectsFinal( 430 CK_SESSION_HANDLE hSession); 431 432 CK_RV PKCS11_EXPORT C_EncryptInit( 433 CK_SESSION_HANDLE hSession, 434 const CK_MECHANISM* pMechanism, 435 CK_OBJECT_HANDLE hKey); 436 437 CK_RV PKCS11_EXPORT C_Encrypt( 438 CK_SESSION_HANDLE hSession, 439 const CK_BYTE* pData, 440 CK_ULONG ulDataLen, 441 CK_BYTE* pEncryptedData, 442 CK_ULONG* pulEncryptedDataLen); 443 444 CK_RV PKCS11_EXPORT C_EncryptUpdate( 445 CK_SESSION_HANDLE hSession, 446 const CK_BYTE* pPart, 447 CK_ULONG ulPartLen, 448 CK_BYTE* pEncryptedPart, 449 CK_ULONG* pulEncryptedPartLen); 450 451 CK_RV PKCS11_EXPORT C_EncryptFinal( 452 CK_SESSION_HANDLE hSession, 453 CK_BYTE* pLastEncryptedPart, 454 CK_ULONG* pulLastEncryptedPartLen); 455 456 CK_RV PKCS11_EXPORT C_DecryptInit( 457 CK_SESSION_HANDLE hSession, 458 const CK_MECHANISM* pMechanism, 459 CK_OBJECT_HANDLE hKey); 460 461 CK_RV PKCS11_EXPORT C_Decrypt( 462 CK_SESSION_HANDLE hSession, 463 const CK_BYTE* pEncryptedData, 464 CK_ULONG ulEncryptedDataLen, 465 CK_BYTE* pData, 466 CK_ULONG* pulDataLen); 467 468 CK_RV PKCS11_EXPORT C_DecryptUpdate( 469 CK_SESSION_HANDLE hSession, 470 const CK_BYTE* pEncryptedPart, 471 CK_ULONG ulEncryptedPartLen, 472 CK_BYTE* pPart, 473 CK_ULONG* pulPartLen); 474 475 CK_RV PKCS11_EXPORT C_DecryptFinal( 476 CK_SESSION_HANDLE hSession, 477 CK_BYTE* pLastPart, 478 CK_ULONG* pulLastPartLen); 479 480 CK_RV PKCS11_EXPORT C_DigestInit( 481 CK_SESSION_HANDLE hSession, 482 const CK_MECHANISM* pMechanism); 483 484 CK_RV PKCS11_EXPORT C_Digest( 485 CK_SESSION_HANDLE hSession, 486 const CK_BYTE* pData, 487 CK_ULONG ulDataLen, 488 CK_BYTE* pDigest, 489 CK_ULONG* pulDigestLen); 490 491 CK_RV PKCS11_EXPORT C_DigestUpdate( 492 CK_SESSION_HANDLE hSession, 493 const CK_BYTE* pPart, 494 CK_ULONG ulPartLen); 495 496 CK_RV PKCS11_EXPORT C_DigestFinal( 497 CK_SESSION_HANDLE hSession, 498 CK_BYTE* pDigest, 499 CK_ULONG* pulDigestLen); 500 501 CK_RV PKCS11_EXPORT C_SignInit( 502 CK_SESSION_HANDLE hSession, 503 const CK_MECHANISM* pMechanism, 504 CK_OBJECT_HANDLE hKey); 505 506 CK_RV PKCS11_EXPORT C_Sign( 507 CK_SESSION_HANDLE hSession, 508 const CK_BYTE* pData, 509 CK_ULONG ulDataLen, 510 CK_BYTE* pSignature, 511 CK_ULONG* pulSignatureLen); 512 513 CK_RV PKCS11_EXPORT C_SignUpdate( 514 CK_SESSION_HANDLE hSession, 515 const CK_BYTE* pPart, 516 CK_ULONG ulPartLen); 517 518 CK_RV PKCS11_EXPORT C_SignFinal( 519 CK_SESSION_HANDLE hSession, 520 CK_BYTE* pSignature, 521 CK_ULONG* pulSignatureLen); 522 523 CK_RV PKCS11_EXPORT C_VerifyInit( 524 CK_SESSION_HANDLE hSession, 525 const CK_MECHANISM* pMechanism, 526 CK_OBJECT_HANDLE hKey); 527 528 CK_RV PKCS11_EXPORT C_Verify( 529 CK_SESSION_HANDLE hSession, 530 const CK_BYTE* pData, 531 CK_ULONG ulDataLen, 532 CK_BYTE* pSignature, 533 CK_ULONG ulSignatureLen); 534 535 CK_RV PKCS11_EXPORT C_VerifyUpdate( 536 CK_SESSION_HANDLE hSession, 537 const CK_BYTE* pPart, 538 CK_ULONG ulPartLen); 539 540 CK_RV PKCS11_EXPORT C_VerifyFinal( 541 CK_SESSION_HANDLE hSession, 542 const CK_BYTE* pSignature, 543 CK_ULONG ulSignatureLen); 544 545 CK_RV PKCS11_EXPORT C_GenerateKey( 546 CK_SESSION_HANDLE hSession, 547 const CK_MECHANISM* pMechanism, 548 const CK_ATTRIBUTE* pTemplate, 549 CK_ULONG ulCount, 550 CK_OBJECT_HANDLE* phKey); 551 552 CK_RV PKCS11_EXPORT C_GenerateKeyPair( 553 CK_SESSION_HANDLE hSession, 554 const CK_MECHANISM* pMechanism, 555 const CK_ATTRIBUTE* pPublicKeyTemplate, 556 CK_ULONG ulPublicKeyAttributeCount, 557 const CK_ATTRIBUTE* pPrivateKeyTemplate, 558 CK_ULONG ulPrivateKeyAttributeCount, 559 CK_OBJECT_HANDLE* phPublicKey, 560 CK_OBJECT_HANDLE* phPrivateKey); 561 562 CK_RV PKCS11_EXPORT C_DeriveKey( 563 CK_SESSION_HANDLE hSession, 564 const CK_MECHANISM* pMechanism, 565 CK_OBJECT_HANDLE hBaseKey, 566 const CK_ATTRIBUTE* pTemplate, 567 CK_ULONG ulAttributeCount, 568 CK_OBJECT_HANDLE* phKey); 569 570 CK_RV PKCS11_EXPORT C_SeedRandom( 571 CK_SESSION_HANDLE hSession, 572 const CK_BYTE* pSeed, 573 CK_ULONG ulSeedLen); 574 575 CK_RV PKCS11_EXPORT C_GenerateRandom( 576 CK_SESSION_HANDLE hSession, 577 CK_BYTE* pRandomData, 578 CK_ULONG ulRandomLen); 579 580 CK_RV PKCS11_EXPORT C_CloseObjectHandle( 581 CK_SESSION_HANDLE hSession, 582 CK_OBJECT_HANDLE hObject); 583 584 CK_RV PKCS11_EXPORT C_CopyObject( 585 CK_SESSION_HANDLE hSession, 586 CK_OBJECT_HANDLE hObject, 587 const CK_ATTRIBUTE* pTemplate, 588 CK_ULONG ulAttributeCount, 589 CK_OBJECT_HANDLE* phNewObject); 590 591 #ifdef __cplusplus 592 } 593 #endif 594 595 #endif /* __PKCS11_H__ */ 596