python-pkcs11 0.8.0__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
pkcs11/__init__.py ADDED
@@ -0,0 +1,36 @@
1
+ """
2
+ :mod:`pkcs11` defines a high-level, "Pythonic" interface to PKCS#11.
3
+ """
4
+
5
+ from .constants import * # noqa: F403
6
+ from .exceptions import * # noqa: F403
7
+ from .mechanisms import * # noqa: F403
8
+ from .types import * # noqa: F403
9
+ from .util import dh, dsa, ec, rsa, x509 # noqa: F401
10
+
11
+ _so = None
12
+ _lib = None
13
+
14
+
15
+ def lib(so):
16
+ """
17
+ Wrap the main library call coming from Cython with a preemptive
18
+ dynamic loading.
19
+ """
20
+ global _lib
21
+ global _so
22
+
23
+ if _lib:
24
+ if _so != so:
25
+ raise AlreadyInitialized( # noqa: F405
26
+ "Already initialized with %s" % _so
27
+ )
28
+ else:
29
+ return _lib
30
+
31
+ from . import _pkcs11
32
+
33
+ _lib = _pkcs11.lib(so)
34
+ _so = so
35
+
36
+ return _lib
Binary file
pkcs11/_pkcs11.pxd ADDED
@@ -0,0 +1,622 @@
1
+ """
2
+ Definitions imported from PKCS11 C headers.
3
+ """
4
+
5
+ from cython.view cimport array
6
+
7
+ from defaults import *
8
+
9
+ cdef extern from '../extern/cryptoki.h':
10
+
11
+ ctypedef unsigned char CK_BYTE
12
+ ctypedef CK_BYTE CK_BBOOL
13
+ ctypedef CK_BYTE CK_UTF8CHAR
14
+ ctypedef unsigned char CK_CHAR
15
+ ctypedef unsigned long int CK_ULONG
16
+ ctypedef CK_ULONG CK_ATTRIBUTE_TYPE
17
+ ctypedef CK_ULONG CK_EC_KDF_TYPE
18
+ ctypedef CK_ULONG CK_FLAGS
19
+ ctypedef CK_ULONG CK_MECHANISM_TYPE
20
+ ctypedef CK_ULONG CK_OBJECT_HANDLE
21
+ ctypedef CK_ULONG CK_RSA_PKCS_MGF_TYPE
22
+ ctypedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE
23
+ ctypedef CK_ULONG CK_SESSION_HANDLE
24
+ ctypedef CK_ULONG CK_SLOT_ID
25
+ ctypedef CK_ULONG CK_STATE
26
+
27
+ ctypedef enum CK_RV:
28
+ CKR_OK,
29
+ CKR_CANCEL,
30
+ CKR_HOST_MEMORY,
31
+ CKR_SLOT_ID_INVALID,
32
+
33
+ CKR_GENERAL_ERROR,
34
+ CKR_FUNCTION_FAILED,
35
+
36
+ CKR_ARGUMENTS_BAD,
37
+ CKR_NO_EVENT,
38
+ CKR_NEED_TO_CREATE_THREADS,
39
+ CKR_CANT_LOCK,
40
+
41
+ CKR_ATTRIBUTE_READ_ONLY,
42
+ CKR_ATTRIBUTE_SENSITIVE,
43
+ CKR_ATTRIBUTE_TYPE_INVALID,
44
+ CKR_ATTRIBUTE_VALUE_INVALID,
45
+ CKR_DATA_INVALID,
46
+ CKR_DATA_LEN_RANGE,
47
+ CKR_DEVICE_ERROR,
48
+ CKR_DEVICE_MEMORY,
49
+ CKR_DEVICE_REMOVED,
50
+ CKR_ENCRYPTED_DATA_INVALID,
51
+ CKR_ENCRYPTED_DATA_LEN_RANGE,
52
+ CKR_FUNCTION_CANCELED,
53
+ CKR_FUNCTION_NOT_PARALLEL,
54
+
55
+ CKR_FUNCTION_NOT_SUPPORTED,
56
+
57
+ CKR_KEY_HANDLE_INVALID,
58
+
59
+ CKR_KEY_SIZE_RANGE,
60
+ CKR_KEY_TYPE_INCONSISTENT,
61
+
62
+ CKR_KEY_NOT_NEEDED,
63
+ CKR_KEY_CHANGED,
64
+ CKR_KEY_NEEDED,
65
+ CKR_KEY_INDIGESTIBLE,
66
+ CKR_KEY_FUNCTION_NOT_PERMITTED,
67
+ CKR_KEY_NOT_WRAPPABLE,
68
+ CKR_KEY_UNEXTRACTABLE,
69
+
70
+ CKR_MECHANISM_INVALID,
71
+ CKR_MECHANISM_PARAM_INVALID,
72
+
73
+ CKR_OBJECT_HANDLE_INVALID,
74
+ CKR_OPERATION_ACTIVE,
75
+ CKR_OPERATION_NOT_INITIALIZED,
76
+ CKR_PIN_INCORRECT,
77
+ CKR_PIN_INVALID,
78
+ CKR_PIN_LEN_RANGE,
79
+
80
+ CKR_PIN_EXPIRED,
81
+ CKR_PIN_LOCKED,
82
+
83
+ CKR_SESSION_CLOSED,
84
+ CKR_SESSION_COUNT,
85
+ CKR_SESSION_HANDLE_INVALID,
86
+ CKR_SESSION_PARALLEL_NOT_SUPPORTED,
87
+ CKR_SESSION_READ_ONLY,
88
+ CKR_SESSION_EXISTS,
89
+
90
+ CKR_SESSION_READ_ONLY_EXISTS,
91
+ CKR_SESSION_READ_WRITE_SO_EXISTS,
92
+
93
+ CKR_SIGNATURE_INVALID,
94
+ CKR_SIGNATURE_LEN_RANGE,
95
+ CKR_TEMPLATE_INCOMPLETE,
96
+ CKR_TEMPLATE_INCONSISTENT,
97
+ CKR_TOKEN_NOT_PRESENT,
98
+ CKR_TOKEN_NOT_RECOGNIZED,
99
+ CKR_TOKEN_WRITE_PROTECTED,
100
+ CKR_UNWRAPPING_KEY_HANDLE_INVALID,
101
+ CKR_UNWRAPPING_KEY_SIZE_RANGE,
102
+ CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT,
103
+ CKR_USER_ALREADY_LOGGED_IN,
104
+ CKR_USER_NOT_LOGGED_IN,
105
+ CKR_USER_PIN_NOT_INITIALIZED,
106
+ CKR_USER_TYPE_INVALID,
107
+
108
+ CKR_USER_ANOTHER_ALREADY_LOGGED_IN,
109
+ CKR_USER_TOO_MANY_TYPES,
110
+
111
+ CKR_WRAPPED_KEY_INVALID,
112
+ CKR_WRAPPED_KEY_LEN_RANGE,
113
+ CKR_WRAPPING_KEY_HANDLE_INVALID,
114
+ CKR_WRAPPING_KEY_SIZE_RANGE,
115
+ CKR_WRAPPING_KEY_TYPE_INCONSISTENT,
116
+ CKR_RANDOM_SEED_NOT_SUPPORTED,
117
+
118
+ CKR_RANDOM_NO_RNG,
119
+
120
+ CKR_DOMAIN_PARAMS_INVALID,
121
+
122
+ CKR_BUFFER_TOO_SMALL,
123
+ CKR_SAVED_STATE_INVALID,
124
+ CKR_INFORMATION_SENSITIVE,
125
+ CKR_STATE_UNSAVEABLE,
126
+
127
+ CKR_CRYPTOKI_NOT_INITIALIZED,
128
+ CKR_CRYPTOKI_ALREADY_INITIALIZED,
129
+ CKR_MUTEX_BAD,
130
+ CKR_MUTEX_NOT_LOCKED,
131
+
132
+ CKR_NEW_PIN_MODE,
133
+ CKR_NEXT_OTP,
134
+ CKR_EXCEEDED_MAX_ITERATIONS,
135
+ CKR_FIPS_SELF_TEST_FAILED,
136
+ CKR_LIBRARY_LOAD_FAILED,
137
+ CKR_PIN_TOO_WEAK,
138
+ CKR_PUBLIC_KEY_INVALID,
139
+
140
+ CKR_FUNCTION_REJECTED,
141
+
142
+ CKR_VENDOR_DEFINED,
143
+
144
+
145
+ ctypedef enum CK_USER_TYPE:
146
+ CKU_SO,
147
+ CKU_USER,
148
+ CKU_CONTEXT_SPECIFIC,
149
+
150
+ cdef enum:
151
+ CK_TRUE,
152
+ CK_FALSE,
153
+
154
+ cdef enum:
155
+ CK_UNAVAILABLE_INFORMATION,
156
+ CK_EFFECTIVELY_INFINITE,
157
+
158
+ cdef enum: # CK_FLAGS
159
+ CKF_DONT_BLOCK,
160
+ CKF_RW_SESSION,
161
+ CKF_SERIAL_SESSION,
162
+
163
+ cdef enum: # CKZ
164
+ CKZ_DATA_SPECIFIED,
165
+
166
+ cdef enum: # CK_STATE
167
+ CKS_RO_PUBLIC_SESSION,
168
+ CKS_RO_USER_FUNCTIONS,
169
+ CKS_RW_PUBLIC_SESSION,
170
+ CKS_RW_USER_FUNCTIONS,
171
+ CKS_RW_SO_FUNCTIONS
172
+
173
+ ctypedef struct CK_VERSION:
174
+ CK_BYTE major
175
+ CK_BYTE minor
176
+
177
+ ctypedef struct CK_INFO:
178
+ CK_VERSION cryptokiVersion;
179
+ CK_UTF8CHAR manufacturerID[32]
180
+ CK_FLAGS flags
181
+
182
+ CK_UTF8CHAR libraryDescription[32]
183
+ CK_VERSION libraryVersion;
184
+
185
+ ctypedef struct CK_SLOT_INFO:
186
+ CK_UTF8CHAR slotDescription[64]
187
+ CK_UTF8CHAR manufacturerID[32]
188
+ CK_FLAGS flags
189
+
190
+ CK_VERSION hardwareVersion
191
+ CK_VERSION firmwareVersion
192
+
193
+ ctypedef struct CK_MECHANISM_INFO:
194
+ CK_ULONG ulMinKeySize
195
+ CK_ULONG ulMaxKeySize
196
+ CK_FLAGS flags
197
+
198
+ ctypedef struct CK_TOKEN_INFO:
199
+ CK_UTF8CHAR label[32]
200
+ CK_UTF8CHAR manufacturerID[32]
201
+ CK_UTF8CHAR model[16]
202
+ CK_CHAR serialNumber[16]
203
+ CK_FLAGS flags
204
+
205
+ CK_ULONG ulMaxSessionCount
206
+ CK_ULONG ulSessionCount
207
+ CK_ULONG ulMaxRwSessionCount
208
+ CK_ULONG ulRwSessionCount
209
+ CK_ULONG ulMaxPinLen
210
+ CK_ULONG ulMinPinLen
211
+ CK_ULONG ulTotalPublicMemory
212
+ CK_ULONG ulFreePublicMemory
213
+ CK_ULONG ulTotalPrivateMemory
214
+ CK_ULONG ulFreePrivateMemory
215
+ CK_VERSION hardwareVersion
216
+ CK_VERSION firmwareVersion
217
+ CK_CHAR utcTime[16]
218
+
219
+ ctypedef struct CK_SESSION_INFO:
220
+ CK_SLOT_ID slotID
221
+ CK_STATE state
222
+ CK_FLAGS flags
223
+ CK_ULONG ulDeviceError
224
+
225
+ ctypedef struct CK_MECHANISM:
226
+ CK_MECHANISM_TYPE mechanism
227
+ void *pParameter
228
+ CK_ULONG ulParameterLen
229
+
230
+ ctypedef struct CK_ATTRIBUTE:
231
+ CK_ATTRIBUTE_TYPE type
232
+ void *pValue
233
+ CK_ULONG ulValueLen
234
+
235
+ ctypedef struct CK_RSA_PKCS_OAEP_PARAMS:
236
+ CK_MECHANISM_TYPE hashAlg
237
+ CK_RSA_PKCS_MGF_TYPE mgf
238
+ CK_RSA_PKCS_OAEP_SOURCE_TYPE source
239
+ void *pSourceData
240
+ CK_ULONG ulSourceDataLen
241
+
242
+ ctypedef struct CK_RSA_PKCS_PSS_PARAMS:
243
+ CK_MECHANISM_TYPE hashAlg
244
+ CK_RSA_PKCS_MGF_TYPE mgf
245
+ CK_ULONG sLen
246
+
247
+ ctypedef struct CK_ECDH1_DERIVE_PARAMS:
248
+ CK_EC_KDF_TYPE kdf
249
+ CK_ULONG ulSharedDataLen
250
+ CK_BYTE *pSharedData
251
+ CK_ULONG ulPublicDataLen
252
+ CK_BYTE *pPublicData
253
+
254
+ ctypedef struct CK_KEY_DERIVATION_STRING_DATA:
255
+ CK_BYTE *pData
256
+ CK_ULONG ulLen
257
+
258
+ ctypedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS:
259
+ CK_BYTE iv[16]
260
+ CK_BYTE *pData
261
+ CK_ULONG length
262
+
263
+ ctypedef struct CK_EDDSA_PARAMS:
264
+ CK_BBOOL phFlag
265
+ CK_ULONG ulContextDataLen
266
+ CK_BYTE *pContextData
267
+
268
+ cdef struct CK_FUNCTION_LIST:
269
+ CK_VERSION version
270
+ ## pointers to library functions are stored here
271
+ ## caution: order matters!
272
+
273
+ ## general purpose
274
+ CK_RV C_Initialize(void *) nogil
275
+
276
+ CK_RV C_Finalize(void *) nogil
277
+
278
+ CK_RV C_GetInfo(CK_INFO *info) nogil
279
+
280
+ CK_RV C_GetFunctionList(CK_FUNCTION_LIST **) nogil
281
+
282
+ ## slot and token management
283
+ CK_RV C_GetSlotList(CK_BBOOL tokenPresent,
284
+ CK_SLOT_ID *slotList,
285
+ CK_ULONG *count) nogil
286
+
287
+ CK_RV C_GetSlotInfo(CK_SLOT_ID slotID,
288
+ CK_SLOT_INFO *info) nogil
289
+
290
+ CK_RV C_GetTokenInfo(CK_SLOT_ID slotID,
291
+ CK_TOKEN_INFO *info) nogil
292
+
293
+ CK_RV C_GetMechanismList(CK_SLOT_ID slotID,
294
+ CK_MECHANISM_TYPE *mechanismList,
295
+ CK_ULONG *count) nogil
296
+
297
+ CK_RV C_GetMechanismInfo(CK_SLOT_ID slotID,
298
+ CK_MECHANISM_TYPE mechanism,
299
+ CK_MECHANISM_INFO *info) nogil
300
+
301
+ CK_RV C_InitToken(CK_SLOT_ID slotID,
302
+ CK_UTF8CHAR *pPin,
303
+ CK_ULONG ulPinLen,
304
+ CK_UTF8CHAR *pLabel) nogil
305
+
306
+ CK_RV C_InitPIN(CK_SESSION_HANDLE hSession,
307
+ CK_UTF8CHAR *pPin,
308
+ CK_ULONG ulPinLen) nogil
309
+
310
+ CK_RV C_SetPIN(CK_SESSION_HANDLE hSession,
311
+ CK_UTF8CHAR *pOldPin,
312
+ CK_ULONG ulOldLen,
313
+ CK_UTF8CHAR *pNewPin,
314
+ CK_ULONG ulNewLen) nogil
315
+
316
+ ## session management
317
+ CK_RV C_OpenSession(CK_SLOT_ID slotID,
318
+ CK_FLAGS flags,
319
+ void *application,
320
+ void *notify,
321
+ CK_SESSION_HANDLE *handle) nogil
322
+
323
+ CK_RV C_CloseSession(CK_SESSION_HANDLE session) nogil
324
+
325
+ CK_RV C_CloseAllSessions(CK_SLOT_ID slotID) nogil
326
+
327
+ CK_RV C_GetSessionInfo(CK_SESSION_HANDLE hSession,
328
+ CK_SESSION_INFO *pInfo) nogil
329
+
330
+ CK_RV C_GetOperationState(CK_SESSION_HANDLE hSession,
331
+ CK_BYTE *pOperationState,
332
+ CK_ULONG *pulOperationStateLen) nogil
333
+
334
+ CK_RV C_SetOperationState(CK_SESSION_HANDLE hSession,
335
+ CK_BYTE *pOperationState,
336
+ CK_ULONG ulOperationStateLen,
337
+ CK_OBJECT_HANDLE hEncryptionKey,
338
+ CK_OBJECT_HANDLE hAuthenticationKey) nogil
339
+
340
+ CK_RV C_Login(CK_SESSION_HANDLE session,
341
+ CK_USER_TYPE userType,
342
+ CK_UTF8CHAR *pin,
343
+ CK_ULONG pinLen) nogil
344
+
345
+ CK_RV C_Logout(CK_SESSION_HANDLE session) nogil
346
+
347
+ ## object management
348
+ CK_RV C_CreateObject(CK_SESSION_HANDLE session,
349
+ CK_ATTRIBUTE *template,
350
+ CK_ULONG count,
351
+ CK_OBJECT_HANDLE *key) nogil
352
+
353
+ CK_RV C_CopyObject(CK_SESSION_HANDLE session,
354
+ CK_OBJECT_HANDLE key,
355
+ CK_ATTRIBUTE *template,
356
+ CK_ULONG count,
357
+ CK_OBJECT_HANDLE *new_key) nogil
358
+
359
+ CK_RV C_DestroyObject(CK_SESSION_HANDLE session,
360
+ CK_OBJECT_HANDLE key) nogil
361
+
362
+ CK_RV C_GetObjectSize(CK_SESSION_HANDLE hSession,
363
+ CK_OBJECT_HANDLE hObject,
364
+ CK_ULONG *pulSize) nogil
365
+
366
+ CK_RV C_GetAttributeValue(CK_SESSION_HANDLE session,
367
+ CK_OBJECT_HANDLE key,
368
+ CK_ATTRIBUTE *template,
369
+ CK_ULONG count) nogil
370
+
371
+ CK_RV C_SetAttributeValue(CK_SESSION_HANDLE session,
372
+ CK_OBJECT_HANDLE key,
373
+ CK_ATTRIBUTE *template,
374
+ CK_ULONG count) nogil
375
+
376
+ CK_RV C_FindObjectsInit(CK_SESSION_HANDLE session,
377
+ CK_ATTRIBUTE *template,
378
+ CK_ULONG count) nogil
379
+
380
+ CK_RV C_FindObjects(CK_SESSION_HANDLE session,
381
+ CK_OBJECT_HANDLE *objects,
382
+ CK_ULONG objectsMax,
383
+ CK_ULONG *objectsLength) nogil
384
+
385
+ CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE session) nogil
386
+
387
+ ## encryption and decryption
388
+ CK_RV C_EncryptInit(CK_SESSION_HANDLE session,
389
+ CK_MECHANISM *mechanism,
390
+ CK_OBJECT_HANDLE key) nogil
391
+
392
+ CK_RV C_Encrypt(CK_SESSION_HANDLE session,
393
+ CK_BYTE *plaintext,
394
+ CK_ULONG plaintext_len,
395
+ CK_BYTE *ciphertext,
396
+ CK_ULONG *ciphertext_len) nogil
397
+
398
+ CK_RV C_EncryptUpdate(CK_SESSION_HANDLE session,
399
+ CK_BYTE *part_in,
400
+ CK_ULONG part_in_len,
401
+ CK_BYTE *part_out,
402
+ CK_ULONG *part_out_len) nogil
403
+
404
+ CK_RV C_EncryptFinal(CK_SESSION_HANDLE session,
405
+ CK_BYTE *part_out,
406
+ CK_ULONG *part_out_len) nogil
407
+
408
+ CK_RV C_DecryptInit(CK_SESSION_HANDLE session,
409
+ CK_MECHANISM *mechanism,
410
+ CK_OBJECT_HANDLE key) nogil
411
+
412
+ CK_RV C_Decrypt(CK_SESSION_HANDLE session,
413
+ CK_BYTE *ciphertext,
414
+ CK_ULONG ciphertext_len,
415
+ CK_BYTE *plaintext,
416
+ CK_ULONG *plaintext_len) nogil
417
+
418
+ CK_RV C_DecryptUpdate(CK_SESSION_HANDLE session,
419
+ CK_BYTE *part_in,
420
+ CK_ULONG part_in_len,
421
+ CK_BYTE *part_out,
422
+ CK_ULONG *part_out_len) nogil
423
+
424
+ CK_RV C_DecryptFinal(CK_SESSION_HANDLE session,
425
+ CK_BYTE *part_out,
426
+ CK_ULONG *part_out_len) nogil
427
+
428
+ ## Message digests
429
+ CK_RV C_DigestInit(CK_SESSION_HANDLE session,
430
+ CK_MECHANISM *mechanism) nogil
431
+
432
+ CK_RV C_Digest(CK_SESSION_HANDLE session,
433
+ CK_BYTE *data,
434
+ CK_ULONG data_len,
435
+ CK_BYTE *digest,
436
+ CK_ULONG *digest_len) nogil
437
+
438
+ CK_RV C_DigestUpdate(CK_SESSION_HANDLE session,
439
+ CK_BYTE *data,
440
+ CK_ULONG data_len) nogil
441
+
442
+ CK_RV C_DigestKey(CK_SESSION_HANDLE session,
443
+ CK_OBJECT_HANDLE key) nogil
444
+
445
+ CK_RV C_DigestFinal(CK_SESSION_HANDLE session,
446
+ CK_BYTE *digest,
447
+ CK_ULONG *digest_len) nogil
448
+
449
+ ## Signing and MACing
450
+ CK_RV C_SignInit(CK_SESSION_HANDLE session,
451
+ CK_MECHANISM *mechanism,
452
+ CK_OBJECT_HANDLE key) nogil
453
+
454
+ CK_RV C_Sign(CK_SESSION_HANDLE session,
455
+ CK_BYTE *text,
456
+ CK_ULONG text_len,
457
+ CK_BYTE *signature,
458
+ CK_ULONG *sig_len) nogil
459
+
460
+ CK_RV C_SignUpdate(CK_SESSION_HANDLE session,
461
+ CK_BYTE *part,
462
+ CK_ULONG part_len) nogil
463
+
464
+ CK_RV C_SignFinal(CK_SESSION_HANDLE session,
465
+ CK_BYTE *signature,
466
+ CK_ULONG *sig_len) nogil
467
+
468
+ CK_RV C_SignRecoverInit(CK_SESSION_HANDLE session,
469
+ CK_MECHANISM *mechanism,
470
+ CK_OBJECT_HANDLE key) nogil
471
+
472
+ CK_RV C_SignRecover(CK_SESSION_HANDLE session,
473
+ CK_BYTE *text,
474
+ CK_ULONG text_len,
475
+ CK_BYTE *signature,
476
+ CK_ULONG *sig_len) nogil
477
+
478
+
479
+ ## Verifying signatures and MACs
480
+ CK_RV C_VerifyInit(CK_SESSION_HANDLE session,
481
+ CK_MECHANISM *mechanism,
482
+ CK_OBJECT_HANDLE key) nogil
483
+
484
+ CK_RV C_Verify(CK_SESSION_HANDLE session,
485
+ CK_BYTE *text,
486
+ CK_ULONG text_len,
487
+ CK_BYTE *signature,
488
+ CK_ULONG sig_len) nogil
489
+
490
+ CK_RV C_VerifyUpdate(CK_SESSION_HANDLE session,
491
+ CK_BYTE *text,
492
+ CK_ULONG text_len) nogil
493
+
494
+ CK_RV C_VerifyFinal(CK_SESSION_HANDLE session,
495
+ CK_BYTE *signature,
496
+ CK_ULONG sig_len) nogil
497
+
498
+ CK_RV C_VerifyRecoverInit(CK_SESSION_HANDLE session,
499
+ CK_MECHANISM *mechanism,
500
+ CK_OBJECT_HANDLE key) nogil
501
+
502
+ CK_RV C_VerifyRecover(CK_SESSION_HANDLE session,
503
+ CK_BYTE *text,
504
+ CK_ULONG text_len,
505
+ CK_BYTE *signature,
506
+ CK_ULONG sig_len) nogil
507
+
508
+ ## dual-function crypto operations
509
+ CK_RV C_DigestEncryptUpdate(CK_SESSION_HANDLE session,
510
+ CK_BYTE *data,
511
+ CK_ULONG data_len,
512
+ CK_BYTE *encrypted,
513
+ CK_ULONG *encrypted_len) nogil
514
+
515
+ CK_RV C_DecryptDigestUpdate(CK_SESSION_HANDLE session,
516
+ CK_BYTE *encrypted,
517
+ CK_ULONG encrypted_len,
518
+ CK_BYTE *data,
519
+ CK_ULONG *data_len) nogil
520
+
521
+ CK_RV C_SignEncryptUpdate(CK_SESSION_HANDLE session,
522
+ CK_BYTE *part,
523
+ CK_ULONG part_len) nogil
524
+
525
+ CK_RV C_DecryptVerifyUpdate(CK_SESSION_HANDLE session,
526
+ CK_BYTE *text,
527
+ CK_ULONG text_len) nogil
528
+
529
+ ## key management
530
+ CK_RV C_GenerateKey(CK_SESSION_HANDLE session,
531
+ CK_MECHANISM *mechanism,
532
+ CK_ATTRIBUTE *template,
533
+ CK_ULONG count,
534
+ CK_OBJECT_HANDLE *key) nogil
535
+
536
+ CK_RV C_GenerateKeyPair(CK_SESSION_HANDLE session,
537
+ CK_MECHANISM *mechanism,
538
+ CK_ATTRIBUTE *public_template,
539
+ CK_ULONG public_count,
540
+ CK_ATTRIBUTE *private_template,
541
+ CK_ULONG private_count,
542
+ CK_OBJECT_HANDLE *public_key,
543
+ CK_OBJECT_HANDLE *private_key) nogil
544
+
545
+ CK_RV C_WrapKey(CK_SESSION_HANDLE session,
546
+ CK_MECHANISM *mechanism,
547
+ CK_OBJECT_HANDLE wrapping_key,
548
+ CK_OBJECT_HANDLE key_to_wrap,
549
+ CK_BYTE *wrapped_key,
550
+ CK_ULONG *wrapped_key_len) nogil
551
+
552
+ CK_RV C_UnwrapKey(CK_SESSION_HANDLE session,
553
+ CK_MECHANISM *mechanism,
554
+ CK_OBJECT_HANDLE unwrapping_key,
555
+ CK_BYTE *wrapped_key,
556
+ CK_ULONG wrapped_key_len,
557
+ CK_ATTRIBUTE *attrs,
558
+ CK_ULONG attr_len,
559
+ CK_OBJECT_HANDLE *unwrapped_key) nogil
560
+
561
+ CK_RV C_DeriveKey(CK_SESSION_HANDLE session,
562
+ CK_MECHANISM *mechanism,
563
+ CK_OBJECT_HANDLE src_key,
564
+ CK_ATTRIBUTE *template,
565
+ CK_ULONG count,
566
+ CK_OBJECT_HANDLE *new_key) nogil
567
+
568
+ ## random number generation
569
+ CK_RV C_SeedRandom(CK_SESSION_HANDLE session,
570
+ CK_BYTE *seed,
571
+ CK_ULONG length) nogil
572
+
573
+ CK_RV C_GenerateRandom(CK_SESSION_HANDLE session,
574
+ CK_BYTE *random,
575
+ CK_ULONG length) nogil
576
+
577
+
578
+ ## parallel processing
579
+ CK_RV C_GetFunctionStatus(CK_SESSION_HANDLE session) nogil
580
+
581
+ CK_RV C_CancelFunction(CK_SESSION_HANDLE session) nogil
582
+
583
+ ## smart card events
584
+ CK_RV C_WaitForSlotEvent(CK_FLAGS flags,
585
+ CK_SLOT_ID *slot,
586
+ void *pRserved) nogil
587
+
588
+ # The only external API call that must be defined in a PKCS#11 library
589
+ # All other APIs are taken from the CK_FUNCTION_LIST table
590
+ ctypedef CK_RV (*C_GetFunctionList_ptr) (CK_FUNCTION_LIST **) nogil
591
+
592
+
593
+ cdef inline CK_BYTE_buffer(length):
594
+ """Make a buffer for `length` CK_BYTEs."""
595
+ return array(shape=(length,), itemsize=sizeof(CK_BYTE), format='B')
596
+
597
+
598
+ cdef inline CK_ULONG_buffer(length):
599
+ """Make a buffer for `length` CK_ULONGs."""
600
+ return array(shape=(length,), itemsize=sizeof(CK_ULONG), format='L')
601
+
602
+
603
+ cdef inline bytes _pack_attribute(key, value):
604
+ """Pack a Attribute value into a bytes array."""
605
+
606
+ try:
607
+ pack, _ = ATTRIBUTE_TYPES[key]
608
+ return pack(value)
609
+ except KeyError:
610
+ raise NotImplementedError("Can't pack this %s. "
611
+ "Expand ATTRIBUTE_TYPES!" % key)
612
+
613
+
614
+ cdef inline _unpack_attributes(key, value):
615
+ """Unpack a Attribute bytes array into a Python value."""
616
+
617
+ try:
618
+ _, unpack = ATTRIBUTE_TYPES[key]
619
+ return unpack(bytes(value))
620
+ except KeyError:
621
+ raise NotImplementedError("Can't unpack this %s. "
622
+ "Expand ATTRIBUTE_TYPES!" % key)