FreeRTOS: PKCS11
PKCS11 Cryptoki Library
Return to main page ↑
pkcs11f.h
1 /* Copyright (c) OASIS Open 2016. All Rights Reserved./
2  * /Distributed under the terms of the OASIS IPR Policy,
3  * [http://www.oasis-open.org/policies-guidelines/ipr], AS-IS, WITHOUT ANY
4  * IMPLIED OR EXPRESS WARRANTY; there is no warranty of MERCHANTABILITY, FITNESS FOR A
5  * PARTICULAR PURPOSE or NONINFRINGEMENT of the rights of others.
6  */
7 
8 /* Latest version of the specification:
9  * http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html
10  */
11 
12 /* This header file contains pretty much everything about all the
13  * Cryptoki function prototypes. Because this information is
14  * used for more than just declaring function prototypes, the
15  * order of the functions appearing herein is important, and
16  * should not be altered.
17  */
18 
19 /* General-purpose */
20 
21 /* C_Initialize initializes the Cryptoki library. */
22 CK_PKCS11_FUNCTION_INFO(C_Initialize)
23 #ifdef CK_NEED_ARG_LIST
24 (
25  CK_VOID_PTR pInitArgs /* if this is not NULL_PTR, it gets
26  * cast to CK_C_INITIALIZE_ARGS_PTR
27  * and dereferenced
28  */
29 );
30 #endif
31 
32 
33 /* C_Finalize indicates that an application is done with the
34  * Cryptoki library.
35  */
36 CK_PKCS11_FUNCTION_INFO(C_Finalize)
37 #ifdef CK_NEED_ARG_LIST
38 (
39  CK_VOID_PTR pReserved /* reserved. Should be NULL_PTR */
40 );
41 #endif
42 
43 
44 /* C_GetInfo returns general information about Cryptoki. */
45 CK_PKCS11_FUNCTION_INFO(C_GetInfo)
46 #ifdef CK_NEED_ARG_LIST
47 (
48  CK_INFO_PTR pInfo /* location that receives information */
49 );
50 #endif
51 
52 
53 /* C_GetFunctionList returns the function list. */
54 CK_PKCS11_FUNCTION_INFO(C_GetFunctionList)
55 #ifdef CK_NEED_ARG_LIST
56 (
57  CK_FUNCTION_LIST_PTR_PTR ppFunctionList /* receives pointer to
58  * function list
59  */
60 );
61 #endif
62 
63 
64 
65 /* Slot and token management */
66 
67 /* C_GetSlotList obtains a list of slots in the system. */
68 CK_PKCS11_FUNCTION_INFO(C_GetSlotList)
69 #ifdef CK_NEED_ARG_LIST
70 (
71  CK_BBOOL tokenPresent, /* only slots with tokens */
72  CK_SLOT_ID_PTR pSlotList, /* receives array of slot IDs */
73  CK_ULONG_PTR pulCount /* receives number of slots */
74 );
75 #endif
76 
77 
78 /* C_GetSlotInfo obtains information about a particular slot in
79  * the system.
80  */
81 CK_PKCS11_FUNCTION_INFO(C_GetSlotInfo)
82 #ifdef CK_NEED_ARG_LIST
83 (
84  CK_SLOT_ID slotID, /* the ID of the slot */
85  CK_SLOT_INFO_PTR pInfo /* receives the slot information */
86 );
87 #endif
88 
89 
90 /* C_GetTokenInfo obtains information about a particular token
91  * in the system.
92  */
93 CK_PKCS11_FUNCTION_INFO(C_GetTokenInfo)
94 #ifdef CK_NEED_ARG_LIST
95 (
96  CK_SLOT_ID slotID, /* ID of the token's slot */
97  CK_TOKEN_INFO_PTR pInfo /* receives the token information */
98 );
99 #endif
100 
101 
102 /* C_GetMechanismList obtains a list of mechanism types
103  * supported by a token.
104  */
105 CK_PKCS11_FUNCTION_INFO(C_GetMechanismList)
106 #ifdef CK_NEED_ARG_LIST
107 (
108  CK_SLOT_ID slotID, /* ID of token's slot */
109  CK_MECHANISM_TYPE_PTR pMechanismList, /* gets mech. array */
110  CK_ULONG_PTR pulCount /* gets # of mechs. */
111 );
112 #endif
113 
114 
115 /* C_GetMechanismInfo obtains information about a particular
116  * mechanism possibly supported by a token.
117  */
118 CK_PKCS11_FUNCTION_INFO(C_GetMechanismInfo)
119 #ifdef CK_NEED_ARG_LIST
120 (
121  CK_SLOT_ID slotID, /* ID of the token's slot */
122  CK_MECHANISM_TYPE type, /* type of mechanism */
123  CK_MECHANISM_INFO_PTR pInfo /* receives mechanism info */
124 );
125 #endif
126 
127 
128 /* C_InitToken initializes a token. */
129 CK_PKCS11_FUNCTION_INFO(C_InitToken)
130 #ifdef CK_NEED_ARG_LIST
131 (
132  CK_SLOT_ID slotID, /* ID of the token's slot */
133  CK_UTF8CHAR_PTR pPin, /* the SO's initial PIN */
134  CK_ULONG ulPinLen, /* length in bytes of the PIN */
135  CK_UTF8CHAR_PTR pLabel /* 32-byte token label (blank padded) */
136 );
137 #endif
138 
139 
140 /* C_InitPIN initializes the normal user's PIN. */
141 CK_PKCS11_FUNCTION_INFO(C_InitPIN)
142 #ifdef CK_NEED_ARG_LIST
143 (
144  CK_SESSION_HANDLE hSession, /* the session's handle */
145  CK_UTF8CHAR_PTR pPin, /* the normal user's PIN */
146  CK_ULONG ulPinLen /* length in bytes of the PIN */
147 );
148 #endif
149 
150 
151 /* C_SetPIN modifies the PIN of the user who is logged in. */
152 CK_PKCS11_FUNCTION_INFO(C_SetPIN)
153 #ifdef CK_NEED_ARG_LIST
154 (
155  CK_SESSION_HANDLE hSession, /* the session's handle */
156  CK_UTF8CHAR_PTR pOldPin, /* the old PIN */
157  CK_ULONG ulOldLen, /* length of the old PIN */
158  CK_UTF8CHAR_PTR pNewPin, /* the new PIN */
159  CK_ULONG ulNewLen /* length of the new PIN */
160 );
161 #endif
162 
163 
164 
165 /* Session management */
166 
167 /* C_OpenSession opens a session between an application and a
168  * token.
169  */
170 CK_PKCS11_FUNCTION_INFO(C_OpenSession)
171 #ifdef CK_NEED_ARG_LIST
172 (
173  CK_SLOT_ID slotID, /* the slot's ID */
174  CK_FLAGS flags, /* from CK_SESSION_INFO */
175  CK_VOID_PTR pApplication, /* passed to callback */
176  CK_NOTIFY Notify, /* callback function */
177  CK_SESSION_HANDLE_PTR phSession /* gets session handle */
178 );
179 #endif
180 
181 
182 /* C_CloseSession closes a session between an application and a
183  * token.
184  */
185 CK_PKCS11_FUNCTION_INFO(C_CloseSession)
186 #ifdef CK_NEED_ARG_LIST
187 (
188  CK_SESSION_HANDLE hSession /* the session's handle */
189 );
190 #endif
191 
192 
193 /* C_CloseAllSessions closes all sessions with a token. */
194 CK_PKCS11_FUNCTION_INFO(C_CloseAllSessions)
195 #ifdef CK_NEED_ARG_LIST
196 (
197  CK_SLOT_ID slotID /* the token's slot */
198 );
199 #endif
200 
201 
202 /* C_GetSessionInfo obtains information about the session. */
203 CK_PKCS11_FUNCTION_INFO(C_GetSessionInfo)
204 #ifdef CK_NEED_ARG_LIST
205 (
206  CK_SESSION_HANDLE hSession, /* the session's handle */
207  CK_SESSION_INFO_PTR pInfo /* receives session info */
208 );
209 #endif
210 
211 
212 /* C_GetOperationState obtains the state of the cryptographic operation
213  * in a session.
214  */
215 CK_PKCS11_FUNCTION_INFO(C_GetOperationState)
216 #ifdef CK_NEED_ARG_LIST
217 (
218  CK_SESSION_HANDLE hSession, /* session's handle */
219  CK_BYTE_PTR pOperationState, /* gets state */
220  CK_ULONG_PTR pulOperationStateLen /* gets state length */
221 );
222 #endif
223 
224 
225 /* C_SetOperationState restores the state of the cryptographic
226  * operation in a session.
227  */
228 CK_PKCS11_FUNCTION_INFO(C_SetOperationState)
229 #ifdef CK_NEED_ARG_LIST
230 (
231  CK_SESSION_HANDLE hSession, /* session's handle */
232  CK_BYTE_PTR pOperationState, /* holds state */
233  CK_ULONG ulOperationStateLen, /* holds state length */
234  CK_OBJECT_HANDLE hEncryptionKey, /* en/decryption key */
235  CK_OBJECT_HANDLE hAuthenticationKey /* sign/verify key */
236 );
237 #endif
238 
239 
240 /* C_Login logs a user into a token. */
241 CK_PKCS11_FUNCTION_INFO(C_Login)
242 #ifdef CK_NEED_ARG_LIST
243 (
244  CK_SESSION_HANDLE hSession, /* the session's handle */
245  CK_USER_TYPE userType, /* the user type */
246  CK_UTF8CHAR_PTR pPin, /* the user's PIN */
247  CK_ULONG ulPinLen /* the length of the PIN */
248 );
249 #endif
250 
251 
252 /* C_Logout logs a user out from a token. */
253 CK_PKCS11_FUNCTION_INFO(C_Logout)
254 #ifdef CK_NEED_ARG_LIST
255 (
256  CK_SESSION_HANDLE hSession /* the session's handle */
257 );
258 #endif
259 
260 
261 
262 /* Object management */
263 
264 /* C_CreateObject creates a new object. */
265 CK_PKCS11_FUNCTION_INFO(C_CreateObject)
266 #ifdef CK_NEED_ARG_LIST
267 (
268  CK_SESSION_HANDLE hSession, /* the session's handle */
269  CK_ATTRIBUTE_PTR pTemplate, /* the object's template */
270  CK_ULONG ulCount, /* attributes in template */
271  CK_OBJECT_HANDLE_PTR phObject /* gets new object's handle. */
272 );
273 #endif
274 
275 
276 /* C_CopyObject copies an object, creating a new object for the
277  * copy.
278  */
279 CK_PKCS11_FUNCTION_INFO(C_CopyObject)
280 #ifdef CK_NEED_ARG_LIST
281 (
282  CK_SESSION_HANDLE hSession, /* the session's handle */
283  CK_OBJECT_HANDLE hObject, /* the object's handle */
284  CK_ATTRIBUTE_PTR pTemplate, /* template for new object */
285  CK_ULONG ulCount, /* attributes in template */
286  CK_OBJECT_HANDLE_PTR phNewObject /* receives handle of copy */
287 );
288 #endif
289 
290 
291 /* C_DestroyObject destroys an object. */
292 CK_PKCS11_FUNCTION_INFO(C_DestroyObject)
293 #ifdef CK_NEED_ARG_LIST
294 (
295  CK_SESSION_HANDLE hSession, /* the session's handle */
296  CK_OBJECT_HANDLE hObject /* the object's handle */
297 );
298 #endif
299 
300 
301 /* C_GetObjectSize gets the size of an object in bytes. */
302 CK_PKCS11_FUNCTION_INFO(C_GetObjectSize)
303 #ifdef CK_NEED_ARG_LIST
304 (
305  CK_SESSION_HANDLE hSession, /* the session's handle */
306  CK_OBJECT_HANDLE hObject, /* the object's handle */
307  CK_ULONG_PTR pulSize /* receives size of object */
308 );
309 #endif
310 
311 
312 /* C_GetAttributeValue obtains the value of one or more object
313  * attributes.
314  */
315 CK_PKCS11_FUNCTION_INFO(C_GetAttributeValue)
316 #ifdef CK_NEED_ARG_LIST
317 (
318  CK_SESSION_HANDLE hSession, /* the session's handle */
319  CK_OBJECT_HANDLE hObject, /* the object's handle */
320  CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs; gets vals */
321  CK_ULONG ulCount /* attributes in template */
322 );
323 #endif
324 
325 
326 /* C_SetAttributeValue modifies the value of one or more object
327  * attributes.
328  */
329 CK_PKCS11_FUNCTION_INFO(C_SetAttributeValue)
330 #ifdef CK_NEED_ARG_LIST
331 (
332  CK_SESSION_HANDLE hSession, /* the session's handle */
333  CK_OBJECT_HANDLE hObject, /* the object's handle */
334  CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs and values */
335  CK_ULONG ulCount /* attributes in template */
336 );
337 #endif
338 
339 
340 /* C_FindObjectsInit initializes a search for token and session
341  * objects that match a template.
342  */
343 CK_PKCS11_FUNCTION_INFO(C_FindObjectsInit)
344 #ifdef CK_NEED_ARG_LIST
345 (
346  CK_SESSION_HANDLE hSession, /* the session's handle */
347  CK_ATTRIBUTE_PTR pTemplate, /* attribute values to match */
348  CK_ULONG ulCount /* attrs in search template */
349 );
350 #endif
351 
352 
353 /* C_FindObjects continues a search for token and session
354  * objects that match a template, obtaining additional object
355  * handles.
356  */
357 CK_PKCS11_FUNCTION_INFO(C_FindObjects)
358 #ifdef CK_NEED_ARG_LIST
359 (
360  CK_SESSION_HANDLE hSession, /* session's handle */
361  CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */
362  CK_ULONG ulMaxObjectCount, /* max handles to get */
363  CK_ULONG_PTR pulObjectCount /* actual # returned */
364 );
365 #endif
366 
367 
368 /* C_FindObjectsFinal finishes a search for token and session
369  * objects.
370  */
371 CK_PKCS11_FUNCTION_INFO(C_FindObjectsFinal)
372 #ifdef CK_NEED_ARG_LIST
373 (
374  CK_SESSION_HANDLE hSession /* the session's handle */
375 );
376 #endif
377 
378 
379 
380 /* Encryption and decryption */
381 
382 /* C_EncryptInit initializes an encryption operation. */
383 CK_PKCS11_FUNCTION_INFO(C_EncryptInit)
384 #ifdef CK_NEED_ARG_LIST
385 (
386  CK_SESSION_HANDLE hSession, /* the session's handle */
387  CK_MECHANISM_PTR pMechanism, /* the encryption mechanism */
388  CK_OBJECT_HANDLE hKey /* handle of encryption key */
389 );
390 #endif
391 
392 
393 /* C_Encrypt encrypts single-part data. */
394 CK_PKCS11_FUNCTION_INFO(C_Encrypt)
395 #ifdef CK_NEED_ARG_LIST
396 (
397  CK_SESSION_HANDLE hSession, /* session's handle */
398  CK_BYTE_PTR pData, /* the plaintext data */
399  CK_ULONG ulDataLen, /* bytes of plaintext */
400  CK_BYTE_PTR pEncryptedData, /* gets ciphertext */
401  CK_ULONG_PTR pulEncryptedDataLen /* gets c-text size */
402 );
403 #endif
404 
405 
406 /* C_EncryptUpdate continues a multiple-part encryption
407  * operation.
408  */
409 CK_PKCS11_FUNCTION_INFO(C_EncryptUpdate)
410 #ifdef CK_NEED_ARG_LIST
411 (
412  CK_SESSION_HANDLE hSession, /* session's handle */
413  CK_BYTE_PTR pPart, /* the plaintext data */
414  CK_ULONG ulPartLen, /* plaintext data len */
415  CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */
416  CK_ULONG_PTR pulEncryptedPartLen /* gets c-text size */
417 );
418 #endif
419 
420 
421 /* C_EncryptFinal finishes a multiple-part encryption
422  * operation.
423  */
424 CK_PKCS11_FUNCTION_INFO(C_EncryptFinal)
425 #ifdef CK_NEED_ARG_LIST
426 (
427  CK_SESSION_HANDLE hSession, /* session handle */
428  CK_BYTE_PTR pLastEncryptedPart, /* last c-text */
429  CK_ULONG_PTR pulLastEncryptedPartLen /* gets last size */
430 );
431 #endif
432 
433 
434 /* C_DecryptInit initializes a decryption operation. */
435 CK_PKCS11_FUNCTION_INFO(C_DecryptInit)
436 #ifdef CK_NEED_ARG_LIST
437 (
438  CK_SESSION_HANDLE hSession, /* the session's handle */
439  CK_MECHANISM_PTR pMechanism, /* the decryption mechanism */
440  CK_OBJECT_HANDLE hKey /* handle of decryption key */
441 );
442 #endif
443 
444 
445 /* C_Decrypt decrypts encrypted data in a single part. */
446 CK_PKCS11_FUNCTION_INFO(C_Decrypt)
447 #ifdef CK_NEED_ARG_LIST
448 (
449  CK_SESSION_HANDLE hSession, /* session's handle */
450  CK_BYTE_PTR pEncryptedData, /* ciphertext */
451  CK_ULONG ulEncryptedDataLen, /* ciphertext length */
452  CK_BYTE_PTR pData, /* gets plaintext */
453  CK_ULONG_PTR pulDataLen /* gets p-text size */
454 );
455 #endif
456 
457 
458 /* C_DecryptUpdate continues a multiple-part decryption
459  * operation.
460  */
461 CK_PKCS11_FUNCTION_INFO(C_DecryptUpdate)
462 #ifdef CK_NEED_ARG_LIST
463 (
464  CK_SESSION_HANDLE hSession, /* session's handle */
465  CK_BYTE_PTR pEncryptedPart, /* encrypted data */
466  CK_ULONG ulEncryptedPartLen, /* input length */
467  CK_BYTE_PTR pPart, /* gets plaintext */
468  CK_ULONG_PTR pulPartLen /* p-text size */
469 );
470 #endif
471 
472 
473 /* C_DecryptFinal finishes a multiple-part decryption
474  * operation.
475  */
476 CK_PKCS11_FUNCTION_INFO(C_DecryptFinal)
477 #ifdef CK_NEED_ARG_LIST
478 (
479  CK_SESSION_HANDLE hSession, /* the session's handle */
480  CK_BYTE_PTR pLastPart, /* gets plaintext */
481  CK_ULONG_PTR pulLastPartLen /* p-text size */
482 );
483 #endif
484 
485 
486 
487 /* Message digesting */
488 
489 /* C_DigestInit initializes a message-digesting operation. */
490 CK_PKCS11_FUNCTION_INFO(C_DigestInit)
491 #ifdef CK_NEED_ARG_LIST
492 (
493  CK_SESSION_HANDLE hSession, /* the session's handle */
494  CK_MECHANISM_PTR pMechanism /* the digesting mechanism */
495 );
496 #endif
497 
498 
499 /* C_Digest digests data in a single part. */
500 CK_PKCS11_FUNCTION_INFO(C_Digest)
501 #ifdef CK_NEED_ARG_LIST
502 (
503  CK_SESSION_HANDLE hSession, /* the session's handle */
504  CK_BYTE_PTR pData, /* data to be digested */
505  CK_ULONG ulDataLen, /* bytes of data to digest */
506  CK_BYTE_PTR pDigest, /* gets the message digest */
507  CK_ULONG_PTR pulDigestLen /* gets digest length */
508 );
509 #endif
510 
511 
512 /* C_DigestUpdate continues a multiple-part message-digesting
513  * operation.
514  */
515 CK_PKCS11_FUNCTION_INFO(C_DigestUpdate)
516 #ifdef CK_NEED_ARG_LIST
517 (
518  CK_SESSION_HANDLE hSession, /* the session's handle */
519  CK_BYTE_PTR pPart, /* data to be digested */
520  CK_ULONG ulPartLen /* bytes of data to be digested */
521 );
522 #endif
523 
524 
525 /* C_DigestKey continues a multi-part message-digesting
526  * operation, by digesting the value of a secret key as part of
527  * the data already digested.
528  */
529 CK_PKCS11_FUNCTION_INFO(C_DigestKey)
530 #ifdef CK_NEED_ARG_LIST
531 (
532  CK_SESSION_HANDLE hSession, /* the session's handle */
533  CK_OBJECT_HANDLE hKey /* secret key to digest */
534 );
535 #endif
536 
537 
538 /* C_DigestFinal finishes a multiple-part message-digesting
539  * operation.
540  */
541 CK_PKCS11_FUNCTION_INFO(C_DigestFinal)
542 #ifdef CK_NEED_ARG_LIST
543 (
544  CK_SESSION_HANDLE hSession, /* the session's handle */
545  CK_BYTE_PTR pDigest, /* gets the message digest */
546  CK_ULONG_PTR pulDigestLen /* gets byte count of digest */
547 );
548 #endif
549 
550 
551 
552 /* Signing and MACing */
553 
554 /* C_SignInit initializes a signature (private key encryption)
555  * operation, where the signature is (will be) an appendix to
556  * the data, and plaintext cannot be recovered from the
557  * signature.
558  */
559 CK_PKCS11_FUNCTION_INFO(C_SignInit)
560 #ifdef CK_NEED_ARG_LIST
561 (
562  CK_SESSION_HANDLE hSession, /* the session's handle */
563  CK_MECHANISM_PTR pMechanism, /* the signature mechanism */
564  CK_OBJECT_HANDLE hKey /* handle of signature key */
565 );
566 #endif
567 
568 
569 /* C_Sign signs (encrypts with private key) data in a single
570  * part, where the signature is (will be) an appendix to the
571  * data, and plaintext cannot be recovered from the signature.
572  */
573 CK_PKCS11_FUNCTION_INFO(C_Sign)
574 #ifdef CK_NEED_ARG_LIST
575 (
576  CK_SESSION_HANDLE hSession, /* the session's handle */
577  CK_BYTE_PTR pData, /* the data to sign */
578  CK_ULONG ulDataLen, /* count of bytes to sign */
579  CK_BYTE_PTR pSignature, /* gets the signature */
580  CK_ULONG_PTR pulSignatureLen /* gets signature length */
581 );
582 #endif
583 
584 
585 /* C_SignUpdate continues a multiple-part signature operation,
586  * where the signature is (will be) an appendix to the data,
587  * and plaintext cannot be recovered from the signature.
588  */
589 CK_PKCS11_FUNCTION_INFO(C_SignUpdate)
590 #ifdef CK_NEED_ARG_LIST
591 (
592  CK_SESSION_HANDLE hSession, /* the session's handle */
593  CK_BYTE_PTR pPart, /* the data to sign */
594  CK_ULONG ulPartLen /* count of bytes to sign */
595 );
596 #endif
597 
598 
599 /* C_SignFinal finishes a multiple-part signature operation,
600  * returning the signature.
601  */
602 CK_PKCS11_FUNCTION_INFO(C_SignFinal)
603 #ifdef CK_NEED_ARG_LIST
604 (
605  CK_SESSION_HANDLE hSession, /* the session's handle */
606  CK_BYTE_PTR pSignature, /* gets the signature */
607  CK_ULONG_PTR pulSignatureLen /* gets signature length */
608 );
609 #endif
610 
611 
612 /* C_SignRecoverInit initializes a signature operation, where
613  * the data can be recovered from the signature.
614  */
615 CK_PKCS11_FUNCTION_INFO(C_SignRecoverInit)
616 #ifdef CK_NEED_ARG_LIST
617 (
618  CK_SESSION_HANDLE hSession, /* the session's handle */
619  CK_MECHANISM_PTR pMechanism, /* the signature mechanism */
620  CK_OBJECT_HANDLE hKey /* handle of the signature key */
621 );
622 #endif
623 
624 
625 /* C_SignRecover signs data in a single operation, where the
626  * data can be recovered from the signature.
627  */
628 CK_PKCS11_FUNCTION_INFO(C_SignRecover)
629 #ifdef CK_NEED_ARG_LIST
630 (
631  CK_SESSION_HANDLE hSession, /* the session's handle */
632  CK_BYTE_PTR pData, /* the data to sign */
633  CK_ULONG ulDataLen, /* count of bytes to sign */
634  CK_BYTE_PTR pSignature, /* gets the signature */
635  CK_ULONG_PTR pulSignatureLen /* gets signature length */
636 );
637 #endif
638 
639 
640 
641 /* Verifying signatures and MACs */
642 
643 /* C_VerifyInit initializes a verification operation, where the
644  * signature is an appendix to the data, and plaintext cannot
645  * cannot be recovered from the signature (e.g. DSA).
646  */
647 CK_PKCS11_FUNCTION_INFO(C_VerifyInit)
648 #ifdef CK_NEED_ARG_LIST
649 (
650  CK_SESSION_HANDLE hSession, /* the session's handle */
651  CK_MECHANISM_PTR pMechanism, /* the verification mechanism */
652  CK_OBJECT_HANDLE hKey /* verification key */
653 );
654 #endif
655 
656 
657 /* C_Verify verifies a signature in a single-part operation,
658  * where the signature is an appendix to the data, and plaintext
659  * cannot be recovered from the signature.
660  */
661 CK_PKCS11_FUNCTION_INFO(C_Verify)
662 #ifdef CK_NEED_ARG_LIST
663 (
664  CK_SESSION_HANDLE hSession, /* the session's handle */
665  CK_BYTE_PTR pData, /* signed data */
666  CK_ULONG ulDataLen, /* length of signed data */
667  CK_BYTE_PTR pSignature, /* signature */
668  CK_ULONG ulSignatureLen /* signature length*/
669 );
670 #endif
671 
672 
673 /* C_VerifyUpdate continues a multiple-part verification
674  * operation, where the signature is an appendix to the data,
675  * and plaintext cannot be recovered from the signature.
676  */
677 CK_PKCS11_FUNCTION_INFO(C_VerifyUpdate)
678 #ifdef CK_NEED_ARG_LIST
679 (
680  CK_SESSION_HANDLE hSession, /* the session's handle */
681  CK_BYTE_PTR pPart, /* signed data */
682  CK_ULONG ulPartLen /* length of signed data */
683 );
684 #endif
685 
686 
687 /* C_VerifyFinal finishes a multiple-part verification
688  * operation, checking the signature.
689  */
690 CK_PKCS11_FUNCTION_INFO(C_VerifyFinal)
691 #ifdef CK_NEED_ARG_LIST
692 (
693  CK_SESSION_HANDLE hSession, /* the session's handle */
694  CK_BYTE_PTR pSignature, /* signature to verify */
695  CK_ULONG ulSignatureLen /* signature length */
696 );
697 #endif
698 
699 
700 /* C_VerifyRecoverInit initializes a signature verification
701  * operation, where the data is recovered from the signature.
702  */
703 CK_PKCS11_FUNCTION_INFO(C_VerifyRecoverInit)
704 #ifdef CK_NEED_ARG_LIST
705 (
706  CK_SESSION_HANDLE hSession, /* the session's handle */
707  CK_MECHANISM_PTR pMechanism, /* the verification mechanism */
708  CK_OBJECT_HANDLE hKey /* verification key */
709 );
710 #endif
711 
712 
713 /* C_VerifyRecover verifies a signature in a single-part
714  * operation, where the data is recovered from the signature.
715  */
716 CK_PKCS11_FUNCTION_INFO(C_VerifyRecover)
717 #ifdef CK_NEED_ARG_LIST
718 (
719  CK_SESSION_HANDLE hSession, /* the session's handle */
720  CK_BYTE_PTR pSignature, /* signature to verify */
721  CK_ULONG ulSignatureLen, /* signature length */
722  CK_BYTE_PTR pData, /* gets signed data */
723  CK_ULONG_PTR pulDataLen /* gets signed data len */
724 );
725 #endif
726 
727 
728 
729 /* Dual-function cryptographic operations */
730 
731 /* C_DigestEncryptUpdate continues a multiple-part digesting
732  * and encryption operation.
733  */
734 CK_PKCS11_FUNCTION_INFO(C_DigestEncryptUpdate)
735 #ifdef CK_NEED_ARG_LIST
736 (
737  CK_SESSION_HANDLE hSession, /* session's handle */
738  CK_BYTE_PTR pPart, /* the plaintext data */
739  CK_ULONG ulPartLen, /* plaintext length */
740  CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */
741  CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */
742 );
743 #endif
744 
745 
746 /* C_DecryptDigestUpdate continues a multiple-part decryption and
747  * digesting operation.
748  */
749 CK_PKCS11_FUNCTION_INFO(C_DecryptDigestUpdate)
750 #ifdef CK_NEED_ARG_LIST
751 (
752  CK_SESSION_HANDLE hSession, /* session's handle */
753  CK_BYTE_PTR pEncryptedPart, /* ciphertext */
754  CK_ULONG ulEncryptedPartLen, /* ciphertext length */
755  CK_BYTE_PTR pPart, /* gets plaintext */
756  CK_ULONG_PTR pulPartLen /* gets plaintext len */
757 );
758 #endif
759 
760 
761 /* C_SignEncryptUpdate continues a multiple-part signing and
762  * encryption operation.
763  */
764 CK_PKCS11_FUNCTION_INFO(C_SignEncryptUpdate)
765 #ifdef CK_NEED_ARG_LIST
766 (
767  CK_SESSION_HANDLE hSession, /* session's handle */
768  CK_BYTE_PTR pPart, /* the plaintext data */
769  CK_ULONG ulPartLen, /* plaintext length */
770  CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */
771  CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */
772 );
773 #endif
774 
775 
776 /* C_DecryptVerifyUpdate continues a multiple-part decryption and
777  * verify operation.
778  */
779 CK_PKCS11_FUNCTION_INFO(C_DecryptVerifyUpdate)
780 #ifdef CK_NEED_ARG_LIST
781 (
782  CK_SESSION_HANDLE hSession, /* session's handle */
783  CK_BYTE_PTR pEncryptedPart, /* ciphertext */
784  CK_ULONG ulEncryptedPartLen, /* ciphertext length */
785  CK_BYTE_PTR pPart, /* gets plaintext */
786  CK_ULONG_PTR pulPartLen /* gets p-text length */
787 );
788 #endif
789 
790 
791 
792 /* Key management */
793 
794 /* C_GenerateKey generates a secret key, creating a new key
795  * object.
796  */
797 CK_PKCS11_FUNCTION_INFO(C_GenerateKey)
798 #ifdef CK_NEED_ARG_LIST
799 (
800  CK_SESSION_HANDLE hSession, /* the session's handle */
801  CK_MECHANISM_PTR pMechanism, /* key generation mech. */
802  CK_ATTRIBUTE_PTR pTemplate, /* template for new key */
803  CK_ULONG ulCount, /* # of attrs in template */
804  CK_OBJECT_HANDLE_PTR phKey /* gets handle of new key */
805 );
806 #endif
807 
808 
809 /* C_GenerateKeyPair generates a public-key/private-key pair,
810  * creating new key objects.
811  */
812 CK_PKCS11_FUNCTION_INFO(C_GenerateKeyPair)
813 #ifdef CK_NEED_ARG_LIST
814 (
815  CK_SESSION_HANDLE hSession, /* session handle */
816  CK_MECHANISM_PTR pMechanism, /* key-gen mech. */
817  CK_ATTRIBUTE_PTR pPublicKeyTemplate, /* template for pub. key */
818  CK_ULONG ulPublicKeyAttributeCount, /* # pub. attrs. */
819  CK_ATTRIBUTE_PTR pPrivateKeyTemplate, /* template for priv. key */
820  CK_ULONG ulPrivateKeyAttributeCount, /* # priv. attrs. */
821  CK_OBJECT_HANDLE_PTR phPublicKey, /* gets pub. key handle */
822  CK_OBJECT_HANDLE_PTR phPrivateKey /* gets priv. key handle */
823 );
824 #endif
825 
826 
827 /* C_WrapKey wraps (i.e., encrypts) a key. */
828 CK_PKCS11_FUNCTION_INFO(C_WrapKey)
829 #ifdef CK_NEED_ARG_LIST
830 (
831  CK_SESSION_HANDLE hSession, /* the session's handle */
832  CK_MECHANISM_PTR pMechanism, /* the wrapping mechanism */
833  CK_OBJECT_HANDLE hWrappingKey, /* wrapping key */
834  CK_OBJECT_HANDLE hKey, /* key to be wrapped */
835  CK_BYTE_PTR pWrappedKey, /* gets wrapped key */
836  CK_ULONG_PTR pulWrappedKeyLen /* gets wrapped key size */
837 );
838 #endif
839 
840 
841 /* C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new
842  * key object.
843  */
844 CK_PKCS11_FUNCTION_INFO(C_UnwrapKey)
845 #ifdef CK_NEED_ARG_LIST
846 (
847  CK_SESSION_HANDLE hSession, /* session's handle */
848  CK_MECHANISM_PTR pMechanism, /* unwrapping mech. */
849  CK_OBJECT_HANDLE hUnwrappingKey, /* unwrapping key */
850  CK_BYTE_PTR pWrappedKey, /* the wrapped key */
851  CK_ULONG ulWrappedKeyLen, /* wrapped key len */
852  CK_ATTRIBUTE_PTR pTemplate, /* new key template */
853  CK_ULONG ulAttributeCount, /* template length */
854  CK_OBJECT_HANDLE_PTR phKey /* gets new handle */
855 );
856 #endif
857 
858 
859 /* C_DeriveKey derives a key from a base key, creating a new key
860  * object.
861  */
862 CK_PKCS11_FUNCTION_INFO(C_DeriveKey)
863 #ifdef CK_NEED_ARG_LIST
864 (
865  CK_SESSION_HANDLE hSession, /* session's handle */
866  CK_MECHANISM_PTR pMechanism, /* key deriv. mech. */
867  CK_OBJECT_HANDLE hBaseKey, /* base key */
868  CK_ATTRIBUTE_PTR pTemplate, /* new key template */
869  CK_ULONG ulAttributeCount, /* template length */
870  CK_OBJECT_HANDLE_PTR phKey /* gets new handle */
871 );
872 #endif
873 
874 
875 
876 /* Random number generation */
877 
878 /* C_SeedRandom mixes additional seed material into the token's
879  * random number generator.
880  */
881 CK_PKCS11_FUNCTION_INFO(C_SeedRandom)
882 #ifdef CK_NEED_ARG_LIST
883 (
884  CK_SESSION_HANDLE hSession, /* the session's handle */
885  CK_BYTE_PTR pSeed, /* the seed material */
886  CK_ULONG ulSeedLen /* length of seed material */
887 );
888 #endif
889 
890 
891 /* C_GenerateRandom generates random data. */
892 CK_PKCS11_FUNCTION_INFO(C_GenerateRandom)
893 #ifdef CK_NEED_ARG_LIST
894 (
895  CK_SESSION_HANDLE hSession, /* the session's handle */
896  CK_BYTE_PTR RandomData, /* receives the random data */
897  CK_ULONG ulRandomLen /* # of bytes to generate */
898 );
899 #endif
900 
901 
902 
903 /* Parallel function management */
904 
905 /* C_GetFunctionStatus is a legacy function; it obtains an
906  * updated status of a function running in parallel with an
907  * application.
908  */
909 CK_PKCS11_FUNCTION_INFO(C_GetFunctionStatus)
910 #ifdef CK_NEED_ARG_LIST
911 (
912  CK_SESSION_HANDLE hSession /* the session's handle */
913 );
914 #endif
915 
916 
917 /* C_CancelFunction is a legacy function; it cancels a function
918  * running in parallel.
919  */
920 CK_PKCS11_FUNCTION_INFO(C_CancelFunction)
921 #ifdef CK_NEED_ARG_LIST
922 (
923  CK_SESSION_HANDLE hSession /* the session's handle */
924 );
925 #endif
926 
927 
928 /* C_WaitForSlotEvent waits for a slot event (token insertion,
929  * removal, etc.) to occur.
930  */
931 CK_PKCS11_FUNCTION_INFO(C_WaitForSlotEvent)
932 #ifdef CK_NEED_ARG_LIST
933 (
934  CK_FLAGS flags, /* blocking/nonblocking flag */
935  CK_SLOT_ID_PTR pSlot, /* location that receives the slot ID */
936  CK_VOID_PTR pRserved /* reserved. Should be NULL_PTR */
937 );
938 #endif
939 
C_GenerateRandom
CK_RV C_GenerateRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR RandomData, CK_ULONG ulRandomLen)
Generates random data.
Definition: iot_pkcs11_mbedtls.c:4416
C_DigestUpdate
CK_RV C_DigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)
Continues a multiple-part digesting operation.
Definition: iot_pkcs11_mbedtls.c:3215
C_FindObjectsFinal
CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession)
Finishes an object search operation.
Definition: iot_pkcs11_mbedtls.c:3096
C_FindObjects
CK_RV C_FindObjects(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject, CK_ULONG ulMaxObjectCount, CK_ULONG_PTR pulObjectCount)
Initializes an object search operation.
Definition: iot_pkcs11_mbedtls.c:2974
C_InitToken
CK_RV C_InitToken(CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen, CK_UTF8CHAR_PTR pLabel)
Initializes a token. This function is not implemented for this port.
Definition: iot_pkcs11_mbedtls.c:1664
C_CloseSession
CK_RV C_CloseSession(CK_SESSION_HANDLE hSession)
Closes a session.
Definition: iot_pkcs11_mbedtls.c:1849
C_GetTokenInfo
CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
Obtains information about a particular token.
Definition: iot_pkcs11_mbedtls.c:1580
C_DestroyObject
CK_RV C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
Destroys an object.
Definition: iot_pkcs11_mbedtls.c:2511
C_GetFunctionList
CK_RV C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList)
Obtains entry points of Cryptoki library functions.
Definition: iot_pkcs11_mbedtls.c:1412
C_Initialize
CK_RV C_Initialize(CK_VOID_PTR pInitArgs)
Initializes Cryptoki.
Definition: iot_pkcs11_mbedtls.c:1328
C_OpenSession
CK_RV C_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication, CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession)
Opens a connection between an application and a particular token or sets up an application callback f...
Definition: iot_pkcs11_mbedtls.c:1699
C_Sign
CK_RV C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)
Signs single-part data.
Definition: iot_pkcs11_mbedtls.c:3535
C_GetSlotList
CK_RV C_GetSlotList(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK_ULONG_PTR pulCount)
Obtains a list of slots in the system.
Definition: iot_pkcs11_mbedtls.c:1519
C_Verify
CK_RV C_Verify(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen)
Verifies a signature on single-part data.
Definition: iot_pkcs11_mbedtls.c:3844
C_DigestInit
CK_RV C_DigestInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism)
Initializes a message-digesting operation.
Definition: iot_pkcs11_mbedtls.c:3145
C_CreateObject
CK_RV C_CreateObject(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phObject)
Creates an object.
Definition: iot_pkcs11_mbedtls.c:2448
C_SignInit
CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey)
Initializes a signature operation.
Definition: iot_pkcs11_mbedtls.c:3367
C_Finalize
CK_RV C_Finalize(CK_VOID_PTR pReserved)
Clean up miscellaneous Cryptoki-associated resources.
Definition: iot_pkcs11_mbedtls.c:1358
C_GetMechanismInfo
CK_RV C_GetMechanismInfo(CK_SLOT_ID slotID, CK_MECHANISM_TYPE type, CK_MECHANISM_INFO_PTR pInfo)
Obtains information about a particular mechanism.
Definition: iot_pkcs11_mbedtls.c:1603
C_Login
CK_RV C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen)
Logs into a token. This function is not implemented for this port.
Definition: iot_pkcs11_mbedtls.c:1909
C_DigestFinal
CK_RV C_DigestFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen)
Finishes a multiple-part digesting operation.
Definition: iot_pkcs11_mbedtls.c:3284
C_VerifyInit
CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey)
Initializes a verification operation.
Definition: iot_pkcs11_mbedtls.c:3690
C_GetAttributeValue
CK_RV C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
Obtains an attribute value of an object.
Definition: iot_pkcs11_mbedtls.c:2566
C_FindObjectsInit
CK_RV C_FindObjectsInit(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
Initializes an object search operation.
Definition: iot_pkcs11_mbedtls.c:2857
C_GenerateKeyPair
CK_RV C_GenerateKeyPair(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount, CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount, CK_OBJECT_HANDLE_PTR phPublicKey, CK_OBJECT_HANDLE_PTR phPrivateKey)
Generates a public-key/private-key pair.
Definition: iot_pkcs11_mbedtls.c:4228