4 * Copyright (C) 2010 Stefan Walter
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as
8 * published by the Free Software Foundation; either version 2.1 of
9 * the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
26 #include <p11-kit/pkcs11.h>
32 CK_RV gck_mock_C_Initialize (CK_VOID_PTR pInitArgs);
34 CK_RV gck_mock_validate_and_C_Initialize (CK_VOID_PTR pInitArgs);
36 CK_RV gck_mock_C_Finalize (CK_VOID_PTR pReserved);
38 CK_RV gck_mock_C_GetInfo (CK_INFO_PTR pInfo);
40 CK_RV gck_mock_C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list);
42 CK_RV gck_mock_C_GetSlotList (CK_BBOOL tokenPresent,
43 CK_SLOT_ID_PTR pSlotList,
44 CK_ULONG_PTR pulCount);
46 CK_RV gck_mock_C_GetSlotInfo (CK_SLOT_ID slotID,
47 CK_SLOT_INFO_PTR pInfo);
49 CK_RV gck_mock_C_GetTokenInfo (CK_SLOT_ID slotID,
50 CK_TOKEN_INFO_PTR pInfo);
52 CK_RV gck_mock_fail_C_GetTokenInfo (CK_SLOT_ID slotID,
53 CK_TOKEN_INFO_PTR pInfo);
55 CK_RV gck_mock_C_GetMechanismList (CK_SLOT_ID slotID,
56 CK_MECHANISM_TYPE_PTR pMechanismList,
57 CK_ULONG_PTR pulCount);
59 CK_RV gck_mock_C_GetMechanismInfo (CK_SLOT_ID slotID,
60 CK_MECHANISM_TYPE type,
61 CK_MECHANISM_INFO_PTR pInfo);
63 CK_RV gck_mock_specific_args_C_InitToken (CK_SLOT_ID slotID,
66 CK_UTF8CHAR_PTR pLabel);
68 CK_RV gck_mock_unsupported_C_WaitForSlotEvent (CK_FLAGS flags,
70 CK_VOID_PTR pReserved);
72 CK_RV gck_mock_C_OpenSession (CK_SLOT_ID slotID,
74 CK_VOID_PTR pApplication,
76 CK_SESSION_HANDLE_PTR phSession);
78 CK_RV gck_mock_fail_C_OpenSession (CK_SLOT_ID slotID,
80 CK_VOID_PTR pApplication,
82 CK_SESSION_HANDLE_PTR phSession);
84 CK_RV gck_mock_C_CloseSession (CK_SESSION_HANDLE hSession);
86 CK_RV gck_mock_C_CloseAllSessions (CK_SLOT_ID slotID);
88 CK_RV gck_mock_C_GetFunctionStatus (CK_SESSION_HANDLE hSession);
90 CK_RV gck_mock_C_CancelFunction (CK_SESSION_HANDLE hSession);
92 CK_RV gck_mock_C_GetSessionInfo (CK_SESSION_HANDLE hSession,
93 CK_SESSION_INFO_PTR pInfo);
95 CK_RV gck_mock_fail_C_GetSessionInfo (CK_SESSION_HANDLE hSession,
96 CK_SESSION_INFO_PTR pInfo);
98 CK_RV gck_mock_C_InitPIN (CK_SESSION_HANDLE hSession,
102 CK_RV gck_mock_C_SetPIN (CK_SESSION_HANDLE hSession,
103 CK_UTF8CHAR_PTR pOldPin,
105 CK_UTF8CHAR_PTR pNewPin,
108 CK_RV gck_mock_unsupported_C_GetOperationState (CK_SESSION_HANDLE hSession,
109 CK_BYTE_PTR pOperationState,
110 CK_ULONG_PTR pulOperationStateLen);
112 CK_RV gck_mock_unsupported_C_SetOperationState (CK_SESSION_HANDLE hSession,
113 CK_BYTE_PTR pOperationState,
114 CK_ULONG ulOperationStateLen,
115 CK_OBJECT_HANDLE hEncryptionKey,
116 CK_OBJECT_HANDLE hAuthenticationKey);
118 CK_RV gck_mock_C_Login (CK_SESSION_HANDLE hSession,
119 CK_USER_TYPE userType,
120 CK_UTF8CHAR_PTR pPin,
123 CK_RV gck_mock_C_Logout (CK_SESSION_HANDLE hSession);
125 CK_RV gck_mock_C_CreateObject (CK_SESSION_HANDLE hSession,
126 CK_ATTRIBUTE_PTR pTemplate,
128 CK_OBJECT_HANDLE_PTR phObject);
130 CK_RV gck_mock_fail_C_CreateObject (CK_SESSION_HANDLE hSession,
131 CK_ATTRIBUTE_PTR pTemplate,
133 CK_OBJECT_HANDLE_PTR phObject);
135 CK_RV gck_mock_unsupported_C_CopyObject (CK_SESSION_HANDLE hSession,
136 CK_OBJECT_HANDLE hObject,
137 CK_ATTRIBUTE_PTR pTemplate,
139 CK_OBJECT_HANDLE_PTR phNewObject);
141 CK_RV gck_mock_C_DestroyObject (CK_SESSION_HANDLE hSession,
142 CK_OBJECT_HANDLE hObject);
144 CK_RV gck_mock_unsupported_C_GetObjectSize (CK_SESSION_HANDLE hSession,
145 CK_OBJECT_HANDLE hObject,
146 CK_ULONG_PTR pulSize);
148 CK_RV gck_mock_C_GetAttributeValue (CK_SESSION_HANDLE hSession,
149 CK_OBJECT_HANDLE hObject,
150 CK_ATTRIBUTE_PTR pTemplate,
153 CK_RV gck_mock_fail_C_GetAttributeValue (CK_SESSION_HANDLE hSession,
154 CK_OBJECT_HANDLE hObject,
155 CK_ATTRIBUTE_PTR pTemplate,
158 CK_RV gck_mock_C_SetAttributeValue (CK_SESSION_HANDLE hSession,
159 CK_OBJECT_HANDLE hObject,
160 CK_ATTRIBUTE_PTR pTemplate,
163 CK_RV gck_mock_C_FindObjectsInit (CK_SESSION_HANDLE hSession,
164 CK_ATTRIBUTE_PTR pTemplate,
167 CK_RV gck_mock_C_FindObjects (CK_SESSION_HANDLE hSession,
168 CK_OBJECT_HANDLE_PTR phObject,
169 CK_ULONG ulMaxObjectCount,
170 CK_ULONG_PTR pulObjectCount);
172 CK_RV gck_mock_fail_C_FindObjects (CK_SESSION_HANDLE hSession,
173 CK_OBJECT_HANDLE_PTR phObject,
174 CK_ULONG ulMaxObjectCount,
175 CK_ULONG_PTR pulObjectCount);
177 CK_RV gck_mock_C_FindObjectsFinal (CK_SESSION_HANDLE hSession);
179 CK_RV gck_mock_C_EncryptInit (CK_SESSION_HANDLE hSession,
180 CK_MECHANISM_PTR pMechanism,
181 CK_OBJECT_HANDLE hKey);
183 CK_RV gck_mock_C_Encrypt (CK_SESSION_HANDLE hSession,
186 CK_BYTE_PTR pEncryptedData,
187 CK_ULONG_PTR pulEncryptedDataLen);
189 CK_RV gck_mock_unsupported_C_EncryptUpdate (CK_SESSION_HANDLE hSession,
192 CK_BYTE_PTR pEncryptedPart,
193 CK_ULONG_PTR pulEncryptedPartLen);
195 CK_RV gck_mock_unsupported_C_EncryptFinal (CK_SESSION_HANDLE hSession,
196 CK_BYTE_PTR pLastEncryptedPart,
197 CK_ULONG_PTR pulLastEncryptedPartLen);
199 CK_RV gck_mock_C_DecryptInit (CK_SESSION_HANDLE hSession,
200 CK_MECHANISM_PTR pMechanism,
201 CK_OBJECT_HANDLE hKey);
203 CK_RV gck_mock_C_Decrypt (CK_SESSION_HANDLE hSession,
204 CK_BYTE_PTR pEncryptedData,
205 CK_ULONG ulEncryptedDataLen,
207 CK_ULONG_PTR pulDataLen);
209 CK_RV gck_mock_unsupported_C_DecryptUpdate (CK_SESSION_HANDLE hSession,
210 CK_BYTE_PTR pEncryptedPart,
211 CK_ULONG ulEncryptedPartLen,
213 CK_ULONG_PTR pulPartLen);
215 CK_RV gck_mock_unsupported_C_DecryptFinal (CK_SESSION_HANDLE hSession,
216 CK_BYTE_PTR pLastPart,
217 CK_ULONG_PTR pulLastPartLen);
219 CK_RV gck_mock_unsupported_C_DigestInit (CK_SESSION_HANDLE hSession,
220 CK_MECHANISM_PTR pMechanism);
222 CK_RV gck_mock_unsupported_C_Digest (CK_SESSION_HANDLE hSession,
226 CK_ULONG_PTR pulDigestLen);
228 CK_RV gck_mock_unsupported_C_DigestUpdate (CK_SESSION_HANDLE hSession,
232 CK_RV gck_mock_unsupported_C_DigestKey (CK_SESSION_HANDLE hSession,
233 CK_OBJECT_HANDLE hKey);
235 CK_RV gck_mock_unsupported_C_DigestFinal (CK_SESSION_HANDLE hSession,
237 CK_ULONG_PTR pulDigestLen);
239 CK_RV gck_mock_C_SignInit (CK_SESSION_HANDLE hSession,
240 CK_MECHANISM_PTR pMechanism,
241 CK_OBJECT_HANDLE hKey);
243 CK_RV gck_mock_C_Sign (CK_SESSION_HANDLE hSession,
246 CK_BYTE_PTR pSignature,
247 CK_ULONG_PTR pulSignatureLen);
249 CK_RV gck_mock_unsupported_C_SignUpdate (CK_SESSION_HANDLE hSession,
253 CK_RV gck_mock_unsupported_C_SignFinal (CK_SESSION_HANDLE hSession,
254 CK_BYTE_PTR pSignature,
255 CK_ULONG_PTR pulSignatureLen);
257 CK_RV gck_mock_unsupported_C_SignRecoverInit (CK_SESSION_HANDLE hSession,
258 CK_MECHANISM_PTR pMechanism,
259 CK_OBJECT_HANDLE hKey);
261 CK_RV gck_mock_unsupported_C_SignRecover (CK_SESSION_HANDLE hSession,
264 CK_BYTE_PTR pSignature,
265 CK_ULONG_PTR pulSignatureLen);
267 CK_RV gck_mock_C_VerifyInit (CK_SESSION_HANDLE hSession,
268 CK_MECHANISM_PTR pMechanism,
269 CK_OBJECT_HANDLE hKey);
271 CK_RV gck_mock_C_Verify (CK_SESSION_HANDLE hSession,
274 CK_BYTE_PTR pSignature,
275 CK_ULONG ulSignatureLen);
277 CK_RV gck_mock_unsupported_C_VerifyUpdate (CK_SESSION_HANDLE hSession,
281 CK_RV gck_mock_unsupported_C_VerifyFinal (CK_SESSION_HANDLE hSession,
282 CK_BYTE_PTR pSignature,
283 CK_ULONG pulSignatureLen);
285 CK_RV gck_mock_unsupported_C_VerifyRecoverInit (CK_SESSION_HANDLE hSession,
286 CK_MECHANISM_PTR pMechanism,
287 CK_OBJECT_HANDLE hKey);
289 CK_RV gck_mock_unsupported_C_VerifyRecover (CK_SESSION_HANDLE hSession,
290 CK_BYTE_PTR pSignature,
291 CK_ULONG pulSignatureLen,
293 CK_ULONG_PTR pulDataLen);
295 CK_RV gck_mock_unsupported_C_DigestEncryptUpdate (CK_SESSION_HANDLE hSession,
298 CK_BYTE_PTR pEncryptedPart,
299 CK_ULONG_PTR ulEncryptedPartLen);
301 CK_RV gck_mock_unsupported_C_DecryptDigestUpdate (CK_SESSION_HANDLE hSession,
302 CK_BYTE_PTR pEncryptedPart,
303 CK_ULONG ulEncryptedPartLen,
305 CK_ULONG_PTR pulPartLen);
307 CK_RV gck_mock_unsupported_C_SignEncryptUpdate (CK_SESSION_HANDLE hSession,
310 CK_BYTE_PTR pEncryptedPart,
311 CK_ULONG_PTR ulEncryptedPartLen);
313 CK_RV gck_mock_unsupported_C_DecryptVerifyUpdate (CK_SESSION_HANDLE hSession,
314 CK_BYTE_PTR pEncryptedPart,
315 CK_ULONG ulEncryptedPartLen,
317 CK_ULONG_PTR pulPartLen);
319 CK_RV gck_mock_unsupported_C_GenerateKey (CK_SESSION_HANDLE hSession,
320 CK_MECHANISM_PTR pMechanism,
321 CK_ATTRIBUTE_PTR pTemplate,
323 CK_OBJECT_HANDLE_PTR phKey);
325 CK_RV gck_mock_unsupported_C_GenerateKeyPair (CK_SESSION_HANDLE hSession,
326 CK_MECHANISM_PTR pMechanism,
327 CK_ATTRIBUTE_PTR pPublicKeyTemplate,
328 CK_ULONG ulPublicKeyAttributeCount,
329 CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
330 CK_ULONG ulPrivateKeyAttributeCount,
331 CK_OBJECT_HANDLE_PTR phPublicKey,
332 CK_OBJECT_HANDLE_PTR phPrivateKey);
334 CK_RV gck_mock_unsupported_C_WrapKey (CK_SESSION_HANDLE hSession,
335 CK_MECHANISM_PTR pMechanism,
336 CK_OBJECT_HANDLE hWrappingKey,
337 CK_OBJECT_HANDLE hKey,
338 CK_BYTE_PTR pWrappedKey,
339 CK_ULONG_PTR pulWrappedKeyLen);
341 CK_RV gck_mock_unsupported_C_UnwrapKey (CK_SESSION_HANDLE hSession,
342 CK_MECHANISM_PTR pMechanism,
343 CK_OBJECT_HANDLE pUnwrappingKey,
344 CK_BYTE_PTR pWrappedKey,
345 CK_ULONG pulWrappedKeyLen,
346 CK_ATTRIBUTE_PTR pTemplate,
348 CK_OBJECT_HANDLE_PTR phKey);
350 CK_RV gck_mock_unsupported_C_DeriveKey (CK_SESSION_HANDLE hSession,
351 CK_MECHANISM_PTR pMechanism,
352 CK_OBJECT_HANDLE hBaseKey,
353 CK_ATTRIBUTE_PTR pTemplate,
355 CK_OBJECT_HANDLE_PTR phKey);
357 CK_RV gck_mock_unsupported_C_SeedRandom (CK_SESSION_HANDLE hSession,
361 CK_RV gck_mock_unsupported_C_GenerateRandom (CK_SESSION_HANDLE hSession,
362 CK_BYTE_PTR pRandomData,
363 CK_ULONG ulRandomLen);
365 CK_OBJECT_HANDLE gck_mock_module_find_object (CK_SESSION_HANDLE session,
366 CK_ATTRIBUTE_PTR attrs,
369 guint gck_mock_module_count_objects (CK_SESSION_HANDLE session);
371 typedef gboolean (*GckMockEnumerator) (CK_OBJECT_HANDLE handle,
372 GckAttributes *attrs,
375 void gck_mock_module_enumerate_objects (CK_SESSION_HANDLE session,
376 GckMockEnumerator func,
379 CK_OBJECT_HANDLE gck_mock_module_add_object (GckAttributes *attrs);
381 void gck_mock_module_set_object (CK_OBJECT_HANDLE object,
382 CK_ATTRIBUTE_PTR attrs,
385 void gck_mock_module_set_pin (const gchar *password);
388 * Some dumb crypto mechanisms for simple testing.
390 * CKM_T_CAPITALIZE (encrypt/decrypt)
391 * capitalizes to encrypt
392 * lowercase to decrypt
394 * CKM_T_PREFIX (sign/verify)
395 * sign prefixes data with key label
396 * verify unprefixes data with key label.
398 * CKM_T_GENERATE (generate-pair)
399 * generates a pair of keys, mechanism param should be 'generate'
401 * CKM_T_WRAP (wrap key)
402 * wraps key by returning value, mechanism param should be 'wrap'
404 * CKM_T_DERIVE (derive-key)
405 * derives key by setting value to 'derived'.
406 * mechanism param should be 'derive'
409 #define CKM_MOCK_CAPITALIZE (CKM_VENDOR_DEFINED | 1)
410 #define CKM_MOCK_PREFIX (CKM_VENDOR_DEFINED | 2)
411 #define CKM_MOCK_GENERATE (CKM_VENDOR_DEFINED | 3)
412 #define CKM_MOCK_WRAP (CKM_VENDOR_DEFINED | 4)
413 #define CKM_MOCK_DERIVE (CKM_VENDOR_DEFINED | 5)
415 #define GCK_MOCK_SLOT_ONE_ID 52
416 #define GCK_MOCK_SLOT_TWO_ID 134
418 #define GCK_MOCK_SLOT_ONE_URI "pkcs11:manufacturer=TEST%20MANUFACTURER;serial=TEST%20SERIAL"
420 #endif /* GCK_MOCK_H */