1 /*
2    +----------------------------------------------------------------------+
3    | PHP Version 7                                                        |
4    +----------------------------------------------------------------------+
5    | Copyright (c) The PHP Group                                          |
6    +----------------------------------------------------------------------+
7    | This source file is subject to version 3.01 of the PHP license,      |
8    | that is bundled with this package in the file LICENSE, and is        |
9    | available through the world-wide-web at the following url:           |
10    | http://www.php.net/license/3_01.txt                                  |
11    | If you did not receive a copy of the PHP license and are unable to   |
12    | obtain it through the world-wide-web, please send a note to          |
13    | license@php.net so we can mail you a copy immediately.               |
14    +----------------------------------------------------------------------+
15    | Author: Guillaume Amringer                                           |
16    +----------------------------------------------------------------------+
17 */
18 
19 #include "pkcs11int.h"
20 
21 static const char * strCK_RV(const CK_RV rv);
22 static zend_class_entry *zend_pkcs11_exception_ce;
23 
general_error(char * generic,char * specific)24 void general_error(char *generic, char *specific) {
25     char buf[BUFSIZ];
26     snprintf(buf, sizeof(buf), "%s: %s", generic, specific);
27     zend_throw_exception(zend_pkcs11_exception_ce, buf, 0);
28 }
29 
pkcs11_error(CK_RV rv,char * error)30 void pkcs11_error(CK_RV rv, char *error) {
31     char buf[BUFSIZ];
32     snprintf(buf, sizeof(buf), "(0x%08lx/%s) PKCS#11 module error: %s",
33                                rv, strCK_RV(rv), error);
34     zend_throw_exception(zend_pkcs11_exception_ce, buf, rv);
35 }
36 
strCK_RV(const CK_RV rv)37 static const char * strCK_RV(const CK_RV rv) {
38     static __thread char str[BUFSIZ];
39 
40     switch(rv) {
41     #define REGISTER_PKCS11_CONSTANT(n) \
42         case n: strcpy(str, #n); break;
43 
44     REGISTER_PKCS11_CONSTANT(CKR_OK);
45     REGISTER_PKCS11_CONSTANT(CKR_CANCEL);
46     REGISTER_PKCS11_CONSTANT(CKR_HOST_MEMORY);
47     REGISTER_PKCS11_CONSTANT(CKR_SLOT_ID_INVALID);
48     REGISTER_PKCS11_CONSTANT(CKR_GENERAL_ERROR);
49     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_FAILED);
50     REGISTER_PKCS11_CONSTANT(CKR_ARGUMENTS_BAD);
51     REGISTER_PKCS11_CONSTANT(CKR_NO_EVENT);
52     REGISTER_PKCS11_CONSTANT(CKR_NEED_TO_CREATE_THREADS);
53     REGISTER_PKCS11_CONSTANT(CKR_CANT_LOCK);
54     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_READ_ONLY);
55     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_SENSITIVE);
56     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_TYPE_INVALID);
57     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_VALUE_INVALID);
58     REGISTER_PKCS11_CONSTANT(CKR_DATA_INVALID);
59     REGISTER_PKCS11_CONSTANT(CKR_DATA_LEN_RANGE);
60     REGISTER_PKCS11_CONSTANT(CKR_DEVICE_ERROR);
61     REGISTER_PKCS11_CONSTANT(CKR_DEVICE_MEMORY);
62     REGISTER_PKCS11_CONSTANT(CKR_DEVICE_REMOVED);
63     REGISTER_PKCS11_CONSTANT(CKR_ENCRYPTED_DATA_INVALID);
64     REGISTER_PKCS11_CONSTANT(CKR_ENCRYPTED_DATA_LEN_RANGE);
65     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_CANCELED);
66     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_NOT_PARALLEL);
67     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_NOT_SUPPORTED);
68     REGISTER_PKCS11_CONSTANT(CKR_KEY_HANDLE_INVALID);
69     REGISTER_PKCS11_CONSTANT(CKR_KEY_SIZE_RANGE);
70     REGISTER_PKCS11_CONSTANT(CKR_KEY_TYPE_INCONSISTENT);
71     REGISTER_PKCS11_CONSTANT(CKR_KEY_NOT_NEEDED);
72     REGISTER_PKCS11_CONSTANT(CKR_KEY_CHANGED);
73     REGISTER_PKCS11_CONSTANT(CKR_KEY_NEEDED);
74     REGISTER_PKCS11_CONSTANT(CKR_KEY_INDIGESTIBLE);
75     REGISTER_PKCS11_CONSTANT(CKR_KEY_FUNCTION_NOT_PERMITTED);
76     REGISTER_PKCS11_CONSTANT(CKR_KEY_NOT_WRAPPABLE);
77     REGISTER_PKCS11_CONSTANT(CKR_KEY_UNEXTRACTABLE);
78     REGISTER_PKCS11_CONSTANT(CKR_MECHANISM_INVALID);
79     REGISTER_PKCS11_CONSTANT(CKR_MECHANISM_PARAM_INVALID);
80     REGISTER_PKCS11_CONSTANT(CKR_OBJECT_HANDLE_INVALID);
81     REGISTER_PKCS11_CONSTANT(CKR_OPERATION_ACTIVE);
82     REGISTER_PKCS11_CONSTANT(CKR_OPERATION_NOT_INITIALIZED);
83     REGISTER_PKCS11_CONSTANT(CKR_PIN_INCORRECT);
84     REGISTER_PKCS11_CONSTANT(CKR_PIN_INVALID);
85     REGISTER_PKCS11_CONSTANT(CKR_PIN_LEN_RANGE);
86     REGISTER_PKCS11_CONSTANT(CKR_PIN_EXPIRED);
87     REGISTER_PKCS11_CONSTANT(CKR_PIN_LOCKED);
88     REGISTER_PKCS11_CONSTANT(CKR_SESSION_CLOSED);
89     REGISTER_PKCS11_CONSTANT(CKR_SESSION_COUNT);
90     REGISTER_PKCS11_CONSTANT(CKR_SESSION_HANDLE_INVALID);
91     REGISTER_PKCS11_CONSTANT(CKR_SESSION_PARALLEL_NOT_SUPPORTED);
92     REGISTER_PKCS11_CONSTANT(CKR_SESSION_READ_ONLY);
93     REGISTER_PKCS11_CONSTANT(CKR_SESSION_EXISTS);
94     REGISTER_PKCS11_CONSTANT(CKR_SESSION_READ_ONLY_EXISTS);
95     REGISTER_PKCS11_CONSTANT(CKR_SESSION_READ_WRITE_SO_EXISTS);
96     REGISTER_PKCS11_CONSTANT(CKR_SIGNATURE_INVALID);
97     REGISTER_PKCS11_CONSTANT(CKR_SIGNATURE_LEN_RANGE);
98     REGISTER_PKCS11_CONSTANT(CKR_TEMPLATE_INCOMPLETE);
99     REGISTER_PKCS11_CONSTANT(CKR_TEMPLATE_INCONSISTENT);
100     REGISTER_PKCS11_CONSTANT(CKR_TOKEN_NOT_PRESENT);
101     REGISTER_PKCS11_CONSTANT(CKR_TOKEN_NOT_RECOGNIZED);
102     REGISTER_PKCS11_CONSTANT(CKR_TOKEN_WRITE_PROTECTED);
103     REGISTER_PKCS11_CONSTANT(CKR_UNWRAPPING_KEY_HANDLE_INVALID);
104     REGISTER_PKCS11_CONSTANT(CKR_UNWRAPPING_KEY_SIZE_RANGE);
105     REGISTER_PKCS11_CONSTANT(CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT);
106     REGISTER_PKCS11_CONSTANT(CKR_USER_ALREADY_LOGGED_IN);
107     REGISTER_PKCS11_CONSTANT(CKR_USER_NOT_LOGGED_IN);
108     REGISTER_PKCS11_CONSTANT(CKR_USER_PIN_NOT_INITIALIZED);
109     REGISTER_PKCS11_CONSTANT(CKR_USER_TYPE_INVALID);
110     REGISTER_PKCS11_CONSTANT(CKR_USER_ANOTHER_ALREADY_LOGGED_IN);
111     REGISTER_PKCS11_CONSTANT(CKR_USER_TOO_MANY_TYPES);
112     REGISTER_PKCS11_CONSTANT(CKR_WRAPPED_KEY_INVALID);
113     REGISTER_PKCS11_CONSTANT(CKR_WRAPPED_KEY_LEN_RANGE);
114     REGISTER_PKCS11_CONSTANT(CKR_WRAPPING_KEY_HANDLE_INVALID);
115     REGISTER_PKCS11_CONSTANT(CKR_WRAPPING_KEY_SIZE_RANGE);
116     REGISTER_PKCS11_CONSTANT(CKR_WRAPPING_KEY_TYPE_INCONSISTENT);
117     REGISTER_PKCS11_CONSTANT(CKR_RANDOM_SEED_NOT_SUPPORTED);
118     REGISTER_PKCS11_CONSTANT(CKR_RANDOM_NO_RNG);
119     REGISTER_PKCS11_CONSTANT(CKR_DOMAIN_PARAMS_INVALID);
120     REGISTER_PKCS11_CONSTANT(CKR_BUFFER_TOO_SMALL);
121     REGISTER_PKCS11_CONSTANT(CKR_SAVED_STATE_INVALID);
122     REGISTER_PKCS11_CONSTANT(CKR_INFORMATION_SENSITIVE);
123     REGISTER_PKCS11_CONSTANT(CKR_STATE_UNSAVEABLE);
124     REGISTER_PKCS11_CONSTANT(CKR_CRYPTOKI_NOT_INITIALIZED);
125     REGISTER_PKCS11_CONSTANT(CKR_CRYPTOKI_ALREADY_INITIALIZED);
126     REGISTER_PKCS11_CONSTANT(CKR_MUTEX_BAD);
127     REGISTER_PKCS11_CONSTANT(CKR_MUTEX_NOT_LOCKED);
128     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_REJECTED);
129     REGISTER_PKCS11_CONSTANT(CKR_VENDOR_DEFINED);
130 
131     default:
132         strcpy(str, "CRK_XYZ Unknown");
133     break;
134     }
135 # undef REGISTER_PKCS11_CONSTANT
136 
137    return str;
138 }
139 
parseTemplate(HashTable ** template,CK_ATTRIBUTE_PTR * templateObj,int * templateItemCount)140 void parseTemplate(HashTable **template, CK_ATTRIBUTE_PTR *templateObj, int *templateItemCount) {
141     zval *templateValue;
142     zend_ulong templateValueKey;
143     *templateItemCount = zend_hash_num_elements(*template);
144     *templateObj = ecalloc(*templateItemCount, sizeof(CK_ATTRIBUTE));
145     unsigned int i = 0;
146     static CK_BBOOL btrue = CK_TRUE;
147     static CK_BBOOL bfalse = CK_FALSE;
148     ZEND_HASH_FOREACH_NUM_KEY_VAL(*template, templateValueKey, templateValue)
149         if (Z_TYPE_P(templateValue) == IS_LONG) {
150             (*templateObj)[i] = (CK_ATTRIBUTE){templateValueKey, &(Z_LVAL_P(templateValue)), sizeof(CK_ULONG)};
151 
152         } else if (Z_TYPE_P(templateValue) == IS_STRING) {
153             (*templateObj)[i] = (CK_ATTRIBUTE){templateValueKey, Z_STRVAL_P(templateValue), Z_STRLEN_P(templateValue)};
154 
155         } else if (Z_TYPE_P(templateValue) == IS_TRUE) {
156             (*templateObj)[i] = (CK_ATTRIBUTE){templateValueKey, &btrue, sizeof(btrue)};
157 
158         } else if (Z_TYPE_P(templateValue) == IS_FALSE) {
159             (*templateObj)[i] = (CK_ATTRIBUTE){templateValueKey, &bfalse, sizeof(bfalse)};
160 
161         } else if (Z_TYPE_P(templateValue) == IS_NULL) {
162             (*templateObj)[i] = (CK_ATTRIBUTE){.type = templateValueKey, .pValue = NULL, .ulValueLen = 0};
163 
164         } else {
165             general_error("Unable to parse template", "Unsupported parameter type");
166         }
167 
168         i++;
169     ZEND_HASH_FOREACH_END();
170 }
171 
freeTemplate(CK_ATTRIBUTE_PTR templateObj)172 void freeTemplate(CK_ATTRIBUTE_PTR templateObj) {
173     efree(templateObj);
174 }
175 
getObjectClass(pkcs11_session_object * session,CK_OBJECT_HANDLE_PTR hObject,CK_ULONG_PTR classId)176 void getObjectClass(pkcs11_session_object *session, CK_OBJECT_HANDLE_PTR hObject, CK_ULONG_PTR classId) {
177     CK_ATTRIBUTE template[] = {
178         {CKA_CLASS, NULL_PTR, 0}
179     };
180     CK_RV rv;
181 
182     rv = session->pkcs11->functionList->C_GetAttributeValue(
183         session->session,
184         *hObject,
185         template,
186         1
187     );
188     if (rv != CKR_OK) {
189         pkcs11_error(rv, "Unable to get attribute value");
190         return;
191     }
192     template[0].pValue = (uint8_t *) ecalloc(1, template[0].ulValueLen);
193 
194     rv = session->pkcs11->functionList->C_GetAttributeValue(
195         session->session,
196         *hObject,
197         template,
198         1
199     );
200     if (rv != CKR_OK) {
201         pkcs11_error(rv, "Unable to get attribute value");
202         return;
203     }
204 
205     memcpy(
206         classId,
207         template[0].pValue,
208         template[0].ulValueLen
209     );
210 
211     efree(template[0].pValue);
212 }
213 
PHP_MINIT_FUNCTION(pkcs11)214 PHP_MINIT_FUNCTION(pkcs11)
215 {
216     register_pkcs11();
217     register_pkcs11_session();
218     register_pkcs11_object();
219     register_pkcs11_key();
220     register_pkcs11_keypair();
221     register_pkcs11_mechanism();
222     register_pkcs11_rsapssparams();
223     register_pkcs11_rsaoaepparams();
224     register_pkcs11_gcmparams();
225     register_pkcs11_chacha20params();
226     register_pkcs11_salsa20params();
227     register_pkcs11_salsa20chacha20poly1305params();
228     register_pkcs11_ecdh1deriveparams();
229     register_pkcs11_signaturecontext();
230     register_pkcs11_verificationcontext();
231     register_pkcs11_digestcontext();
232     register_pkcs11_encryptioncontext();
233     register_pkcs11_decryptioncontext();
234 
235     zend_class_entry ce;
236 
237     INIT_NS_CLASS_ENTRY(ce, "Pkcs11", "Exception", NULL);
238     zend_pkcs11_exception_ce = zend_register_internal_class_ex(&ce, zend_ce_exception);
239 
240     # define REGISTER_PKCS11_CONSTANT(n) REGISTER_NS_LONG_CONSTANT("Pkcs11", #n, n, CONST_CS | CONST_PERSISTENT)
241 
242     REGISTER_PKCS11_CONSTANT(CKM_RSA_PKCS_KEY_PAIR_GEN);
243     REGISTER_PKCS11_CONSTANT(CKM_RSA_PKCS);
244     REGISTER_PKCS11_CONSTANT(CKM_RSA_9796);
245     REGISTER_PKCS11_CONSTANT(CKM_RSA_X_509);
246     REGISTER_PKCS11_CONSTANT(CKM_MD2_RSA_PKCS);
247     REGISTER_PKCS11_CONSTANT(CKM_MD5_RSA_PKCS);
248     REGISTER_PKCS11_CONSTANT(CKM_SHA1_RSA_PKCS);
249     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD128_RSA_PKCS);
250     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD160_RSA_PKCS);
251     REGISTER_PKCS11_CONSTANT(CKM_RSA_PKCS_OAEP);
252     REGISTER_PKCS11_CONSTANT(CKM_RSA_X9_31_KEY_PAIR_GEN);
253     REGISTER_PKCS11_CONSTANT(CKM_RSA_X9_31);
254     REGISTER_PKCS11_CONSTANT(CKM_SHA1_RSA_X9_31);
255     REGISTER_PKCS11_CONSTANT(CKM_RSA_PKCS_PSS);
256     REGISTER_PKCS11_CONSTANT(CKM_SHA1_RSA_PKCS_PSS);
257     REGISTER_PKCS11_CONSTANT(CKM_DSA_KEY_PAIR_GEN);
258     REGISTER_PKCS11_CONSTANT(CKM_DSA);
259     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA1);
260     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA224);
261     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA256);
262     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA384);
263     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA512);
264     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA3_224);
265     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA3_256);
266     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA3_384);
267     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHA3_512);
268     REGISTER_PKCS11_CONSTANT(CKM_DH_PKCS_KEY_PAIR_GEN);
269     REGISTER_PKCS11_CONSTANT(CKM_DH_PKCS_DERIVE);
270     REGISTER_PKCS11_CONSTANT(CKM_X9_42_DH_KEY_PAIR_GEN);
271     REGISTER_PKCS11_CONSTANT(CKM_X9_42_DH_DERIVE);
272     REGISTER_PKCS11_CONSTANT(CKM_X9_42_DH_HYBRID_DERIVE);
273     REGISTER_PKCS11_CONSTANT(CKM_X9_42_MQV_DERIVE);
274     REGISTER_PKCS11_CONSTANT(CKM_SHA256_RSA_PKCS);
275     REGISTER_PKCS11_CONSTANT(CKM_SHA384_RSA_PKCS);
276     REGISTER_PKCS11_CONSTANT(CKM_SHA512_RSA_PKCS);
277     REGISTER_PKCS11_CONSTANT(CKM_SHA256_RSA_PKCS_PSS);
278     REGISTER_PKCS11_CONSTANT(CKM_SHA384_RSA_PKCS_PSS);
279     REGISTER_PKCS11_CONSTANT(CKM_SHA512_RSA_PKCS_PSS);
280     REGISTER_PKCS11_CONSTANT(CKM_SHA224_RSA_PKCS);
281     REGISTER_PKCS11_CONSTANT(CKM_SHA224_RSA_PKCS_PSS);
282     REGISTER_PKCS11_CONSTANT(CKM_SHA512_224);
283     REGISTER_PKCS11_CONSTANT(CKM_SHA512_224_HMAC);
284     REGISTER_PKCS11_CONSTANT(CKM_SHA512_224_HMAC_GENERAL);
285     REGISTER_PKCS11_CONSTANT(CKM_SHA512_224_KEY_DERIVATION);
286     REGISTER_PKCS11_CONSTANT(CKM_SHA512_256);
287     REGISTER_PKCS11_CONSTANT(CKM_SHA512_256_HMAC);
288     REGISTER_PKCS11_CONSTANT(CKM_SHA512_256_HMAC_GENERAL);
289     REGISTER_PKCS11_CONSTANT(CKM_SHA512_256_KEY_DERIVATION);
290     REGISTER_PKCS11_CONSTANT(CKM_SHA512_T);
291     REGISTER_PKCS11_CONSTANT(CKM_SHA512_T_HMAC);
292     REGISTER_PKCS11_CONSTANT(CKM_SHA512_T_HMAC_GENERAL);
293     REGISTER_PKCS11_CONSTANT(CKM_SHA512_T_KEY_DERIVATION);
294     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256_RSA_PKCS);
295     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384_RSA_PKCS);
296     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512_RSA_PKCS);
297     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256_RSA_PKCS_PSS);
298     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384_RSA_PKCS_PSS);
299     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512_RSA_PKCS_PSS);
300     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224_RSA_PKCS);
301     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224_RSA_PKCS_PSS);
302     REGISTER_PKCS11_CONSTANT(CKM_RC2_KEY_GEN);
303     REGISTER_PKCS11_CONSTANT(CKM_RC2_ECB);
304     REGISTER_PKCS11_CONSTANT(CKM_RC2_CBC);
305     REGISTER_PKCS11_CONSTANT(CKM_RC2_MAC);
306     REGISTER_PKCS11_CONSTANT(CKM_RC2_MAC_GENERAL);
307     REGISTER_PKCS11_CONSTANT(CKM_RC2_CBC_PAD);
308     REGISTER_PKCS11_CONSTANT(CKM_RC4_KEY_GEN);
309     REGISTER_PKCS11_CONSTANT(CKM_RC4);
310     REGISTER_PKCS11_CONSTANT(CKM_DES_KEY_GEN);
311     REGISTER_PKCS11_CONSTANT(CKM_DES_ECB);
312     REGISTER_PKCS11_CONSTANT(CKM_DES_CBC);
313     REGISTER_PKCS11_CONSTANT(CKM_DES_MAC);
314     REGISTER_PKCS11_CONSTANT(CKM_DES_MAC_GENERAL);
315     REGISTER_PKCS11_CONSTANT(CKM_DES_CBC_PAD);
316     REGISTER_PKCS11_CONSTANT(CKM_DES2_KEY_GEN);
317     REGISTER_PKCS11_CONSTANT(CKM_DES3_KEY_GEN);
318     REGISTER_PKCS11_CONSTANT(CKM_DES3_ECB);
319     REGISTER_PKCS11_CONSTANT(CKM_DES3_CBC);
320     REGISTER_PKCS11_CONSTANT(CKM_DES3_MAC);
321     REGISTER_PKCS11_CONSTANT(CKM_DES3_MAC_GENERAL);
322     REGISTER_PKCS11_CONSTANT(CKM_DES3_CBC_PAD);
323     REGISTER_PKCS11_CONSTANT(CKM_DES3_CMAC_GENERAL);
324     REGISTER_PKCS11_CONSTANT(CKM_DES3_CMAC);
325     REGISTER_PKCS11_CONSTANT(CKM_CDMF_KEY_GEN);
326     REGISTER_PKCS11_CONSTANT(CKM_CDMF_ECB);
327     REGISTER_PKCS11_CONSTANT(CKM_CDMF_CBC);
328     REGISTER_PKCS11_CONSTANT(CKM_CDMF_MAC);
329     REGISTER_PKCS11_CONSTANT(CKM_CDMF_MAC_GENERAL);
330     REGISTER_PKCS11_CONSTANT(CKM_CDMF_CBC_PAD);
331     REGISTER_PKCS11_CONSTANT(CKM_DES_OFB64);
332     REGISTER_PKCS11_CONSTANT(CKM_DES_OFB8);
333     REGISTER_PKCS11_CONSTANT(CKM_DES_CFB64);
334     REGISTER_PKCS11_CONSTANT(CKM_DES_CFB8);
335     REGISTER_PKCS11_CONSTANT(CKM_MD2);
336     REGISTER_PKCS11_CONSTANT(CKM_MD2_HMAC);
337     REGISTER_PKCS11_CONSTANT(CKM_MD2_HMAC_GENERAL);
338     REGISTER_PKCS11_CONSTANT(CKM_MD5);
339     REGISTER_PKCS11_CONSTANT(CKM_MD5_HMAC);
340     REGISTER_PKCS11_CONSTANT(CKM_MD5_HMAC_GENERAL);
341     REGISTER_PKCS11_CONSTANT(CKM_SHA_1);
342     REGISTER_PKCS11_CONSTANT(CKM_SHA_1_HMAC);
343     REGISTER_PKCS11_CONSTANT(CKM_SHA_1_HMAC_GENERAL);
344     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD128);
345     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD128_HMAC);
346     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD128_HMAC_GENERAL);
347     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD160);
348     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD160_HMAC);
349     REGISTER_PKCS11_CONSTANT(CKM_RIPEMD160_HMAC_GENERAL);
350     REGISTER_PKCS11_CONSTANT(CKM_SHA256);
351     REGISTER_PKCS11_CONSTANT(CKM_SHA256_HMAC);
352     REGISTER_PKCS11_CONSTANT(CKM_SHA256_HMAC_GENERAL);
353     REGISTER_PKCS11_CONSTANT(CKM_SHA224);
354     REGISTER_PKCS11_CONSTANT(CKM_SHA224_HMAC);
355     REGISTER_PKCS11_CONSTANT(CKM_SHA224_HMAC_GENERAL);
356     REGISTER_PKCS11_CONSTANT(CKM_SHA384);
357     REGISTER_PKCS11_CONSTANT(CKM_SHA384_HMAC);
358     REGISTER_PKCS11_CONSTANT(CKM_SHA384_HMAC_GENERAL);
359     REGISTER_PKCS11_CONSTANT(CKM_SHA512);
360     REGISTER_PKCS11_CONSTANT(CKM_SHA512_HMAC);
361     REGISTER_PKCS11_CONSTANT(CKM_SHA512_HMAC_GENERAL);
362     REGISTER_PKCS11_CONSTANT(CKM_SECURID_KEY_GEN);
363     REGISTER_PKCS11_CONSTANT(CKM_SECURID);
364     REGISTER_PKCS11_CONSTANT(CKM_HOTP_KEY_GEN);
365     REGISTER_PKCS11_CONSTANT(CKM_HOTP);
366     REGISTER_PKCS11_CONSTANT(CKM_ACTI);
367     REGISTER_PKCS11_CONSTANT(CKM_ACTI_KEY_GEN);
368     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256);
369     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256_HMAC);
370     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256_HMAC_GENERAL);
371     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256_KEY_GEN);
372     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224);
373     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224_HMAC);
374     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224_HMAC_GENERAL);
375     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224_KEY_GEN);
376     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384);
377     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384_HMAC);
378     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384_HMAC_GENERAL);
379     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384_KEY_GEN);
380     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512);
381     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512_HMAC);
382     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512_HMAC_GENERAL);
383     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512_KEY_GEN);
384     REGISTER_PKCS11_CONSTANT(CKM_CAST_KEY_GEN);
385     REGISTER_PKCS11_CONSTANT(CKM_CAST_ECB);
386     REGISTER_PKCS11_CONSTANT(CKM_CAST_CBC);
387     REGISTER_PKCS11_CONSTANT(CKM_CAST_MAC);
388     REGISTER_PKCS11_CONSTANT(CKM_CAST_MAC_GENERAL);
389     REGISTER_PKCS11_CONSTANT(CKM_CAST_CBC_PAD);
390     REGISTER_PKCS11_CONSTANT(CKM_CAST3_KEY_GEN);
391     REGISTER_PKCS11_CONSTANT(CKM_CAST3_ECB);
392     REGISTER_PKCS11_CONSTANT(CKM_CAST3_CBC);
393     REGISTER_PKCS11_CONSTANT(CKM_CAST3_MAC);
394     REGISTER_PKCS11_CONSTANT(CKM_CAST3_MAC_GENERAL);
395     REGISTER_PKCS11_CONSTANT(CKM_CAST3_CBC_PAD);
396     REGISTER_PKCS11_CONSTANT(CKM_CAST5_KEY_GEN);
397     REGISTER_PKCS11_CONSTANT(CKM_CAST128_KEY_GEN);
398     REGISTER_PKCS11_CONSTANT(CKM_CAST5_ECB);
399     REGISTER_PKCS11_CONSTANT(CKM_CAST128_ECB);
400     REGISTER_PKCS11_CONSTANT(CKM_CAST5_CBC);
401     REGISTER_PKCS11_CONSTANT(CKM_CAST128_CBC);
402     REGISTER_PKCS11_CONSTANT(CKM_CAST5_MAC);
403     REGISTER_PKCS11_CONSTANT(CKM_CAST128_MAC);
404     REGISTER_PKCS11_CONSTANT(CKM_CAST5_MAC_GENERAL);
405     REGISTER_PKCS11_CONSTANT(CKM_CAST128_MAC_GENERAL);
406     REGISTER_PKCS11_CONSTANT(CKM_CAST5_CBC_PAD);
407     REGISTER_PKCS11_CONSTANT(CKM_CAST128_CBC_PAD);
408     REGISTER_PKCS11_CONSTANT(CKM_RC5_KEY_GEN);
409     REGISTER_PKCS11_CONSTANT(CKM_RC5_ECB);
410     REGISTER_PKCS11_CONSTANT(CKM_RC5_CBC);
411     REGISTER_PKCS11_CONSTANT(CKM_RC5_MAC);
412     REGISTER_PKCS11_CONSTANT(CKM_RC5_MAC_GENERAL);
413     REGISTER_PKCS11_CONSTANT(CKM_RC5_CBC_PAD);
414     REGISTER_PKCS11_CONSTANT(CKM_IDEA_KEY_GEN);
415     REGISTER_PKCS11_CONSTANT(CKM_IDEA_ECB);
416     REGISTER_PKCS11_CONSTANT(CKM_IDEA_CBC);
417     REGISTER_PKCS11_CONSTANT(CKM_IDEA_MAC);
418     REGISTER_PKCS11_CONSTANT(CKM_IDEA_MAC_GENERAL);
419     REGISTER_PKCS11_CONSTANT(CKM_IDEA_CBC_PAD);
420     REGISTER_PKCS11_CONSTANT(CKM_GENERIC_SECRET_KEY_GEN);
421     REGISTER_PKCS11_CONSTANT(CKM_CONCATENATE_BASE_AND_KEY);
422     REGISTER_PKCS11_CONSTANT(CKM_CONCATENATE_BASE_AND_DATA);
423     REGISTER_PKCS11_CONSTANT(CKM_CONCATENATE_DATA_AND_BASE);
424     REGISTER_PKCS11_CONSTANT(CKM_XOR_BASE_AND_DATA);
425     REGISTER_PKCS11_CONSTANT(CKM_EXTRACT_KEY_FROM_KEY);
426     REGISTER_PKCS11_CONSTANT(CKM_SSL3_PRE_MASTER_KEY_GEN);
427     REGISTER_PKCS11_CONSTANT(CKM_SSL3_MASTER_KEY_DERIVE);
428     REGISTER_PKCS11_CONSTANT(CKM_SSL3_KEY_AND_MAC_DERIVE);
429     REGISTER_PKCS11_CONSTANT(CKM_SSL3_MASTER_KEY_DERIVE_DH);
430     REGISTER_PKCS11_CONSTANT(CKM_TLS_PRE_MASTER_KEY_GEN);
431     REGISTER_PKCS11_CONSTANT(CKM_TLS_MASTER_KEY_DERIVE);
432     REGISTER_PKCS11_CONSTANT(CKM_TLS_KEY_AND_MAC_DERIVE);
433     REGISTER_PKCS11_CONSTANT(CKM_TLS_MASTER_KEY_DERIVE_DH);
434     REGISTER_PKCS11_CONSTANT(CKM_TLS_PRF);
435     REGISTER_PKCS11_CONSTANT(CKM_SSL3_MD5_MAC);
436     REGISTER_PKCS11_CONSTANT(CKM_SSL3_SHA1_MAC);
437     REGISTER_PKCS11_CONSTANT(CKM_MD5_KEY_DERIVATION);
438     REGISTER_PKCS11_CONSTANT(CKM_MD2_KEY_DERIVATION);
439     REGISTER_PKCS11_CONSTANT(CKM_SHA1_KEY_DERIVATION);
440     REGISTER_PKCS11_CONSTANT(CKM_SHA256_KEY_DERIVATION);
441     REGISTER_PKCS11_CONSTANT(CKM_SHA384_KEY_DERIVATION);
442     REGISTER_PKCS11_CONSTANT(CKM_SHA512_KEY_DERIVATION);
443     REGISTER_PKCS11_CONSTANT(CKM_SHA224_KEY_DERIVATION);
444     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256_KEY_DERIVATION);
445     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224_KEY_DERIVATION);
446     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384_KEY_DERIVATION);
447     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512_KEY_DERIVATION);
448     REGISTER_PKCS11_CONSTANT(CKM_SHAKE_128_KEY_DERIVATION);
449     REGISTER_PKCS11_CONSTANT(CKM_SHAKE_256_KEY_DERIVATION);
450     REGISTER_PKCS11_CONSTANT(CKM_SHA3_256_KEY_DERIVE);
451     REGISTER_PKCS11_CONSTANT(CKM_SHA3_224_KEY_DERIVE);
452     REGISTER_PKCS11_CONSTANT(CKM_SHA3_384_KEY_DERIVE);
453     REGISTER_PKCS11_CONSTANT(CKM_SHA3_512_KEY_DERIVE);
454     REGISTER_PKCS11_CONSTANT(CKM_SHAKE_128_KEY_DERIVE);
455     REGISTER_PKCS11_CONSTANT(CKM_SHAKE_256_KEY_DERIVE);
456     REGISTER_PKCS11_CONSTANT(CKM_PBE_MD2_DES_CBC);
457     REGISTER_PKCS11_CONSTANT(CKM_PBE_MD5_DES_CBC);
458     REGISTER_PKCS11_CONSTANT(CKM_PBE_MD5_CAST_CBC);
459     REGISTER_PKCS11_CONSTANT(CKM_PBE_MD5_CAST3_CBC);
460     REGISTER_PKCS11_CONSTANT(CKM_PBE_MD5_CAST5_CBC);
461     REGISTER_PKCS11_CONSTANT(CKM_PBE_MD5_CAST128_CBC);
462     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_CAST5_CBC);
463     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_CAST128_CBC);
464     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_RC4_128);
465     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_RC4_40);
466     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_DES3_EDE_CBC);
467     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_DES2_EDE_CBC);
468     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_RC2_128_CBC);
469     REGISTER_PKCS11_CONSTANT(CKM_PBE_SHA1_RC2_40_CBC);
470     REGISTER_PKCS11_CONSTANT(CKM_PKCS5_PBKD2);
471     REGISTER_PKCS11_CONSTANT(CKM_PBA_SHA1_WITH_SHA1_HMAC);
472     REGISTER_PKCS11_CONSTANT(CKM_WTLS_PRE_MASTER_KEY_GEN);
473     REGISTER_PKCS11_CONSTANT(CKM_WTLS_MASTER_KEY_DERIVE);
474     REGISTER_PKCS11_CONSTANT(CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC);
475     REGISTER_PKCS11_CONSTANT(CKM_WTLS_PRF);
476     REGISTER_PKCS11_CONSTANT(CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE);
477     REGISTER_PKCS11_CONSTANT(CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE);
478     REGISTER_PKCS11_CONSTANT(CKM_TLS12_MAC);
479     REGISTER_PKCS11_CONSTANT(CKM_TLS12_KDF);
480     REGISTER_PKCS11_CONSTANT(CKM_TLS12_MASTER_KEY_DERIVE);
481     REGISTER_PKCS11_CONSTANT(CKM_TLS12_KEY_AND_MAC_DERIVE);
482     REGISTER_PKCS11_CONSTANT(CKM_TLS12_MASTER_KEY_DERIVE_DH);
483     REGISTER_PKCS11_CONSTANT(CKM_TLS12_KEY_SAFE_DERIVE);
484     REGISTER_PKCS11_CONSTANT(CKM_TLS_MAC);
485     REGISTER_PKCS11_CONSTANT(CKM_TLS_KDF);
486     REGISTER_PKCS11_CONSTANT(CKM_KEY_WRAP_LYNKS);
487     REGISTER_PKCS11_CONSTANT(CKM_KEY_WRAP_SET_OAEP);
488     REGISTER_PKCS11_CONSTANT(CKM_CMS_SIG);
489     REGISTER_PKCS11_CONSTANT(CKM_KIP_DERIVE);
490     REGISTER_PKCS11_CONSTANT(CKM_KIP_WRAP);
491     REGISTER_PKCS11_CONSTANT(CKM_KIP_MAC);
492     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_KEY_GEN);
493     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_ECB);
494     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_CBC);
495     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_MAC);
496     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_MAC_GENERAL);
497     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_CBC_PAD);
498     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_ECB_ENCRYPT_DATA);
499     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_CBC_ENCRYPT_DATA);
500     REGISTER_PKCS11_CONSTANT(CKM_CAMELLIA_CTR);
501     REGISTER_PKCS11_CONSTANT(CKM_ARIA_KEY_GEN);
502     REGISTER_PKCS11_CONSTANT(CKM_ARIA_ECB);
503     REGISTER_PKCS11_CONSTANT(CKM_ARIA_CBC);
504     REGISTER_PKCS11_CONSTANT(CKM_ARIA_MAC);
505     REGISTER_PKCS11_CONSTANT(CKM_ARIA_MAC_GENERAL);
506     REGISTER_PKCS11_CONSTANT(CKM_ARIA_CBC_PAD);
507     REGISTER_PKCS11_CONSTANT(CKM_ARIA_ECB_ENCRYPT_DATA);
508     REGISTER_PKCS11_CONSTANT(CKM_ARIA_CBC_ENCRYPT_DATA);
509     REGISTER_PKCS11_CONSTANT(CKM_SEED_KEY_GEN);
510     REGISTER_PKCS11_CONSTANT(CKM_SEED_ECB);
511     REGISTER_PKCS11_CONSTANT(CKM_SEED_CBC);
512     REGISTER_PKCS11_CONSTANT(CKM_SEED_MAC);
513     REGISTER_PKCS11_CONSTANT(CKM_SEED_MAC_GENERAL);
514     REGISTER_PKCS11_CONSTANT(CKM_SEED_CBC_PAD);
515     REGISTER_PKCS11_CONSTANT(CKM_SEED_ECB_ENCRYPT_DATA);
516     REGISTER_PKCS11_CONSTANT(CKM_SEED_CBC_ENCRYPT_DATA);
517     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_KEY_GEN);
518     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_ECB64);
519     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_CBC64);
520     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_OFB64);
521     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_CFB64);
522     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_CFB32);
523     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_CFB16);
524     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_CFB8);
525     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_WRAP);
526     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_PRIVATE_WRAP);
527     REGISTER_PKCS11_CONSTANT(CKM_SKIPJACK_RELAYX);
528     REGISTER_PKCS11_CONSTANT(CKM_KEA_KEY_PAIR_GEN);
529     REGISTER_PKCS11_CONSTANT(CKM_KEA_KEY_DERIVE);
530     REGISTER_PKCS11_CONSTANT(CKM_KEA_DERIVE);
531     REGISTER_PKCS11_CONSTANT(CKM_FORTEZZA_TIMESTAMP);
532     REGISTER_PKCS11_CONSTANT(CKM_BATON_KEY_GEN);
533     REGISTER_PKCS11_CONSTANT(CKM_BATON_ECB128);
534     REGISTER_PKCS11_CONSTANT(CKM_BATON_ECB96);
535     REGISTER_PKCS11_CONSTANT(CKM_BATON_CBC128);
536     REGISTER_PKCS11_CONSTANT(CKM_BATON_COUNTER);
537     REGISTER_PKCS11_CONSTANT(CKM_BATON_SHUFFLE);
538     REGISTER_PKCS11_CONSTANT(CKM_BATON_WRAP);
539     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_KEY_PAIR_GEN);
540     REGISTER_PKCS11_CONSTANT(CKM_EC_KEY_PAIR_GEN);
541     REGISTER_PKCS11_CONSTANT(CKM_ECDSA);
542     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA1);
543     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA224);
544     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA256);
545     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA384);
546     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA512);
547     REGISTER_PKCS11_CONSTANT(CKM_EC_KEY_PAIR_GEN_W_EXTRA_BITS);
548     REGISTER_PKCS11_CONSTANT(CKM_ECDH1_DERIVE);
549     REGISTER_PKCS11_CONSTANT(CKM_ECDH1_COFACTOR_DERIVE);
550     REGISTER_PKCS11_CONSTANT(CKM_ECMQV_DERIVE);
551     REGISTER_PKCS11_CONSTANT(CKM_ECDH_AES_KEY_WRAP);
552     REGISTER_PKCS11_CONSTANT(CKM_RSA_AES_KEY_WRAP);
553     REGISTER_PKCS11_CONSTANT(CKM_JUNIPER_KEY_GEN);
554     REGISTER_PKCS11_CONSTANT(CKM_JUNIPER_ECB128);
555     REGISTER_PKCS11_CONSTANT(CKM_JUNIPER_CBC128);
556     REGISTER_PKCS11_CONSTANT(CKM_JUNIPER_COUNTER);
557     REGISTER_PKCS11_CONSTANT(CKM_JUNIPER_SHUFFLE);
558     REGISTER_PKCS11_CONSTANT(CKM_JUNIPER_WRAP);
559     REGISTER_PKCS11_CONSTANT(CKM_FASTHASH);
560     REGISTER_PKCS11_CONSTANT(CKM_AES_XTS);
561     REGISTER_PKCS11_CONSTANT(CKM_AES_XTS_KEY_GEN);
562     REGISTER_PKCS11_CONSTANT(CKM_AES_KEY_GEN);
563     REGISTER_PKCS11_CONSTANT(CKM_AES_ECB);
564     REGISTER_PKCS11_CONSTANT(CKM_AES_CBC);
565     REGISTER_PKCS11_CONSTANT(CKM_AES_MAC);
566     REGISTER_PKCS11_CONSTANT(CKM_AES_MAC_GENERAL);
567     REGISTER_PKCS11_CONSTANT(CKM_AES_CBC_PAD);
568     REGISTER_PKCS11_CONSTANT(CKM_AES_CTR);
569     REGISTER_PKCS11_CONSTANT(CKM_AES_GCM);
570     REGISTER_PKCS11_CONSTANT(CKM_AES_CCM);
571     REGISTER_PKCS11_CONSTANT(CKM_AES_CTS);
572     REGISTER_PKCS11_CONSTANT(CKM_AES_CMAC);
573     REGISTER_PKCS11_CONSTANT(CKM_AES_CMAC_GENERAL);
574     REGISTER_PKCS11_CONSTANT(CKM_AES_XCBC_MAC);
575     REGISTER_PKCS11_CONSTANT(CKM_AES_XCBC_MAC_96);
576     REGISTER_PKCS11_CONSTANT(CKM_AES_GMAC);
577     REGISTER_PKCS11_CONSTANT(CKM_BLOWFISH_KEY_GEN);
578     REGISTER_PKCS11_CONSTANT(CKM_BLOWFISH_CBC);
579     REGISTER_PKCS11_CONSTANT(CKM_TWOFISH_KEY_GEN);
580     REGISTER_PKCS11_CONSTANT(CKM_TWOFISH_CBC);
581     REGISTER_PKCS11_CONSTANT(CKM_BLOWFISH_CBC_PAD);
582     REGISTER_PKCS11_CONSTANT(CKM_TWOFISH_CBC_PAD);
583     REGISTER_PKCS11_CONSTANT(CKM_DES_ECB_ENCRYPT_DATA);
584     REGISTER_PKCS11_CONSTANT(CKM_DES_CBC_ENCRYPT_DATA);
585     REGISTER_PKCS11_CONSTANT(CKM_DES3_ECB_ENCRYPT_DATA);
586     REGISTER_PKCS11_CONSTANT(CKM_DES3_CBC_ENCRYPT_DATA);
587     REGISTER_PKCS11_CONSTANT(CKM_AES_ECB_ENCRYPT_DATA);
588     REGISTER_PKCS11_CONSTANT(CKM_AES_CBC_ENCRYPT_DATA);
589     REGISTER_PKCS11_CONSTANT(CKM_GOSTR3410_KEY_PAIR_GEN);
590     REGISTER_PKCS11_CONSTANT(CKM_GOSTR3410);
591     REGISTER_PKCS11_CONSTANT(CKM_GOSTR3410_WITH_GOSTR3411);
592     REGISTER_PKCS11_CONSTANT(CKM_GOSTR3410_KEY_WRAP);
593     REGISTER_PKCS11_CONSTANT(CKM_GOSTR3410_DERIVE);
594     REGISTER_PKCS11_CONSTANT(CKM_GOSTR3411);
595     REGISTER_PKCS11_CONSTANT(CKM_GOSTR3411_HMAC);
596     REGISTER_PKCS11_CONSTANT(CKM_GOST28147_KEY_GEN);
597     REGISTER_PKCS11_CONSTANT(CKM_GOST28147_ECB);
598     REGISTER_PKCS11_CONSTANT(CKM_GOST28147);
599     REGISTER_PKCS11_CONSTANT(CKM_GOST28147_MAC);
600     REGISTER_PKCS11_CONSTANT(CKM_GOST28147_KEY_WRAP);
601     REGISTER_PKCS11_CONSTANT(CKM_CHACHA20_KEY_GEN);
602     REGISTER_PKCS11_CONSTANT(CKM_CHACHA20);
603     REGISTER_PKCS11_CONSTANT(CKM_POLY1305_KEY_GEN);
604     REGISTER_PKCS11_CONSTANT(CKM_POLY1305);
605     REGISTER_PKCS11_CONSTANT(CKM_DSA_PARAMETER_GEN);
606     REGISTER_PKCS11_CONSTANT(CKM_DH_PKCS_PARAMETER_GEN);
607     REGISTER_PKCS11_CONSTANT(CKM_X9_42_DH_PARAMETER_GEN);
608     REGISTER_PKCS11_CONSTANT(CKM_DSA_PROBABILISTIC_PARAMETER_GEN);
609     REGISTER_PKCS11_CONSTANT(CKM_DSA_PROBABLISTIC_PARAMETER_GEN);
610     REGISTER_PKCS11_CONSTANT(CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN);
611     REGISTER_PKCS11_CONSTANT(CKM_DSA_FIPS_G_GEN);
612     REGISTER_PKCS11_CONSTANT(CKM_AES_OFB);
613     REGISTER_PKCS11_CONSTANT(CKM_AES_CFB64);
614     REGISTER_PKCS11_CONSTANT(CKM_AES_CFB8);
615     REGISTER_PKCS11_CONSTANT(CKM_AES_CFB128);
616     REGISTER_PKCS11_CONSTANT(CKM_AES_CFB1);
617     REGISTER_PKCS11_CONSTANT(CKM_AES_KEY_WRAP);
618     REGISTER_PKCS11_CONSTANT(CKM_AES_KEY_WRAP_PAD);
619     REGISTER_PKCS11_CONSTANT(CKM_AES_KEY_WRAP_KWP);
620     REGISTER_PKCS11_CONSTANT(CKM_RSA_PKCS_TPM_1_1);
621     REGISTER_PKCS11_CONSTANT(CKM_RSA_PKCS_OAEP_TPM_1_1);
622     REGISTER_PKCS11_CONSTANT(CKM_SHA_1_KEY_GEN);
623     REGISTER_PKCS11_CONSTANT(CKM_SHA224_KEY_GEN);
624     REGISTER_PKCS11_CONSTANT(CKM_SHA256_KEY_GEN);
625     REGISTER_PKCS11_CONSTANT(CKM_SHA384_KEY_GEN);
626     REGISTER_PKCS11_CONSTANT(CKM_SHA512_KEY_GEN);
627     REGISTER_PKCS11_CONSTANT(CKM_SHA512_224_KEY_GEN);
628     REGISTER_PKCS11_CONSTANT(CKM_SHA512_256_KEY_GEN);
629     REGISTER_PKCS11_CONSTANT(CKM_SHA512_T_KEY_GEN);
630     REGISTER_PKCS11_CONSTANT(CKM_NULL);
631     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_160);
632     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_160_HMAC);
633     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_160_HMAC_GENERAL);
634     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_160_KEY_DERIVE);
635     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_160_KEY_GEN);
636     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_256);
637     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_256_HMAC);
638     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_256_HMAC_GENERAL);
639     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_256_KEY_DERIVE);
640     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_256_KEY_GEN);
641     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_384);
642     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_384_HMAC);
643     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_384_HMAC_GENERAL);
644     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_384_KEY_DERIVE);
645     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_384_KEY_GEN);
646     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_512);
647     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_512_HMAC);
648     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_512_HMAC_GENERAL);
649     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_512_KEY_DERIVE);
650     REGISTER_PKCS11_CONSTANT(CKM_BLAKE2B_512_KEY_GEN);
651     REGISTER_PKCS11_CONSTANT(CKM_SALSA20);
652     REGISTER_PKCS11_CONSTANT(CKM_CHACHA20_POLY1305);
653     REGISTER_PKCS11_CONSTANT(CKM_SALSA20_POLY1305);
654     REGISTER_PKCS11_CONSTANT(CKM_X3DH_INITIALIZE);
655     REGISTER_PKCS11_CONSTANT(CKM_X3DH_RESPOND);
656     REGISTER_PKCS11_CONSTANT(CKM_X2RATCHET_INITIALIZE);
657     REGISTER_PKCS11_CONSTANT(CKM_X2RATCHET_RESPOND);
658     REGISTER_PKCS11_CONSTANT(CKM_X2RATCHET_ENCRYPT);
659     REGISTER_PKCS11_CONSTANT(CKM_X2RATCHET_DECRYPT);
660     REGISTER_PKCS11_CONSTANT(CKM_XEDDSA);
661     REGISTER_PKCS11_CONSTANT(CKM_HKDF_DERIVE);
662     REGISTER_PKCS11_CONSTANT(CKM_HKDF_DATA);
663     REGISTER_PKCS11_CONSTANT(CKM_HKDF_KEY_GEN);
664     REGISTER_PKCS11_CONSTANT(CKM_SALSA20_KEY_GEN);
665     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA3_224);
666     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA3_256);
667     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA3_384);
668     REGISTER_PKCS11_CONSTANT(CKM_ECDSA_SHA3_512);
669     REGISTER_PKCS11_CONSTANT(CKM_EC_EDWARDS_KEY_PAIR_GEN);
670     REGISTER_PKCS11_CONSTANT(CKM_EC_MONTGOMERY_KEY_PAIR_GEN);
671     REGISTER_PKCS11_CONSTANT(CKM_EDDSA);
672     REGISTER_PKCS11_CONSTANT(CKM_SP800_108_COUNTER_KDF);
673     REGISTER_PKCS11_CONSTANT(CKM_SP800_108_FEEDBACK_KDF);
674     REGISTER_PKCS11_CONSTANT(CKM_SP800_108_DOUBLE_PIPELINE_KDF);
675     REGISTER_PKCS11_CONSTANT(CKM_VENDOR_DEFINED);
676 
677     REGISTER_PKCS11_CONSTANT(CKF_TOKEN_PRESENT);
678     REGISTER_PKCS11_CONSTANT(CKF_REMOVABLE_DEVICE);
679     REGISTER_PKCS11_CONSTANT(CKF_HW_SLOT);
680     REGISTER_PKCS11_CONSTANT(CKF_RNG);
681     REGISTER_PKCS11_CONSTANT(CKF_WRITE_PROTECTED);
682     REGISTER_PKCS11_CONSTANT(CKF_LOGIN_REQUIRED);
683     REGISTER_PKCS11_CONSTANT(CKF_USER_PIN_INITIALIZED);
684     REGISTER_PKCS11_CONSTANT(CKF_RESTORE_KEY_NOT_NEEDED);
685     REGISTER_PKCS11_CONSTANT(CKF_CLOCK_ON_TOKEN);
686     REGISTER_PKCS11_CONSTANT(CKF_PROTECTED_AUTHENTICATION_PATH);
687     REGISTER_PKCS11_CONSTANT(CKF_DUAL_CRYPTO_OPERATIONS);
688     REGISTER_PKCS11_CONSTANT(CKF_TOKEN_INITIALIZED);
689     REGISTER_PKCS11_CONSTANT(CKF_SECONDARY_AUTHENTICATION);
690     REGISTER_PKCS11_CONSTANT(CKF_USER_PIN_COUNT_LOW);
691     REGISTER_PKCS11_CONSTANT(CKF_USER_PIN_FINAL_TRY);
692     REGISTER_PKCS11_CONSTANT(CKF_USER_PIN_LOCKED);
693     REGISTER_PKCS11_CONSTANT(CKF_USER_PIN_TO_BE_CHANGED);
694     REGISTER_PKCS11_CONSTANT(CKF_SO_PIN_COUNT_LOW);
695     REGISTER_PKCS11_CONSTANT(CKF_SO_PIN_FINAL_TRY);
696     REGISTER_PKCS11_CONSTANT(CKF_SO_PIN_LOCKED);
697     REGISTER_PKCS11_CONSTANT(CKF_SO_PIN_TO_BE_CHANGED);
698     REGISTER_PKCS11_CONSTANT(CKF_ERROR_STATE);
699     REGISTER_PKCS11_CONSTANT(CKF_RW_SESSION);
700     REGISTER_PKCS11_CONSTANT(CKF_SERIAL_SESSION);
701     REGISTER_PKCS11_CONSTANT(CKF_ARRAY_ATTRIBUTE);
702     REGISTER_PKCS11_CONSTANT(CKF_HW);
703     REGISTER_PKCS11_CONSTANT(CKF_MESSAGE_ENCRYPT);
704     REGISTER_PKCS11_CONSTANT(CKF_MESSAGE_DECRYPT);
705     REGISTER_PKCS11_CONSTANT(CKF_MESSAGE_SIGN);
706     REGISTER_PKCS11_CONSTANT(CKF_MESSAGE_VERIFY);
707     REGISTER_PKCS11_CONSTANT(CKF_MULTI_MESSAGE);
708     REGISTER_PKCS11_CONSTANT(CKF_MULTI_MESSGE);
709     REGISTER_PKCS11_CONSTANT(CKF_FIND_OBJECTS);
710     REGISTER_PKCS11_CONSTANT(CKF_ENCRYPT);
711     REGISTER_PKCS11_CONSTANT(CKF_DECRYPT);
712     REGISTER_PKCS11_CONSTANT(CKF_DIGEST);
713     REGISTER_PKCS11_CONSTANT(CKF_SIGN);
714     REGISTER_PKCS11_CONSTANT(CKF_SIGN_RECOVER);
715     REGISTER_PKCS11_CONSTANT(CKF_VERIFY);
716     REGISTER_PKCS11_CONSTANT(CKF_VERIFY_RECOVER);
717     REGISTER_PKCS11_CONSTANT(CKF_GENERATE);
718     REGISTER_PKCS11_CONSTANT(CKF_GENERATE_KEY_PAIR);
719     REGISTER_PKCS11_CONSTANT(CKF_WRAP);
720     REGISTER_PKCS11_CONSTANT(CKF_UNWRAP);
721     REGISTER_PKCS11_CONSTANT(CKF_DERIVE);
722     REGISTER_PKCS11_CONSTANT(CKF_EC_F_P);
723     REGISTER_PKCS11_CONSTANT(CKF_EC_F_2M);
724     REGISTER_PKCS11_CONSTANT(CKF_EC_ECPARAMETERS);
725     REGISTER_PKCS11_CONSTANT(CKF_EC_OID);
726     REGISTER_PKCS11_CONSTANT(CKF_EC_NAMEDCURVE);
727     REGISTER_PKCS11_CONSTANT(CKF_EC_UNCOMPRESS);
728     REGISTER_PKCS11_CONSTANT(CKF_EC_COMPRESS);
729     REGISTER_PKCS11_CONSTANT(CKF_EC_CURVENAME);
730     REGISTER_PKCS11_CONSTANT(CKF_EXTENSION);
731     REGISTER_PKCS11_CONSTANT(CKF_END_OF_MESSAGE);
732     REGISTER_PKCS11_CONSTANT(CKF_INTERFACE_FORK_SAFE);
733     REGISTER_PKCS11_CONSTANT(CKF_LIBRARY_CANT_CREATE_OS_THREADS);
734     REGISTER_PKCS11_CONSTANT(CKF_OS_LOCKING_OK);
735     REGISTER_PKCS11_CONSTANT(CKF_DONT_BLOCK);
736     REGISTER_PKCS11_CONSTANT(CKF_NEXT_OTP);
737     REGISTER_PKCS11_CONSTANT(CKF_EXCLUDE_TIME);
738     REGISTER_PKCS11_CONSTANT(CKF_EXCLUDE_COUNTER);
739     REGISTER_PKCS11_CONSTANT(CKF_EXCLUDE_CHALLENGE);
740     REGISTER_PKCS11_CONSTANT(CKF_EXCLUDE_PIN);
741     REGISTER_PKCS11_CONSTANT(CKF_USER_FRIENDLY_OTP);
742     REGISTER_PKCS11_CONSTANT(CKF_HKDF_SALT_NULL);
743     REGISTER_PKCS11_CONSTANT(CKF_HKDF_SALT_DATA);
744     REGISTER_PKCS11_CONSTANT(CKF_HKDF_SALT_KEY);
745 
746     REGISTER_PKCS11_CONSTANT(CKU_SO);
747     REGISTER_PKCS11_CONSTANT(CKU_USER);
748     REGISTER_PKCS11_CONSTANT(CKU_CONTEXT_SPECIFIC);
749 
750     REGISTER_PKCS11_CONSTANT(CKS_RO_PUBLIC_SESSION);
751     REGISTER_PKCS11_CONSTANT(CKS_RO_USER_FUNCTIONS);
752     REGISTER_PKCS11_CONSTANT(CKS_RW_PUBLIC_SESSION);
753     REGISTER_PKCS11_CONSTANT(CKS_RW_USER_FUNCTIONS);
754     REGISTER_PKCS11_CONSTANT(CKS_RW_SO_FUNCTIONS);
755 
756     REGISTER_PKCS11_CONSTANT(CKA_CLASS);
757     REGISTER_PKCS11_CONSTANT(CKA_TOKEN);
758     REGISTER_PKCS11_CONSTANT(CKA_PRIVATE);
759     REGISTER_PKCS11_CONSTANT(CKA_LABEL);
760     REGISTER_PKCS11_CONSTANT(CKA_APPLICATION);
761     REGISTER_PKCS11_CONSTANT(CKA_VALUE);
762     REGISTER_PKCS11_CONSTANT(CKA_OBJECT_ID);
763     REGISTER_PKCS11_CONSTANT(CKA_CERTIFICATE_TYPE);
764     REGISTER_PKCS11_CONSTANT(CKA_ISSUER);
765     REGISTER_PKCS11_CONSTANT(CKA_SERIAL_NUMBER);
766     REGISTER_PKCS11_CONSTANT(CKA_AC_ISSUER);
767     REGISTER_PKCS11_CONSTANT(CKA_OWNER);
768     REGISTER_PKCS11_CONSTANT(CKA_ATTR_TYPES);
769     REGISTER_PKCS11_CONSTANT(CKA_TRUSTED);
770     REGISTER_PKCS11_CONSTANT(CKA_CERTIFICATE_CATEGORY);
771     REGISTER_PKCS11_CONSTANT(CKA_JAVA_MIDP_SECURITY_DOMAIN);
772     REGISTER_PKCS11_CONSTANT(CKA_URL);
773     REGISTER_PKCS11_CONSTANT(CKA_HASH_OF_SUBJECT_PUBLIC_KEY);
774     REGISTER_PKCS11_CONSTANT(CKA_HASH_OF_ISSUER_PUBLIC_KEY);
775     REGISTER_PKCS11_CONSTANT(CKA_NAME_HASH_ALGORITHM);
776     REGISTER_PKCS11_CONSTANT(CKA_CHECK_VALUE);
777     REGISTER_PKCS11_CONSTANT(CKA_KEY_TYPE);
778     REGISTER_PKCS11_CONSTANT(CKA_SUBJECT);
779     REGISTER_PKCS11_CONSTANT(CKA_ID);
780     REGISTER_PKCS11_CONSTANT(CKA_SENSITIVE);
781     REGISTER_PKCS11_CONSTANT(CKA_ENCRYPT);
782     REGISTER_PKCS11_CONSTANT(CKA_DECRYPT);
783     REGISTER_PKCS11_CONSTANT(CKA_WRAP);
784     REGISTER_PKCS11_CONSTANT(CKA_UNWRAP);
785     REGISTER_PKCS11_CONSTANT(CKA_SIGN);
786     REGISTER_PKCS11_CONSTANT(CKA_SIGN_RECOVER);
787     REGISTER_PKCS11_CONSTANT(CKA_VERIFY);
788     REGISTER_PKCS11_CONSTANT(CKA_VERIFY_RECOVER);
789     REGISTER_PKCS11_CONSTANT(CKA_DERIVE);
790     REGISTER_PKCS11_CONSTANT(CKA_START_DATE);
791     REGISTER_PKCS11_CONSTANT(CKA_END_DATE);
792     REGISTER_PKCS11_CONSTANT(CKA_MODULUS);
793     REGISTER_PKCS11_CONSTANT(CKA_MODULUS_BITS);
794     REGISTER_PKCS11_CONSTANT(CKA_PUBLIC_EXPONENT);
795     REGISTER_PKCS11_CONSTANT(CKA_PRIVATE_EXPONENT);
796     REGISTER_PKCS11_CONSTANT(CKA_PRIME_1);
797     REGISTER_PKCS11_CONSTANT(CKA_PRIME_2);
798     REGISTER_PKCS11_CONSTANT(CKA_EXPONENT_1);
799     REGISTER_PKCS11_CONSTANT(CKA_EXPONENT_2);
800     REGISTER_PKCS11_CONSTANT(CKA_COEFFICIENT);
801     REGISTER_PKCS11_CONSTANT(CKA_PUBLIC_KEY_INFO);
802     REGISTER_PKCS11_CONSTANT(CKA_PRIME);
803     REGISTER_PKCS11_CONSTANT(CKA_SUBPRIME);
804     REGISTER_PKCS11_CONSTANT(CKA_BASE);
805     REGISTER_PKCS11_CONSTANT(CKA_PRIME_BITS);
806     REGISTER_PKCS11_CONSTANT(CKA_SUBPRIME_BITS);
807     REGISTER_PKCS11_CONSTANT(CKA_SUB_PRIME_BITS);
808     REGISTER_PKCS11_CONSTANT(CKA_VALUE_BITS);
809     REGISTER_PKCS11_CONSTANT(CKA_VALUE_LEN);
810     REGISTER_PKCS11_CONSTANT(CKA_EXTRACTABLE);
811     REGISTER_PKCS11_CONSTANT(CKA_LOCAL);
812     REGISTER_PKCS11_CONSTANT(CKA_NEVER_EXTRACTABLE);
813     REGISTER_PKCS11_CONSTANT(CKA_ALWAYS_SENSITIVE);
814     REGISTER_PKCS11_CONSTANT(CKA_KEY_GEN_MECHANISM);
815     REGISTER_PKCS11_CONSTANT(CKA_MODIFIABLE);
816     REGISTER_PKCS11_CONSTANT(CKA_COPYABLE);
817     REGISTER_PKCS11_CONSTANT(CKA_DESTROYABLE);
818     REGISTER_PKCS11_CONSTANT(CKA_ECDSA_PARAMS);
819     REGISTER_PKCS11_CONSTANT(CKA_EC_PARAMS);
820     REGISTER_PKCS11_CONSTANT(CKA_EC_POINT);
821     REGISTER_PKCS11_CONSTANT(CKA_SECONDARY_AUTH);
822     REGISTER_PKCS11_CONSTANT(CKA_AUTH_PIN_FLAGS);
823     REGISTER_PKCS11_CONSTANT(CKA_ALWAYS_AUTHENTICATE);
824     REGISTER_PKCS11_CONSTANT(CKA_WRAP_WITH_TRUSTED);
825     REGISTER_PKCS11_CONSTANT(CKA_WRAP_TEMPLATE);
826     REGISTER_PKCS11_CONSTANT(CKA_UNWRAP_TEMPLATE);
827     REGISTER_PKCS11_CONSTANT(CKA_DERIVE_TEMPLATE);
828     REGISTER_PKCS11_CONSTANT(CKA_OTP_FORMAT);
829     REGISTER_PKCS11_CONSTANT(CKA_OTP_LENGTH);
830     REGISTER_PKCS11_CONSTANT(CKA_OTP_TIME_INTERVAL);
831     REGISTER_PKCS11_CONSTANT(CKA_OTP_USER_FRIENDLY_MODE);
832     REGISTER_PKCS11_CONSTANT(CKA_OTP_CHALLENGE_REQUIREMENT);
833     REGISTER_PKCS11_CONSTANT(CKA_OTP_TIME_REQUIREMENT);
834     REGISTER_PKCS11_CONSTANT(CKA_OTP_COUNTER_REQUIREMENT);
835     REGISTER_PKCS11_CONSTANT(CKA_OTP_PIN_REQUIREMENT);
836     REGISTER_PKCS11_CONSTANT(CKA_OTP_COUNTER);
837     REGISTER_PKCS11_CONSTANT(CKA_OTP_TIME);
838     REGISTER_PKCS11_CONSTANT(CKA_OTP_USER_IDENTIFIER);
839     REGISTER_PKCS11_CONSTANT(CKA_OTP_SERVICE_IDENTIFIER);
840     REGISTER_PKCS11_CONSTANT(CKA_OTP_SERVICE_LOGO);
841     REGISTER_PKCS11_CONSTANT(CKA_OTP_SERVICE_LOGO_TYPE);
842     REGISTER_PKCS11_CONSTANT(CKA_GOSTR3410_PARAMS);
843     REGISTER_PKCS11_CONSTANT(CKA_GOSTR3411_PARAMS);
844     REGISTER_PKCS11_CONSTANT(CKA_GOST28147_PARAMS);
845     REGISTER_PKCS11_CONSTANT(CKA_HW_FEATURE_TYPE);
846     REGISTER_PKCS11_CONSTANT(CKA_RESET_ON_INIT);
847     REGISTER_PKCS11_CONSTANT(CKA_HAS_RESET);
848     REGISTER_PKCS11_CONSTANT(CKA_PIXEL_X);
849     REGISTER_PKCS11_CONSTANT(CKA_PIXEL_Y);
850     REGISTER_PKCS11_CONSTANT(CKA_RESOLUTION);
851     REGISTER_PKCS11_CONSTANT(CKA_CHAR_ROWS);
852     REGISTER_PKCS11_CONSTANT(CKA_CHAR_COLUMNS);
853     REGISTER_PKCS11_CONSTANT(CKA_COLOR);
854     REGISTER_PKCS11_CONSTANT(CKA_BITS_PER_PIXEL);
855     REGISTER_PKCS11_CONSTANT(CKA_CHAR_SETS);
856     REGISTER_PKCS11_CONSTANT(CKA_ENCODING_METHODS);
857     REGISTER_PKCS11_CONSTANT(CKA_MIME_TYPES);
858     REGISTER_PKCS11_CONSTANT(CKA_MECHANISM_TYPE);
859     REGISTER_PKCS11_CONSTANT(CKA_REQUIRED_CMS_ATTRIBUTES);
860     REGISTER_PKCS11_CONSTANT(CKA_DEFAULT_CMS_ATTRIBUTES);
861     REGISTER_PKCS11_CONSTANT(CKA_SUPPORTED_CMS_ATTRIBUTES);
862     REGISTER_PKCS11_CONSTANT(CKA_ALLOWED_MECHANISMS);
863 
864     REGISTER_PKCS11_CONSTANT(CKA_PROFILE_ID);
865     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_BAG);
866     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_BAGSIZE);
867     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_BOBS1STMSG);
868     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_CKR);
869     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_CKS);
870     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_DHP);
871     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_DHR);
872     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_DHS);
873     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_HKR);
874     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_HKS);
875     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_ISALICE);
876     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_NHKR);
877     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_NHKS);
878     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_NR);
879     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_NS);
880     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_PNS);
881     REGISTER_PKCS11_CONSTANT(CKA_X2RATCHET_RK);
882 
883     REGISTER_PKCS11_CONSTANT(CKA_VENDOR_DEFINED);
884 
885     REGISTER_PKCS11_CONSTANT(CKO_DATA);
886     REGISTER_PKCS11_CONSTANT(CKO_CERTIFICATE);
887     REGISTER_PKCS11_CONSTANT(CKO_PUBLIC_KEY);
888     REGISTER_PKCS11_CONSTANT(CKO_PRIVATE_KEY);
889     REGISTER_PKCS11_CONSTANT(CKO_SECRET_KEY);
890     REGISTER_PKCS11_CONSTANT(CKO_HW_FEATURE);
891     REGISTER_PKCS11_CONSTANT(CKO_DOMAIN_PARAMETERS);
892     REGISTER_PKCS11_CONSTANT(CKO_MECHANISM);
893     REGISTER_PKCS11_CONSTANT(CKO_OTP_KEY);
894     REGISTER_PKCS11_CONSTANT(CKO_VENDOR_DEFINED);
895 
896     REGISTER_PKCS11_CONSTANT(CKK_RSA);
897     REGISTER_PKCS11_CONSTANT(CKK_DSA);
898     REGISTER_PKCS11_CONSTANT(CKK_DH);
899     REGISTER_PKCS11_CONSTANT(CKK_ECDSA);
900     REGISTER_PKCS11_CONSTANT(CKK_EC);
901     REGISTER_PKCS11_CONSTANT(CKK_X9_42_DH);
902     REGISTER_PKCS11_CONSTANT(CKK_KEA);
903     REGISTER_PKCS11_CONSTANT(CKK_GENERIC_SECRET);
904     REGISTER_PKCS11_CONSTANT(CKK_RC2);
905     REGISTER_PKCS11_CONSTANT(CKK_RC4);
906     REGISTER_PKCS11_CONSTANT(CKK_DES);
907     REGISTER_PKCS11_CONSTANT(CKK_DES2);
908     REGISTER_PKCS11_CONSTANT(CKK_DES3);
909     REGISTER_PKCS11_CONSTANT(CKK_CAST);
910     REGISTER_PKCS11_CONSTANT(CKK_CAST3);
911     REGISTER_PKCS11_CONSTANT(CKK_CAST5);
912     REGISTER_PKCS11_CONSTANT(CKK_CAST128);
913     REGISTER_PKCS11_CONSTANT(CKK_RC5);
914     REGISTER_PKCS11_CONSTANT(CKK_IDEA);
915     REGISTER_PKCS11_CONSTANT(CKK_SKIPJACK);
916     REGISTER_PKCS11_CONSTANT(CKK_BATON);
917     REGISTER_PKCS11_CONSTANT(CKK_JUNIPER);
918     REGISTER_PKCS11_CONSTANT(CKK_CDMF);
919     REGISTER_PKCS11_CONSTANT(CKK_AES);
920     REGISTER_PKCS11_CONSTANT(CKK_BLOWFISH);
921     REGISTER_PKCS11_CONSTANT(CKK_TWOFISH);
922     REGISTER_PKCS11_CONSTANT(CKK_SECURID);
923     REGISTER_PKCS11_CONSTANT(CKK_HOTP);
924     REGISTER_PKCS11_CONSTANT(CKK_ACTI);
925     REGISTER_PKCS11_CONSTANT(CKK_CAMELLIA);
926     REGISTER_PKCS11_CONSTANT(CKK_ARIA);
927     REGISTER_PKCS11_CONSTANT(CKK_MD5_HMAC);
928     REGISTER_PKCS11_CONSTANT(CKK_SHA_1_HMAC);
929     REGISTER_PKCS11_CONSTANT(CKK_RIPEMD128_HMAC);
930     REGISTER_PKCS11_CONSTANT(CKK_RIPEMD160_HMAC);
931     REGISTER_PKCS11_CONSTANT(CKK_SHA256_HMAC);
932     REGISTER_PKCS11_CONSTANT(CKK_SHA384_HMAC);
933     REGISTER_PKCS11_CONSTANT(CKK_SHA512_HMAC);
934     REGISTER_PKCS11_CONSTANT(CKK_SHA224_HMAC);
935     REGISTER_PKCS11_CONSTANT(CKK_SEED);
936     REGISTER_PKCS11_CONSTANT(CKK_GOSTR3410);
937     REGISTER_PKCS11_CONSTANT(CKK_GOSTR3411);
938     REGISTER_PKCS11_CONSTANT(CKK_GOST28147);
939     REGISTER_PKCS11_CONSTANT(CKK_CHACHA20);
940     REGISTER_PKCS11_CONSTANT(CKK_POLY1305);
941     REGISTER_PKCS11_CONSTANT(CKK_AES_XTS);
942     REGISTER_PKCS11_CONSTANT(CKK_SHA3_224_HMAC);
943     REGISTER_PKCS11_CONSTANT(CKK_SHA3_256_HMAC);
944     REGISTER_PKCS11_CONSTANT(CKK_SHA3_384_HMAC);
945     REGISTER_PKCS11_CONSTANT(CKK_SHA3_512_HMAC);
946     REGISTER_PKCS11_CONSTANT(CKK_BLAKE2B_160_HMAC);
947     REGISTER_PKCS11_CONSTANT(CKK_BLAKE2B_256_HMAC);
948     REGISTER_PKCS11_CONSTANT(CKK_BLAKE2B_384_HMAC);
949     REGISTER_PKCS11_CONSTANT(CKK_BLAKE2B_512_HMAC);
950     REGISTER_PKCS11_CONSTANT(CKK_SALSA20);
951     REGISTER_PKCS11_CONSTANT(CKK_X2RATCHET);
952     REGISTER_PKCS11_CONSTANT(CKK_EC_EDWARDS);
953     REGISTER_PKCS11_CONSTANT(CKK_EC_MONTGOMERY);
954     REGISTER_PKCS11_CONSTANT(CKK_HKDF);
955     REGISTER_PKCS11_CONSTANT(CKK_SHA512_224_HMAC);
956     REGISTER_PKCS11_CONSTANT(CKK_SHA512_256_HMAC);
957     REGISTER_PKCS11_CONSTANT(CKK_SHA512_T_HMAC);
958     REGISTER_PKCS11_CONSTANT(CKK_VENDOR_DEFINED);
959 
960     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA1);
961     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA256);
962     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA384);
963     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA512);
964     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA224);
965     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA3_224);
966     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA3_256);
967     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA3_384);
968     REGISTER_PKCS11_CONSTANT(CKG_MGF1_SHA3_512);
969 
970     REGISTER_PKCS11_CONSTANT(CKZ_DATA_SPECIFIED);
971 
972     REGISTER_PKCS11_CONSTANT(CKD_NULL);
973     REGISTER_PKCS11_CONSTANT(CKD_SHA1_KDF);
974     REGISTER_PKCS11_CONSTANT(CKD_SHA1_KDF_ASN1);
975     REGISTER_PKCS11_CONSTANT(CKD_SHA1_KDF_CONCATENATE);
976     REGISTER_PKCS11_CONSTANT(CKD_SHA224_KDF);
977     REGISTER_PKCS11_CONSTANT(CKD_SHA256_KDF);
978     REGISTER_PKCS11_CONSTANT(CKD_SHA384_KDF);
979     REGISTER_PKCS11_CONSTANT(CKD_SHA512_KDF);
980     REGISTER_PKCS11_CONSTANT(CKD_CPDIVERSIFY_KDF);
981     REGISTER_PKCS11_CONSTANT(CKD_SHA3_224_KDF);
982     REGISTER_PKCS11_CONSTANT(CKD_SHA3_256_KDF);
983     REGISTER_PKCS11_CONSTANT(CKD_SHA3_384_KDF);
984     REGISTER_PKCS11_CONSTANT(CKD_SHA3_512_KDF);
985     REGISTER_PKCS11_CONSTANT(CKD_SHA1_KDF_SP800);
986     REGISTER_PKCS11_CONSTANT(CKD_SHA224_KDF_SP800);
987     REGISTER_PKCS11_CONSTANT(CKD_SHA256_KDF_SP800);
988     REGISTER_PKCS11_CONSTANT(CKD_SHA384_KDF_SP800);
989     REGISTER_PKCS11_CONSTANT(CKD_SHA512_KDF_SP800);
990     REGISTER_PKCS11_CONSTANT(CKD_SHA3_224_KDF_SP800);
991     REGISTER_PKCS11_CONSTANT(CKD_SHA3_256_KDF_SP800);
992     REGISTER_PKCS11_CONSTANT(CKD_SHA3_384_KDF_SP800);
993     REGISTER_PKCS11_CONSTANT(CKD_SHA3_512_KDF_SP800);
994     REGISTER_PKCS11_CONSTANT(CKD_BLAKE2B_160_KDF);
995     REGISTER_PKCS11_CONSTANT(CKD_BLAKE2B_256_KDF);
996     REGISTER_PKCS11_CONSTANT(CKD_BLAKE2B_384_KDF);
997     REGISTER_PKCS11_CONSTANT(CKD_BLAKE2B_512_KDF);
998 
999     REGISTER_PKCS11_CONSTANT(CKR_OK);
1000     REGISTER_PKCS11_CONSTANT(CKR_CANCEL);
1001     REGISTER_PKCS11_CONSTANT(CKR_HOST_MEMORY);
1002     REGISTER_PKCS11_CONSTANT(CKR_SLOT_ID_INVALID);
1003     REGISTER_PKCS11_CONSTANT(CKR_GENERAL_ERROR);
1004     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_FAILED);
1005     REGISTER_PKCS11_CONSTANT(CKR_ARGUMENTS_BAD);
1006     REGISTER_PKCS11_CONSTANT(CKR_NO_EVENT);
1007     REGISTER_PKCS11_CONSTANT(CKR_NEED_TO_CREATE_THREADS);
1008     REGISTER_PKCS11_CONSTANT(CKR_CANT_LOCK);
1009     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_READ_ONLY);
1010     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_SENSITIVE);
1011     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_TYPE_INVALID);
1012     REGISTER_PKCS11_CONSTANT(CKR_ATTRIBUTE_VALUE_INVALID);
1013     REGISTER_PKCS11_CONSTANT(CKR_DATA_INVALID);
1014     REGISTER_PKCS11_CONSTANT(CKR_DATA_LEN_RANGE);
1015     REGISTER_PKCS11_CONSTANT(CKR_DEVICE_ERROR);
1016     REGISTER_PKCS11_CONSTANT(CKR_DEVICE_MEMORY);
1017     REGISTER_PKCS11_CONSTANT(CKR_DEVICE_REMOVED);
1018     REGISTER_PKCS11_CONSTANT(CKR_ENCRYPTED_DATA_INVALID);
1019     REGISTER_PKCS11_CONSTANT(CKR_ENCRYPTED_DATA_LEN_RANGE);
1020     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_CANCELED);
1021     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_NOT_PARALLEL);
1022     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_NOT_SUPPORTED);
1023     REGISTER_PKCS11_CONSTANT(CKR_KEY_HANDLE_INVALID);
1024     REGISTER_PKCS11_CONSTANT(CKR_KEY_SIZE_RANGE);
1025     REGISTER_PKCS11_CONSTANT(CKR_KEY_TYPE_INCONSISTENT);
1026     REGISTER_PKCS11_CONSTANT(CKR_KEY_NOT_NEEDED);
1027     REGISTER_PKCS11_CONSTANT(CKR_KEY_CHANGED);
1028     REGISTER_PKCS11_CONSTANT(CKR_KEY_NEEDED);
1029     REGISTER_PKCS11_CONSTANT(CKR_KEY_INDIGESTIBLE);
1030     REGISTER_PKCS11_CONSTANT(CKR_KEY_FUNCTION_NOT_PERMITTED);
1031     REGISTER_PKCS11_CONSTANT(CKR_KEY_NOT_WRAPPABLE);
1032     REGISTER_PKCS11_CONSTANT(CKR_KEY_UNEXTRACTABLE);
1033     REGISTER_PKCS11_CONSTANT(CKR_MECHANISM_INVALID);
1034     REGISTER_PKCS11_CONSTANT(CKR_MECHANISM_PARAM_INVALID);
1035     REGISTER_PKCS11_CONSTANT(CKR_OBJECT_HANDLE_INVALID);
1036     REGISTER_PKCS11_CONSTANT(CKR_OPERATION_ACTIVE);
1037     REGISTER_PKCS11_CONSTANT(CKR_OPERATION_NOT_INITIALIZED);
1038     REGISTER_PKCS11_CONSTANT(CKR_PIN_INCORRECT);
1039     REGISTER_PKCS11_CONSTANT(CKR_PIN_INVALID);
1040     REGISTER_PKCS11_CONSTANT(CKR_PIN_LEN_RANGE);
1041     REGISTER_PKCS11_CONSTANT(CKR_PIN_EXPIRED);
1042     REGISTER_PKCS11_CONSTANT(CKR_PIN_LOCKED);
1043     REGISTER_PKCS11_CONSTANT(CKR_SESSION_CLOSED);
1044     REGISTER_PKCS11_CONSTANT(CKR_SESSION_COUNT);
1045     REGISTER_PKCS11_CONSTANT(CKR_SESSION_HANDLE_INVALID);
1046     REGISTER_PKCS11_CONSTANT(CKR_SESSION_PARALLEL_NOT_SUPPORTED);
1047     REGISTER_PKCS11_CONSTANT(CKR_SESSION_READ_ONLY);
1048     REGISTER_PKCS11_CONSTANT(CKR_SESSION_EXISTS);
1049     REGISTER_PKCS11_CONSTANT(CKR_SESSION_READ_ONLY_EXISTS);
1050     REGISTER_PKCS11_CONSTANT(CKR_SESSION_READ_WRITE_SO_EXISTS);
1051     REGISTER_PKCS11_CONSTANT(CKR_SIGNATURE_INVALID);
1052     REGISTER_PKCS11_CONSTANT(CKR_SIGNATURE_LEN_RANGE);
1053     REGISTER_PKCS11_CONSTANT(CKR_TEMPLATE_INCOMPLETE);
1054     REGISTER_PKCS11_CONSTANT(CKR_TEMPLATE_INCONSISTENT);
1055     REGISTER_PKCS11_CONSTANT(CKR_TOKEN_NOT_PRESENT);
1056     REGISTER_PKCS11_CONSTANT(CKR_TOKEN_NOT_RECOGNIZED);
1057     REGISTER_PKCS11_CONSTANT(CKR_TOKEN_WRITE_PROTECTED);
1058     REGISTER_PKCS11_CONSTANT(CKR_UNWRAPPING_KEY_HANDLE_INVALID);
1059     REGISTER_PKCS11_CONSTANT(CKR_UNWRAPPING_KEY_SIZE_RANGE);
1060     REGISTER_PKCS11_CONSTANT(CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT);
1061     REGISTER_PKCS11_CONSTANT(CKR_USER_ALREADY_LOGGED_IN);
1062     REGISTER_PKCS11_CONSTANT(CKR_USER_NOT_LOGGED_IN);
1063     REGISTER_PKCS11_CONSTANT(CKR_USER_PIN_NOT_INITIALIZED);
1064     REGISTER_PKCS11_CONSTANT(CKR_USER_TYPE_INVALID);
1065     REGISTER_PKCS11_CONSTANT(CKR_USER_ANOTHER_ALREADY_LOGGED_IN);
1066     REGISTER_PKCS11_CONSTANT(CKR_USER_TOO_MANY_TYPES);
1067     REGISTER_PKCS11_CONSTANT(CKR_WRAPPED_KEY_INVALID);
1068     REGISTER_PKCS11_CONSTANT(CKR_WRAPPED_KEY_LEN_RANGE);
1069     REGISTER_PKCS11_CONSTANT(CKR_WRAPPING_KEY_HANDLE_INVALID);
1070     REGISTER_PKCS11_CONSTANT(CKR_WRAPPING_KEY_SIZE_RANGE);
1071     REGISTER_PKCS11_CONSTANT(CKR_WRAPPING_KEY_TYPE_INCONSISTENT);
1072     REGISTER_PKCS11_CONSTANT(CKR_RANDOM_SEED_NOT_SUPPORTED);
1073     REGISTER_PKCS11_CONSTANT(CKR_RANDOM_NO_RNG);
1074     REGISTER_PKCS11_CONSTANT(CKR_DOMAIN_PARAMS_INVALID);
1075     REGISTER_PKCS11_CONSTANT(CKR_BUFFER_TOO_SMALL);
1076     REGISTER_PKCS11_CONSTANT(CKR_SAVED_STATE_INVALID);
1077     REGISTER_PKCS11_CONSTANT(CKR_INFORMATION_SENSITIVE);
1078     REGISTER_PKCS11_CONSTANT(CKR_STATE_UNSAVEABLE);
1079     REGISTER_PKCS11_CONSTANT(CKR_CRYPTOKI_NOT_INITIALIZED);
1080     REGISTER_PKCS11_CONSTANT(CKR_CRYPTOKI_ALREADY_INITIALIZED);
1081     REGISTER_PKCS11_CONSTANT(CKR_MUTEX_BAD);
1082     REGISTER_PKCS11_CONSTANT(CKR_MUTEX_NOT_LOCKED);
1083     REGISTER_PKCS11_CONSTANT(CKR_FUNCTION_REJECTED);
1084     REGISTER_PKCS11_CONSTANT(CKR_VENDOR_DEFINED);
1085 
1086     return SUCCESS;
1087 }
1088 
1089 
PHP_MINFO_FUNCTION(pkcs11)1090 PHP_MINFO_FUNCTION(pkcs11)
1091 {
1092     php_info_print_table_start();
1093     php_info_print_table_header(2, "PKCS#11 support", "enabled");
1094     php_info_print_table_end();
1095 }
1096 
1097 zend_module_entry pkcs11_module_entry = {
1098     STANDARD_MODULE_HEADER,
1099     PHP_PKCS11_NAME,
1100     NULL,                           /* zend_function_entry */
1101     PHP_MINIT(pkcs11),              /* PHP_MINIT - Module initialization */
1102     NULL,                           /* PHP_MSHUTDOWN - Module shutdown */
1103     NULL,                           /* PHP_RINIT - Request initialization */
1104     NULL,                           /* PHP_RSHUTDOWN - Request shutdown */
1105     PHP_MINFO(pkcs11),              /* PHP_MINFO - Module info */
1106     PHP_PKCS11_VERSION,             /* Version */
1107     STANDARD_MODULE_PROPERTIES
1108 };
1109 
1110 #ifdef COMPILE_DL_PKCS11
1111 # ifdef ZTS
1112 ZEND_TSRMLS_CACHE_DEFINE()
1113 # endif
1114 ZEND_GET_MODULE(pkcs11)
1115 #endif
1116