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
type t =
| CKR_OK
| CKR_CANCEL
| CKR_HOST_MEMORY
| CKR_SLOT_ID_INVALID
| CKR_GENERAL_ERROR
| CKR_FUNCTION_FAILED
| CKR_ARGUMENTS_BAD
| CKR_NO_EVENT
| CKR_NEED_TO_CREATE_THREADS
| CKR_CANT_LOCK
| CKR_ATTRIBUTE_READ_ONLY
| CKR_ATTRIBUTE_SENSITIVE
| CKR_ATTRIBUTE_TYPE_INVALID
| CKR_ATTRIBUTE_VALUE_INVALID
| CKR_ACTION_PROHIBITED
| CKR_DATA_INVALID
| CKR_DATA_LEN_RANGE
| CKR_DEVICE_ERROR
| CKR_DEVICE_MEMORY
| CKR_DEVICE_REMOVED
| CKR_ENCRYPTED_DATA_INVALID
| CKR_ENCRYPTED_DATA_LEN_RANGE
| CKR_FUNCTION_CANCELED
| CKR_FUNCTION_NOT_PARALLEL
| CKR_FUNCTION_NOT_SUPPORTED
| CKR_KEY_HANDLE_INVALID
| CKR_KEY_SIZE_RANGE
| CKR_KEY_TYPE_INCONSISTENT
| CKR_KEY_NOT_NEEDED
| CKR_KEY_CHANGED
| CKR_KEY_NEEDED
| CKR_KEY_INDIGESTIBLE
| CKR_KEY_FUNCTION_NOT_PERMITTED
| CKR_KEY_NOT_WRAPPABLE
| CKR_MECHANISM_INVALID
| CKR_MECHANISM_PARAM_INVALID
| CKR_OBJECT_HANDLE_INVALID
| CKR_OPERATION_ACTIVE
| CKR_OPERATION_NOT_INITIALIZED
| CKR_PIN_INCORRECT
| CKR_PIN_INVALID
| CKR_PIN_LEN_RANGE
| CKR_PIN_EXPIRED
| CKR_PIN_LOCKED
| CKR_SESSION_CLOSED
| CKR_SESSION_COUNT
| CKR_SESSION_HANDLE_INVALID
| CKR_SESSION_PARALLEL_NOT_SUPPORTED
| CKR_SESSION_READ_ONLY
| CKR_SESSION_EXISTS
| CKR_SESSION_READ_ONLY_EXISTS
| CKR_SESSION_READ_WRITE_SO_EXISTS
| CKR_SIGNATURE_INVALID
| CKR_SIGNATURE_LEN_RANGE
| CKR_TEMPLATE_INCOMPLETE
| CKR_TEMPLATE_INCONSISTENT
| CKR_TOKEN_NOT_PRESENT
| CKR_TOKEN_NOT_RECOGNIZED
| CKR_TOKEN_WRITE_PROTECTED
| CKR_UNWRAPPING_KEY_HANDLE_INVALID
| CKR_UNWRAPPING_KEY_SIZE_RANGE
| CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT
| CKR_USER_ALREADY_LOGGED_IN
| CKR_USER_NOT_LOGGED_IN
| CKR_USER_PIN_NOT_INITIALIZED
| CKR_USER_TYPE_INVALID
| CKR_USER_ANOTHER_ALREADY_LOGGED_IN
| CKR_USER_TOO_MANY_TYPES
| CKR_WRAPPED_KEY_INVALID
| CKR_WRAPPED_KEY_LEN_RANGE
| CKR_WRAPPING_KEY_HANDLE_INVALID
| CKR_WRAPPING_KEY_SIZE_RANGE
| CKR_WRAPPING_KEY_TYPE_INCONSISTENT
| CKR_RANDOM_SEED_NOT_SUPPORTED
| CKR_RANDOM_NO_RNG
| CKR_DOMAIN_PARAMS_INVALID
| CKR_CURVE_NOT_SUPPORTED
| CKR_BUFFER_TOO_SMALL
| CKR_SAVED_STATE_INVALID
| CKR_INFORMATION_SENSITIVE
| CKR_STATE_UNSAVEABLE
| CKR_CRYPTOKI_NOT_INITIALIZED
| CKR_CRYPTOKI_ALREADY_INITIALIZED
| CKR_MUTEX_BAD
| CKR_MUTEX_NOT_LOCKED
| CKR_NEW_PIN_MODE
| CKR_NEXT_OTP
| CKR_EXCEEDED_MAX_ITERATIONS
| CKR_FIPS_SELF_TEST_FAILED
| CKR_LIBRARY_LOAD_FAILED
| CKR_PIN_TOO_WEAK
| CKR_PUBLIC_KEY_INVALID
| CKR_FUNCTION_REJECTED
| CKR_VENDOR_DEFINED
| CKR_CS_UNKNOWN of P11_ulong.t
[@@deriving eq, ord, show, yojson]
let to_string = function
| CKR_OK -> "CKR_OK"
| CKR_CANCEL -> "CKR_CANCEL"
| CKR_HOST_MEMORY -> "CKR_HOST_MEMORY"
| CKR_SLOT_ID_INVALID -> "CKR_SLOT_ID_INVALID"
| CKR_GENERAL_ERROR -> "CKR_GENERAL_ERROR"
| CKR_FUNCTION_FAILED -> "CKR_FUNCTION_FAILED"
| CKR_ARGUMENTS_BAD -> "CKR_ARGUMENTS_BAD"
| CKR_NO_EVENT -> "CKR_NO_EVENT"
| CKR_NEED_TO_CREATE_THREADS -> "CKR_NEED_TO_CREATE_THREADS"
| CKR_CANT_LOCK -> "CKR_CANT_LOCK"
| CKR_ATTRIBUTE_READ_ONLY -> "CKR_ATTRIBUTE_READ_ONLY"
| CKR_ATTRIBUTE_SENSITIVE -> "CKR_ATTRIBUTE_SENSITIVE"
| CKR_ATTRIBUTE_TYPE_INVALID -> "CKR_ATTRIBUTE_TYPE_INVALID"
| CKR_ATTRIBUTE_VALUE_INVALID -> "CKR_ATTRIBUTE_VALUE_INVALID"
| CKR_ACTION_PROHIBITED -> "CKR_ACTION_PROHIBITED"
| CKR_DATA_INVALID -> "CKR_DATA_INVALID"
| CKR_DATA_LEN_RANGE -> "CKR_DATA_LEN_RANGE"
| CKR_DEVICE_ERROR -> "CKR_DEVICE_ERROR"
| CKR_DEVICE_MEMORY -> "CKR_DEVICE_MEMORY"
| CKR_DEVICE_REMOVED -> "CKR_DEVICE_REMOVED"
| CKR_ENCRYPTED_DATA_INVALID -> "CKR_ENCRYPTED_DATA_INVALID"
| CKR_ENCRYPTED_DATA_LEN_RANGE -> "CKR_ENCRYPTED_DATA_LEN_RANGE"
| CKR_FUNCTION_CANCELED -> "CKR_FUNCTION_CANCELED"
| CKR_FUNCTION_NOT_PARALLEL -> "CKR_FUNCTION_NOT_PARALLEL"
| CKR_FUNCTION_NOT_SUPPORTED -> "CKR_FUNCTION_NOT_SUPPORTED"
| CKR_KEY_HANDLE_INVALID -> "CKR_KEY_HANDLE_INVALID"
| CKR_KEY_SIZE_RANGE -> "CKR_KEY_SIZE_RANGE"
| CKR_KEY_TYPE_INCONSISTENT -> "CKR_KEY_TYPE_INCONSISTENT"
| CKR_KEY_NOT_NEEDED -> "CKR_KEY_NOT_NEEDED"
| CKR_KEY_CHANGED -> "CKR_KEY_CHANGED"
| CKR_KEY_NEEDED -> "CKR_KEY_NEEDED"
| CKR_KEY_INDIGESTIBLE -> "CKR_KEY_INDIGESTIBLE"
| CKR_KEY_FUNCTION_NOT_PERMITTED -> "CKR_KEY_FUNCTION_NOT_PERMITTED"
| CKR_KEY_NOT_WRAPPABLE -> "CKR_KEY_NOT_WRAPPABLE"
| CKR_KEY_UNEXTRACTABLE -> "CKR_KEY_UNEXTRACTABLE"
| CKR_MECHANISM_INVALID -> "CKR_MECHANISM_INVALID"
| CKR_MECHANISM_PARAM_INVALID -> "CKR_MECHANISM_PARAM_INVALID"
| CKR_OBJECT_HANDLE_INVALID -> "CKR_OBJECT_HANDLE_INVALID"
| CKR_OPERATION_ACTIVE -> "CKR_OPERATION_ACTIVE"
| CKR_OPERATION_NOT_INITIALIZED -> "CKR_OPERATION_NOT_INITIALIZED"
| CKR_PIN_INCORRECT -> "CKR_PIN_INCORRECT"
| CKR_PIN_INVALID -> "CKR_PIN_INVALID"
| CKR_PIN_LEN_RANGE -> "CKR_PIN_LEN_RANGE"
| CKR_PIN_EXPIRED -> "CKR_PIN_EXPIRED"
| CKR_PIN_LOCKED -> "CKR_PIN_LOCKED"
| CKR_SESSION_CLOSED -> "CKR_SESSION_CLOSED"
| CKR_SESSION_COUNT -> "CKR_SESSION_COUNT"
| CKR_SESSION_HANDLE_INVALID -> "CKR_SESSION_HANDLE_INVALID"
| CKR_SESSION_PARALLEL_NOT_SUPPORTED -> "CKR_SESSION_PARALLEL_NOT_SUPPORTED"
| CKR_SESSION_READ_ONLY -> "CKR_SESSION_READ_ONLY"
| CKR_SESSION_EXISTS -> "CKR_SESSION_EXISTS"
| CKR_SESSION_READ_ONLY_EXISTS -> "CKR_SESSION_READ_ONLY_EXISTS"
| CKR_SESSION_READ_WRITE_SO_EXISTS -> "CKR_SESSION_READ_WRITE_SO_EXISTS"
| CKR_SIGNATURE_INVALID -> "CKR_SIGNATURE_INVALID"
| CKR_SIGNATURE_LEN_RANGE -> "CKR_SIGNATURE_LEN_RANGE"
| CKR_TEMPLATE_INCOMPLETE -> "CKR_TEMPLATE_INCOMPLETE"
| CKR_TEMPLATE_INCONSISTENT -> "CKR_TEMPLATE_INCONSISTENT"
| CKR_TOKEN_NOT_PRESENT -> "CKR_TOKEN_NOT_PRESENT"
| CKR_TOKEN_NOT_RECOGNIZED -> "CKR_TOKEN_NOT_RECOGNIZED"
| CKR_TOKEN_WRITE_PROTECTED -> "CKR_TOKEN_WRITE_PROTECTED"
| CKR_UNWRAPPING_KEY_HANDLE_INVALID -> "CKR_UNWRAPPING_KEY_HANDLE_INVALID"
| CKR_UNWRAPPING_KEY_SIZE_RANGE -> "CKR_UNWRAPPING_KEY_SIZE_RANGE"
| CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT ->
"CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT"
| CKR_USER_ALREADY_LOGGED_IN -> "CKR_USER_ALREADY_LOGGED_IN"
| CKR_USER_NOT_LOGGED_IN -> "CKR_USER_NOT_LOGGED_IN"
| CKR_USER_PIN_NOT_INITIALIZED -> "CKR_USER_PIN_NOT_INITIALIZED"
| CKR_USER_TYPE_INVALID -> "CKR_USER_TYPE_INVALID"
| CKR_USER_ANOTHER_ALREADY_LOGGED_IN -> "CKR_USER_ANOTHER_ALREADY_LOGGED_IN"
| CKR_USER_TOO_MANY_TYPES -> "CKR_USER_TOO_MANY_TYPES"
| CKR_WRAPPED_KEY_INVALID -> "CKR_WRAPPED_KEY_INVALID"
| CKR_WRAPPED_KEY_LEN_RANGE -> "CKR_WRAPPED_KEY_LEN_RANGE"
| CKR_WRAPPING_KEY_HANDLE_INVALID -> "CKR_WRAPPING_KEY_HANDLE_INVALID"
| CKR_WRAPPING_KEY_SIZE_RANGE -> "CKR_WRAPPING_KEY_SIZE_RANGE"
| CKR_WRAPPING_KEY_TYPE_INCONSISTENT -> "CKR_WRAPPING_KEY_TYPE_INCONSISTENT"
| CKR_RANDOM_SEED_NOT_SUPPORTED -> "CKR_RANDOM_SEED_NOT_SUPPORTED"
| CKR_RANDOM_NO_RNG -> "CKR_RANDOM_NO_RNG"
| CKR_DOMAIN_PARAMS_INVALID -> "CKR_DOMAIN_PARAMS_INVALID"
| CKR_CURVE_NOT_SUPPORTED -> "CKR_CURVE_NOT_SUPPORTED"
| CKR_BUFFER_TOO_SMALL -> "CKR_BUFFER_TOO_SMALL"
| CKR_SAVED_STATE_INVALID -> "CKR_SAVED_STATE_INVALID"
| CKR_INFORMATION_SENSITIVE -> "CKR_INFORMATION_SENSITIVE"
| CKR_STATE_UNSAVEABLE -> "CKR_STATE_UNSAVEABLE"
| CKR_CRYPTOKI_NOT_INITIALIZED -> "CKR_CRYPTOKI_NOT_INITIALIZED"
| CKR_CRYPTOKI_ALREADY_INITIALIZED -> "CKR_CRYPTOKI_ALREADY_INITIALIZED"
| CKR_MUTEX_BAD -> "CKR_MUTEX_BAD"
| CKR_MUTEX_NOT_LOCKED -> "CKR_MUTEX_NOT_LOCKED"
| CKR_NEW_PIN_MODE -> "CKR_NEW_PIN_MODE"
| CKR_NEXT_OTP -> "CKR_NEXT_OTP"
| CKR_EXCEEDED_MAX_ITERATIONS -> "CKR_EXCEEDED_MAX_ITERATIONS"
| CKR_FIPS_SELF_TEST_FAILED -> "CKR_FIPS_SELF_TEST_FAILED"
| CKR_LIBRARY_LOAD_FAILED -> "CKR_LIBRARY_LOAD_FAILED"
| CKR_PIN_TOO_WEAK -> "CKR_PIN_TOO_WEAK"
| CKR_PUBLIC_KEY_INVALID -> "CKR_PUBLIC_KEY_INVALID"
| CKR_FUNCTION_REJECTED -> "CKR_FUNCTION_REJECTED"
| CKR_VENDOR_DEFINED -> "CKR_VENDOR_DEFINED"
| CKR_CS_UNKNOWN x -> Unsigned.ULong.to_string x
let of_string = function
| "CKR_OK" -> CKR_OK
| "CKR_CANCEL" -> CKR_CANCEL
| "CKR_HOST_MEMORY" -> CKR_HOST_MEMORY
| "CKR_SLOT_ID_INVALID" -> CKR_SLOT_ID_INVALID
| "CKR_GENERAL_ERROR" -> CKR_GENERAL_ERROR
| "CKR_FUNCTION_FAILED" -> CKR_FUNCTION_FAILED
| "CKR_ARGUMENTS_BAD" -> CKR_ARGUMENTS_BAD
| "CKR_NO_EVENT" -> CKR_NO_EVENT
| "CKR_NEED_TO_CREATE_THREADS" -> CKR_NEED_TO_CREATE_THREADS
| "CKR_CANT_LOCK" -> CKR_CANT_LOCK
| "CKR_ATTRIBUTE_READ_ONLY" -> CKR_ATTRIBUTE_READ_ONLY
| "CKR_ATTRIBUTE_SENSITIVE" -> CKR_ATTRIBUTE_SENSITIVE
| "CKR_ATTRIBUTE_TYPE_INVALID" -> CKR_ATTRIBUTE_TYPE_INVALID
| "CKR_ATTRIBUTE_VALUE_INVALID" -> CKR_ATTRIBUTE_VALUE_INVALID
| "CKR_ACTION_PROHIBITED" -> CKR_ACTION_PROHIBITED
| "CKR_DATA_INVALID" -> CKR_DATA_INVALID
| "CKR_DATA_LEN_RANGE" -> CKR_DATA_LEN_RANGE
| "CKR_DEVICE_ERROR" -> CKR_DEVICE_ERROR
| "CKR_DEVICE_MEMORY" -> CKR_DEVICE_MEMORY
| "CKR_DEVICE_REMOVED" -> CKR_DEVICE_REMOVED
| "CKR_ENCRYPTED_DATA_INVALID" -> CKR_ENCRYPTED_DATA_INVALID
| "CKR_ENCRYPTED_DATA_LEN_RANGE" -> CKR_ENCRYPTED_DATA_LEN_RANGE
| "CKR_FUNCTION_CANCELED" -> CKR_FUNCTION_CANCELED
| "CKR_FUNCTION_NOT_PARALLEL" -> CKR_FUNCTION_NOT_PARALLEL
| "CKR_FUNCTION_NOT_SUPPORTED" -> CKR_FUNCTION_NOT_SUPPORTED
| "CKR_KEY_HANDLE_INVALID" -> CKR_KEY_HANDLE_INVALID
| "CKR_KEY_SIZE_RANGE" -> CKR_KEY_SIZE_RANGE
| "CKR_KEY_TYPE_INCONSISTENT" -> CKR_KEY_TYPE_INCONSISTENT
| "CKR_KEY_NOT_NEEDED" -> CKR_KEY_NOT_NEEDED
| "CKR_KEY_CHANGED" -> CKR_KEY_CHANGED
| "CKR_KEY_NEEDED" -> CKR_KEY_NEEDED
| "CKR_KEY_INDIGESTIBLE" -> CKR_KEY_INDIGESTIBLE
| "CKR_KEY_FUNCTION_NOT_PERMITTED" -> CKR_KEY_FUNCTION_NOT_PERMITTED
| "CKR_KEY_NOT_WRAPPABLE" -> CKR_KEY_NOT_WRAPPABLE
| "CKR_KEY_UNEXTRACTABLE" -> CKR_KEY_UNEXTRACTABLE
| "CKR_MECHANISM_INVALID" -> CKR_MECHANISM_INVALID
| "CKR_MECHANISM_PARAM_INVALID" -> CKR_MECHANISM_PARAM_INVALID
| "CKR_OBJECT_HANDLE_INVALID" -> CKR_OBJECT_HANDLE_INVALID
| "CKR_OPERATION_ACTIVE" -> CKR_OPERATION_ACTIVE
| "CKR_OPERATION_NOT_INITIALIZED" -> CKR_OPERATION_NOT_INITIALIZED
| "CKR_PIN_INCORRECT" -> CKR_PIN_INCORRECT
| "CKR_PIN_INVALID" -> CKR_PIN_INVALID
| "CKR_PIN_LEN_RANGE" -> CKR_PIN_LEN_RANGE
| "CKR_PIN_EXPIRED" -> CKR_PIN_EXPIRED
| "CKR_PIN_LOCKED" -> CKR_PIN_LOCKED
| "CKR_SESSION_CLOSED" -> CKR_SESSION_CLOSED
| "CKR_SESSION_COUNT" -> CKR_SESSION_COUNT
| "CKR_SESSION_HANDLE_INVALID" -> CKR_SESSION_HANDLE_INVALID
| "CKR_SESSION_PARALLEL_NOT_SUPPORTED" -> CKR_SESSION_PARALLEL_NOT_SUPPORTED
| "CKR_SESSION_READ_ONLY" -> CKR_SESSION_READ_ONLY
| "CKR_SESSION_EXISTS" -> CKR_SESSION_EXISTS
| "CKR_SESSION_READ_ONLY_EXISTS" -> CKR_SESSION_READ_ONLY_EXISTS
| "CKR_SESSION_READ_WRITE_SO_EXISTS" -> CKR_SESSION_READ_WRITE_SO_EXISTS
| "CKR_SIGNATURE_INVALID" -> CKR_SIGNATURE_INVALID
| "CKR_SIGNATURE_LEN_RANGE" -> CKR_SIGNATURE_LEN_RANGE
| "CKR_TEMPLATE_INCOMPLETE" -> CKR_TEMPLATE_INCOMPLETE
| "CKR_TEMPLATE_INCONSISTENT" -> CKR_TEMPLATE_INCONSISTENT
| "CKR_TOKEN_NOT_PRESENT" -> CKR_TOKEN_NOT_PRESENT
| "CKR_TOKEN_NOT_RECOGNIZED" -> CKR_TOKEN_NOT_RECOGNIZED
| "CKR_TOKEN_WRITE_PROTECTED" -> CKR_TOKEN_WRITE_PROTECTED
| "CKR_UNWRAPPING_KEY_HANDLE_INVALID" -> CKR_UNWRAPPING_KEY_HANDLE_INVALID
| "CKR_UNWRAPPING_KEY_SIZE_RANGE" -> CKR_UNWRAPPING_KEY_SIZE_RANGE
| "CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT" ->
CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT
| "CKR_USER_ALREADY_LOGGED_IN" -> CKR_USER_ALREADY_LOGGED_IN
| "CKR_USER_NOT_LOGGED_IN" -> CKR_USER_NOT_LOGGED_IN
| "CKR_USER_PIN_NOT_INITIALIZED" -> CKR_USER_PIN_NOT_INITIALIZED
| "CKR_USER_TYPE_INVALID" -> CKR_USER_TYPE_INVALID
| "CKR_USER_ANOTHER_ALREADY_LOGGED_IN" -> CKR_USER_ANOTHER_ALREADY_LOGGED_IN
| "CKR_USER_TOO_MANY_TYPES" -> CKR_USER_TOO_MANY_TYPES
| "CKR_WRAPPED_KEY_INVALID" -> CKR_WRAPPED_KEY_INVALID
| "CKR_WRAPPED_KEY_LEN_RANGE" -> CKR_WRAPPED_KEY_LEN_RANGE
| "CKR_WRAPPING_KEY_HANDLE_INVALID" -> CKR_WRAPPING_KEY_HANDLE_INVALID
| "CKR_WRAPPING_KEY_SIZE_RANGE" -> CKR_WRAPPING_KEY_SIZE_RANGE
| "CKR_WRAPPING_KEY_TYPE_INCONSISTENT" -> CKR_WRAPPING_KEY_TYPE_INCONSISTENT
| "CKR_RANDOM_SEED_NOT_SUPPORTED" -> CKR_RANDOM_SEED_NOT_SUPPORTED
| "CKR_RANDOM_NO_RNG" -> CKR_RANDOM_NO_RNG
| "CKR_DOMAIN_PARAMS_INVALID" -> CKR_DOMAIN_PARAMS_INVALID
| "CKR_CURVE_NOT_SUPPORTED" -> CKR_CURVE_NOT_SUPPORTED
| "CKR_BUFFER_TOO_SMALL" -> CKR_BUFFER_TOO_SMALL
| "CKR_SAVED_STATE_INVALID" -> CKR_SAVED_STATE_INVALID
| "CKR_INFORMATION_SENSITIVE" -> CKR_INFORMATION_SENSITIVE
| "CKR_STATE_UNSAVEABLE" -> CKR_STATE_UNSAVEABLE
| "CKR_CRYPTOKI_NOT_INITIALIZED" -> CKR_CRYPTOKI_NOT_INITIALIZED
| "CKR_CRYPTOKI_ALREADY_INITIALIZED" -> CKR_CRYPTOKI_ALREADY_INITIALIZED
| "CKR_MUTEX_BAD" -> CKR_MUTEX_BAD
| "CKR_MUTEX_NOT_LOCKED" -> CKR_MUTEX_NOT_LOCKED
| "CKR_NEW_PIN_MODE" -> CKR_NEW_PIN_MODE
| "CKR_NEXT_OTP" -> CKR_NEXT_OTP
| "CKR_EXCEEDED_MAX_ITERATIONS" -> CKR_EXCEEDED_MAX_ITERATIONS
| "CKR_FIPS_SELF_TEST_FAILED" -> CKR_FIPS_SELF_TEST_FAILED
| "CKR_LIBRARY_LOAD_FAILED" -> CKR_LIBRARY_LOAD_FAILED
| "CKR_PIN_TOO_WEAK" -> CKR_PIN_TOO_WEAK
| "CKR_PUBLIC_KEY_INVALID" -> CKR_PUBLIC_KEY_INVALID
| "CKR_FUNCTION_REJECTED" -> CKR_FUNCTION_REJECTED
| "CKR_VENDOR_DEFINED" -> CKR_VENDOR_DEFINED
| x -> (
try CKR_CS_UNKNOWN (Unsigned.ULong.of_string x) with
| Sys.Break as e -> raise e
| _ -> invalid_arg ("Pkcs11_CK_RV.of_string" ^ ": cannot find " ^ x))