]> granicus.if.org Git - p11-kit/commitdiff
Add subclassable CK_X_FUNCTION_LIST
authorStef Walter <stefw@gnome.org>
Thu, 14 Feb 2013 14:41:45 +0000 (15:41 +0100)
committerStef Walter <stefw@gnome.org>
Wed, 15 May 2013 10:11:40 +0000 (12:11 +0200)
One of the flaws in PKCS#11 for our usage is that each PKCS#11 module
is not passed the pointer to the function list, ie: the vtable

Here we define a new function list vtable, where each PKCS#11 function
takes the vtable itself as the first argument. We use this new
list internally to represent subclassable PKCS#11 modules for
various features.

common/mock.c
common/mock.h
common/pkcs11x.h

index 1a283b92edae9c43c1ef0b7be9a64b794604d542..6176fa9a8fe801bd964f84d583adc8eeb3d45405 100644 (file)
@@ -406,6 +406,13 @@ done:
        return ret;
 }
 
+CK_RV
+mock_X_Initialize (CK_X_FUNCTION_LIST *self,
+                   CK_VOID_PTR init_args)
+{
+       return mock_C_Initialize (init_args);
+}
+
 CK_RV
 mock_C_Initialize__fails (CK_VOID_PTR init_args)
 {
@@ -439,6 +446,13 @@ mock_C_Finalize (CK_VOID_PTR reserved)
        return CKR_OK;
 }
 
+CK_RV
+mock_X_Finalize (CK_X_FUNCTION_LIST *self,
+                 CK_VOID_PTR reserved)
+{
+       return mock_C_Finalize (reserved);
+}
+
 static const CK_INFO MOCK_INFO = {
        { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR },
        "MOCK MANUFACTURER               ",
@@ -457,6 +471,13 @@ mock_C_GetInfo (CK_INFO_PTR info)
        return CKR_OK;
 }
 
+CK_RV
+mock_X_GetInfo (CK_X_FUNCTION_LIST *self,
+                CK_INFO_PTR info)
+{
+       return mock_C_GetInfo (info);
+}
+
 CK_RV
 mock_C_GetFunctionList_not_supported (CK_FUNCTION_LIST_PTR_PTR list)
 {
@@ -505,6 +526,18 @@ mock_C_GetSlotList__no_tokens (CK_BBOOL token_present,
        return CKR_OK;
 }
 
+CK_RV
+mock_X_GetSlotList__no_tokens (CK_X_FUNCTION_LIST *self,
+                               CK_BBOOL token_present,
+                               CK_SLOT_ID_PTR slot_list,
+                               CK_ULONG_PTR count)
+{
+       return mock_C_GetSlotList__no_tokens (token_present,
+                                             slot_list,
+                                             count);
+;
+}
+
 /* Update mock-module.h URIs when updating this */
 
 static const CK_SLOT_INFO MOCK_INFO_ONE = {
@@ -569,6 +602,16 @@ mock_C_GetSlotInfo__invalid_slotid (CK_SLOT_ID id,
        return CKR_SLOT_ID_INVALID;
 }
 
+CK_RV
+mock_X_GetSlotInfo__invalid_slotid (CK_X_FUNCTION_LIST *self,
+                                    CK_SLOT_ID id,
+                                    CK_SLOT_INFO_PTR info)
+{
+       return_val_if_fail (info, CKR_ARGUMENTS_BAD);
+
+       return CKR_SLOT_ID_INVALID;
+}
+
 /* Update gck-mock.h URIs when updating this */
 
 static const CK_TOKEN_INFO MOCK_TOKEN_ONE = {
@@ -617,6 +660,16 @@ mock_C_GetTokenInfo__invalid_slotid (CK_SLOT_ID slot_id,
        return CKR_SLOT_ID_INVALID;
 }
 
+CK_RV
+mock_X_GetTokenInfo__invalid_slotid (CK_X_FUNCTION_LIST *self,
+                                     CK_SLOT_ID slot_id,
+                                     CK_TOKEN_INFO_PTR info)
+{
+       return_val_if_fail (info, CKR_ARGUMENTS_BAD);
+
+       return CKR_SLOT_ID_INVALID;
+}
+
 /*
  * TWO mechanisms:
  *  CKM_MOCK_CAPITALIZE
@@ -651,8 +704,8 @@ mock_C_GetMechanismList (CK_SLOT_ID slot_id,
 }
 
 CK_RV
-mock_C_GetTokenInfo_not_initialized (CK_SLOT_ID slot_id,
-                                     CK_TOKEN_INFO_PTR info)
+mock_C_GetTokenInfo__not_initialized (CK_SLOT_ID slot_id,
+                                      CK_TOKEN_INFO_PTR info)
 {
        CK_RV rv;
 
@@ -679,6 +732,17 @@ mock_C_GetMechanismList__invalid_slotid (CK_SLOT_ID id,
        return CKR_SLOT_ID_INVALID;
 }
 
+CK_RV
+mock_X_GetMechanismList__invalid_slotid (CK_X_FUNCTION_LIST *self,
+                                         CK_SLOT_ID id,
+                                         CK_MECHANISM_TYPE_PTR mechanism_list,
+                                         CK_ULONG_PTR count)
+{
+       return_val_if_fail (count, CKR_ARGUMENTS_BAD);
+
+       return CKR_SLOT_ID_INVALID;
+}
+
 static const CK_MECHANISM_INFO MOCK_MECH_CAPITALIZE = {
        512, 4096, CKF_ENCRYPT | CKF_DECRYPT
 };
@@ -720,6 +784,17 @@ mock_C_GetMechanismInfo__invalid_slotid (CK_SLOT_ID slot_id,
        return CKR_SLOT_ID_INVALID;
 }
 
+CK_RV
+mock_X_GetMechanismInfo__invalid_slotid (CK_X_FUNCTION_LIST *self,
+                                         CK_SLOT_ID slot_id,
+                                         CK_MECHANISM_TYPE type,
+                                         CK_MECHANISM_INFO_PTR info)
+{
+       return_val_if_fail (info, CKR_ARGUMENTS_BAD);
+
+       return CKR_SLOT_ID_INVALID;
+}
+
 CK_RV
 mock_C_InitToken__specific_args (CK_SLOT_ID slot_id,
                                  CK_UTF8CHAR_PTR pin,
@@ -756,6 +831,16 @@ mock_C_InitToken__invalid_slotid (CK_SLOT_ID slot_id,
        return CKR_SLOT_ID_INVALID;
 }
 
+CK_RV
+mock_X_InitToken__invalid_slotid (CK_X_FUNCTION_LIST *self,
+                                  CK_SLOT_ID slot_id,
+                                  CK_UTF8CHAR_PTR pin,
+                                  CK_ULONG pin_len,
+                                  CK_UTF8CHAR_PTR label)
+{
+       return CKR_SLOT_ID_INVALID;
+}
+
 CK_RV
 mock_C_WaitForSlotEvent (CK_FLAGS flags,
                          CK_SLOT_ID_PTR slot,
@@ -780,6 +865,17 @@ mock_C_WaitForSlotEvent__no_event (CK_FLAGS flags,
        return CKR_NO_EVENT;
 }
 
+CK_RV
+mock_X_WaitForSlotEvent__no_event (CK_X_FUNCTION_LIST *self,
+                                   CK_FLAGS flags,
+                                   CK_SLOT_ID_PTR slot,
+                                   CK_VOID_PTR reserved)
+{
+       return_val_if_fail (slot, CKR_ARGUMENTS_BAD);
+
+       return CKR_NO_EVENT;
+}
+
 CK_RV
 mock_C_OpenSession (CK_SLOT_ID slot_id,
                     CK_FLAGS flags,
@@ -827,6 +923,19 @@ mock_C_OpenSession__invalid_slotid (CK_SLOT_ID slot_id,
        return CKR_SLOT_ID_INVALID;
 }
 
+CK_RV
+mock_X_OpenSession__invalid_slotid (CK_X_FUNCTION_LIST *self,
+                                    CK_SLOT_ID slot_id,
+                                    CK_FLAGS flags,
+                                    CK_VOID_PTR user_data,
+                                    CK_NOTIFY callback,
+                                    CK_SESSION_HANDLE_PTR session)
+{
+       return_val_if_fail (session, CKR_ARGUMENTS_BAD);
+
+       return CKR_SLOT_ID_INVALID;
+}
+
 CK_RV
 mock_C_OpenSession__fails (CK_SLOT_ID slot_id,
                            CK_FLAGS flags,
@@ -858,6 +967,13 @@ mock_C_CloseSession__invalid_handle (CK_SESSION_HANDLE session)
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_CloseSession__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                     CK_SESSION_HANDLE session)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_CloseAllSessions (CK_SLOT_ID slot_id)
 {
@@ -876,6 +992,13 @@ mock_C_CloseAllSessions__invalid_slotid (CK_SLOT_ID slot_id)
        return CKR_SLOT_ID_INVALID;
 }
 
+CK_RV
+mock_X_CloseAllSessions__invalid_slotid (CK_X_FUNCTION_LIST *self,
+                                         CK_SLOT_ID slot_id)
+{
+       return CKR_SLOT_ID_INVALID;
+}
+
 CK_RV
 mock_C_GetFunctionStatus (CK_SESSION_HANDLE session)
 {
@@ -941,6 +1064,16 @@ mock_C_GetSessionInfo__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_GetSessionInfo__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                       CK_SESSION_HANDLE session,
+                                       CK_SESSION_INFO_PTR info)
+{
+       return_val_if_fail (info, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_InitPIN__specific_args (CK_SESSION_HANDLE session,
                                CK_UTF8CHAR_PTR pin,
@@ -971,6 +1104,15 @@ mock_C_InitPIN__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_InitPIN__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                CK_SESSION_HANDLE session,
+                                CK_UTF8CHAR_PTR pin,
+                                CK_ULONG pin_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_SetPIN__specific_args (CK_SESSION_HANDLE session,
                               CK_UTF8CHAR_PTR old_pin,
@@ -1010,6 +1152,17 @@ mock_C_SetPIN__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SetPIN__invalid_handle (CK_X_FUNCTION_LIST *self,
+                               CK_SESSION_HANDLE session,
+                               CK_UTF8CHAR_PTR old_pin,
+                               CK_ULONG old_pin_len,
+                               CK_UTF8CHAR_PTR new_pin,
+                               CK_ULONG new_pin_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_GetOperationState (CK_SESSION_HANDLE session,
                           CK_BYTE_PTR operation_state,
@@ -1044,6 +1197,15 @@ mock_C_GetOperationState__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_FUNCTION_NOT_SUPPORTED;
 }
 
+CK_RV
+mock_X_GetOperationState__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                          CK_SESSION_HANDLE session,
+                                          CK_BYTE_PTR operation_state,
+                                          CK_ULONG_PTR operation_state_len)
+{
+       return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
 CK_RV
 mock_C_SetOperationState (CK_SESSION_HANDLE session,
                           CK_BYTE_PTR operation_state,
@@ -1078,6 +1240,17 @@ mock_C_SetOperationState__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SetOperationState__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                          CK_SESSION_HANDLE session,
+                                          CK_BYTE_PTR operation_state,
+                                          CK_ULONG operation_state_len,
+                                          CK_OBJECT_HANDLE encryption_key,
+                                          CK_OBJECT_HANDLE authentication_key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_Login (CK_SESSION_HANDLE session,
               CK_USER_TYPE user_type,
@@ -1126,6 +1299,16 @@ mock_C_Login__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_Login__invalid_handle (CK_X_FUNCTION_LIST *self,
+                              CK_SESSION_HANDLE session,
+                              CK_USER_TYPE user_type,
+                              CK_UTF8CHAR_PTR pin,
+                              CK_ULONG pin_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_Logout (CK_SESSION_HANDLE session)
 {
@@ -1149,6 +1332,13 @@ mock_C_Logout__invalid_handle (CK_SESSION_HANDLE session)
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_Logout__invalid_handle (CK_X_FUNCTION_LIST *self,
+                               CK_SESSION_HANDLE session)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_CreateObject (CK_SESSION_HANDLE session,
                      CK_ATTRIBUTE_PTR template,
@@ -1194,6 +1384,18 @@ mock_C_CreateObject__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_CreateObject__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                     CK_SESSION_HANDLE session,
+                                     CK_ATTRIBUTE_PTR template,
+                                     CK_ULONG count,
+                                     CK_OBJECT_HANDLE_PTR new_object)
+{
+       return_val_if_fail (new_object, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_CopyObject (CK_SESSION_HANDLE session,
                    CK_OBJECT_HANDLE object,
@@ -1245,6 +1447,19 @@ mock_C_CopyObject__invalid_handle (CK_SESSION_HANDLE session,
 }
 
 
+CK_RV
+mock_X_CopyObject__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                   CK_SESSION_HANDLE session,
+                                   CK_OBJECT_HANDLE object,
+                                   CK_ATTRIBUTE_PTR template,
+                                   CK_ULONG count,
+                                   CK_OBJECT_HANDLE_PTR new_object)
+{
+       return_val_if_fail (new_object, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DestroyObject (CK_SESSION_HANDLE session,
                       CK_OBJECT_HANDLE object)
@@ -1273,6 +1488,14 @@ mock_C_DestroyObject__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DestroyObject__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                      CK_SESSION_HANDLE session,
+                                      CK_OBJECT_HANDLE object)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_GetObjectSize (CK_SESSION_HANDLE session,
                       CK_OBJECT_HANDLE object,
@@ -1312,6 +1535,17 @@ mock_C_GetObjectSize__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_GetObjectSize__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                      CK_SESSION_HANDLE session,
+                                      CK_OBJECT_HANDLE object,
+                                      CK_ULONG_PTR size)
+{
+       return_val_if_fail (size, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_GetAttributeValue (CK_SESSION_HANDLE session,
                           CK_OBJECT_HANDLE object,
@@ -1370,6 +1604,16 @@ mock_C_GetAttributeValue__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_GetAttributeValue__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                          CK_SESSION_HANDLE session,
+                                          CK_OBJECT_HANDLE object,
+                                          CK_ATTRIBUTE_PTR template,
+                                          CK_ULONG count)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_GetAttributeValue__fail_first (CK_SESSION_HANDLE session,
                                       CK_OBJECT_HANDLE object,
@@ -1428,6 +1672,16 @@ mock_C_SetAttributeValue__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SetAttributeValue__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                          CK_SESSION_HANDLE session,
+                                          CK_OBJECT_HANDLE object,
+                                          CK_ATTRIBUTE_PTR template,
+                                          CK_ULONG count)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 typedef struct _FindObjects {
        CK_ATTRIBUTE *template;
        CK_ULONG count;
@@ -1511,6 +1765,15 @@ mock_C_FindObjectsInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_FindObjectsInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                        CK_SESSION_HANDLE session,
+                                        CK_ATTRIBUTE_PTR template,
+                                        CK_ULONG count)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_FindObjectsInit__fails (CK_SESSION_HANDLE session,
                                CK_ATTRIBUTE_PTR template,
@@ -1562,6 +1825,18 @@ mock_C_FindObjects__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_FindObjects__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                    CK_SESSION_HANDLE session,
+                                    CK_OBJECT_HANDLE_PTR objects,
+                                    CK_ULONG max_count,
+                                    CK_ULONG_PTR count)
+{
+       return_val_if_fail (count, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_FindObjects__fails (CK_SESSION_HANDLE session,
                            CK_OBJECT_HANDLE_PTR objects,
@@ -1598,6 +1873,13 @@ mock_C_FindObjectsFinal__invalid_handle (CK_SESSION_HANDLE session)
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_FindObjectsFinal__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                         CK_SESSION_HANDLE session)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_EncryptInit (CK_SESSION_HANDLE session,
                     CK_MECHANISM_PTR mechanism,
@@ -1633,6 +1915,15 @@ mock_C_EncryptInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_EncryptInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                    CK_SESSION_HANDLE session,
+                                    CK_MECHANISM_PTR mechanism,
+                                    CK_OBJECT_HANDLE key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_Encrypt (CK_SESSION_HANDLE session,
                 CK_BYTE_PTR data,
@@ -1660,6 +1951,19 @@ mock_C_Encrypt__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_Encrypt__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                CK_SESSION_HANDLE session,
+                                CK_BYTE_PTR data,
+                                CK_ULONG data_len,
+                                CK_BYTE_PTR encrypted_data,
+                                CK_ULONG_PTR encrypted_data_len)
+{
+       return_val_if_fail (encrypted_data_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_EncryptUpdate (CK_SESSION_HANDLE session,
                       CK_BYTE_PTR part,
@@ -1712,6 +2016,19 @@ mock_C_EncryptUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_EncryptUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                      CK_SESSION_HANDLE session,
+                                      CK_BYTE_PTR part,
+                                      CK_ULONG part_len,
+                                      CK_BYTE_PTR encrypted_part,
+                                      CK_ULONG_PTR encrypted_part_len)
+{
+       return_val_if_fail (encrypted_part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_EncryptFinal (CK_SESSION_HANDLE session,
                      CK_BYTE_PTR last_encrypted_part,
@@ -1748,6 +2065,17 @@ mock_C_EncryptFinal__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_EncryptFinal__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                     CK_SESSION_HANDLE session,
+                                     CK_BYTE_PTR last_part,
+                                     CK_ULONG_PTR last_part_len)
+{
+       return_val_if_fail (last_part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DecryptInit (CK_SESSION_HANDLE session,
                     CK_MECHANISM_PTR mechanism,
@@ -1783,6 +2111,15 @@ mock_C_DecryptInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DecryptInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                    CK_SESSION_HANDLE session,
+                                    CK_MECHANISM_PTR mechanism,
+                                    CK_OBJECT_HANDLE key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_Decrypt (CK_SESSION_HANDLE session,
                 CK_BYTE_PTR encrypted_data,
@@ -1810,6 +2147,19 @@ mock_C_Decrypt__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_Decrypt__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                CK_SESSION_HANDLE session,
+                                CK_BYTE_PTR enc_data,
+                                CK_ULONG enc_data_len,
+                                CK_BYTE_PTR data,
+                                CK_ULONG_PTR data_len)
+{
+       return_val_if_fail (data_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DecryptUpdate (CK_SESSION_HANDLE session,
                       CK_BYTE_PTR encrypted_part,
@@ -1862,6 +2212,19 @@ mock_C_DecryptUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DecryptUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                      CK_SESSION_HANDLE session,
+                                      CK_BYTE_PTR enc_part,
+                                      CK_ULONG enc_part_len,
+                                      CK_BYTE_PTR part,
+                                      CK_ULONG_PTR part_len)
+{
+       return_val_if_fail (part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DecryptFinal (CK_SESSION_HANDLE session,
                      CK_BYTE_PTR last_part,
@@ -1899,6 +2262,17 @@ mock_C_DecryptFinal__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DecryptFinal__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                     CK_SESSION_HANDLE session,
+                                     CK_BYTE_PTR last_part,
+                                     CK_ULONG_PTR last_part_len)
+{
+       return_val_if_fail (last_part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DigestInit (CK_SESSION_HANDLE session,
                    CK_MECHANISM_PTR mechanism)
@@ -1931,6 +2305,14 @@ mock_C_DigestInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DigestInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                   CK_SESSION_HANDLE session,
+                                   CK_MECHANISM_PTR mechanism)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_Digest (CK_SESSION_HANDLE session,
                CK_BYTE_PTR data,
@@ -1960,6 +2342,19 @@ mock_C_Digest__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_Digest__invalid_handle (CK_X_FUNCTION_LIST *self,
+                               CK_SESSION_HANDLE session,
+                               CK_BYTE_PTR data,
+                               CK_ULONG data_len,
+                               CK_BYTE_PTR digest,
+                               CK_ULONG_PTR digest_len)
+{
+       return_val_if_fail (digest_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DigestUpdate (CK_SESSION_HANDLE session,
                      CK_BYTE_PTR part,
@@ -1989,6 +2384,15 @@ mock_C_DigestUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DigestUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                     CK_SESSION_HANDLE session,
+                                     CK_BYTE_PTR part,
+                                     CK_ULONG part_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DigestKey (CK_SESSION_HANDLE session,
                   CK_OBJECT_HANDLE key)
@@ -2016,6 +2420,14 @@ mock_C_DigestKey__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DigestKey__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                  CK_SESSION_HANDLE session,
+                                  CK_OBJECT_HANDLE key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DigestFinal (CK_SESSION_HANDLE session,
                     CK_BYTE_PTR digest,
@@ -2068,6 +2480,17 @@ mock_C_DigestFinal__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DigestFinal__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                    CK_SESSION_HANDLE session,
+                                    CK_BYTE_PTR digest,
+                                    CK_ULONG_PTR digest_len)
+{
+       return_val_if_fail (digest_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 static CK_RV
 prefix_mechanism_init (CK_SESSION_HANDLE session,
                        CK_ATTRIBUTE_TYPE method,
@@ -2155,6 +2578,15 @@ mock_C_SignInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SignInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                 CK_SESSION_HANDLE session,
+                                 CK_MECHANISM_PTR mechanism,
+                                 CK_OBJECT_HANDLE key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_Sign (CK_SESSION_HANDLE session,
              CK_BYTE_PTR data,
@@ -2183,6 +2615,19 @@ mock_C_Sign__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_Sign__invalid_handle (CK_X_FUNCTION_LIST *self,
+                             CK_SESSION_HANDLE session,
+                             CK_BYTE_PTR data,
+                             CK_ULONG data_len,
+                             CK_BYTE_PTR signature,
+                             CK_ULONG_PTR signature_len)
+{
+       return_val_if_fail (signature_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_SignUpdate (CK_SESSION_HANDLE session,
                    CK_BYTE_PTR part,
@@ -2213,6 +2658,17 @@ mock_C_SignUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SignUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                   CK_SESSION_HANDLE session,
+                                   CK_BYTE_PTR part,
+                                   CK_ULONG part_len)
+{
+       return_val_if_fail (part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_SignFinal (CK_SESSION_HANDLE session,
                   CK_BYTE_PTR signature,
@@ -2269,6 +2725,17 @@ mock_C_SignFinal__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SignFinal__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                  CK_SESSION_HANDLE session,
+                                  CK_BYTE_PTR signature,
+                                  CK_ULONG_PTR signature_len)
+{
+       return_val_if_fail (signature_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_SignRecoverInit (CK_SESSION_HANDLE session,
                         CK_MECHANISM_PTR mechanism,
@@ -2286,6 +2753,15 @@ mock_C_SignRecoverInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SignRecoverInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                        CK_SESSION_HANDLE session,
+                                        CK_MECHANISM_PTR mechanism,
+                                        CK_OBJECT_HANDLE key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_SignRecover (CK_SESSION_HANDLE session,
                     CK_BYTE_PTR data,
@@ -2344,6 +2820,19 @@ mock_C_SignRecover__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SignRecover__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                    CK_SESSION_HANDLE session,
+                                    CK_BYTE_PTR data,
+                                    CK_ULONG data_len,
+                                    CK_BYTE_PTR signature,
+                                    CK_ULONG_PTR signature_len)
+{
+       return_val_if_fail (signature_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_VerifyInit (CK_SESSION_HANDLE session,
                    CK_MECHANISM_PTR mechanism,
@@ -2361,6 +2850,15 @@ mock_C_VerifyInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_VerifyInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                   CK_SESSION_HANDLE session,
+                                   CK_MECHANISM_PTR mechanism,
+                                   CK_OBJECT_HANDLE key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_Verify (CK_SESSION_HANDLE session,
                CK_BYTE_PTR data,
@@ -2387,6 +2885,17 @@ mock_C_Verify__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_Verify__invalid_handle (CK_X_FUNCTION_LIST *self,
+                               CK_SESSION_HANDLE session,
+                               CK_BYTE_PTR data,
+                               CK_ULONG data_len,
+                               CK_BYTE_PTR signature,
+                               CK_ULONG signature_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_VerifyUpdate (CK_SESSION_HANDLE session,
                      CK_BYTE_PTR part,
@@ -2415,6 +2924,15 @@ mock_C_VerifyUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_VerifyUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                     CK_SESSION_HANDLE session,
+                                     CK_BYTE_PTR part,
+                                     CK_ULONG part_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_VerifyFinal (CK_SESSION_HANDLE session,
                     CK_BYTE_PTR signature,
@@ -2462,6 +2980,15 @@ mock_C_VerifyFinal__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_VerifyFinal__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                    CK_SESSION_HANDLE session,
+                                    CK_BYTE_PTR signature,
+                                    CK_ULONG signature_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_VerifyRecoverInit (CK_SESSION_HANDLE session,
                           CK_MECHANISM_PTR mechanism,
@@ -2479,6 +3006,15 @@ mock_C_VerifyRecoverInit__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_VerifyRecoverInit__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                          CK_SESSION_HANDLE session,
+                                          CK_MECHANISM_PTR mechanism,
+                                          CK_OBJECT_HANDLE key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_VerifyRecover (CK_SESSION_HANDLE session,
                       CK_BYTE_PTR signature,
@@ -2533,6 +3069,19 @@ mock_C_VerifyRecover__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_VerifyRecover__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                      CK_SESSION_HANDLE session,
+                                      CK_BYTE_PTR signature,
+                                      CK_ULONG signature_len,
+                                      CK_BYTE_PTR data,
+                                      CK_ULONG_PTR data_len)
+{
+       return_val_if_fail (data_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DigestEncryptUpdate (CK_SESSION_HANDLE session,
                             CK_BYTE_PTR part,
@@ -2561,6 +3110,19 @@ mock_C_DigestEncryptUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DigestEncryptUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                            CK_SESSION_HANDLE session,
+                                            CK_BYTE_PTR part,
+                                            CK_ULONG part_len,
+                                            CK_BYTE_PTR enc_part,
+                                            CK_ULONG_PTR enc_part_len)
+{
+       return_val_if_fail (enc_part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DecryptDigestUpdate (CK_SESSION_HANDLE session,
                             CK_BYTE_PTR encrypted_part,
@@ -2589,6 +3151,19 @@ mock_C_DecryptDigestUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DecryptDigestUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                            CK_SESSION_HANDLE session,
+                                            CK_BYTE_PTR enc_part,
+                                            CK_ULONG enc_part_len,
+                                            CK_BYTE_PTR part,
+                                            CK_ULONG_PTR part_len)
+{
+       return_val_if_fail (part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_SignEncryptUpdate (CK_SESSION_HANDLE session,
                           CK_BYTE_PTR part,
@@ -2617,6 +3192,19 @@ mock_C_SignEncryptUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SignEncryptUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                          CK_SESSION_HANDLE session,
+                                          CK_BYTE_PTR part,
+                                          CK_ULONG part_len,
+                                          CK_BYTE_PTR enc_part,
+                                          CK_ULONG_PTR enc_part_len)
+{
+       return_val_if_fail (enc_part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DecryptVerifyUpdate (CK_SESSION_HANDLE session,
                             CK_BYTE_PTR encrypted_part,
@@ -2645,6 +3233,19 @@ mock_C_DecryptVerifyUpdate__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DecryptVerifyUpdate__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                            CK_SESSION_HANDLE session,
+                                            CK_BYTE_PTR enc_part,
+                                            CK_ULONG enc_part_len,
+                                            CK_BYTE_PTR part,
+                                            CK_ULONG_PTR part_len)
+{
+       return_val_if_fail (part_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_GenerateKey (CK_SESSION_HANDLE session,
                     CK_MECHANISM_PTR mechanism,
@@ -2699,6 +3300,17 @@ mock_C_GenerateKey__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_GenerateKey__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                    CK_SESSION_HANDLE session,
+                                    CK_MECHANISM_PTR mechanism,
+                                    CK_ATTRIBUTE_PTR template,
+                                    CK_ULONG count,
+                                    CK_OBJECT_HANDLE_PTR key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_GenerateKeyPair (CK_SESSION_HANDLE session,
                         CK_MECHANISM_PTR mechanism,
@@ -2771,6 +3383,20 @@ mock_C_GenerateKeyPair__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_GenerateKeyPair__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                        CK_SESSION_HANDLE session,
+                                        CK_MECHANISM_PTR mechanism,
+                                        CK_ATTRIBUTE_PTR pub_template,
+                                        CK_ULONG pub_count,
+                                        CK_ATTRIBUTE_PTR priv_template,
+                                        CK_ULONG priv_count,
+                                        CK_OBJECT_HANDLE_PTR pub_key,
+                                        CK_OBJECT_HANDLE_PTR priv_key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_WrapKey (CK_SESSION_HANDLE session,
                 CK_MECHANISM_PTR mechanism,
@@ -2847,6 +3473,20 @@ mock_C_WrapKey__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_WrapKey__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                CK_SESSION_HANDLE session,
+                                CK_MECHANISM_PTR mechanism,
+                                CK_OBJECT_HANDLE wrapping_key,
+                                CK_OBJECT_HANDLE key,
+                                CK_BYTE_PTR wrapped_key,
+                                CK_ULONG_PTR wrapped_key_len)
+{
+       return_val_if_fail (wrapped_key_len, CKR_ARGUMENTS_BAD);
+
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_UnwrapKey (CK_SESSION_HANDLE session,
                   CK_MECHANISM_PTR mechanism,
@@ -2919,6 +3559,20 @@ mock_C_UnwrapKey__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_UnwrapKey__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                  CK_SESSION_HANDLE session,
+                                  CK_MECHANISM_PTR mechanism,
+                                  CK_OBJECT_HANDLE unwrapping_key,
+                                  CK_BYTE_PTR wrapped_key,
+                                  CK_ULONG wrapped_key_len,
+                                  CK_ATTRIBUTE_PTR template,
+                                  CK_ULONG count,
+                                  CK_OBJECT_HANDLE_PTR key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_DeriveKey (CK_SESSION_HANDLE session,
                   CK_MECHANISM_PTR mechanism,
@@ -2984,6 +3638,18 @@ mock_C_DeriveKey__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_DeriveKey__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                  CK_SESSION_HANDLE session,
+                                  CK_MECHANISM_PTR mechanism,
+                                  CK_OBJECT_HANDLE base_key,
+                                  CK_ATTRIBUTE_PTR template,
+                                  CK_ULONG count,
+                                  CK_OBJECT_HANDLE_PTR key)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_SeedRandom (CK_SESSION_HANDLE session,
                    CK_BYTE_PTR seed,
@@ -3011,6 +3677,15 @@ mock_C_SeedRandom__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_SeedRandom__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                   CK_SESSION_HANDLE session,
+                                   CK_BYTE_PTR seed,
+                                   CK_ULONG seed_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_RV
 mock_C_GenerateRandom (CK_SESSION_HANDLE session,
                        CK_BYTE_PTR random_data,
@@ -3043,6 +3718,15 @@ mock_C_GenerateRandom__invalid_handle (CK_SESSION_HANDLE session,
        return CKR_SESSION_HANDLE_INVALID;
 }
 
+CK_RV
+mock_X_GenerateRandom__invalid_handle (CK_X_FUNCTION_LIST *self,
+                                       CK_SESSION_HANDLE session,
+                                       CK_BYTE_PTR random_data,
+                                       CK_ULONG random_len)
+{
+       return CKR_SESSION_HANDLE_INVALID;
+}
+
 CK_FUNCTION_LIST mock_module_no_slots = {
        { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR },  /* version */
        mock_C_Initialize,
@@ -3115,6 +3799,75 @@ CK_FUNCTION_LIST mock_module_no_slots = {
        mock_C_WaitForSlotEvent__no_event,
 };
 
+CK_X_FUNCTION_LIST mock_x_module_no_slots = {
+       { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR },  /* version */
+       mock_X_Initialize,
+       mock_X_Finalize,
+       mock_X_GetInfo,
+       mock_X_GetSlotList__no_tokens,
+       mock_X_GetSlotInfo__invalid_slotid,
+       mock_X_GetTokenInfo__invalid_slotid,
+       mock_X_GetMechanismList__invalid_slotid,
+       mock_X_GetMechanismInfo__invalid_slotid,
+       mock_X_InitToken__invalid_slotid,
+       mock_X_InitPIN__invalid_handle,
+       mock_X_SetPIN__invalid_handle,
+       mock_X_OpenSession__invalid_slotid,
+       mock_X_CloseSession__invalid_handle,
+       mock_X_CloseAllSessions__invalid_slotid,
+       mock_X_GetSessionInfo__invalid_handle,
+       mock_X_GetOperationState__invalid_handle,
+       mock_X_SetOperationState__invalid_handle,
+       mock_X_Login__invalid_handle,
+       mock_X_Logout__invalid_handle,
+       mock_X_CreateObject__invalid_handle,
+       mock_X_CopyObject__invalid_handle,
+       mock_X_DestroyObject__invalid_handle,
+       mock_X_GetObjectSize__invalid_handle,
+       mock_X_GetAttributeValue__invalid_handle,
+       mock_X_SetAttributeValue__invalid_handle,
+       mock_X_FindObjectsInit__invalid_handle,
+       mock_X_FindObjects__invalid_handle,
+       mock_X_FindObjectsFinal__invalid_handle,
+       mock_X_EncryptInit__invalid_handle,
+       mock_X_Encrypt__invalid_handle,
+       mock_X_EncryptUpdate__invalid_handle,
+       mock_X_EncryptFinal__invalid_handle,
+       mock_X_DecryptInit__invalid_handle,
+       mock_X_Decrypt__invalid_handle,
+       mock_X_DecryptUpdate__invalid_handle,
+       mock_X_DecryptFinal__invalid_handle,
+       mock_X_DigestInit__invalid_handle,
+       mock_X_Digest__invalid_handle,
+       mock_X_DigestUpdate__invalid_handle,
+       mock_X_DigestKey__invalid_handle,
+       mock_X_DigestFinal__invalid_handle,
+       mock_X_SignInit__invalid_handle,
+       mock_X_Sign__invalid_handle,
+       mock_X_SignUpdate__invalid_handle,
+       mock_X_SignFinal__invalid_handle,
+       mock_X_SignRecoverInit__invalid_handle,
+       mock_X_SignRecover__invalid_handle,
+       mock_X_VerifyInit__invalid_handle,
+       mock_X_Verify__invalid_handle,
+       mock_X_VerifyUpdate__invalid_handle,
+       mock_X_VerifyFinal__invalid_handle,
+       mock_X_VerifyRecoverInit__invalid_handle,
+       mock_X_VerifyRecover__invalid_handle,
+       mock_X_DigestEncryptUpdate__invalid_handle,
+       mock_X_DecryptDigestUpdate__invalid_handle,
+       mock_X_SignEncryptUpdate__invalid_handle,
+       mock_X_DecryptVerifyUpdate__invalid_handle,
+       mock_X_GenerateKey__invalid_handle,
+       mock_X_GenerateKeyPair__invalid_handle,
+       mock_X_WrapKey__invalid_handle,
+       mock_X_UnwrapKey__invalid_handle,
+       mock_X_DeriveKey__invalid_handle,
+       mock_X_SeedRandom__invalid_handle,
+       mock_X_GenerateRandom__invalid_handle,
+       mock_X_WaitForSlotEvent__no_event,
+};
+
 CK_FUNCTION_LIST mock_module = {
        { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR },  /* version */
        mock_C_Initialize,
index d09c8be18cec4fb82f73c7c14fad3c5225330d9c..d9ded00489449633a7c5b5087b2c9424f8fd3d43 100644 (file)
@@ -37,6 +37,7 @@
 
 #include "compat.h"
 #include "pkcs11.h"
+#include "pkcs11x.h"
 
 enum {
        MOCK_DATA_OBJECT = 2,
@@ -88,11 +89,12 @@ enum {
        MOCK_SLOT_TWO_ID = 134,
 };
 
-
 extern       CK_FUNCTION_LIST                            mock_module;
 
 extern       CK_FUNCTION_LIST                            mock_module_no_slots;
 
+extern       CK_X_FUNCTION_LIST                          mock_x_module_no_slots;
+
 void         mock_module_init                            (void);
 
 typedef bool (* mock_enumerator)                         (CK_OBJECT_HANDLE handle,
@@ -115,10 +117,19 @@ CK_RV        mock_C_Initialize                           (CK_VOID_PTR init_args)
 
 CK_RV        mock_C_Initialize__fails                    (CK_VOID_PTR init_args);
 
+CK_RV        mock_X_Initialize                           (CK_X_FUNCTION_LIST *self,
+                                                          CK_VOID_PTR init_args);
+
 CK_RV        mock_C_Finalize                             (CK_VOID_PTR reserved);
 
+CK_RV        mock_X_Finalize                             (CK_X_FUNCTION_LIST *self,
+                                                          CK_VOID_PTR reserved);
+
 CK_RV        mock_C_GetInfo                              (CK_INFO_PTR info);
 
+CK_RV        mock_X_GetInfo                              (CK_X_FUNCTION_LIST *self,
+                                                          CK_INFO_PTR info);
+
 CK_RV        mock_C_GetFunctionList_not_supported        (CK_FUNCTION_LIST_PTR_PTR list);
 
 CK_RV        mock_C_GetSlotList                          (CK_BBOOL token_present,
@@ -140,16 +151,29 @@ CK_RV        mock_C_GetSlotList__fail_late               (CK_BBOOL token_present
 CK_RV        mock_C_GetSlotInfo                          (CK_SLOT_ID slot_id,
                                                           CK_SLOT_INFO_PTR info);
 
+CK_RV        mock_X_GetSlotList__no_tokens               (CK_X_FUNCTION_LIST *self,
+                                                          CK_BBOOL token_present,
+                                                          CK_SLOT_ID_PTR slot_list,
+                                                          CK_ULONG_PTR count);
+
 CK_RV        mock_C_GetSlotInfo__invalid_slotid          (CK_SLOT_ID slot_id,
                                                           CK_SLOT_INFO_PTR info);
 
+CK_RV        mock_X_GetSlotInfo__invalid_slotid          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SLOT_ID slot_id,
+                                                          CK_SLOT_INFO_PTR info);
+
 CK_RV        mock_C_GetTokenInfo                         (CK_SLOT_ID slot_id,
                                                           CK_TOKEN_INFO_PTR info);
 
 CK_RV        mock_C_GetTokenInfo__invalid_slotid         (CK_SLOT_ID slot_id,
                                                           CK_TOKEN_INFO_PTR info);
 
-CK_RV        mock_C_GetTokenInfo_not_initialized         (CK_SLOT_ID slot_id,
+CK_RV        mock_X_GetTokenInfo__invalid_slotid         (CK_X_FUNCTION_LIST *self,
+                                                          CK_SLOT_ID slot_id,
+                                                          CK_TOKEN_INFO_PTR info);
+
+CK_RV        mock_C_GetTokenInfo__not_initialized        (CK_SLOT_ID slot_id,
                                                           CK_TOKEN_INFO_PTR info);
 
 CK_RV        mock_C_GetMechanismList                     (CK_SLOT_ID slot_id,
@@ -160,6 +184,11 @@ CK_RV        mock_C_GetMechanismList__invalid_slotid     (CK_SLOT_ID slot_id,
                                                           CK_MECHANISM_TYPE_PTR mechanism_list,
                                                           CK_ULONG_PTR count);
 
+CK_RV        mock_X_GetMechanismList__invalid_slotid     (CK_X_FUNCTION_LIST *self,
+                                                          CK_SLOT_ID slot_id,
+                                                          CK_MECHANISM_TYPE_PTR mechanism_list,
+                                                          CK_ULONG_PTR count);
+
 CK_RV        mock_C_GetMechanismInfo                     (CK_SLOT_ID slot_id,
                                                           CK_MECHANISM_TYPE type,
                                                           CK_MECHANISM_INFO_PTR info);
@@ -168,6 +197,11 @@ CK_RV        mock_C_GetMechanismInfo__invalid_slotid     (CK_SLOT_ID slot_id,
                                                           CK_MECHANISM_TYPE type,
                                                           CK_MECHANISM_INFO_PTR info);
 
+CK_RV        mock_X_GetMechanismInfo__invalid_slotid     (CK_X_FUNCTION_LIST *self,
+                                                          CK_SLOT_ID slot_id,
+                                                          CK_MECHANISM_TYPE type,
+                                                          CK_MECHANISM_INFO_PTR info);
+
 CK_RV        mock_C_InitToken__specific_args             (CK_SLOT_ID slot_id,
                                                           CK_UTF8CHAR_PTR pin,
                                                           CK_ULONG pin_len,
@@ -178,6 +212,13 @@ CK_RV        mock_C_InitToken__invalid_slotid            (CK_SLOT_ID slot_id,
                                                           CK_ULONG pin_len,
                                                           CK_UTF8CHAR_PTR label);
 
+CK_RV        mock_X_InitToken__invalid_slotid            (CK_X_FUNCTION_LIST *self,
+                                                          CK_SLOT_ID slot_id,
+                                                          CK_UTF8CHAR_PTR pin,
+                                                          CK_ULONG pin_len,
+                                                          CK_UTF8CHAR_PTR label);
+
+
 CK_RV        mock_C_WaitForSlotEvent                     (CK_FLAGS flags,
                                                           CK_SLOT_ID_PTR slot,
                                                           CK_VOID_PTR reserved);
@@ -186,12 +227,24 @@ CK_RV        mock_C_WaitForSlotEvent__no_event           (CK_FLAGS flags,
                                                           CK_SLOT_ID_PTR slot,
                                                           CK_VOID_PTR reserved);
 
+CK_RV        mock_X_WaitForSlotEvent__no_event           (CK_X_FUNCTION_LIST *self,
+                                                          CK_FLAGS flags,
+                                                          CK_SLOT_ID_PTR slot,
+                                                          CK_VOID_PTR reserved);
+
 CK_RV        mock_C_OpenSession__invalid_slotid          (CK_SLOT_ID slot_id,
                                                           CK_FLAGS flags,
                                                           CK_VOID_PTR user_data,
                                                           CK_NOTIFY callback,
                                                           CK_SESSION_HANDLE_PTR session);
 
+CK_RV        mock_X_OpenSession__invalid_slotid          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SLOT_ID slot_id,
+                                                          CK_FLAGS flags,
+                                                          CK_VOID_PTR user_data,
+                                                          CK_NOTIFY callback,
+                                                          CK_SESSION_HANDLE_PTR session);
+
 CK_RV        mock_C_OpenSession__fails                   (CK_SLOT_ID slot_id,
                                                           CK_FLAGS flags,
                                                           CK_VOID_PTR user_data,
@@ -208,10 +261,16 @@ CK_RV        mock_C_CloseSession                         (CK_SESSION_HANDLE sess
 
 CK_RV        mock_C_CloseSession__invalid_handle         (CK_SESSION_HANDLE session);
 
+CK_RV        mock_X_CloseSession__invalid_handle         (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session);
+
 CK_RV        mock_C_CloseAllSessions                     (CK_SLOT_ID slot_id);
 
 CK_RV        mock_C_CloseAllSessions__invalid_slotid     (CK_SLOT_ID slot_id);
 
+CK_RV        mock_X_CloseAllSessions__invalid_slotid     (CK_X_FUNCTION_LIST *self,
+                                                         CK_SLOT_ID slot_id);
+
 CK_RV        mock_C_GetFunctionStatus                    (CK_SESSION_HANDLE session);
 
 CK_RV        mock_C_GetFunctionStatus__not_parallel      (CK_SESSION_HANDLE session);
@@ -226,6 +285,10 @@ CK_RV        mock_C_GetSessionInfo                       (CK_SESSION_HANDLE sess
 CK_RV        mock_C_GetSessionInfo__invalid_handle       (CK_SESSION_HANDLE session,
                                                           CK_SESSION_INFO_PTR info);
 
+CK_RV        mock_X_GetSessionInfo__invalid_handle       (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_SESSION_INFO_PTR info);
+
 CK_RV        mock_C_InitPIN__specific_args               (CK_SESSION_HANDLE session,
                                                           CK_UTF8CHAR_PTR pin,
                                                           CK_ULONG pin_len);
@@ -234,6 +297,11 @@ CK_RV        mock_C_InitPIN__invalid_handle              (CK_SESSION_HANDLE sess
                                                           CK_UTF8CHAR_PTR pin,
                                                           CK_ULONG pin_len);
 
+CK_RV        mock_X_InitPIN__invalid_handle              (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_UTF8CHAR_PTR pin,
+                                                          CK_ULONG pin_len);
+
 CK_RV        mock_C_SetPIN__specific_args                (CK_SESSION_HANDLE session,
                                                           CK_UTF8CHAR_PTR old_pin,
                                                           CK_ULONG old_pin_len,
@@ -246,6 +314,13 @@ CK_RV        mock_C_SetPIN__invalid_handle               (CK_SESSION_HANDLE sess
                                                           CK_UTF8CHAR_PTR new_pin,
                                                           CK_ULONG new_pin_len);
 
+CK_RV        mock_X_SetPIN__invalid_handle               (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_UTF8CHAR_PTR old_pin,
+                                                          CK_ULONG old_pin_len,
+                                                          CK_UTF8CHAR_PTR new_pin,
+                                                          CK_ULONG new_pin_len);
+
 CK_RV        mock_C_GetOperationState                    (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR operation_state,
                                                           CK_ULONG_PTR operation_state_len);
@@ -254,6 +329,11 @@ CK_RV        mock_C_GetOperationState__invalid_handle    (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR operation_state,
                                                           CK_ULONG_PTR operation_state_len);
 
+CK_RV        mock_X_GetOperationState__invalid_handle    (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR operation_state,
+                                                          CK_ULONG_PTR operation_state_len);
+
 CK_RV        mock_C_SetOperationState                    (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR operation_state,
                                                           CK_ULONG operation_state_len,
@@ -266,6 +346,13 @@ CK_RV        mock_C_SetOperationState__invalid_handle    (CK_SESSION_HANDLE sess
                                                           CK_OBJECT_HANDLE encryption_key,
                                                           CK_OBJECT_HANDLE authentication_key);
 
+CK_RV        mock_X_SetOperationState__invalid_handle    (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR operation_state,
+                                                          CK_ULONG operation_state_len,
+                                                          CK_OBJECT_HANDLE encryption_key,
+                                                          CK_OBJECT_HANDLE authentication_key);
+
 CK_RV        mock_C_Login                                (CK_SESSION_HANDLE session,
                                                           CK_USER_TYPE user_type,
                                                           CK_UTF8CHAR_PTR pin,
@@ -276,10 +363,19 @@ CK_RV        mock_C_Login__invalid_handle                (CK_SESSION_HANDLE sess
                                                           CK_UTF8CHAR_PTR pin,
                                                           CK_ULONG pin_len);
 
+CK_RV        mock_X_Login__invalid_handle                (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_USER_TYPE user_type,
+                                                          CK_UTF8CHAR_PTR pin,
+                                                          CK_ULONG pin_len);
+
 CK_RV        mock_C_Logout                               (CK_SESSION_HANDLE session);
 
 CK_RV        mock_C_Logout__invalid_handle               (CK_SESSION_HANDLE session);
 
+CK_RV        mock_X_Logout__invalid_handle               (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session);
+
 CK_RV        mock_C_CreateObject                         (CK_SESSION_HANDLE session,
                                                           CK_ATTRIBUTE_PTR template,
                                                           CK_ULONG count,
@@ -290,6 +386,12 @@ CK_RV        mock_C_CreateObject__invalid_handle         (CK_SESSION_HANDLE sess
                                                           CK_ULONG count,
                                                           CK_OBJECT_HANDLE_PTR new_object);
 
+CK_RV        mock_X_CreateObject__invalid_handle         (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count,
+                                                          CK_OBJECT_HANDLE_PTR new_object);
+
 CK_RV        mock_C_CopyObject                           (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE object,
                                                           CK_ATTRIBUTE_PTR template,
@@ -302,12 +404,23 @@ CK_RV        mock_C_CopyObject__invalid_handle           (CK_SESSION_HANDLE sess
                                                           CK_ULONG count,
                                                           CK_OBJECT_HANDLE_PTR new_object);
 
+CK_RV        mock_X_CopyObject__invalid_handle           (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_OBJECT_HANDLE object,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count,
+                                                          CK_OBJECT_HANDLE_PTR new_object);
+
 CK_RV        mock_C_DestroyObject                        (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE object);
 
 CK_RV        mock_C_DestroyObject__invalid_handle        (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE object);
 
+CK_RV        mock_X_DestroyObject__invalid_handle        (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_OBJECT_HANDLE object);
+
 CK_RV        mock_C_GetObjectSize                        (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE object,
                                                           CK_ULONG_PTR size);
@@ -316,6 +429,11 @@ CK_RV        mock_C_GetObjectSize__invalid_handle        (CK_SESSION_HANDLE sess
                                                           CK_OBJECT_HANDLE object,
                                                           CK_ULONG_PTR size);
 
+CK_RV        mock_X_GetObjectSize__invalid_handle        (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_OBJECT_HANDLE object,
+                                                          CK_ULONG_PTR size);
+
 CK_RV        mock_C_GetAttributeValue                    (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE object,
                                                           CK_ATTRIBUTE_PTR template,
@@ -326,6 +444,12 @@ CK_RV        mock_C_GetAttributeValue__invalid_handle    (CK_SESSION_HANDLE sess
                                                           CK_ATTRIBUTE_PTR template,
                                                           CK_ULONG count);
 
+CK_RV        mock_X_GetAttributeValue__invalid_handle    (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_OBJECT_HANDLE object,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count);
+
 CK_RV        mock_C_GetAttributeValue__fail_first        (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE object,
                                                           CK_ATTRIBUTE_PTR template,
@@ -346,6 +470,12 @@ CK_RV        mock_C_SetAttributeValue__invalid_handle    (CK_SESSION_HANDLE sess
                                                           CK_ATTRIBUTE_PTR template,
                                                           CK_ULONG count);
 
+CK_RV        mock_X_SetAttributeValue__invalid_handle    (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_OBJECT_HANDLE object,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count);
+
 CK_RV        mock_C_FindObjectsInit                      (CK_SESSION_HANDLE session,
                                                           CK_ATTRIBUTE_PTR template,
                                                           CK_ULONG count);
@@ -354,6 +484,11 @@ CK_RV        mock_C_FindObjectsInit__invalid_handle      (CK_SESSION_HANDLE sess
                                                           CK_ATTRIBUTE_PTR template,
                                                           CK_ULONG count);
 
+CK_RV        mock_X_FindObjectsInit__invalid_handle      (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count);
+
 CK_RV        mock_C_FindObjectsInit__fails               (CK_SESSION_HANDLE session,
                                                           CK_ATTRIBUTE_PTR template,
                                                           CK_ULONG count);
@@ -368,6 +503,12 @@ CK_RV        mock_C_FindObjects__invalid_handle          (CK_SESSION_HANDLE sess
                                                           CK_ULONG max_count,
                                                           CK_ULONG_PTR count);
 
+CK_RV        mock_X_FindObjects__invalid_handle          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_OBJECT_HANDLE_PTR objects,
+                                                          CK_ULONG max_count,
+                                                          CK_ULONG_PTR count);
+
 CK_RV        mock_C_FindObjects__fails                   (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE_PTR objects,
                                                           CK_ULONG max_count,
@@ -377,6 +518,9 @@ CK_RV        mock_C_FindObjectsFinal                     (CK_SESSION_HANDLE sess
 
 CK_RV        mock_C_FindObjectsFinal__invalid_handle     (CK_SESSION_HANDLE session);
 
+CK_RV        mock_X_FindObjectsFinal__invalid_handle     (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session);
+
 CK_RV        mock_C_EncryptInit                          (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
@@ -385,6 +529,11 @@ CK_RV        mock_C_EncryptInit__invalid_handle          (CK_SESSION_HANDLE sess
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
 
+CK_RV        mock_X_EncryptInit__invalid_handle          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE key);
+
 CK_RV        mock_C_Encrypt                              (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR data,
                                                           CK_ULONG data_len,
@@ -397,6 +546,13 @@ CK_RV        mock_C_Encrypt__invalid_handle              (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR encrypted_data,
                                                           CK_ULONG_PTR encrypted_data_len);
 
+CK_RV        mock_X_Encrypt__invalid_handle              (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR data,
+                                                          CK_ULONG data_len,
+                                                          CK_BYTE_PTR encrypted_data,
+                                                          CK_ULONG_PTR encrypted_data_len);
+
 CK_RV        mock_C_EncryptUpdate                        (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len,
@@ -409,6 +565,13 @@ CK_RV        mock_C_EncryptUpdate__invalid_handle        (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR encrypted_part,
                                                           CK_ULONG_PTR encrypted_part_len);
 
+CK_RV        mock_X_EncryptUpdate__invalid_handle        (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG part_len,
+                                                          CK_BYTE_PTR encrypted_part,
+                                                          CK_ULONG_PTR encrypted_part_len);
+
 CK_RV        mock_C_EncryptFinal                         (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR last_encrypted_part,
                                                           CK_ULONG_PTR last_encrypted_part_len);
@@ -417,6 +580,11 @@ CK_RV        mock_C_EncryptFinal__invalid_handle         (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR last_part,
                                                           CK_ULONG_PTR last_part_len);
 
+CK_RV        mock_X_EncryptFinal__invalid_handle         (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR last_part,
+                                                          CK_ULONG_PTR last_part_len);
+
 CK_RV        mock_C_DecryptInit                          (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
@@ -425,6 +593,11 @@ CK_RV        mock_C_DecryptInit__invalid_handle          (CK_SESSION_HANDLE sess
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
 
+CK_RV        mock_X_DecryptInit__invalid_handle          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE key);
+
 CK_RV        mock_C_Decrypt                              (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR encrypted_data,
                                                           CK_ULONG encrypted_data_len,
@@ -437,6 +610,13 @@ CK_RV        mock_C_Decrypt__invalid_handle              (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR data,
                                                           CK_ULONG_PTR data_len);
 
+CK_RV        mock_X_Decrypt__invalid_handle              (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR enc_data,
+                                                          CK_ULONG enc_data_len,
+                                                          CK_BYTE_PTR data,
+                                                          CK_ULONG_PTR data_len);
+
 CK_RV        mock_C_DecryptUpdate                        (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR encrypted_part,
                                                           CK_ULONG encrypted_part_len,
@@ -449,6 +629,13 @@ CK_RV        mock_C_DecryptUpdate__invalid_handle        (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG_PTR part_len);
 
+CK_RV        mock_X_DecryptUpdate__invalid_handle        (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR enc_part,
+                                                          CK_ULONG enc_part_len,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG_PTR part_len);
+
 CK_RV        mock_C_DecryptFinal                         (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR last_part,
                                                           CK_ULONG_PTR last_part_len);
@@ -457,12 +644,21 @@ CK_RV        mock_C_DecryptFinal__invalid_handle         (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR last_part,
                                                           CK_ULONG_PTR last_part_len);
 
+CK_RV        mock_X_DecryptFinal__invalid_handle         (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR last_part,
+                                                          CK_ULONG_PTR last_part_len);
+
 CK_RV        mock_C_DigestInit                           (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism);
 
 CK_RV        mock_C_DigestInit__invalid_handle           (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism);
 
+CK_RV        mock_X_DigestInit__invalid_handle           (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism);
+
 CK_RV        mock_C_Digest                               (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR data,
                                                           CK_ULONG data_len,
@@ -475,6 +671,13 @@ CK_RV        mock_C_Digest__invalid_handle               (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR digest,
                                                           CK_ULONG_PTR digest_len);
 
+CK_RV        mock_X_Digest__invalid_handle               (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR data,
+                                                          CK_ULONG data_len,
+                                                          CK_BYTE_PTR digest,
+                                                          CK_ULONG_PTR digest_len);
+
 CK_RV        mock_C_DigestUpdate                         (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len);
@@ -483,12 +686,21 @@ CK_RV        mock_C_DigestUpdate__invalid_handle         (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len);
 
+CK_RV        mock_X_DigestUpdate__invalid_handle         (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG part_len);
+
 CK_RV        mock_C_DigestKey                            (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE key);
 
 CK_RV        mock_C_DigestKey__invalid_handle            (CK_SESSION_HANDLE session,
                                                           CK_OBJECT_HANDLE key);
 
+CK_RV        mock_X_DigestKey__invalid_handle            (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_OBJECT_HANDLE key);
+
 CK_RV        mock_C_DigestFinal                          (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR digest,
                                                           CK_ULONG_PTR digest_len);
@@ -497,6 +709,11 @@ CK_RV        mock_C_DigestFinal__invalid_handle          (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR digest,
                                                           CK_ULONG_PTR digest_len);
 
+CK_RV        mock_X_DigestFinal__invalid_handle          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR digest,
+                                                          CK_ULONG_PTR digest_len);
+
 CK_RV        mock_C_SignInit                             (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
@@ -505,6 +722,11 @@ CK_RV        mock_C_SignInit__invalid_handle             (CK_SESSION_HANDLE sess
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
 
+CK_RV        mock_X_SignInit__invalid_handle             (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE key);
+
 CK_RV        mock_C_Sign                                 (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR data,
                                                           CK_ULONG data_len,
@@ -517,6 +739,13 @@ CK_RV        mock_C_Sign__invalid_handle                 (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG_PTR signature_len);
 
+CK_RV        mock_X_Sign__invalid_handle                 (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR data,
+                                                          CK_ULONG data_len,
+                                                          CK_BYTE_PTR signature,
+                                                          CK_ULONG_PTR signature_len);
+
 CK_RV        mock_C_SignUpdate                           (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len);
@@ -525,6 +754,11 @@ CK_RV        mock_C_SignUpdate__invalid_handle           (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len);
 
+CK_RV        mock_X_SignUpdate__invalid_handle           (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG part_len);
+
 CK_RV        mock_C_SignFinal                            (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG_PTR signature_len);
@@ -533,6 +767,11 @@ CK_RV        mock_C_SignFinal__invalid_handle            (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG_PTR signature_len);
 
+CK_RV        mock_X_SignFinal__invalid_handle            (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR signature,
+                                                          CK_ULONG_PTR signature_len);
+
 CK_RV        mock_C_SignRecoverInit                      (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
@@ -541,6 +780,11 @@ CK_RV        mock_C_SignRecoverInit__invalid_handle      (CK_SESSION_HANDLE sess
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
 
+CK_RV        mock_X_SignRecoverInit__invalid_handle      (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE key);
+
 CK_RV        mock_C_SignRecover                          (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR data,
                                                           CK_ULONG data_len,
@@ -553,6 +797,13 @@ CK_RV        mock_C_SignRecover__invalid_handle          (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG_PTR signature_len);
 
+CK_RV        mock_X_SignRecover__invalid_handle          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR data,
+                                                          CK_ULONG data_len,
+                                                          CK_BYTE_PTR signature,
+                                                          CK_ULONG_PTR signature_len);
+
 CK_RV        mock_C_VerifyInit                           (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
@@ -561,6 +812,11 @@ CK_RV        mock_C_VerifyInit__invalid_handle           (CK_SESSION_HANDLE sess
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
 
+CK_RV        mock_X_VerifyInit__invalid_handle           (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE key);
+
 CK_RV        mock_C_Verify                               (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR data,
                                                           CK_ULONG data_len,
@@ -573,6 +829,13 @@ CK_RV        mock_C_Verify__invalid_handle               (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG signature_len);
 
+CK_RV        mock_X_Verify__invalid_handle               (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR data,
+                                                          CK_ULONG data_len,
+                                                          CK_BYTE_PTR signature,
+                                                          CK_ULONG signature_len);
+
 CK_RV        mock_C_VerifyUpdate                         (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len);
@@ -581,6 +844,11 @@ CK_RV        mock_C_VerifyUpdate__invalid_handle         (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len);
 
+CK_RV        mock_X_VerifyUpdate__invalid_handle         (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG part_len);
+
 CK_RV        mock_C_VerifyFinal                          (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG signature_len);
@@ -589,6 +857,11 @@ CK_RV        mock_C_VerifyFinal__invalid_handle          (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG signature_len);
 
+CK_RV        mock_X_VerifyFinal__invalid_handle          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR signature,
+                                                          CK_ULONG signature_len);
+
 CK_RV        mock_C_VerifyRecoverInit                    (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
@@ -597,6 +870,11 @@ CK_RV        mock_C_VerifyRecoverInit__invalid_handle    (CK_SESSION_HANDLE sess
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE key);
 
+CK_RV        mock_X_VerifyRecoverInit__invalid_handle    (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE key);
+
 CK_RV        mock_C_VerifyRecover                        (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR signature,
                                                           CK_ULONG signature_len,
@@ -609,6 +887,13 @@ CK_RV        mock_C_VerifyRecover__invalid_handle        (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR data,
                                                           CK_ULONG_PTR data_len);
 
+CK_RV        mock_X_VerifyRecover__invalid_handle        (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR signature,
+                                                          CK_ULONG signature_len,
+                                                          CK_BYTE_PTR data,
+                                                          CK_ULONG_PTR data_len);
+
 CK_RV        mock_C_DigestEncryptUpdate                  (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len,
@@ -621,6 +906,13 @@ CK_RV        mock_C_DigestEncryptUpdate__invalid_handle  (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR enc_part,
                                                           CK_ULONG_PTR enc_part_len);
 
+CK_RV        mock_X_DigestEncryptUpdate__invalid_handle  (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG part_len,
+                                                          CK_BYTE_PTR enc_part,
+                                                          CK_ULONG_PTR enc_part_len);
+
 CK_RV        mock_C_DecryptDigestUpdate                  (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR encrypted_part,
                                                           CK_ULONG encrypted_part_len,
@@ -633,6 +925,13 @@ CK_RV        mock_C_DecryptDigestUpdate__invalid_handle  (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG_PTR part_len);
 
+CK_RV        mock_X_DecryptDigestUpdate__invalid_handle  (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR enc_part,
+                                                          CK_ULONG enc_part_len,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG_PTR part_len);
+
 CK_RV        mock_C_SignEncryptUpdate                    (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG part_len,
@@ -645,6 +944,13 @@ CK_RV        mock_C_SignEncryptUpdate__invalid_handle    (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR enc_part,
                                                           CK_ULONG_PTR enc_part_len);
 
+CK_RV        mock_X_SignEncryptUpdate__invalid_handle    (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG part_len,
+                                                          CK_BYTE_PTR enc_part,
+                                                          CK_ULONG_PTR enc_part_len);
+
 CK_RV        mock_C_DecryptVerifyUpdate                  (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR encrypted_part,
                                                           CK_ULONG encrypted_part_len,
@@ -657,6 +963,13 @@ CK_RV        mock_C_DecryptVerifyUpdate__invalid_handle  (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR part,
                                                           CK_ULONG_PTR part_len);
 
+CK_RV        mock_X_DecryptVerifyUpdate__invalid_handle  (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR enc_part,
+                                                          CK_ULONG enc_part_len,
+                                                          CK_BYTE_PTR part,
+                                                          CK_ULONG_PTR part_len);
+
 CK_RV        mock_C_GenerateKey                          (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_ATTRIBUTE_PTR template,
@@ -669,6 +982,13 @@ CK_RV        mock_C_GenerateKey__invalid_handle          (CK_SESSION_HANDLE sess
                                                           CK_ULONG count,
                                                           CK_OBJECT_HANDLE_PTR key);
 
+CK_RV        mock_X_GenerateKey__invalid_handle          (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count,
+                                                          CK_OBJECT_HANDLE_PTR key);
+
 CK_RV        mock_C_GenerateKeyPair                      (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_ATTRIBUTE_PTR public_key_template,
@@ -687,6 +1007,16 @@ CK_RV        mock_C_GenerateKeyPair__invalid_handle      (CK_SESSION_HANDLE sess
                                                           CK_OBJECT_HANDLE_PTR pub_key,
                                                           CK_OBJECT_HANDLE_PTR priv_key);
 
+CK_RV        mock_X_GenerateKeyPair__invalid_handle      (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_ATTRIBUTE_PTR pub_template,
+                                                          CK_ULONG pub_count,
+                                                          CK_ATTRIBUTE_PTR priv_template,
+                                                          CK_ULONG priv_count,
+                                                          CK_OBJECT_HANDLE_PTR pub_key,
+                                                          CK_OBJECT_HANDLE_PTR priv_key);
+
 CK_RV        mock_C_WrapKey                              (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE wrapping_key,
@@ -701,6 +1031,14 @@ CK_RV        mock_C_WrapKey__invalid_handle              (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR wrapped_key,
                                                           CK_ULONG_PTR wrapped_key_len);
 
+CK_RV        mock_X_WrapKey__invalid_handle              (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE wrapping_key,
+                                                          CK_OBJECT_HANDLE key,
+                                                          CK_BYTE_PTR wrapped_key,
+                                                          CK_ULONG_PTR wrapped_key_len);
+
 CK_RV        mock_C_UnwrapKey                            (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE unwrapping_key,
@@ -719,6 +1057,16 @@ CK_RV        mock_C_UnwrapKey__invalid_handle            (CK_SESSION_HANDLE sess
                                                           CK_ULONG count,
                                                           CK_OBJECT_HANDLE_PTR key);
 
+CK_RV        mock_X_UnwrapKey__invalid_handle            (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE unwrapping_key,
+                                                          CK_BYTE_PTR wrapped_key,
+                                                          CK_ULONG wrapped_key_len,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count,
+                                                          CK_OBJECT_HANDLE_PTR key);
+
 CK_RV        mock_C_DeriveKey                            (CK_SESSION_HANDLE session,
                                                           CK_MECHANISM_PTR mechanism,
                                                           CK_OBJECT_HANDLE base_key,
@@ -733,6 +1081,14 @@ CK_RV        mock_C_DeriveKey__invalid_handle            (CK_SESSION_HANDLE sess
                                                           CK_ULONG count,
                                                           CK_OBJECT_HANDLE_PTR key);
 
+CK_RV        mock_X_DeriveKey__invalid_handle            (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_MECHANISM_PTR mechanism,
+                                                          CK_OBJECT_HANDLE base_key,
+                                                          CK_ATTRIBUTE_PTR template,
+                                                          CK_ULONG count,
+                                                          CK_OBJECT_HANDLE_PTR key);
+
 CK_RV        mock_C_SeedRandom                           (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR seed,
                                                           CK_ULONG seed_len);
@@ -741,6 +1097,11 @@ CK_RV        mock_C_SeedRandom__invalid_handle           (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR seed,
                                                           CK_ULONG seed_len);
 
+CK_RV        mock_X_SeedRandom__invalid_handle           (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR seed,
+                                                          CK_ULONG seed_len);
+
 CK_RV        mock_C_GenerateRandom                       (CK_SESSION_HANDLE session,
                                                           CK_BYTE_PTR random_data,
                                                           CK_ULONG random_len);
@@ -749,4 +1110,9 @@ CK_RV        mock_C_GenerateRandom__invalid_handle       (CK_SESSION_HANDLE sess
                                                           CK_BYTE_PTR random_data,
                                                           CK_ULONG random_len);
 
+CK_RV        mock_X_GenerateRandom__invalid_handle       (CK_X_FUNCTION_LIST *self,
+                                                          CK_SESSION_HANDLE session,
+                                                          CK_BYTE_PTR random_data,
+                                                          CK_ULONG random_len);
+
 #endif /* __MOCK_H__ */
index 58be4603e839afdccada503ed2d2e2de2ea52820..dfb2a6c595bb1e2f38270980777202ff7512f0f5 100644 (file)
@@ -149,6 +149,444 @@ typedef CK_ULONG CK_X_ASSERTION_TYPE;
 
 #endif /* CRYPTOKI_X_VENDOR_DEFINED */
 
+/* -------------------------------------------------------------------
+ * SUBCLASSABLE PKCS#11 FUNCTIONS
+ */
+
+typedef struct _CK_X_FUNCTION_LIST CK_X_FUNCTION_LIST;
+
+typedef CK_RV (* CK_X_Initialize)          (CK_X_FUNCTION_LIST *,
+                                            CK_VOID_PTR);
+
+typedef CK_RV (* CK_X_Finalize)            (CK_X_FUNCTION_LIST *,
+                                            CK_VOID_PTR);
+
+typedef CK_RV (* CK_X_GetInfo)             (CK_X_FUNCTION_LIST *,
+                                            CK_INFO_PTR);
+
+typedef CK_RV (* CK_X_GetSlotList)         (CK_X_FUNCTION_LIST *,
+                                            CK_BBOOL,
+                                            CK_SLOT_ID_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_GetSlotInfo)         (CK_X_FUNCTION_LIST *,
+                                            CK_SLOT_ID,
+                                            CK_SLOT_INFO_PTR);
+
+typedef CK_RV (* CK_X_GetTokenInfo)        (CK_X_FUNCTION_LIST *,
+                                            CK_SLOT_ID,
+                                            CK_TOKEN_INFO_PTR);
+
+typedef CK_RV (* CK_X_GetMechanismList)    (CK_X_FUNCTION_LIST *,
+                                            CK_SLOT_ID,
+                                            CK_MECHANISM_TYPE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_GetMechanismInfo)    (CK_X_FUNCTION_LIST *,
+                                            CK_SLOT_ID,
+                                            CK_MECHANISM_TYPE,
+                                            CK_MECHANISM_INFO_PTR);
+
+typedef CK_RV (* CK_X_InitToken)           (CK_X_FUNCTION_LIST *,
+                                            CK_SLOT_ID,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR);
+
+typedef CK_RV (* CK_X_InitPIN)             (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_SetPIN)              (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_OpenSession)         (CK_X_FUNCTION_LIST *,
+                                            CK_SLOT_ID,
+                                            CK_FLAGS,
+                                            CK_VOID_PTR,
+                                            CK_NOTIFY,
+                                            CK_SESSION_HANDLE_PTR);
+
+typedef CK_RV (* CK_X_CloseSession)        (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE);
+
+typedef CK_RV (* CK_X_CloseAllSessions)    (CK_X_FUNCTION_LIST *,
+                                            CK_SLOT_ID);
+
+typedef CK_RV (* CK_X_GetSessionInfo)      (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_SESSION_INFO_PTR);
+
+typedef CK_RV (* CK_X_GetOperationState)   (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_SetOperationState)   (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_OBJECT_HANDLE,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_Login)               (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_USER_TYPE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_Logout)              (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE);
+
+typedef CK_RV (* CK_X_CreateObject)        (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG,
+                                            CK_OBJECT_HANDLE_PTR);
+
+typedef CK_RV (* CK_X_CopyObject)          (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_OBJECT_HANDLE,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG,
+                                            CK_OBJECT_HANDLE_PTR);
+
+typedef CK_RV (* CK_X_DestroyObject)       (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_GetObjectSize)       (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_OBJECT_HANDLE,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_GetAttributeValue)   (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_OBJECT_HANDLE,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_SetAttributeValue)   (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_OBJECT_HANDLE,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_FindObjectsInit)     (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_FindObjects)         (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_OBJECT_HANDLE_PTR,
+                                            CK_ULONG,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_FindObjectsFinal)    (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE);
+
+typedef CK_RV (* CK_X_EncryptInit)         (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_Encrypt)             (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_EncryptUpdate)       (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_EncryptFinal)        (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DecryptInit)         (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_Decrypt)             (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DecryptUpdate)       (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DecryptFinal)        (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DigestInit)          (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR);
+
+typedef CK_RV (* CK_X_Digest)              (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DigestUpdate)        (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_DigestKey)           (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_DigestFinal)         (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_SignInit)            (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_Sign)                (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_SignUpdate)          (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_SignFinal)           (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_SignRecoverInit)     (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_SignRecover)         (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_VerifyInit)          (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_Verify)              (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_VerifyUpdate)        (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_VerifyFinal)         (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_VerifyRecoverInit)   (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE);
+
+typedef CK_RV (* CK_X_VerifyRecover)       (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DigestEncryptUpdate) (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DecryptDigestUpdate) (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_SignEncryptUpdate)   (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_DecryptVerifyUpdate) (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_GenerateKey)         (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG,
+                                            CK_OBJECT_HANDLE_PTR);
+
+typedef CK_RV (* CK_X_GenerateKeyPair)     (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG,
+                                            CK_OBJECT_HANDLE_PTR,
+                                            CK_OBJECT_HANDLE_PTR);
+
+typedef CK_RV (* CK_X_WrapKey)             (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE,
+                                            CK_OBJECT_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG_PTR);
+
+typedef CK_RV (* CK_X_UnwrapKey)           (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG,
+                                            CK_OBJECT_HANDLE_PTR);
+
+typedef CK_RV (* CK_X_DeriveKey)           (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_MECHANISM_PTR,
+                                            CK_OBJECT_HANDLE,
+                                            CK_ATTRIBUTE_PTR,
+                                            CK_ULONG,
+                                            CK_OBJECT_HANDLE_PTR);
+
+typedef CK_RV (* CK_X_SeedRandom)          (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_GenerateRandom)      (CK_X_FUNCTION_LIST *,
+                                            CK_SESSION_HANDLE,
+                                            CK_BYTE_PTR,
+                                            CK_ULONG);
+
+typedef CK_RV (* CK_X_WaitForSlotEvent)    (CK_X_FUNCTION_LIST *,
+                                            CK_FLAGS,
+                                            CK_SLOT_ID_PTR,
+                                            CK_VOID_PTR);
+
+struct _CK_X_FUNCTION_LIST {
+       CK_VERSION version;
+       CK_X_Initialize C_Initialize;
+       CK_X_Finalize C_Finalize;
+       CK_X_GetInfo C_GetInfo;
+       CK_X_GetSlotList C_GetSlotList;
+       CK_X_GetSlotInfo C_GetSlotInfo;
+       CK_X_GetTokenInfo C_GetTokenInfo;
+       CK_X_GetMechanismList C_GetMechanismList;
+       CK_X_GetMechanismInfo C_GetMechanismInfo;
+       CK_X_InitToken C_InitToken;
+       CK_X_InitPIN C_InitPIN;
+       CK_X_SetPIN C_SetPIN;
+       CK_X_OpenSession C_OpenSession;
+       CK_X_CloseSession C_CloseSession;
+       CK_X_CloseAllSessions C_CloseAllSessions;
+       CK_X_GetSessionInfo C_GetSessionInfo;
+       CK_X_GetOperationState C_GetOperationState;
+       CK_X_SetOperationState C_SetOperationState;
+       CK_X_Login C_Login;
+       CK_X_Logout C_Logout;
+       CK_X_CreateObject C_CreateObject;
+       CK_X_CopyObject C_CopyObject;
+       CK_X_DestroyObject C_DestroyObject;
+       CK_X_GetObjectSize C_GetObjectSize;
+       CK_X_GetAttributeValue C_GetAttributeValue;
+       CK_X_SetAttributeValue C_SetAttributeValue;
+       CK_X_FindObjectsInit C_FindObjectsInit;
+       CK_X_FindObjects C_FindObjects;
+       CK_X_FindObjectsFinal C_FindObjectsFinal;
+       CK_X_EncryptInit C_EncryptInit;
+       CK_X_Encrypt C_Encrypt;
+       CK_X_EncryptUpdate C_EncryptUpdate;
+       CK_X_EncryptFinal C_EncryptFinal;
+       CK_X_DecryptInit C_DecryptInit;
+       CK_X_Decrypt C_Decrypt;
+       CK_X_DecryptUpdate C_DecryptUpdate;
+       CK_X_DecryptFinal C_DecryptFinal;
+       CK_X_DigestInit C_DigestInit;
+       CK_X_Digest C_Digest;
+       CK_X_DigestUpdate C_DigestUpdate;
+       CK_X_DigestKey C_DigestKey;
+       CK_X_DigestFinal C_DigestFinal;
+       CK_X_SignInit C_SignInit;
+       CK_X_Sign C_Sign;
+       CK_X_SignUpdate C_SignUpdate;
+       CK_X_SignFinal C_SignFinal;
+       CK_X_SignRecoverInit C_SignRecoverInit;
+       CK_X_SignRecover C_SignRecover;
+       CK_X_VerifyInit C_VerifyInit;
+       CK_X_Verify C_Verify;
+       CK_X_VerifyUpdate C_VerifyUpdate;
+       CK_X_VerifyFinal C_VerifyFinal;
+       CK_X_VerifyRecoverInit C_VerifyRecoverInit;
+       CK_X_VerifyRecover C_VerifyRecover;
+       CK_X_DigestEncryptUpdate C_DigestEncryptUpdate;
+       CK_X_DecryptDigestUpdate C_DecryptDigestUpdate;
+       CK_X_SignEncryptUpdate C_SignEncryptUpdate;
+       CK_X_DecryptVerifyUpdate C_DecryptVerifyUpdate;
+       CK_X_GenerateKey C_GenerateKey;
+       CK_X_GenerateKeyPair C_GenerateKeyPair;
+       CK_X_WrapKey C_WrapKey;
+       CK_X_UnwrapKey C_UnwrapKey;
+       CK_X_DeriveKey C_DeriveKey;
+       CK_X_SeedRandom C_SeedRandom;
+       CK_X_GenerateRandom C_GenerateRandom;
+       CK_X_WaitForSlotEvent C_WaitForSlotEvent;
+};
+
 #if defined(__cplusplus)
 }
 #endif