-
Notifications
You must be signed in to change notification settings - Fork 12
/
pk11_const.c
680 lines (655 loc) · 29.4 KB
/
pk11_const.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
#include "pk11.h"
#define PKCS11_DEFINE_CONST(constant) \
rb_define_const(cPKCS11, #constant, INT2NUM(constant))
#define PKCS11_DEFINE_CONST_GROUP(group, name, value) \
do { \
VALUE rvalue = ULONG2NUM(value); \
VALUE str = rb_obj_freeze(rb_str_new2(name)); \
VALUE old = rb_hash_aref(group, rvalue); \
if (!NIL_P(old)) rb_warning("%s is equal to %s", RSTRING_PTR(old), name); \
rb_hash_aset(group, rvalue, str); \
rb_define_const(cPKCS11, name, rvalue); \
} while(0)
#define PKCS11_DEFINE_OBJECT_CLASS(constant) \
PKCS11_DEFINE_CONST_GROUP(vOBJECT_CLASSES, #constant, constant)
#define PKCS11_DEFINE_ATTRIBUTE(constant) \
PKCS11_DEFINE_CONST_GROUP(vATTRIBUTES, #constant, constant)
#define PKCS11_DEFINE_MECHANISM(constant) \
PKCS11_DEFINE_CONST_GROUP(vMECHANISMS, #constant, constant)
#define PKCS11_DEFINE_RETURN_VALUE(constant) \
PKCS11_DEFINE_CONST_GROUP(vRETURN_VALUES, #constant, constant)
static VALUE vOBJECT_CLASSES;
static VALUE vATTRIBUTES;
static VALUE vMECHANISMS;
static VALUE vRETURN_VALUES;
VALUE
pkcs11_return_value_to_name(CK_RV rv)
{
VALUE name;
name = rb_hash_aref(vRETURN_VALUES, INT2NUM(rv));
if (NIL_P(name)){
char buf[16];
snprintf(buf, sizeof(buf), "0x%08x", (unsigned int)rv);
name = rb_obj_freeze(rb_str_new2(buf));
}
return name;
}
void
Init_pkcs11_const(VALUE cPKCS11)
{
PKCS11_DEFINE_CONST(CRYPTOKI_VERSION_MAJOR);
PKCS11_DEFINE_CONST(CRYPTOKI_VERSION_MINOR);
PKCS11_DEFINE_CONST(CRYPTOKI_VERSION_AMENDMENT);
/* General constant */
PKCS11_DEFINE_CONST(CK_UNAVAILABLE_INFORMATION);
PKCS11_DEFINE_CONST(CK_EFFECTIVELY_INFINITE);
PKCS11_DEFINE_CONST(CK_INVALID_HANDLE);
/* Notification */
PKCS11_DEFINE_CONST(CKN_SURRENDER);
/* Bit flag */
PKCS11_DEFINE_CONST(CKF_TOKEN_PRESENT);
PKCS11_DEFINE_CONST(CKF_REMOVABLE_DEVICE);
PKCS11_DEFINE_CONST(CKF_HW_SLOT);
PKCS11_DEFINE_CONST(CKF_RNG);
PKCS11_DEFINE_CONST(CKF_WRITE_PROTECTED);
PKCS11_DEFINE_CONST(CKF_LOGIN_REQUIRED);
PKCS11_DEFINE_CONST(CKF_USER_PIN_INITIALIZED);
PKCS11_DEFINE_CONST(CKF_RESTORE_KEY_NOT_NEEDED);
PKCS11_DEFINE_CONST(CKF_CLOCK_ON_TOKEN);
PKCS11_DEFINE_CONST(CKF_PROTECTED_AUTHENTICATION_PATH);
PKCS11_DEFINE_CONST(CKF_DUAL_CRYPTO_OPERATIONS);
PKCS11_DEFINE_CONST(CKF_TOKEN_INITIALIZED);
PKCS11_DEFINE_CONST(CKF_SECONDARY_AUTHENTICATION);
PKCS11_DEFINE_CONST(CKF_USER_PIN_COUNT_LOW);
PKCS11_DEFINE_CONST(CKF_USER_PIN_FINAL_TRY);
PKCS11_DEFINE_CONST(CKF_USER_PIN_LOCKED);
PKCS11_DEFINE_CONST(CKF_USER_PIN_TO_BE_CHANGED);
PKCS11_DEFINE_CONST(CKF_SO_PIN_COUNT_LOW);
PKCS11_DEFINE_CONST(CKF_SO_PIN_FINAL_TRY);
PKCS11_DEFINE_CONST(CKF_SO_PIN_LOCKED);
PKCS11_DEFINE_CONST(CKF_SO_PIN_TO_BE_CHANGED);
PKCS11_DEFINE_CONST(CKF_RW_SESSION);
PKCS11_DEFINE_CONST(CKF_SERIAL_SESSION);
PKCS11_DEFINE_CONST(CKF_LIBRARY_CANT_CREATE_OS_THREADS);
PKCS11_DEFINE_CONST(CKF_OS_LOCKING_OK);
PKCS11_DEFINE_CONST(CKF_DONT_BLOCK);
PKCS11_DEFINE_CONST(CKF_HW);
PKCS11_DEFINE_CONST(CKF_ENCRYPT);
PKCS11_DEFINE_CONST(CKF_DECRYPT);
PKCS11_DEFINE_CONST(CKF_DIGEST);
PKCS11_DEFINE_CONST(CKF_SIGN);
PKCS11_DEFINE_CONST(CKF_SIGN_RECOVER);
PKCS11_DEFINE_CONST(CKF_VERIFY);
PKCS11_DEFINE_CONST(CKF_VERIFY_RECOVER);
PKCS11_DEFINE_CONST(CKF_GENERATE);
PKCS11_DEFINE_CONST(CKF_GENERATE_KEY_PAIR);
PKCS11_DEFINE_CONST(CKF_WRAP);
PKCS11_DEFINE_CONST(CKF_UNWRAP);
PKCS11_DEFINE_CONST(CKF_DERIVE);
PKCS11_DEFINE_CONST(CKF_EC_F_P);
PKCS11_DEFINE_CONST(CKF_EC_F_2M);
PKCS11_DEFINE_CONST(CKF_EC_ECPARAMETERS);
PKCS11_DEFINE_CONST(CKF_EC_NAMEDCURVE);
PKCS11_DEFINE_CONST(CKF_EC_UNCOMPRESS);
PKCS11_DEFINE_CONST(CKF_EC_COMPRESS);
PKCS11_DEFINE_CONST(CKF_EXTENSION);
PKCS11_DEFINE_CONST(CKF_ARRAY_ATTRIBUTE);
PKCS11_DEFINE_CONST(CKF_EXCLUDE_CHALLENGE);
PKCS11_DEFINE_CONST(CKF_EXCLUDE_COUNTER);
PKCS11_DEFINE_CONST(CKF_EXCLUDE_PIN);
PKCS11_DEFINE_CONST(CKF_EXCLUDE_TIME);
PKCS11_DEFINE_CONST(CKF_NEXT_OTP);
PKCS11_DEFINE_CONST(CKF_USER_FRIENDLY_OTP);
/* User type */
PKCS11_DEFINE_CONST(CKU_SO);
PKCS11_DEFINE_CONST(CKU_USER);
PKCS11_DEFINE_CONST(CKU_CONTEXT_SPECIFIC);
/* Hardware feature type */
PKCS11_DEFINE_CONST(CKH_MONOTONIC_COUNTER);
PKCS11_DEFINE_CONST(CKH_CLOCK);
PKCS11_DEFINE_CONST(CKH_USER_INTERFACE);
PKCS11_DEFINE_CONST(CKH_VENDOR_DEFINED);
/* Key type */
PKCS11_DEFINE_CONST(CKK_RSA);
PKCS11_DEFINE_CONST(CKK_DSA);
PKCS11_DEFINE_CONST(CKK_DH);
PKCS11_DEFINE_CONST(CKK_ECDSA);
PKCS11_DEFINE_CONST(CKK_EC);
PKCS11_DEFINE_CONST(CKK_X9_42_DH);
PKCS11_DEFINE_CONST(CKK_KEA);
PKCS11_DEFINE_CONST(CKK_GENERIC_SECRET);
PKCS11_DEFINE_CONST(CKK_RC2);
PKCS11_DEFINE_CONST(CKK_RC4);
PKCS11_DEFINE_CONST(CKK_DES);
PKCS11_DEFINE_CONST(CKK_DES2);
PKCS11_DEFINE_CONST(CKK_DES3);
PKCS11_DEFINE_CONST(CKK_CAST);
PKCS11_DEFINE_CONST(CKK_CAST3);
PKCS11_DEFINE_CONST(CKK_CAST5);
PKCS11_DEFINE_CONST(CKK_CAST128);
PKCS11_DEFINE_CONST(CKK_RC5);
PKCS11_DEFINE_CONST(CKK_IDEA);
PKCS11_DEFINE_CONST(CKK_SKIPJACK);
PKCS11_DEFINE_CONST(CKK_BATON);
PKCS11_DEFINE_CONST(CKK_JUNIPER);
PKCS11_DEFINE_CONST(CKK_CDMF);
PKCS11_DEFINE_CONST(CKK_AES);
PKCS11_DEFINE_CONST(CKK_ACTI);
PKCS11_DEFINE_CONST(CKK_ARIA);
PKCS11_DEFINE_CONST(CKK_BLOWFISH);
PKCS11_DEFINE_CONST(CKK_CAMELLIA);
PKCS11_DEFINE_CONST(CKK_HOTP);
PKCS11_DEFINE_CONST(CKK_SECURID);
PKCS11_DEFINE_CONST(CKK_TWOFISH);
PKCS11_DEFINE_CONST(CKK_VENDOR_DEFINED);
/* Certificate type */
PKCS11_DEFINE_CONST(CKC_X_509);
PKCS11_DEFINE_CONST(CKC_X_509_ATTR_CERT);
PKCS11_DEFINE_CONST(CKC_WTLS);
PKCS11_DEFINE_CONST(CKC_VENDOR_DEFINED);
/* Session state */
PKCS11_DEFINE_CONST(CKS_RO_PUBLIC_SESSION);
PKCS11_DEFINE_CONST(CKS_RO_USER_FUNCTIONS);
PKCS11_DEFINE_CONST(CKS_RW_PUBLIC_SESSION);
PKCS11_DEFINE_CONST(CKS_RW_USER_FUNCTIONS);
PKCS11_DEFINE_CONST(CKS_RW_SO_FUNCTIONS);
/* Mask generation function */
PKCS11_DEFINE_CONST(CKG_MGF1_SHA1);
PKCS11_DEFINE_CONST(CKG_MGF1_SHA224);
PKCS11_DEFINE_CONST(CKG_MGF1_SHA256);
PKCS11_DEFINE_CONST(CKG_MGF1_SHA384);
PKCS11_DEFINE_CONST(CKG_MGF1_SHA512);
/* Key delivation function */
PKCS11_DEFINE_CONST(CKD_NULL);
PKCS11_DEFINE_CONST(CKD_SHA1_KDF);
PKCS11_DEFINE_CONST(CKD_SHA1_KDF_ASN1);
PKCS11_DEFINE_CONST(CKD_SHA1_KDF_CONCATENATE);
/* Pseudo-random function */
PKCS11_DEFINE_CONST(CKP_PKCS5_PBKD2_HMAC_SHA1);
/* Salt/Encoding parameter store */
PKCS11_DEFINE_CONST(CKZ_DATA_SPECIFIED);
PKCS11_DEFINE_CONST(CKZ_SALT_SPECIFIED);
vOBJECT_CLASSES = rb_hash_new();
PKCS11_DEFINE_OBJECT_CLASS(CKO_DATA);
PKCS11_DEFINE_OBJECT_CLASS(CKO_CERTIFICATE);
PKCS11_DEFINE_OBJECT_CLASS(CKO_PUBLIC_KEY);
PKCS11_DEFINE_OBJECT_CLASS(CKO_PRIVATE_KEY);
PKCS11_DEFINE_OBJECT_CLASS(CKO_SECRET_KEY);
PKCS11_DEFINE_OBJECT_CLASS(CKO_HW_FEATURE);
PKCS11_DEFINE_OBJECT_CLASS(CKO_DOMAIN_PARAMETERS);
PKCS11_DEFINE_OBJECT_CLASS(CKO_MECHANISM);
PKCS11_DEFINE_OBJECT_CLASS(CKO_OTP_KEY);
PKCS11_DEFINE_OBJECT_CLASS(CKO_VENDOR_DEFINED);
rb_obj_freeze(vOBJECT_CLASSES);
rb_define_const(cPKCS11, "OBJECT_CLASSES", vOBJECT_CLASSES);
vATTRIBUTES = rb_hash_new();
PKCS11_DEFINE_ATTRIBUTE(CKA_CLASS);
PKCS11_DEFINE_ATTRIBUTE(CKA_TOKEN);
PKCS11_DEFINE_ATTRIBUTE(CKA_PRIVATE);
PKCS11_DEFINE_ATTRIBUTE(CKA_LABEL);
PKCS11_DEFINE_ATTRIBUTE(CKA_APPLICATION);
PKCS11_DEFINE_ATTRIBUTE(CKA_VALUE);
PKCS11_DEFINE_ATTRIBUTE(CKA_OBJECT_ID);
PKCS11_DEFINE_ATTRIBUTE(CKA_CERTIFICATE_TYPE);
PKCS11_DEFINE_ATTRIBUTE(CKA_ISSUER);
PKCS11_DEFINE_ATTRIBUTE(CKA_SERIAL_NUMBER);
PKCS11_DEFINE_ATTRIBUTE(CKA_AC_ISSUER);
PKCS11_DEFINE_ATTRIBUTE(CKA_OWNER);
PKCS11_DEFINE_ATTRIBUTE(CKA_ATTR_TYPES);
PKCS11_DEFINE_ATTRIBUTE(CKA_TRUSTED);
PKCS11_DEFINE_ATTRIBUTE(CKA_KEY_TYPE);
PKCS11_DEFINE_ATTRIBUTE(CKA_SUBJECT);
PKCS11_DEFINE_ATTRIBUTE(CKA_ID);
PKCS11_DEFINE_ATTRIBUTE(CKA_SENSITIVE);
PKCS11_DEFINE_ATTRIBUTE(CKA_ENCRYPT);
PKCS11_DEFINE_ATTRIBUTE(CKA_DECRYPT);
PKCS11_DEFINE_ATTRIBUTE(CKA_WRAP);
PKCS11_DEFINE_ATTRIBUTE(CKA_UNWRAP);
PKCS11_DEFINE_ATTRIBUTE(CKA_SIGN);
PKCS11_DEFINE_ATTRIBUTE(CKA_SIGN_RECOVER);
PKCS11_DEFINE_ATTRIBUTE(CKA_VERIFY);
PKCS11_DEFINE_ATTRIBUTE(CKA_VERIFY_RECOVER);
PKCS11_DEFINE_ATTRIBUTE(CKA_DERIVE);
PKCS11_DEFINE_ATTRIBUTE(CKA_START_DATE);
PKCS11_DEFINE_ATTRIBUTE(CKA_END_DATE);
PKCS11_DEFINE_ATTRIBUTE(CKA_MODULUS);
PKCS11_DEFINE_ATTRIBUTE(CKA_MODULUS_BITS);
PKCS11_DEFINE_ATTRIBUTE(CKA_PUBLIC_EXPONENT);
PKCS11_DEFINE_ATTRIBUTE(CKA_PRIVATE_EXPONENT);
PKCS11_DEFINE_ATTRIBUTE(CKA_PRIME_1);
PKCS11_DEFINE_ATTRIBUTE(CKA_PRIME_2);
PKCS11_DEFINE_ATTRIBUTE(CKA_EXPONENT_1);
PKCS11_DEFINE_ATTRIBUTE(CKA_EXPONENT_2);
PKCS11_DEFINE_ATTRIBUTE(CKA_COEFFICIENT);
PKCS11_DEFINE_ATTRIBUTE(CKA_PRIME);
PKCS11_DEFINE_ATTRIBUTE(CKA_SUBPRIME);
PKCS11_DEFINE_ATTRIBUTE(CKA_BASE);
PKCS11_DEFINE_ATTRIBUTE(CKA_PRIME_BITS);
PKCS11_DEFINE_ATTRIBUTE(CKA_SUBPRIME_BITS);
PKCS11_DEFINE_ATTRIBUTE(CKA_SUB_PRIME_BITS);
PKCS11_DEFINE_ATTRIBUTE(CKA_VALUE_BITS);
PKCS11_DEFINE_ATTRIBUTE(CKA_VALUE_LEN);
PKCS11_DEFINE_ATTRIBUTE(CKA_EXTRACTABLE);
PKCS11_DEFINE_ATTRIBUTE(CKA_LOCAL);
PKCS11_DEFINE_ATTRIBUTE(CKA_NEVER_EXTRACTABLE);
PKCS11_DEFINE_ATTRIBUTE(CKA_ALWAYS_SENSITIVE);
PKCS11_DEFINE_ATTRIBUTE(CKA_KEY_GEN_MECHANISM);
PKCS11_DEFINE_ATTRIBUTE(CKA_MODIFIABLE);
PKCS11_DEFINE_ATTRIBUTE(CKA_ECDSA_PARAMS);
PKCS11_DEFINE_ATTRIBUTE(CKA_EC_PARAMS);
PKCS11_DEFINE_ATTRIBUTE(CKA_EC_POINT);
PKCS11_DEFINE_ATTRIBUTE(CKA_SECONDARY_AUTH);
PKCS11_DEFINE_ATTRIBUTE(CKA_AUTH_PIN_FLAGS);
PKCS11_DEFINE_ATTRIBUTE(CKA_HW_FEATURE_TYPE);
PKCS11_DEFINE_ATTRIBUTE(CKA_RESET_ON_INIT);
PKCS11_DEFINE_ATTRIBUTE(CKA_HAS_RESET);
PKCS11_DEFINE_ATTRIBUTE(CKA_VENDOR_DEFINED);
PKCS11_DEFINE_ATTRIBUTE(CKA_ALLOWED_MECHANISMS);
PKCS11_DEFINE_ATTRIBUTE(CKA_ALWAYS_AUTHENTICATE);
PKCS11_DEFINE_ATTRIBUTE(CKA_BITS_PER_PIXEL);
PKCS11_DEFINE_ATTRIBUTE(CKA_CERTIFICATE_CATEGORY);
PKCS11_DEFINE_ATTRIBUTE(CKA_CHAR_COLUMNS);
PKCS11_DEFINE_ATTRIBUTE(CKA_CHAR_ROWS);
PKCS11_DEFINE_ATTRIBUTE(CKA_CHAR_SETS);
PKCS11_DEFINE_ATTRIBUTE(CKA_CHECK_VALUE);
PKCS11_DEFINE_ATTRIBUTE(CKA_COLOR);
PKCS11_DEFINE_ATTRIBUTE(CKA_DEFAULT_CMS_ATTRIBUTES);
PKCS11_DEFINE_ATTRIBUTE(CKA_ENCODING_METHODS);
PKCS11_DEFINE_ATTRIBUTE(CKA_HASH_OF_ISSUER_PUBLIC_KEY);
PKCS11_DEFINE_ATTRIBUTE(CKA_HASH_OF_SUBJECT_PUBLIC_KEY);
PKCS11_DEFINE_ATTRIBUTE(CKA_JAVA_MIDP_SECURITY_DOMAIN);
PKCS11_DEFINE_ATTRIBUTE(CKA_MECHANISM_TYPE);
PKCS11_DEFINE_ATTRIBUTE(CKA_MIME_TYPES);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_CHALLENGE_REQUIREMENT);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_COUNTER);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_COUNTER_REQUIREMENT);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_FORMAT);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_LENGTH);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_PIN_REQUIREMENT);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_SERVICE_IDENTIFIER);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_SERVICE_LOGO);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_SERVICE_LOGO_TYPE);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_TIME);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_TIME_INTERVAL);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_TIME_REQUIREMENT);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_USER_FRIENDLY_MODE);
PKCS11_DEFINE_ATTRIBUTE(CKA_OTP_USER_IDENTIFIER);
PKCS11_DEFINE_ATTRIBUTE(CKA_PIXEL_X);
PKCS11_DEFINE_ATTRIBUTE(CKA_PIXEL_Y);
PKCS11_DEFINE_ATTRIBUTE(CKA_REQUIRED_CMS_ATTRIBUTES);
PKCS11_DEFINE_ATTRIBUTE(CKA_RESOLUTION);
PKCS11_DEFINE_ATTRIBUTE(CKA_SUPPORTED_CMS_ATTRIBUTES);
PKCS11_DEFINE_ATTRIBUTE(CKA_UNWRAP_TEMPLATE);
PKCS11_DEFINE_ATTRIBUTE(CKA_URL);
PKCS11_DEFINE_ATTRIBUTE(CKA_WRAP_TEMPLATE);
PKCS11_DEFINE_ATTRIBUTE(CKA_WRAP_WITH_TRUSTED);
rb_obj_freeze(vATTRIBUTES);
rb_define_const(cPKCS11, "ATTRIBUTES", vATTRIBUTES);
vMECHANISMS = rb_hash_new();
PKCS11_DEFINE_MECHANISM(CKM_RSA_PKCS_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_RSA_9796);
PKCS11_DEFINE_MECHANISM(CKM_RSA_X_509);
PKCS11_DEFINE_MECHANISM(CKM_MD2_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_MD5_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_SHA1_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD128_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD160_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_RSA_PKCS_OAEP);
PKCS11_DEFINE_MECHANISM(CKM_RSA_X9_31_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_RSA_X9_31);
PKCS11_DEFINE_MECHANISM(CKM_SHA1_RSA_X9_31);
PKCS11_DEFINE_MECHANISM(CKM_RSA_PKCS_PSS);
PKCS11_DEFINE_MECHANISM(CKM_SHA1_RSA_PKCS_PSS);
PKCS11_DEFINE_MECHANISM(CKM_DSA_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_DSA);
PKCS11_DEFINE_MECHANISM(CKM_DSA_SHA1);
PKCS11_DEFINE_MECHANISM(CKM_DH_PKCS_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_DH_PKCS_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_X9_42_DH_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_X9_42_DH_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_X9_42_DH_HYBRID_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_X9_42_MQV_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_RC2_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_RC2_ECB);
PKCS11_DEFINE_MECHANISM(CKM_RC2_CBC);
PKCS11_DEFINE_MECHANISM(CKM_RC2_MAC);
PKCS11_DEFINE_MECHANISM(CKM_RC2_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_RC2_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_RC4_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_RC4);
PKCS11_DEFINE_MECHANISM(CKM_DES_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_DES_ECB);
PKCS11_DEFINE_MECHANISM(CKM_DES_CBC);
PKCS11_DEFINE_MECHANISM(CKM_DES_MAC);
PKCS11_DEFINE_MECHANISM(CKM_DES_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_DES_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_DES2_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_DES3_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_DES3_ECB);
PKCS11_DEFINE_MECHANISM(CKM_DES3_CBC);
PKCS11_DEFINE_MECHANISM(CKM_DES3_MAC);
PKCS11_DEFINE_MECHANISM(CKM_DES3_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_DES3_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_CDMF_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CDMF_ECB);
PKCS11_DEFINE_MECHANISM(CKM_CDMF_CBC);
PKCS11_DEFINE_MECHANISM(CKM_CDMF_MAC);
PKCS11_DEFINE_MECHANISM(CKM_CDMF_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_CDMF_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_MD2);
PKCS11_DEFINE_MECHANISM(CKM_MD2_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_MD2_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_MD5);
PKCS11_DEFINE_MECHANISM(CKM_MD5_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_MD5_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_SHA_1);
PKCS11_DEFINE_MECHANISM(CKM_SHA_1_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_SHA_1_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD128);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD128_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD128_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD160);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD160_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_RIPEMD160_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_CAST_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CAST_ECB);
PKCS11_DEFINE_MECHANISM(CKM_CAST_CBC);
PKCS11_DEFINE_MECHANISM(CKM_CAST_MAC);
PKCS11_DEFINE_MECHANISM(CKM_CAST_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_CAST_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_CAST3_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CAST3_ECB);
PKCS11_DEFINE_MECHANISM(CKM_CAST3_CBC);
PKCS11_DEFINE_MECHANISM(CKM_CAST3_MAC);
PKCS11_DEFINE_MECHANISM(CKM_CAST3_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_CAST3_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_CAST5_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CAST128_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CAST5_ECB);
PKCS11_DEFINE_MECHANISM(CKM_CAST128_ECB);
PKCS11_DEFINE_MECHANISM(CKM_CAST5_CBC);
PKCS11_DEFINE_MECHANISM(CKM_CAST128_CBC);
PKCS11_DEFINE_MECHANISM(CKM_CAST5_MAC);
PKCS11_DEFINE_MECHANISM(CKM_CAST128_MAC);
PKCS11_DEFINE_MECHANISM(CKM_CAST5_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_CAST128_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_CAST5_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_CAST128_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_RC5_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_RC5_ECB);
PKCS11_DEFINE_MECHANISM(CKM_RC5_CBC);
PKCS11_DEFINE_MECHANISM(CKM_RC5_MAC);
PKCS11_DEFINE_MECHANISM(CKM_RC5_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_RC5_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_IDEA_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_IDEA_ECB);
PKCS11_DEFINE_MECHANISM(CKM_IDEA_CBC);
PKCS11_DEFINE_MECHANISM(CKM_IDEA_MAC);
PKCS11_DEFINE_MECHANISM(CKM_IDEA_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_IDEA_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_GENERIC_SECRET_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CONCATENATE_BASE_AND_KEY);
PKCS11_DEFINE_MECHANISM(CKM_CONCATENATE_BASE_AND_DATA);
PKCS11_DEFINE_MECHANISM(CKM_CONCATENATE_DATA_AND_BASE);
PKCS11_DEFINE_MECHANISM(CKM_XOR_BASE_AND_DATA);
PKCS11_DEFINE_MECHANISM(CKM_EXTRACT_KEY_FROM_KEY);
PKCS11_DEFINE_MECHANISM(CKM_SSL3_PRE_MASTER_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_SSL3_MASTER_KEY_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_SSL3_KEY_AND_MAC_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_SSL3_MASTER_KEY_DERIVE_DH);
PKCS11_DEFINE_MECHANISM(CKM_TLS_PRE_MASTER_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_TLS_MASTER_KEY_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_TLS_KEY_AND_MAC_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_TLS_MASTER_KEY_DERIVE_DH);
PKCS11_DEFINE_MECHANISM(CKM_SSL3_MD5_MAC);
PKCS11_DEFINE_MECHANISM(CKM_SSL3_SHA1_MAC);
PKCS11_DEFINE_MECHANISM(CKM_MD5_KEY_DERIVATION);
PKCS11_DEFINE_MECHANISM(CKM_MD2_KEY_DERIVATION);
PKCS11_DEFINE_MECHANISM(CKM_SHA1_KEY_DERIVATION);
PKCS11_DEFINE_MECHANISM(CKM_PBE_MD2_DES_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_MD5_DES_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_MD5_CAST_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_MD5_CAST3_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_MD5_CAST5_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_MD5_CAST128_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_CAST5_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_CAST128_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_RC4_128);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_RC4_40);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_DES3_EDE_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_DES2_EDE_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_RC2_128_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PBE_SHA1_RC2_40_CBC);
PKCS11_DEFINE_MECHANISM(CKM_PKCS5_PBKD2);
PKCS11_DEFINE_MECHANISM(CKM_PBA_SHA1_WITH_SHA1_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_KEY_WRAP_LYNKS);
PKCS11_DEFINE_MECHANISM(CKM_KEY_WRAP_SET_OAEP);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_ECB64);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_CBC64);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_OFB64);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_CFB64);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_CFB32);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_CFB16);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_CFB8);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_WRAP);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_PRIVATE_WRAP);
PKCS11_DEFINE_MECHANISM(CKM_SKIPJACK_RELAYX);
PKCS11_DEFINE_MECHANISM(CKM_KEA_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_KEA_KEY_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_FORTEZZA_TIMESTAMP);
PKCS11_DEFINE_MECHANISM(CKM_BATON_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_BATON_ECB128);
PKCS11_DEFINE_MECHANISM(CKM_BATON_ECB96);
PKCS11_DEFINE_MECHANISM(CKM_BATON_CBC128);
PKCS11_DEFINE_MECHANISM(CKM_BATON_COUNTER);
PKCS11_DEFINE_MECHANISM(CKM_BATON_SHUFFLE);
PKCS11_DEFINE_MECHANISM(CKM_BATON_WRAP);
PKCS11_DEFINE_MECHANISM(CKM_ECDSA_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_EC_KEY_PAIR_GEN);
PKCS11_DEFINE_MECHANISM(CKM_ECDSA);
PKCS11_DEFINE_MECHANISM(CKM_ECDSA_SHA1);
PKCS11_DEFINE_MECHANISM(CKM_ECDH1_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_ECDH1_COFACTOR_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_ECMQV_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_JUNIPER_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_JUNIPER_ECB128);
PKCS11_DEFINE_MECHANISM(CKM_JUNIPER_CBC128);
PKCS11_DEFINE_MECHANISM(CKM_JUNIPER_COUNTER);
PKCS11_DEFINE_MECHANISM(CKM_JUNIPER_SHUFFLE);
PKCS11_DEFINE_MECHANISM(CKM_JUNIPER_WRAP);
PKCS11_DEFINE_MECHANISM(CKM_FASTHASH);
PKCS11_DEFINE_MECHANISM(CKM_AES_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_AES_ECB);
PKCS11_DEFINE_MECHANISM(CKM_AES_CBC);
PKCS11_DEFINE_MECHANISM(CKM_AES_MAC);
PKCS11_DEFINE_MECHANISM(CKM_AES_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_AES_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_DSA_PARAMETER_GEN);
PKCS11_DEFINE_MECHANISM(CKM_DH_PKCS_PARAMETER_GEN);
PKCS11_DEFINE_MECHANISM(CKM_X9_42_DH_PARAMETER_GEN);
PKCS11_DEFINE_MECHANISM(CKM_ACTI);
PKCS11_DEFINE_MECHANISM(CKM_ACTI_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_AES_CBC_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_AES_CTR);
PKCS11_DEFINE_MECHANISM(CKM_AES_ECB_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_CBC);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_CBC_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_ECB);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_ECB_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_MAC);
PKCS11_DEFINE_MECHANISM(CKM_ARIA_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_BLOWFISH_CBC);
PKCS11_DEFINE_MECHANISM(CKM_BLOWFISH_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_CBC);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_CBC_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_CBC_PAD);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_CTR);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_ECB);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_ECB_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_MAC);
PKCS11_DEFINE_MECHANISM(CKM_CAMELLIA_MAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_CMS_SIG);
PKCS11_DEFINE_MECHANISM(CKM_DES3_CBC_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_DES3_ECB_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_DES_CBC_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_DES_CFB64);
PKCS11_DEFINE_MECHANISM(CKM_DES_CFB8);
PKCS11_DEFINE_MECHANISM(CKM_DES_ECB_ENCRYPT_DATA);
PKCS11_DEFINE_MECHANISM(CKM_DES_OFB64);
PKCS11_DEFINE_MECHANISM(CKM_DES_OFB8);
PKCS11_DEFINE_MECHANISM(CKM_HOTP);
PKCS11_DEFINE_MECHANISM(CKM_HOTP_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_KIP_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_KIP_MAC);
PKCS11_DEFINE_MECHANISM(CKM_KIP_WRAP);
PKCS11_DEFINE_MECHANISM(CKM_SECURID);
PKCS11_DEFINE_MECHANISM(CKM_SECURID_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_SHA224);
PKCS11_DEFINE_MECHANISM(CKM_SHA224_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_SHA224_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_SHA224_KEY_DERIVATION);
PKCS11_DEFINE_MECHANISM(CKM_SHA224_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_SHA224_RSA_PKCS_PSS);
PKCS11_DEFINE_MECHANISM(CKM_SHA256);
PKCS11_DEFINE_MECHANISM(CKM_SHA256_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_SHA256_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_SHA256_KEY_DERIVATION);
PKCS11_DEFINE_MECHANISM(CKM_SHA256_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_SHA256_RSA_PKCS_PSS);
PKCS11_DEFINE_MECHANISM(CKM_SHA384);
PKCS11_DEFINE_MECHANISM(CKM_SHA384_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_SHA384_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_SHA384_KEY_DERIVATION);
PKCS11_DEFINE_MECHANISM(CKM_SHA384_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_SHA384_RSA_PKCS_PSS);
PKCS11_DEFINE_MECHANISM(CKM_SHA512);
PKCS11_DEFINE_MECHANISM(CKM_SHA512_HMAC);
PKCS11_DEFINE_MECHANISM(CKM_SHA512_HMAC_GENERAL);
PKCS11_DEFINE_MECHANISM(CKM_SHA512_KEY_DERIVATION);
PKCS11_DEFINE_MECHANISM(CKM_SHA512_RSA_PKCS);
PKCS11_DEFINE_MECHANISM(CKM_SHA512_RSA_PKCS_PSS);
PKCS11_DEFINE_MECHANISM(CKM_TLS_PRF);
PKCS11_DEFINE_MECHANISM(CKM_TWOFISH_CBC);
PKCS11_DEFINE_MECHANISM(CKM_TWOFISH_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_WTLS_MASTER_KEY_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC);
PKCS11_DEFINE_MECHANISM(CKM_WTLS_PRE_MASTER_KEY_GEN);
PKCS11_DEFINE_MECHANISM(CKM_WTLS_PRF);
PKCS11_DEFINE_MECHANISM(CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE);
PKCS11_DEFINE_MECHANISM(CKM_VENDOR_DEFINED);
rb_obj_freeze(vMECHANISMS);
rb_define_const(cPKCS11, "MECHANISMS", vMECHANISMS);
vRETURN_VALUES = rb_hash_new();
PKCS11_DEFINE_RETURN_VALUE(CKR_OK);
PKCS11_DEFINE_RETURN_VALUE(CKR_CANCEL);
PKCS11_DEFINE_RETURN_VALUE(CKR_HOST_MEMORY);
PKCS11_DEFINE_RETURN_VALUE(CKR_SLOT_ID_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_GENERAL_ERROR);
PKCS11_DEFINE_RETURN_VALUE(CKR_FUNCTION_FAILED);
PKCS11_DEFINE_RETURN_VALUE(CKR_ARGUMENTS_BAD);
PKCS11_DEFINE_RETURN_VALUE(CKR_NO_EVENT);
PKCS11_DEFINE_RETURN_VALUE(CKR_NEED_TO_CREATE_THREADS);
PKCS11_DEFINE_RETURN_VALUE(CKR_CANT_LOCK);
PKCS11_DEFINE_RETURN_VALUE(CKR_ATTRIBUTE_READ_ONLY);
PKCS11_DEFINE_RETURN_VALUE(CKR_ATTRIBUTE_SENSITIVE);
PKCS11_DEFINE_RETURN_VALUE(CKR_ATTRIBUTE_TYPE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_ATTRIBUTE_VALUE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_DATA_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_DATA_LEN_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_DEVICE_ERROR);
PKCS11_DEFINE_RETURN_VALUE(CKR_DEVICE_MEMORY);
PKCS11_DEFINE_RETURN_VALUE(CKR_DEVICE_REMOVED);
PKCS11_DEFINE_RETURN_VALUE(CKR_ENCRYPTED_DATA_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_ENCRYPTED_DATA_LEN_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_FUNCTION_CANCELED);
PKCS11_DEFINE_RETURN_VALUE(CKR_FUNCTION_NOT_PARALLEL);
PKCS11_DEFINE_RETURN_VALUE(CKR_FUNCTION_NOT_SUPPORTED);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_HANDLE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_SIZE_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_TYPE_INCONSISTENT);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_NOT_NEEDED);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_CHANGED);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_NEEDED);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_INDIGESTIBLE);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_FUNCTION_NOT_PERMITTED);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_NOT_WRAPPABLE);
PKCS11_DEFINE_RETURN_VALUE(CKR_KEY_UNEXTRACTABLE);
PKCS11_DEFINE_RETURN_VALUE(CKR_MECHANISM_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_MECHANISM_PARAM_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_OBJECT_HANDLE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_OPERATION_ACTIVE);
PKCS11_DEFINE_RETURN_VALUE(CKR_OPERATION_NOT_INITIALIZED);
PKCS11_DEFINE_RETURN_VALUE(CKR_PIN_INCORRECT);
PKCS11_DEFINE_RETURN_VALUE(CKR_PIN_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_PIN_LEN_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_PIN_EXPIRED);
PKCS11_DEFINE_RETURN_VALUE(CKR_PIN_LOCKED);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_CLOSED);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_COUNT);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_HANDLE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_PARALLEL_NOT_SUPPORTED);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_READ_ONLY);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_EXISTS);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_READ_ONLY_EXISTS);
PKCS11_DEFINE_RETURN_VALUE(CKR_SESSION_READ_WRITE_SO_EXISTS);
PKCS11_DEFINE_RETURN_VALUE(CKR_SIGNATURE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_SIGNATURE_LEN_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_TEMPLATE_INCOMPLETE);
PKCS11_DEFINE_RETURN_VALUE(CKR_TEMPLATE_INCONSISTENT);
PKCS11_DEFINE_RETURN_VALUE(CKR_TOKEN_NOT_PRESENT);
PKCS11_DEFINE_RETURN_VALUE(CKR_TOKEN_NOT_RECOGNIZED);
PKCS11_DEFINE_RETURN_VALUE(CKR_TOKEN_WRITE_PROTECTED);
PKCS11_DEFINE_RETURN_VALUE(CKR_UNWRAPPING_KEY_HANDLE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_UNWRAPPING_KEY_SIZE_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT);
PKCS11_DEFINE_RETURN_VALUE(CKR_USER_ALREADY_LOGGED_IN);
PKCS11_DEFINE_RETURN_VALUE(CKR_USER_NOT_LOGGED_IN);
PKCS11_DEFINE_RETURN_VALUE(CKR_USER_PIN_NOT_INITIALIZED);
PKCS11_DEFINE_RETURN_VALUE(CKR_USER_TYPE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_USER_ANOTHER_ALREADY_LOGGED_IN);
PKCS11_DEFINE_RETURN_VALUE(CKR_USER_TOO_MANY_TYPES);
PKCS11_DEFINE_RETURN_VALUE(CKR_WRAPPED_KEY_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_WRAPPED_KEY_LEN_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_WRAPPING_KEY_HANDLE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_WRAPPING_KEY_SIZE_RANGE);
PKCS11_DEFINE_RETURN_VALUE(CKR_WRAPPING_KEY_TYPE_INCONSISTENT);
PKCS11_DEFINE_RETURN_VALUE(CKR_RANDOM_SEED_NOT_SUPPORTED);
PKCS11_DEFINE_RETURN_VALUE(CKR_RANDOM_NO_RNG);
PKCS11_DEFINE_RETURN_VALUE(CKR_DOMAIN_PARAMS_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_BUFFER_TOO_SMALL);
PKCS11_DEFINE_RETURN_VALUE(CKR_SAVED_STATE_INVALID);
PKCS11_DEFINE_RETURN_VALUE(CKR_INFORMATION_SENSITIVE);
PKCS11_DEFINE_RETURN_VALUE(CKR_STATE_UNSAVEABLE);
PKCS11_DEFINE_RETURN_VALUE(CKR_CRYPTOKI_NOT_INITIALIZED);
PKCS11_DEFINE_RETURN_VALUE(CKR_CRYPTOKI_ALREADY_INITIALIZED);
PKCS11_DEFINE_RETURN_VALUE(CKR_MUTEX_BAD);
PKCS11_DEFINE_RETURN_VALUE(CKR_MUTEX_NOT_LOCKED);
PKCS11_DEFINE_RETURN_VALUE(CKR_FUNCTION_REJECTED);
PKCS11_DEFINE_RETURN_VALUE(CKR_NEW_PIN_MODE);
PKCS11_DEFINE_RETURN_VALUE(CKR_NEXT_OTP);
PKCS11_DEFINE_RETURN_VALUE(CKR_VENDOR_DEFINED);
rb_obj_freeze(vRETURN_VALUES);
rb_define_const(cPKCS11, "RETURN_VALUES", vRETURN_VALUES);
/* OTP parameters */
PKCS11_DEFINE_CONST(CK_OTP_CHALLENGE);
PKCS11_DEFINE_CONST(CK_OTP_COUNTER);
PKCS11_DEFINE_CONST(CK_OTP_FLAGS);
PKCS11_DEFINE_CONST(CK_OTP_FORMAT_ALPHANUMERIC);
PKCS11_DEFINE_CONST(CK_OTP_FORMAT_BINARY);
PKCS11_DEFINE_CONST(CK_OTP_FORMAT_DECIMAL);
PKCS11_DEFINE_CONST(CK_OTP_FORMAT_HEXADECIMAL);
PKCS11_DEFINE_CONST(CK_OTP_OUTPUT_FORMAT);
PKCS11_DEFINE_CONST(CK_OTP_OUTPUT_LENGTH);
PKCS11_DEFINE_CONST(CK_OTP_PARAM_IGNORED);
PKCS11_DEFINE_CONST(CK_OTP_PARAM_MANDATORY);
PKCS11_DEFINE_CONST(CK_OTP_PARAM_OPTIONAL);
PKCS11_DEFINE_CONST(CK_OTP_PIN);
PKCS11_DEFINE_CONST(CK_OTP_TIME);
PKCS11_DEFINE_CONST(CK_OTP_VALUE);
}