python-pkcs11 0.9.2__cp314-cp314-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/_pkcs11.pxd ADDED
@@ -0,0 +1,799 @@
1
+ """
2
+ Definitions imported from PKCS11 C headers.
3
+ """
4
+
5
+ from cython.view cimport array
6
+
7
+ from pkcs11.exceptions 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_OPERATION_CANCEL_FAILED,
143
+
144
+ CKR_VENDOR_DEFINED,
145
+
146
+
147
+ ctypedef enum CK_USER_TYPE:
148
+ CKU_SO,
149
+ CKU_USER,
150
+ CKU_CONTEXT_SPECIFIC,
151
+ CKU_USER_NOBODY,
152
+
153
+ cdef enum:
154
+ CK_TRUE,
155
+ CK_FALSE,
156
+
157
+ cdef enum:
158
+ CK_UNAVAILABLE_INFORMATION,
159
+ CK_EFFECTIVELY_INFINITE,
160
+
161
+ cdef enum: # CK_FLAGS
162
+ CKF_DONT_BLOCK,
163
+ CKF_RW_SESSION,
164
+ CKF_SERIAL_SESSION,
165
+
166
+ cdef enum: # CKZ
167
+ CKZ_DATA_SPECIFIED,
168
+
169
+ cdef enum: # CK_STATE
170
+ CKS_RO_PUBLIC_SESSION,
171
+ CKS_RO_USER_FUNCTIONS,
172
+ CKS_RW_PUBLIC_SESSION,
173
+ CKS_RW_USER_FUNCTIONS,
174
+ CKS_RW_SO_FUNCTIONS
175
+
176
+ ctypedef struct CK_VERSION:
177
+ CK_BYTE major
178
+ CK_BYTE minor
179
+
180
+ ctypedef struct CK_INFO:
181
+ CK_VERSION cryptokiVersion;
182
+ CK_UTF8CHAR manufacturerID[32]
183
+ CK_FLAGS flags
184
+
185
+ CK_UTF8CHAR libraryDescription[32]
186
+ CK_VERSION libraryVersion;
187
+
188
+ ctypedef struct CK_SLOT_INFO:
189
+ CK_UTF8CHAR slotDescription[64]
190
+ CK_UTF8CHAR manufacturerID[32]
191
+ CK_FLAGS flags
192
+
193
+ CK_VERSION hardwareVersion
194
+ CK_VERSION firmwareVersion
195
+
196
+ ctypedef struct CK_MECHANISM_INFO:
197
+ CK_ULONG ulMinKeySize
198
+ CK_ULONG ulMaxKeySize
199
+ CK_FLAGS flags
200
+
201
+ ctypedef struct CK_TOKEN_INFO:
202
+ CK_UTF8CHAR label[32]
203
+ CK_UTF8CHAR manufacturerID[32]
204
+ CK_UTF8CHAR model[16]
205
+ CK_CHAR serialNumber[16]
206
+ CK_FLAGS flags
207
+
208
+ CK_ULONG ulMaxSessionCount
209
+ CK_ULONG ulSessionCount
210
+ CK_ULONG ulMaxRwSessionCount
211
+ CK_ULONG ulRwSessionCount
212
+ CK_ULONG ulMaxPinLen
213
+ CK_ULONG ulMinPinLen
214
+ CK_ULONG ulTotalPublicMemory
215
+ CK_ULONG ulFreePublicMemory
216
+ CK_ULONG ulTotalPrivateMemory
217
+ CK_ULONG ulFreePrivateMemory
218
+ CK_VERSION hardwareVersion
219
+ CK_VERSION firmwareVersion
220
+ CK_CHAR utcTime[16]
221
+
222
+ ctypedef struct CK_SESSION_INFO:
223
+ CK_SLOT_ID slotID
224
+ CK_STATE state
225
+ CK_FLAGS flags
226
+ CK_ULONG ulDeviceError
227
+
228
+ ctypedef struct CK_MECHANISM:
229
+ CK_MECHANISM_TYPE mechanism
230
+ void *pParameter
231
+ CK_ULONG ulParameterLen
232
+
233
+ ctypedef struct CK_ATTRIBUTE:
234
+ CK_ATTRIBUTE_TYPE type
235
+ void *pValue
236
+ CK_ULONG ulValueLen
237
+
238
+ ctypedef struct CK_RSA_PKCS_OAEP_PARAMS:
239
+ CK_MECHANISM_TYPE hashAlg
240
+ CK_RSA_PKCS_MGF_TYPE mgf
241
+ CK_RSA_PKCS_OAEP_SOURCE_TYPE source
242
+ void *pSourceData
243
+ CK_ULONG ulSourceDataLen
244
+
245
+ ctypedef struct CK_RSA_PKCS_PSS_PARAMS:
246
+ CK_MECHANISM_TYPE hashAlg
247
+ CK_RSA_PKCS_MGF_TYPE mgf
248
+ CK_ULONG sLen
249
+
250
+ ctypedef struct CK_ECDH1_DERIVE_PARAMS:
251
+ CK_EC_KDF_TYPE kdf
252
+ CK_ULONG ulSharedDataLen
253
+ CK_BYTE *pSharedData
254
+ CK_ULONG ulPublicDataLen
255
+ CK_BYTE *pPublicData
256
+
257
+ ctypedef struct CK_AES_CTR_PARAMS:
258
+ CK_ULONG ulCounterBits
259
+ CK_BYTE[16] cb
260
+
261
+ ctypedef struct CK_GCM_PARAMS:
262
+ CK_BYTE *pIv
263
+ CK_ULONG ulIvLen
264
+ CK_ULONG ulIvBits
265
+ CK_BYTE *pAAD
266
+ CK_ULONG ulAADLen
267
+ CK_ULONG ulTagBits
268
+
269
+ ctypedef struct CK_KEY_DERIVATION_STRING_DATA:
270
+ CK_BYTE *pData
271
+ CK_ULONG ulLen
272
+
273
+ ctypedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS:
274
+ CK_BYTE iv[16]
275
+ CK_BYTE *pData
276
+ CK_ULONG length
277
+
278
+ ctypedef struct CK_EDDSA_PARAMS:
279
+ CK_BBOOL phFlag
280
+ CK_ULONG ulContextDataLen
281
+ CK_BYTE *pContextData
282
+
283
+ cdef struct CK_FUNCTION_LIST:
284
+ CK_VERSION version
285
+ ## pointers to library functions are stored here
286
+ ## caution: order matters!
287
+
288
+ ## general purpose
289
+ CK_RV C_Initialize(void *) nogil
290
+
291
+ CK_RV C_Finalize(void *) nogil
292
+
293
+ CK_RV C_GetInfo(CK_INFO *info) nogil
294
+
295
+ CK_RV C_GetFunctionList(CK_FUNCTION_LIST **) nogil
296
+
297
+ ## slot and token management
298
+ CK_RV C_GetSlotList(CK_BBOOL tokenPresent,
299
+ CK_SLOT_ID *slotList,
300
+ CK_ULONG *count) nogil
301
+
302
+ CK_RV C_GetSlotInfo(CK_SLOT_ID slotID,
303
+ CK_SLOT_INFO *info) nogil
304
+
305
+ CK_RV C_GetTokenInfo(CK_SLOT_ID slotID,
306
+ CK_TOKEN_INFO *info) nogil
307
+
308
+ CK_RV C_GetMechanismList(CK_SLOT_ID slotID,
309
+ CK_MECHANISM_TYPE *mechanismList,
310
+ CK_ULONG *count) nogil
311
+
312
+ CK_RV C_GetMechanismInfo(CK_SLOT_ID slotID,
313
+ CK_MECHANISM_TYPE mechanism,
314
+ CK_MECHANISM_INFO *info) nogil
315
+
316
+ CK_RV C_InitToken(CK_SLOT_ID slotID,
317
+ CK_UTF8CHAR *pPin,
318
+ CK_ULONG ulPinLen,
319
+ CK_UTF8CHAR *pLabel) nogil
320
+
321
+ CK_RV C_InitPIN(CK_SESSION_HANDLE hSession,
322
+ CK_UTF8CHAR *pPin,
323
+ CK_ULONG ulPinLen) nogil
324
+
325
+ CK_RV C_SetPIN(CK_SESSION_HANDLE hSession,
326
+ CK_UTF8CHAR *pOldPin,
327
+ CK_ULONG ulOldLen,
328
+ CK_UTF8CHAR *pNewPin,
329
+ CK_ULONG ulNewLen) nogil
330
+
331
+ ## session management
332
+ CK_RV C_OpenSession(CK_SLOT_ID slotID,
333
+ CK_FLAGS flags,
334
+ void *application,
335
+ void *notify,
336
+ CK_SESSION_HANDLE *handle) nogil
337
+
338
+ CK_RV C_CloseSession(CK_SESSION_HANDLE session) nogil
339
+
340
+ CK_RV C_CloseAllSessions(CK_SLOT_ID slotID) nogil
341
+
342
+ CK_RV C_GetSessionInfo(CK_SESSION_HANDLE hSession,
343
+ CK_SESSION_INFO *pInfo) nogil
344
+
345
+ CK_RV C_GetOperationState(CK_SESSION_HANDLE hSession,
346
+ CK_BYTE *pOperationState,
347
+ CK_ULONG *pulOperationStateLen) nogil
348
+
349
+ CK_RV C_SetOperationState(CK_SESSION_HANDLE hSession,
350
+ CK_BYTE *pOperationState,
351
+ CK_ULONG ulOperationStateLen,
352
+ CK_OBJECT_HANDLE hEncryptionKey,
353
+ CK_OBJECT_HANDLE hAuthenticationKey) nogil
354
+
355
+ CK_RV C_Login(CK_SESSION_HANDLE session,
356
+ CK_USER_TYPE userType,
357
+ CK_UTF8CHAR *pin,
358
+ CK_ULONG pinLen) nogil
359
+
360
+ CK_RV C_Logout(CK_SESSION_HANDLE session) nogil
361
+
362
+ ## object management
363
+ CK_RV C_CreateObject(CK_SESSION_HANDLE session,
364
+ CK_ATTRIBUTE *template,
365
+ CK_ULONG count,
366
+ CK_OBJECT_HANDLE *key) nogil
367
+
368
+ CK_RV C_CopyObject(CK_SESSION_HANDLE session,
369
+ CK_OBJECT_HANDLE key,
370
+ CK_ATTRIBUTE *template,
371
+ CK_ULONG count,
372
+ CK_OBJECT_HANDLE *new_key) nogil
373
+
374
+ CK_RV C_DestroyObject(CK_SESSION_HANDLE session,
375
+ CK_OBJECT_HANDLE key) nogil
376
+
377
+ CK_RV C_GetObjectSize(CK_SESSION_HANDLE hSession,
378
+ CK_OBJECT_HANDLE hObject,
379
+ CK_ULONG *pulSize) nogil
380
+
381
+ CK_RV C_GetAttributeValue(CK_SESSION_HANDLE session,
382
+ CK_OBJECT_HANDLE key,
383
+ CK_ATTRIBUTE *template,
384
+ CK_ULONG count) nogil
385
+
386
+ CK_RV C_SetAttributeValue(CK_SESSION_HANDLE session,
387
+ CK_OBJECT_HANDLE key,
388
+ CK_ATTRIBUTE *template,
389
+ CK_ULONG count) nogil
390
+
391
+ CK_RV C_FindObjectsInit(CK_SESSION_HANDLE session,
392
+ CK_ATTRIBUTE *template,
393
+ CK_ULONG count) nogil
394
+
395
+ CK_RV C_FindObjects(CK_SESSION_HANDLE session,
396
+ CK_OBJECT_HANDLE *objects,
397
+ CK_ULONG objectsMax,
398
+ CK_ULONG *objectsLength) nogil
399
+
400
+ CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE session) nogil
401
+
402
+ ## encryption and decryption
403
+ CK_RV C_EncryptInit(CK_SESSION_HANDLE session,
404
+ CK_MECHANISM *mechanism,
405
+ CK_OBJECT_HANDLE key) nogil
406
+
407
+ CK_RV C_Encrypt(CK_SESSION_HANDLE session,
408
+ CK_BYTE *plaintext,
409
+ CK_ULONG plaintext_len,
410
+ CK_BYTE *ciphertext,
411
+ CK_ULONG *ciphertext_len) nogil
412
+
413
+ CK_RV C_EncryptUpdate(CK_SESSION_HANDLE session,
414
+ CK_BYTE *part_in,
415
+ CK_ULONG part_in_len,
416
+ CK_BYTE *part_out,
417
+ CK_ULONG *part_out_len) nogil
418
+
419
+ CK_RV C_EncryptFinal(CK_SESSION_HANDLE session,
420
+ CK_BYTE *part_out,
421
+ CK_ULONG *part_out_len) nogil
422
+
423
+ CK_RV C_DecryptInit(CK_SESSION_HANDLE session,
424
+ CK_MECHANISM *mechanism,
425
+ CK_OBJECT_HANDLE key) nogil
426
+
427
+ CK_RV C_Decrypt(CK_SESSION_HANDLE session,
428
+ CK_BYTE *ciphertext,
429
+ CK_ULONG ciphertext_len,
430
+ CK_BYTE *plaintext,
431
+ CK_ULONG *plaintext_len) nogil
432
+
433
+ CK_RV C_DecryptUpdate(CK_SESSION_HANDLE session,
434
+ CK_BYTE *part_in,
435
+ CK_ULONG part_in_len,
436
+ CK_BYTE *part_out,
437
+ CK_ULONG *part_out_len) nogil
438
+
439
+ CK_RV C_DecryptFinal(CK_SESSION_HANDLE session,
440
+ CK_BYTE *part_out,
441
+ CK_ULONG *part_out_len) nogil
442
+
443
+ ## Message digests
444
+ CK_RV C_DigestInit(CK_SESSION_HANDLE session,
445
+ CK_MECHANISM *mechanism) nogil
446
+
447
+ CK_RV C_Digest(CK_SESSION_HANDLE session,
448
+ CK_BYTE *data,
449
+ CK_ULONG data_len,
450
+ CK_BYTE *digest,
451
+ CK_ULONG *digest_len) nogil
452
+
453
+ CK_RV C_DigestUpdate(CK_SESSION_HANDLE session,
454
+ CK_BYTE *data,
455
+ CK_ULONG data_len) nogil
456
+
457
+ CK_RV C_DigestKey(CK_SESSION_HANDLE session,
458
+ CK_OBJECT_HANDLE key) nogil
459
+
460
+ CK_RV C_DigestFinal(CK_SESSION_HANDLE session,
461
+ CK_BYTE *digest,
462
+ CK_ULONG *digest_len) nogil
463
+
464
+ ## Signing and MACing
465
+ CK_RV C_SignInit(CK_SESSION_HANDLE session,
466
+ CK_MECHANISM *mechanism,
467
+ CK_OBJECT_HANDLE key) nogil
468
+
469
+ CK_RV C_Sign(CK_SESSION_HANDLE session,
470
+ CK_BYTE *text,
471
+ CK_ULONG text_len,
472
+ CK_BYTE *signature,
473
+ CK_ULONG *sig_len) nogil
474
+
475
+ CK_RV C_SignUpdate(CK_SESSION_HANDLE session,
476
+ CK_BYTE *part,
477
+ CK_ULONG part_len) nogil
478
+
479
+ CK_RV C_SignFinal(CK_SESSION_HANDLE session,
480
+ CK_BYTE *signature,
481
+ CK_ULONG *sig_len) nogil
482
+
483
+ CK_RV C_SignRecoverInit(CK_SESSION_HANDLE session,
484
+ CK_MECHANISM *mechanism,
485
+ CK_OBJECT_HANDLE key) nogil
486
+
487
+ CK_RV C_SignRecover(CK_SESSION_HANDLE session,
488
+ CK_BYTE *text,
489
+ CK_ULONG text_len,
490
+ CK_BYTE *signature,
491
+ CK_ULONG *sig_len) nogil
492
+
493
+
494
+ ## Verifying signatures and MACs
495
+ CK_RV C_VerifyInit(CK_SESSION_HANDLE session,
496
+ CK_MECHANISM *mechanism,
497
+ CK_OBJECT_HANDLE key) nogil
498
+
499
+ CK_RV C_Verify(CK_SESSION_HANDLE session,
500
+ CK_BYTE *text,
501
+ CK_ULONG text_len,
502
+ CK_BYTE *signature,
503
+ CK_ULONG sig_len) nogil
504
+
505
+ CK_RV C_VerifyUpdate(CK_SESSION_HANDLE session,
506
+ CK_BYTE *text,
507
+ CK_ULONG text_len) nogil
508
+
509
+ CK_RV C_VerifyFinal(CK_SESSION_HANDLE session,
510
+ CK_BYTE *signature,
511
+ CK_ULONG sig_len) nogil
512
+
513
+ CK_RV C_VerifyRecoverInit(CK_SESSION_HANDLE session,
514
+ CK_MECHANISM *mechanism,
515
+ CK_OBJECT_HANDLE key) nogil
516
+
517
+ CK_RV C_VerifyRecover(CK_SESSION_HANDLE session,
518
+ CK_BYTE *text,
519
+ CK_ULONG text_len,
520
+ CK_BYTE *signature,
521
+ CK_ULONG sig_len) nogil
522
+
523
+ ## dual-function crypto operations
524
+ CK_RV C_DigestEncryptUpdate(CK_SESSION_HANDLE session,
525
+ CK_BYTE *data,
526
+ CK_ULONG data_len,
527
+ CK_BYTE *encrypted,
528
+ CK_ULONG *encrypted_len) nogil
529
+
530
+ CK_RV C_DecryptDigestUpdate(CK_SESSION_HANDLE session,
531
+ CK_BYTE *encrypted,
532
+ CK_ULONG encrypted_len,
533
+ CK_BYTE *data,
534
+ CK_ULONG *data_len) nogil
535
+
536
+ CK_RV C_SignEncryptUpdate(CK_SESSION_HANDLE session,
537
+ CK_BYTE *part,
538
+ CK_ULONG part_len) nogil
539
+
540
+ CK_RV C_DecryptVerifyUpdate(CK_SESSION_HANDLE session,
541
+ CK_BYTE *text,
542
+ CK_ULONG text_len) nogil
543
+
544
+ ## key management
545
+ CK_RV C_GenerateKey(CK_SESSION_HANDLE session,
546
+ CK_MECHANISM *mechanism,
547
+ CK_ATTRIBUTE *template,
548
+ CK_ULONG count,
549
+ CK_OBJECT_HANDLE *key) nogil
550
+
551
+ CK_RV C_GenerateKeyPair(CK_SESSION_HANDLE session,
552
+ CK_MECHANISM *mechanism,
553
+ CK_ATTRIBUTE *public_template,
554
+ CK_ULONG public_count,
555
+ CK_ATTRIBUTE *private_template,
556
+ CK_ULONG private_count,
557
+ CK_OBJECT_HANDLE *public_key,
558
+ CK_OBJECT_HANDLE *private_key) nogil
559
+
560
+ CK_RV C_WrapKey(CK_SESSION_HANDLE session,
561
+ CK_MECHANISM *mechanism,
562
+ CK_OBJECT_HANDLE wrapping_key,
563
+ CK_OBJECT_HANDLE key_to_wrap,
564
+ CK_BYTE *wrapped_key,
565
+ CK_ULONG *wrapped_key_len) nogil
566
+
567
+ CK_RV C_UnwrapKey(CK_SESSION_HANDLE session,
568
+ CK_MECHANISM *mechanism,
569
+ CK_OBJECT_HANDLE unwrapping_key,
570
+ CK_BYTE *wrapped_key,
571
+ CK_ULONG wrapped_key_len,
572
+ CK_ATTRIBUTE *attrs,
573
+ CK_ULONG attr_len,
574
+ CK_OBJECT_HANDLE *unwrapped_key) nogil
575
+
576
+ CK_RV C_DeriveKey(CK_SESSION_HANDLE session,
577
+ CK_MECHANISM *mechanism,
578
+ CK_OBJECT_HANDLE src_key,
579
+ CK_ATTRIBUTE *template,
580
+ CK_ULONG count,
581
+ CK_OBJECT_HANDLE *new_key) nogil
582
+
583
+ ## random number generation
584
+ CK_RV C_SeedRandom(CK_SESSION_HANDLE session,
585
+ CK_BYTE *seed,
586
+ CK_ULONG length) nogil
587
+
588
+ CK_RV C_GenerateRandom(CK_SESSION_HANDLE session,
589
+ CK_BYTE *random,
590
+ CK_ULONG length) nogil
591
+
592
+
593
+ ## parallel processing
594
+ CK_RV C_GetFunctionStatus(CK_SESSION_HANDLE session) nogil
595
+
596
+ CK_RV C_CancelFunction(CK_SESSION_HANDLE session) nogil
597
+
598
+ ## smart card events
599
+ CK_RV C_WaitForSlotEvent(CK_FLAGS flags,
600
+ CK_SLOT_ID *slot,
601
+ void *pRserved) nogil
602
+
603
+ # The only external API call that must be defined in a PKCS#11 library
604
+ # All other APIs are taken from the CK_FUNCTION_LIST table
605
+ ctypedef CK_RV (*C_GetFunctionList_ptr) (CK_FUNCTION_LIST **) nogil
606
+
607
+ ctypedef CK_RV (*KeyOperationInit) (
608
+ CK_SESSION_HANDLE session,
609
+ CK_MECHANISM *mechanism,
610
+ CK_OBJECT_HANDLE key
611
+ ) nogil
612
+ ctypedef CK_RV (*OperationUpdateWithResult) (
613
+ CK_SESSION_HANDLE session,
614
+ CK_BYTE *part_in,
615
+ CK_ULONG part_in_len,
616
+ CK_BYTE *part_out,
617
+ CK_ULONG *part_out_len
618
+ ) nogil
619
+ ctypedef CK_RV (*OperationUpdate) (
620
+ CK_SESSION_HANDLE session,
621
+ CK_BYTE *part_in,
622
+ CK_ULONG part_in_len
623
+ ) nogil
624
+ ctypedef CK_RV (*OperationWithResult) (
625
+ CK_SESSION_HANDLE session,
626
+ CK_BYTE *part_out,
627
+ CK_ULONG *part_out_len
628
+ ) nogil
629
+
630
+ cdef inline CK_BYTE_buffer(length):
631
+ """Make a buffer for `length` CK_BYTEs."""
632
+ return array(shape=(length,), itemsize=sizeof(CK_BYTE), format='B')
633
+
634
+
635
+ cdef inline CK_ULONG_buffer(length):
636
+ """Make a buffer for `length` CK_ULONGs."""
637
+ return array(shape=(length,), itemsize=sizeof(CK_ULONG), format='L')
638
+
639
+
640
+ # Note: this `cdef inline` declaration doesn't seem to be consistently labelled
641
+ # as executed by Cython's line tracing, so we flag it as nocover
642
+ # to avoid noise in the metrics.
643
+
644
+ cdef inline object map_rv_to_error(CK_RV rv): # pragma: nocover
645
+ if rv == CKR_ATTRIBUTE_TYPE_INVALID:
646
+ exc = AttributeTypeInvalid()
647
+ elif rv == CKR_ATTRIBUTE_VALUE_INVALID:
648
+ exc = AttributeValueInvalid()
649
+ elif rv == CKR_ATTRIBUTE_READ_ONLY:
650
+ exc = AttributeReadOnly()
651
+ elif rv == CKR_ATTRIBUTE_SENSITIVE:
652
+ exc = AttributeSensitive()
653
+ elif rv == CKR_ARGUMENTS_BAD:
654
+ exc = ArgumentsBad()
655
+ elif rv == CKR_BUFFER_TOO_SMALL:
656
+ exc = PKCS11Error("Buffer was too small. Should never see this.")
657
+ elif rv == CKR_CRYPTOKI_ALREADY_INITIALIZED:
658
+ exc = PKCS11Error("Initialisation error (already initialized). Should never see this.")
659
+ elif rv == CKR_CRYPTOKI_NOT_INITIALIZED:
660
+ exc = PKCS11Error("Initialisation error (not initialized). Should never see this.")
661
+ elif rv == CKR_DATA_INVALID:
662
+ exc = DataInvalid()
663
+ elif rv == CKR_DATA_LEN_RANGE:
664
+ exc = DataLenRange()
665
+ elif rv == CKR_DOMAIN_PARAMS_INVALID:
666
+ exc = DomainParamsInvalid()
667
+ elif rv == CKR_DEVICE_ERROR:
668
+ exc = DeviceError()
669
+ elif rv == CKR_DEVICE_MEMORY:
670
+ exc = DeviceMemory()
671
+ elif rv == CKR_DEVICE_REMOVED:
672
+ exc = DeviceRemoved()
673
+ elif rv == CKR_ENCRYPTED_DATA_INVALID:
674
+ exc = EncryptedDataInvalid()
675
+ elif rv == CKR_ENCRYPTED_DATA_LEN_RANGE:
676
+ exc = EncryptedDataLenRange()
677
+ elif rv == CKR_EXCEEDED_MAX_ITERATIONS:
678
+ exc = ExceededMaxIterations()
679
+ elif rv == CKR_FUNCTION_CANCELED:
680
+ exc = FunctionCancelled()
681
+ elif rv == CKR_FUNCTION_FAILED:
682
+ exc = FunctionFailed()
683
+ elif rv == CKR_FUNCTION_REJECTED:
684
+ exc = FunctionRejected()
685
+ elif rv == CKR_FUNCTION_NOT_SUPPORTED:
686
+ exc = FunctionNotSupported()
687
+ elif rv == CKR_KEY_HANDLE_INVALID:
688
+ exc = KeyHandleInvalid()
689
+ elif rv == CKR_KEY_INDIGESTIBLE:
690
+ exc = KeyIndigestible()
691
+ elif rv == CKR_KEY_NEEDED:
692
+ exc = KeyNeeded()
693
+ elif rv == CKR_KEY_NOT_NEEDED:
694
+ exc = KeyNotNeeded()
695
+ elif rv == CKR_KEY_SIZE_RANGE:
696
+ exc = KeySizeRange()
697
+ elif rv == CKR_KEY_NOT_WRAPPABLE:
698
+ exc = KeyNotWrappable()
699
+ elif rv == CKR_KEY_TYPE_INCONSISTENT:
700
+ exc = KeyTypeInconsistent()
701
+ elif rv == CKR_KEY_UNEXTRACTABLE:
702
+ exc = KeyUnextractable()
703
+ elif rv == CKR_GENERAL_ERROR:
704
+ exc = GeneralError()
705
+ elif rv == CKR_HOST_MEMORY:
706
+ exc = HostMemory()
707
+ elif rv == CKR_MECHANISM_INVALID:
708
+ exc = MechanismInvalid()
709
+ elif rv == CKR_MECHANISM_PARAM_INVALID:
710
+ exc = MechanismParamInvalid()
711
+ elif rv == CKR_NO_EVENT:
712
+ exc = NoEvent()
713
+ elif rv == CKR_OBJECT_HANDLE_INVALID:
714
+ exc = ObjectHandleInvalid()
715
+ elif rv == CKR_OPERATION_ACTIVE:
716
+ exc = OperationActive()
717
+ elif rv == CKR_OPERATION_NOT_INITIALIZED:
718
+ exc = OperationNotInitialized()
719
+ elif rv == CKR_PIN_EXPIRED:
720
+ exc = PinExpired()
721
+ elif rv == CKR_PIN_INCORRECT:
722
+ exc = PinIncorrect()
723
+ elif rv == CKR_PIN_INVALID:
724
+ exc = PinInvalid()
725
+ elif rv == CKR_PIN_LEN_RANGE:
726
+ exc = PinLenRange()
727
+ elif rv == CKR_PIN_LOCKED:
728
+ exc = PinLocked()
729
+ elif rv == CKR_PIN_TOO_WEAK:
730
+ exc = PinTooWeak()
731
+ elif rv == CKR_PUBLIC_KEY_INVALID:
732
+ exc = PublicKeyInvalid()
733
+ elif rv == CKR_RANDOM_NO_RNG:
734
+ exc = RandomNoRNG()
735
+ elif rv == CKR_RANDOM_SEED_NOT_SUPPORTED:
736
+ exc = RandomSeedNotSupported()
737
+ elif rv == CKR_SESSION_CLOSED:
738
+ exc = SessionClosed()
739
+ elif rv == CKR_SESSION_COUNT:
740
+ exc = SessionCount()
741
+ elif rv == CKR_SESSION_EXISTS:
742
+ exc = SessionExists()
743
+ elif rv == CKR_SESSION_HANDLE_INVALID:
744
+ exc = SessionHandleInvalid()
745
+ elif rv == CKR_SESSION_PARALLEL_NOT_SUPPORTED:
746
+ exc = PKCS11Error("Parallel not supported. Should never see this.")
747
+ elif rv == CKR_SESSION_READ_ONLY:
748
+ exc = SessionReadOnly()
749
+ elif rv == CKR_SESSION_READ_ONLY_EXISTS:
750
+ exc = SessionReadOnlyExists()
751
+ elif rv == CKR_SESSION_READ_WRITE_SO_EXISTS:
752
+ exc = SessionReadWriteSOExists()
753
+ elif rv == CKR_SIGNATURE_LEN_RANGE:
754
+ exc = SignatureLenRange()
755
+ elif rv == CKR_SIGNATURE_INVALID:
756
+ exc = SignatureInvalid()
757
+ elif rv == CKR_TEMPLATE_INCOMPLETE:
758
+ exc = TemplateIncomplete()
759
+ elif rv == CKR_TEMPLATE_INCONSISTENT:
760
+ exc = TemplateInconsistent()
761
+ elif rv == CKR_SLOT_ID_INVALID:
762
+ exc = SlotIDInvalid()
763
+ elif rv == CKR_TOKEN_NOT_PRESENT:
764
+ exc = TokenNotPresent()
765
+ elif rv == CKR_TOKEN_NOT_RECOGNIZED:
766
+ exc = TokenNotRecognised()
767
+ elif rv == CKR_TOKEN_WRITE_PROTECTED:
768
+ exc = TokenWriteProtected()
769
+ elif rv == CKR_UNWRAPPING_KEY_HANDLE_INVALID:
770
+ exc = UnwrappingKeyHandleInvalid()
771
+ elif rv == CKR_UNWRAPPING_KEY_SIZE_RANGE:
772
+ exc = UnwrappingKeySizeRange()
773
+ elif rv == CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT:
774
+ exc = UnwrappingKeyTypeInconsistent()
775
+ elif rv == CKR_USER_NOT_LOGGED_IN:
776
+ exc = UserNotLoggedIn()
777
+ elif rv == CKR_USER_ALREADY_LOGGED_IN:
778
+ exc = UserAlreadyLoggedIn()
779
+ elif rv == CKR_USER_ANOTHER_ALREADY_LOGGED_IN:
780
+ exc = AnotherUserAlreadyLoggedIn()
781
+ elif rv == CKR_USER_PIN_NOT_INITIALIZED:
782
+ exc = UserPinNotInitialized()
783
+ elif rv == CKR_USER_TOO_MANY_TYPES:
784
+ exc = UserTooManyTypes()
785
+ elif rv == CKR_USER_TYPE_INVALID:
786
+ exc = PKCS11Error("User type invalid. Should never see this.")
787
+ elif rv == CKR_WRAPPED_KEY_INVALID:
788
+ exc = WrappedKeyInvalid()
789
+ elif rv == CKR_WRAPPED_KEY_LEN_RANGE:
790
+ exc = WrappedKeyLenRange()
791
+ elif rv == CKR_WRAPPING_KEY_HANDLE_INVALID:
792
+ exc = WrappingKeyHandleInvalid()
793
+ elif rv == CKR_WRAPPING_KEY_SIZE_RANGE:
794
+ exc = WrappingKeySizeRange()
795
+ elif rv == CKR_WRAPPING_KEY_TYPE_INCONSISTENT:
796
+ exc = WrappingKeyTypeInconsistent()
797
+ else:
798
+ exc = PKCS11Error("Unmapped error code %s" % hex(rv))
799
+ return exc