blob: 8f28917f6eb7843a4e4aaec613d25aa5d3120f35 [file] [log] [blame]
Jean-Baptiste Querucad88442013-02-13 11:20:54 -08001/**
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
41extern "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
63typedef uint8_t CK_BYTE, *CK_BYTE_PTR;
64typedef CK_BYTE CK_CHAR, *CK_CHAR_PTR;
65typedef CK_BYTE CK_UTF8CHAR, *CK_UTF8CHAR_PTR;
66typedef bool CK_BBOOL;
67typedef uint32_t CK_ULONG, *CK_ULONG_PTR;
68typedef int32_t CK_LONG;
69typedef CK_ULONG CK_FLAGS;
70typedef void* CK_VOID_PTR, *CK_VOID_PTR_PTR;
71
72#define CK_INVALID_HANDLE 0
73
74typedef struct CK_VERSION
75{
76 CK_BYTE major;
77 CK_BYTE minor;
78}
79CK_VERSION, *CK_VERSION_PTR;
80
81typedef 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}
89CK_INFO, *CK_INFO_PTR;
90
91typedef CK_ULONG CK_NOTIFICATION;
92typedef CK_ULONG CK_SLOT_ID, *CK_SLOT_ID_PTR;
93typedef CK_ULONG CK_SESSION_HANDLE, *CK_SESSION_HANDLE_PTR;
94
95typedef CK_ULONG CK_USER_TYPE;
96#define CKU_SO 0
97#define CKU_USER 1
98#define CKU_CONTEXT_SPECIFIC 2
99
100typedef 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
107typedef struct CK_SESSION_INFO
108{
109 CK_SLOT_ID slotID;
110 CK_STATE state;
111 CK_FLAGS flags;
112 CK_ULONG ulDeviceError;
113}
114CK_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
120typedef CK_ULONG CK_OBJECT_HANDLE, *CK_OBJECT_HANDLE_PTR;
121
122typedef 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
129typedef 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
147typedef 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
194typedef struct CK_ATTRIBUTE
195{
196 CK_ATTRIBUTE_TYPE type;
197 void* pValue;
198 CK_ULONG ulValueLen;
199}
200CK_ATTRIBUTE, *CK_ATTRIBUTE_PTR;
201
202typedef 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
274typedef struct CK_MECHANISM
275{
276 CK_MECHANISM_TYPE mechanism;
277 void* pParameter;
278 CK_ULONG ulParameterLen; /* in bytes */
279}
280CK_MECHANISM, *CK_MECHANISM_PTR;
281
282typedef 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
332typedef CK_RV (*CK_NOTIFY)(
333 CK_SESSION_HANDLE hSession,
334 CK_NOTIFICATION event,
335 void* pApplication
336);
337
338typedef 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
346typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE, *CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR;
347
348#define CKZ_DATA_SPECIFIED 0x00000001
349typedef 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}
357CK_RSA_PKCS_OAEP_PARAMS, *CK_RSA_PKCS_OAEP_PARAMS_PTR;
358
359typedef struct CK_RSA_PKCS_PSS_PARAMS
360{
361 CK_MECHANISM_TYPE hashAlg;
362 CK_RSA_PKCS_MGF_TYPE mgf;
363 CK_ULONG sLen;
364}
365CK_RSA_PKCS_PSS_PARAMS, *CK_RSA_PKCS_PSS_PARAMS_PTR;
366
367typedef struct CK_AES_CTR_PARAMS
368{
369 CK_ULONG ulCounterBits;
370 CK_BYTE cb[16];
371}
372CK_AES_CTR_PARAMS, *CK_AES_CTR_PARAMS_PTR;
373
374/*------------------------------------------
375* Functions
376*------------------------------------------*/
377CK_RV PKCS11_EXPORT C_Initialize(void* pInitArgs);
378
379CK_RV PKCS11_EXPORT C_Finalize(void* pReserved);
380
381CK_RV PKCS11_EXPORT C_GetInfo(CK_INFO* pInfo);
382
383CK_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
390CK_RV PKCS11_EXPORT C_CloseSession(
391 CK_SESSION_HANDLE hSession);
392
393CK_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
399CK_RV PKCS11_EXPORT C_Logout(
400 CK_SESSION_HANDLE hSession);
401
402CK_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
408CK_RV PKCS11_EXPORT C_DestroyObject(
409 CK_SESSION_HANDLE hSession,
410 CK_OBJECT_HANDLE hObject);
411
412CK_RV PKCS11_EXPORT C_GetAttributeValue(
413 CK_SESSION_HANDLE hSession,
414 CK_OBJECT_HANDLE hObject,
415 CK_ATTRIBUTE* pTemplate,
416 CK_ULONG ulCount);
417
418CK_RV PKCS11_EXPORT C_FindObjectsInit(
419 CK_SESSION_HANDLE hSession,
420 const CK_ATTRIBUTE* pTemplate,
421 CK_ULONG ulCount);
422
423CK_RV PKCS11_EXPORT C_FindObjects(
424 CK_SESSION_HANDLE hSession,
425 CK_OBJECT_HANDLE* phObject,
426 CK_ULONG ulMaxObjectCount,
427 CK_ULONG* pulObjectCount);
428
429CK_RV PKCS11_EXPORT C_FindObjectsFinal(
430 CK_SESSION_HANDLE hSession);
431
432CK_RV PKCS11_EXPORT C_EncryptInit(
433 CK_SESSION_HANDLE hSession,
434 const CK_MECHANISM* pMechanism,
435 CK_OBJECT_HANDLE hKey);
436
437CK_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
444CK_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
451CK_RV PKCS11_EXPORT C_EncryptFinal(
452 CK_SESSION_HANDLE hSession,
453 CK_BYTE* pLastEncryptedPart,
454 CK_ULONG* pulLastEncryptedPartLen);
455
456CK_RV PKCS11_EXPORT C_DecryptInit(
457 CK_SESSION_HANDLE hSession,
458 const CK_MECHANISM* pMechanism,
459 CK_OBJECT_HANDLE hKey);
460
461CK_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
468CK_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
475CK_RV PKCS11_EXPORT C_DecryptFinal(
476 CK_SESSION_HANDLE hSession,
477 CK_BYTE* pLastPart,
478 CK_ULONG* pulLastPartLen);
479
480CK_RV PKCS11_EXPORT C_DigestInit(
481 CK_SESSION_HANDLE hSession,
482 const CK_MECHANISM* pMechanism);
483
484CK_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
491CK_RV PKCS11_EXPORT C_DigestUpdate(
492 CK_SESSION_HANDLE hSession,
493 const CK_BYTE* pPart,
494 CK_ULONG ulPartLen);
495
496CK_RV PKCS11_EXPORT C_DigestFinal(
497 CK_SESSION_HANDLE hSession,
498 CK_BYTE* pDigest,
499 CK_ULONG* pulDigestLen);
500
501CK_RV PKCS11_EXPORT C_SignInit(
502 CK_SESSION_HANDLE hSession,
503 const CK_MECHANISM* pMechanism,
504 CK_OBJECT_HANDLE hKey);
505
506CK_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
513CK_RV PKCS11_EXPORT C_SignUpdate(
514 CK_SESSION_HANDLE hSession,
515 const CK_BYTE* pPart,
516 CK_ULONG ulPartLen);
517
518CK_RV PKCS11_EXPORT C_SignFinal(
519 CK_SESSION_HANDLE hSession,
520 CK_BYTE* pSignature,
521 CK_ULONG* pulSignatureLen);
522
523CK_RV PKCS11_EXPORT C_VerifyInit(
524 CK_SESSION_HANDLE hSession,
525 const CK_MECHANISM* pMechanism,
526 CK_OBJECT_HANDLE hKey);
527
528CK_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
535CK_RV PKCS11_EXPORT C_VerifyUpdate(
536 CK_SESSION_HANDLE hSession,
537 const CK_BYTE* pPart,
538 CK_ULONG ulPartLen);
539
540CK_RV PKCS11_EXPORT C_VerifyFinal(
541 CK_SESSION_HANDLE hSession,
542 const CK_BYTE* pSignature,
543 CK_ULONG ulSignatureLen);
544
545CK_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
552CK_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
562CK_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
570CK_RV PKCS11_EXPORT C_SeedRandom(
571 CK_SESSION_HANDLE hSession,
572 const CK_BYTE* pSeed,
573 CK_ULONG ulSeedLen);
574
575CK_RV PKCS11_EXPORT C_GenerateRandom(
576 CK_SESSION_HANDLE hSession,
577 CK_BYTE* pRandomData,
578 CK_ULONG ulRandomLen);
579
580CK_RV PKCS11_EXPORT C_CloseObjectHandle(
581 CK_SESSION_HANDLE hSession,
582 CK_OBJECT_HANDLE hObject);
583
584CK_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__ */