diff options
author | Stef Walter <stef@memberwebs.com> | 2010-06-09 03:46:04 +0000 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2010-06-09 03:46:04 +0000 |
commit | d9eb5a034248557b07800e8dc607053da48107c7 (patch) | |
tree | dd4c3284f7da6e2cbca0e77e52f72a6b48a32375 /pkcs11/gkm/gkm-test.c | |
parent | f6e4268ef31f1d8f70e9963dfa436a8ef685d7af (diff) | |
download | gnome-keyring-d9eb5a034248557b07800e8dc607053da48107c7.tar.gz |
Split out the mock module and test helpers.
Diffstat (limited to 'pkcs11/gkm/gkm-test.c')
-rw-r--r-- | pkcs11/gkm/gkm-test.c | 1449 |
1 files changed, 0 insertions, 1449 deletions
diff --git a/pkcs11/gkm/gkm-test.c b/pkcs11/gkm/gkm-test.c index 08976507..3e268ac7 100644 --- a/pkcs11/gkm/gkm-test.c +++ b/pkcs11/gkm/gkm-test.c @@ -58,1452 +58,3 @@ gkm_assertion_message_cmpulong (const gchar *domain, const gchar *file, gint lin g_assertion_message (domain, file, line, func, s); g_free (s); } - -/* ------------------------------------------------------------------------------- - * TEST MODULE - */ - -static gboolean initialized = FALSE; -static gchar *the_pin = NULL; -static gulong n_the_pin = 0; - -static gboolean logged_in = FALSE; -static CK_USER_TYPE user_type = 0; -static CK_FUNCTION_LIST functionList; - -typedef enum _Operation { - OP_FIND = 1, - OP_CRYPTO -} Operation; - -typedef struct _Session { - CK_SESSION_HANDLE handle; - CK_SESSION_INFO info; - GHashTable *objects; - - Operation operation; - - /* For find operations */ - GList *matches; - - /* For crypto operations */ - CK_OBJECT_HANDLE crypto_key; - CK_ATTRIBUTE_TYPE crypto_method; - CK_MECHANISM_TYPE crypto_mechanism; - CK_BBOOL want_context_login; - - /* For 'signing' with CKM_T_PREFIX */ - CK_BYTE sign_prefix[128]; - CK_ULONG n_sign_prefix; -} Session; - -static guint unique_identifier = 100; -static GHashTable *the_sessions = NULL; -static GHashTable *the_objects = NULL; - -enum { - PRIVATE_KEY_CAPITALIZE = 3, - PUBLIC_KEY_CAPITALIZE = 4, - PRIVATE_KEY_PREFIX = 5, - PUBLIC_KEY_PREFIX = 6 -}; - -#define SIGNED_PREFIX "signed-prefix:" - -/* - * This is not a generic test module, it works in concert with the - * unit-test-gp11-module.c - */ - -static void -free_session (gpointer data) -{ - Session *sess = (Session*)data; - if (sess) - g_hash_table_destroy (sess->objects); - g_free (sess); -} - -static GArray* -lookup_object (Session *session, CK_OBJECT_HANDLE hObject) -{ - GArray *attrs; - attrs = g_hash_table_lookup (the_objects, GUINT_TO_POINTER (hObject)); - if (!attrs) - attrs = g_hash_table_lookup (session->objects, GUINT_TO_POINTER (hObject)); - return attrs; -} - -CK_RV -gkm_test_C_Initialize (CK_VOID_PTR pInitArgs) -{ - GArray *attrs; - CK_ULONG value; - CK_C_INITIALIZE_ARGS_PTR args; - - g_return_val_if_fail (initialized == FALSE, CKR_CRYPTOKI_ALREADY_INITIALIZED); - - args = (CK_C_INITIALIZE_ARGS_PTR)pInitArgs; - if (args) { - g_return_val_if_fail( - (args->CreateMutex == NULL && args->DestroyMutex == NULL && - args->LockMutex == NULL && args->UnlockMutex == NULL) || - (args->CreateMutex != NULL && args->DestroyMutex != NULL && - args->LockMutex != NULL && args->UnlockMutex != NULL), - CKR_ARGUMENTS_BAD); - - /* Flags should allow OS locking and os threads */ - g_return_val_if_fail (args->flags & CKF_OS_LOCKING_OK, CKR_CANT_LOCK); - g_return_val_if_fail (args->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS, CKR_NEED_TO_CREATE_THREADS); - } - - the_pin = g_strdup ("booo"); - n_the_pin = strlen (the_pin); - the_sessions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, free_session); - the_objects = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)gkm_template_free); - - /* Our token object */ - attrs = gkm_template_new (NULL, 0); - gkm_template_set_ulong (attrs, CKA_CLASS, CKO_DATA); - gkm_template_set_string (attrs, CKA_LABEL, "TEST LABEL"); - g_hash_table_insert (the_objects, GUINT_TO_POINTER (2), attrs); - - /* Private capitalize key */ - value = CKM_T_CAPITALIZE; - attrs = gkm_template_new (NULL, 0); - gkm_template_set_ulong (attrs, CKA_CLASS, CKO_PRIVATE_KEY); - gkm_template_set_string (attrs, CKA_LABEL, "Private Capitalize Key"); - gkm_template_set_value (attrs, CKA_ALLOWED_MECHANISMS, &value, sizeof (value)); - gkm_template_set_boolean (attrs, CKA_DECRYPT, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_PRIVATE, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_WRAP, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_UNWRAP, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_DERIVE, CK_TRUE); - gkm_template_set_string (attrs, CKA_VALUE, "value"); - g_hash_table_insert (the_objects, GUINT_TO_POINTER (PRIVATE_KEY_CAPITALIZE), attrs); - - /* Public capitalize key */ - value = CKM_T_CAPITALIZE; - attrs = gkm_template_new (NULL, 0); - gkm_template_set_ulong (attrs, CKA_CLASS, CKO_PUBLIC_KEY); - gkm_template_set_string (attrs, CKA_LABEL, "Public Capitalize Key"); - gkm_template_set_value (attrs, CKA_ALLOWED_MECHANISMS, &value, sizeof (value)); - gkm_template_set_boolean (attrs, CKA_ENCRYPT, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_PRIVATE, CK_FALSE); - gkm_template_set_string (attrs, CKA_VALUE, "value"); - g_hash_table_insert (the_objects, GUINT_TO_POINTER (PUBLIC_KEY_CAPITALIZE), attrs); - - /* Private prefix key */ - value = CKM_T_PREFIX; - attrs = gkm_template_new (NULL, 0); - gkm_template_set_ulong (attrs, CKA_CLASS, CKO_PRIVATE_KEY); - gkm_template_set_string (attrs, CKA_LABEL, "Private prefix key"); - gkm_template_set_value (attrs, CKA_ALLOWED_MECHANISMS, &value, sizeof (value)); - gkm_template_set_boolean (attrs, CKA_SIGN, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_PRIVATE, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_ALWAYS_AUTHENTICATE, CK_TRUE); - gkm_template_set_string (attrs, CKA_VALUE, "value"); - g_hash_table_insert (the_objects, GUINT_TO_POINTER (PRIVATE_KEY_PREFIX), attrs); - - /* Private prefix key */ - value = CKM_T_PREFIX; - attrs = gkm_template_new (NULL, 0); - gkm_template_set_ulong (attrs, CKA_CLASS, CKO_PUBLIC_KEY); - gkm_template_set_string (attrs, CKA_LABEL, "Public prefix key"); - gkm_template_set_value (attrs, CKA_ALLOWED_MECHANISMS, &value, sizeof (value)); - gkm_template_set_boolean (attrs, CKA_VERIFY, CK_TRUE); - gkm_template_set_boolean (attrs, CKA_PRIVATE, CK_FALSE); - gkm_template_set_string (attrs, CKA_VALUE, "value"); - g_hash_table_insert (the_objects, GUINT_TO_POINTER (PUBLIC_KEY_PREFIX), attrs); - - initialized = TRUE; - return CKR_OK; -} - -CK_RV -gkm_test_C_Finalize (CK_VOID_PTR pReserved) -{ - g_return_val_if_fail (pReserved == NULL, CKR_ARGUMENTS_BAD); - g_return_val_if_fail (initialized == TRUE, CKR_CRYPTOKI_NOT_INITIALIZED); - - initialized = FALSE; - logged_in = FALSE; - g_hash_table_destroy (the_objects); - the_objects = NULL; - - g_hash_table_destroy (the_sessions); - the_sessions = NULL; - - g_free (the_pin); - return CKR_OK; -} - -static const CK_INFO TEST_INFO = { - { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR }, - "TEST MANUFACTURER ", - 0, - "TEST LIBRARY ", - { 45, 145 } -}; - -CK_RV -gkm_test_C_GetInfo (CK_INFO_PTR pInfo) -{ - g_assert (pInfo != NULL && "Invalid pointer to GetInfo"); - memcpy (pInfo, &TEST_INFO, sizeof (*pInfo)); - return CKR_OK; -} - -CK_RV -gkm_test_C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list) -{ - if (!list) - return CKR_ARGUMENTS_BAD; - *list = &functionList; - return CKR_OK; -} - -/* - * Two slots - * ONE: token present - * TWO: token not present - */ - -CK_RV -gkm_test_C_GetSlotList (CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK_ULONG_PTR pulCount) -{ - CK_ULONG count; - - g_assert (pulCount != NULL && "Invalid pulCount"); - - count = tokenPresent ? 1 : 2; - - /* Application only wants to know the number of slots. */ - if (pSlotList == NULL) { - *pulCount = count; - return CKR_OK; - } - - if (*pulCount < count) { - g_assert (*pulCount && "Passed in a bad count"); - return CKR_BUFFER_TOO_SMALL; - } - - *pulCount = count; - pSlotList[0] = GKM_TEST_SLOT_ONE; - if (!tokenPresent) - pSlotList[1] = GKM_TEST_SLOT_TWO; - - return CKR_OK; -} - -static const CK_SLOT_INFO TEST_INFO_ONE = { - "TEST SLOT ", - "TEST MANUFACTURER ", - CKF_TOKEN_PRESENT | CKF_REMOVABLE_DEVICE, - { 55, 155 }, - { 65, 165 }, -}; - -static const CK_SLOT_INFO TEST_INFO_TWO = { - "TEST SLOT ", - "TEST MANUFACTURER ", - CKF_REMOVABLE_DEVICE, - { 55, 155 }, - { 65, 165 }, -}; - -CK_RV -gkm_test_C_GetSlotInfo (CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo) -{ - g_assert (pInfo != NULL && "Invalid pInfo"); - - if (slotID == GKM_TEST_SLOT_ONE) { - memcpy (pInfo, &TEST_INFO_ONE, sizeof (*pInfo)); - return CKR_OK; - } else if (slotID == GKM_TEST_SLOT_TWO) { - memcpy (pInfo, &TEST_INFO_TWO, sizeof (*pInfo)); - return CKR_OK; - } else { - g_assert_not_reached (); /* "Invalid slot id" */ - return CKR_SLOT_ID_INVALID; - } -} - -static const CK_TOKEN_INFO TEST_TOKEN_ONE = { - "TEST LABEL ", - "TEST MANUFACTURER ", - "TEST MODEL ", - "TEST SERIAL ", - CKF_LOGIN_REQUIRED | CKF_USER_PIN_INITIALIZED | CKF_CLOCK_ON_TOKEN | CKF_TOKEN_INITIALIZED, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - { 75, 175 }, - { 85, 185 }, - { '1', '9', '9', '9', '0', '5', '2', '5', '0', '9', '1', '9', '5', '9', '0', '0' } -}; - -CK_RV -gkm_test_C_GetTokenInfo (CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo) -{ - g_return_val_if_fail (pInfo != NULL, CKR_ARGUMENTS_BAD); - - if (slotID == GKM_TEST_SLOT_ONE) { - memcpy (pInfo, &TEST_TOKEN_ONE, sizeof (*pInfo)); - return CKR_OK; - } else if (slotID == GKM_TEST_SLOT_TWO) { - return CKR_TOKEN_NOT_PRESENT; - } else { - g_return_val_if_reached (CKR_SLOT_ID_INVALID); - } -} - -CK_RV -gkm_fail_C_GetTokenInfo (CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo) -{ - return CKR_GENERAL_ERROR; -} - -/* - * TWO mechanisms: - * CKM_T_CAPITALIZE - * CKM_T_PREFIX - */ - -CK_RV -gkm_test_C_GetMechanismList (CK_SLOT_ID slotID, CK_MECHANISM_TYPE_PTR pMechanismList, - CK_ULONG_PTR pulCount) -{ - g_assert (slotID == GKM_TEST_SLOT_ONE && "Invalid slotID"); - g_assert (pulCount != NULL && "Invalid pulCount"); - - /* Application only wants to know the number of slots. */ - if (pMechanismList == NULL) { - *pulCount = 2; - return CKR_OK; - } - - if (*pulCount != 2) { - g_assert (*pulCount && "Passed in a bad count"); - return CKR_BUFFER_TOO_SMALL; - } - - pMechanismList[0] = CKM_T_CAPITALIZE; - pMechanismList[1] = CKM_T_PREFIX; - return CKR_OK; -} - -static const CK_MECHANISM_INFO TEST_MECH_CAPITALIZE = { - 512, 4096, 0 -}; - -static const CK_MECHANISM_INFO TEST_MECH_PREFIX = { - 2048, 2048, 0 -}; - -CK_RV -gkm_test_C_GetMechanismInfo (CK_SLOT_ID slotID, CK_MECHANISM_TYPE type, - CK_MECHANISM_INFO_PTR pInfo) -{ - g_assert (slotID == GKM_TEST_SLOT_ONE && "Invalid slotID"); - g_assert (pInfo != NULL && "Invalid pInfo"); - - if (type == CKM_T_CAPITALIZE) { - memcpy (pInfo, &TEST_MECH_CAPITALIZE, sizeof (*pInfo)); - return CKR_OK; - } else if (type == CKM_T_PREFIX) { - memcpy (pInfo, &TEST_MECH_PREFIX, sizeof (*pInfo)); - return CKR_OK; - } else { - g_assert_not_reached (); /* "Invalid type" */ - return CKR_MECHANISM_INVALID; - } -} - -CK_RV -gkm_test_C_InitToken (CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen, - CK_UTF8CHAR_PTR pLabel) -{ - g_assert (slotID == GKM_TEST_SLOT_ONE && "Invalid slotID"); - g_assert (pPin != NULL && "Invalid pPin"); - g_assert (strlen ("TEST PIN") && "Invalid ulPinLen"); - g_assert (strncmp ((gchar*)pPin, "TEST PIN", ulPinLen) == 0 && "Invalid pPin string"); - g_assert (pLabel != NULL && "Invalid pLabel"); - g_assert (strcmp ((gchar*)pPin, "TEST LABEL") == 0 && "Invalid pLabel string"); - - g_free (the_pin); - the_pin = g_strndup ((gchar*)pPin, ulPinLen); - n_the_pin = ulPinLen; - return CKR_OK; -} - -CK_RV -gkm_test_C_WaitForSlotEvent (CK_FLAGS flags, CK_SLOT_ID_PTR pSlot, CK_VOID_PTR pReserved) -{ - g_assert_not_reached (); /* Not yet used by library */ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_OpenSession (CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication, - CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession) -{ - Session *sess; - - g_return_val_if_fail (slotID == GKM_TEST_SLOT_ONE, CKR_SLOT_ID_INVALID); - g_return_val_if_fail (phSession != NULL, CKR_ARGUMENTS_BAD); - g_return_val_if_fail ((flags & CKF_SERIAL_SESSION) == CKF_SERIAL_SESSION, CKR_SESSION_PARALLEL_NOT_SUPPORTED); - - sess = g_new0 (Session, 1); - sess->handle = ++unique_identifier; - sess->info.flags = flags; - sess->info.slotID = slotID; - sess->info.state = 0; - sess->info.ulDeviceError = 1414; - sess->objects = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)gkm_template_free); - *phSession = sess->handle; - - g_hash_table_replace (the_sessions, GUINT_TO_POINTER (sess->handle), sess); - return CKR_OK; -} - -CK_RV -gkm_test_C_CloseSession (CK_SESSION_HANDLE hSession) -{ - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - g_hash_table_remove (the_sessions, GUINT_TO_POINTER (hSession)); - return CKR_OK; -} - -CK_RV -gkm_test_C_CloseAllSessions (CK_SLOT_ID slotID) -{ - g_assert (slotID == GKM_TEST_SLOT_ONE && "Invalid slotID"); - - g_hash_table_remove_all (the_sessions); - return CKR_OK; -} - -CK_RV -gkm_test_C_GetFunctionStatus (CK_SESSION_HANDLE hSession) -{ - return CKR_FUNCTION_NOT_PARALLEL; -} - -CK_RV -gkm_test_C_CancelFunction (CK_SESSION_HANDLE hSession) -{ - return CKR_FUNCTION_NOT_PARALLEL; -} - -CK_RV -gkm_test_C_GetSessionInfo (CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo) -{ - Session *session; - - g_return_val_if_fail (pInfo != NULL, CKR_ARGUMENTS_BAD); - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - memcpy (pInfo, &session->info, sizeof (*pInfo)); - return CKR_OK; -} - -CK_RV -gkm_fail_C_GetSessionInfo (CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo) -{ - return CKR_GENERAL_ERROR; -} - -CK_RV -gkm_test_C_InitPIN (CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pPin, - CK_ULONG ulPinLen) -{ - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - g_free (the_pin); - the_pin = g_strndup ((gchar*)pPin, ulPinLen); - n_the_pin = ulPinLen; - return CKR_OK; -} - -CK_RV -gkm_test_C_SetPIN (CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pOldPin, - CK_ULONG ulOldLen, CK_UTF8CHAR_PTR pNewPin, CK_ULONG ulNewLen) -{ - Session *session; - gchar *old; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - old = g_strndup ((gchar*)pOldPin, ulOldLen); - if (!g_str_equal (old, the_pin)) - return CKR_PIN_INCORRECT; - - g_free (the_pin); - the_pin = g_strndup ((gchar*)pNewPin, ulNewLen); - n_the_pin = ulNewLen; - return CKR_OK; -} - -CK_RV -gkm_test_C_GetOperationState (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOperationState, - CK_ULONG_PTR pulOperationStateLen) -{ - g_assert_not_reached (); /* Not yet used by library */ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_SetOperationState (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOperationState, - CK_ULONG ulOperationStateLen, CK_OBJECT_HANDLE hEncryptionKey, - CK_OBJECT_HANDLE hAuthenticationKey) -{ - g_assert_not_reached (); /* Not yet used by library */ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_Login (CK_SESSION_HANDLE hSession, CK_USER_TYPE userType, - CK_UTF8CHAR_PTR pPin, CK_ULONG pPinLen) -{ - Session *session; - - g_return_val_if_fail (userType == CKU_SO || - userType == CKU_USER || - userType == CKU_CONTEXT_SPECIFIC, - CKR_USER_TYPE_INVALID); - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID); - g_return_val_if_fail (logged_in == FALSE, CKR_USER_ALREADY_LOGGED_IN); - - if (!pPin) - return CKR_PIN_INCORRECT; - - if (pPinLen != strlen (the_pin)) - return CKR_PIN_INCORRECT; - if (strncmp ((gchar*)pPin, the_pin, pPinLen) != 0) - return CKR_PIN_INCORRECT; - - if (userType == CKU_CONTEXT_SPECIFIC) { - g_return_val_if_fail (session->want_context_login == TRUE, CKR_OPERATION_NOT_INITIALIZED); - session->want_context_login = CK_FALSE; - } else { - logged_in = TRUE; - user_type = userType; - } - - return CKR_OK; -} - -CK_RV -gkm_test_C_Logout (CK_SESSION_HANDLE hSession) -{ - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - g_assert (logged_in && "Not logged in"); - logged_in = FALSE; - user_type = 0; - return CKR_OK; -} - -CK_RV -gkm_test_C_CreateObject (CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, - CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phObject) -{ - GArray *attrs; - Session *session; - gboolean token, priv; - CK_OBJECT_CLASS klass; - CK_OBJECT_HANDLE object; - CK_ATTRIBUTE_PTR attr; - - g_assert (phObject != NULL); - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - attrs = gkm_template_new (pTemplate, ulCount); - - if (gkm_template_find_boolean (attrs, CKA_PRIVATE, &priv) && priv) { - if (!logged_in) { - gkm_template_free (attrs); - return CKR_USER_NOT_LOGGED_IN; - } - } - - /* In order to create a credential we must check CK_VALUE */ - if (gkm_template_find_ulong (attrs, CKA_CLASS, &klass) && klass == CKO_G_CREDENTIAL) { - if (gkm_template_find_ulong (attrs, CKA_G_OBJECT, &object)) { - attr = gkm_template_find (attrs, CKA_VALUE); - if (!attr || attr->ulValueLen != n_the_pin || - memcmp (attr->pValue, the_pin, attr->ulValueLen) != 0) { - gkm_template_free (attrs); - return CKR_PIN_INCORRECT; - } - } - } - - *phObject = ++unique_identifier; - if (gkm_template_find_boolean (attrs, CKA_TOKEN, &token) && token) - g_hash_table_insert (the_objects, GUINT_TO_POINTER (*phObject), attrs); - else - g_hash_table_insert (session->objects, GUINT_TO_POINTER (*phObject), attrs); - - return CKR_OK; -} - -CK_RV -gkm_test_C_CopyObject (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, - CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, - CK_OBJECT_HANDLE_PTR phNewObject) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DestroyObject (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject) -{ - GArray *attrs; - Session *session; - gboolean priv; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - attrs = lookup_object (session, hObject); - if (!attrs) { - g_assert_not_reached (); /* "no such object found" */ - return CKR_OBJECT_HANDLE_INVALID; - } - - if (gkm_template_find_boolean (attrs, CKA_PRIVATE, &priv) && priv) { - if (!logged_in) - return CKR_USER_NOT_LOGGED_IN; - } - - return CKR_OK; -} - -CK_RV -gkm_test_C_GetObjectSize (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, - CK_ULONG_PTR pulSize) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_GetAttributeValue (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, - CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount) -{ - CK_ATTRIBUTE_PTR result; - CK_RV ret = CKR_OK; - GArray *attrs; - CK_ATTRIBUTE_PTR attr; - Session *session; - CK_ULONG i; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - attrs = lookup_object (session, hObject); - if (!attrs) { - g_assert_not_reached (); /* "invalid object handle passed" */ - return CKR_OBJECT_HANDLE_INVALID; - } - - for (i = 0; i < ulCount; ++i) { - result = pTemplate + i; - attr = gkm_template_find (attrs, result->type); - if (!attr) { - result->ulValueLen = (CK_ULONG)-1; - ret = CKR_ATTRIBUTE_TYPE_INVALID; - continue; - } - - if (!result->pValue) { - result->ulValueLen = attr->ulValueLen; - continue; - } - - if (result->ulValueLen >= attr->ulValueLen) { - memcpy (result->pValue, attr->pValue, attr->ulValueLen); - continue; - } - - result->ulValueLen = (CK_ULONG)-1; - ret = CKR_BUFFER_TOO_SMALL; - } - - return ret; -} - -CK_RV -gkm_test_C_SetAttributeValue (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, - CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount) -{ - Session *session; - GArray *attrs; - CK_ULONG i; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - attrs = lookup_object (session, hObject); - if (!attrs) { - g_assert_not_reached (); /* "invalid object handle passed" */ - return CKR_OBJECT_HANDLE_INVALID; - } - - for (i = 0; i < ulCount; ++i) - gkm_template_set (attrs, pTemplate + i); - - return CKR_OK; -} - -CK_RV -gkm_test_C_FindObjectsInit (CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, - CK_ULONG ulCount) -{ - GHashTableIter iter; - GArray *attrs; - CK_ATTRIBUTE_PTR attr; - CK_ATTRIBUTE_PTR match; - Session *session; - gpointer key, value; - gboolean matched = TRUE; - CK_ULONG i; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID); - - /* Starting an operation, cancels any previous one */ - if (session->operation != 0) - session->operation = 0; - - session->operation = OP_FIND; - - /* Token objects */ - g_hash_table_iter_init (&iter, the_objects); - while (g_hash_table_iter_next (&iter, &key, &value)) { - attrs = (GArray*)value; - matched = TRUE; - for (i = 0; i < ulCount; ++i) { - match = pTemplate + i; - attr = gkm_template_find (attrs, match->type); - if (!attr) { - matched = FALSE; - break; - } - - if (attr->ulValueLen != match->ulValueLen || - memcmp (attr->pValue, match->pValue, attr->ulValueLen) != 0) { - matched = FALSE; - break; - } - } - - if (matched) - session->matches = g_list_prepend (session->matches, key); - } - - /* session objects */ - g_hash_table_iter_init (&iter, session->objects); - while (g_hash_table_iter_next (&iter, &key, &value)) { - attrs = (GArray*)value; - matched = TRUE; - for (i = 0; i < ulCount; ++i) { - match = pTemplate + i; - attr = gkm_template_find (attrs, match->type); - if (!attr) { - matched = FALSE; - break; - } - - if (attr->ulValueLen != match->ulValueLen || - memcmp (attr->pValue, match->pValue, attr->ulValueLen) != 0) { - matched = FALSE; - break; - } - } - - if (matched) - session->matches = g_list_prepend (session->matches, key); - } - - return CKR_OK; -} - -CK_RV -gkm_test_C_FindObjects (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject, - CK_ULONG ulMaxObjectCount, CK_ULONG_PTR pulObjectCount) -{ - Session *session; - - g_assert (phObject != NULL); - g_assert (pulObjectCount != NULL); - g_assert (ulMaxObjectCount != 0); - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - if (session->operation != OP_FIND) { - g_assert_not_reached (); /* "invalid call to FindObjects" */ - return CKR_OPERATION_NOT_INITIALIZED; - } - - *pulObjectCount = 0; - while (ulMaxObjectCount > 0 && session->matches) { - *phObject = GPOINTER_TO_UINT (session->matches->data); - ++phObject; - --ulMaxObjectCount; - ++(*pulObjectCount); - session->matches = g_list_remove (session->matches, session->matches->data); - } - - return CKR_OK; -} - -CK_RV -gkm_test_C_FindObjectsFinal (CK_SESSION_HANDLE hSession) -{ - - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - if (session->operation != OP_FIND) { - g_assert_not_reached (); /* "invalid call to FindObjectsFinal" */ - return CKR_OPERATION_NOT_INITIALIZED; - } - - session->operation = 0; - g_list_free (session->matches); - session->matches = NULL; - - return CKR_OK; -} - -CK_RV -gkm_test_C_EncryptInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hKey) -{ - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - /* Starting an operation, cancels any previous one */ - if (session->operation != 0) - session->operation = 0; - - g_assert (pMechanism); - g_assert (pMechanism->mechanism == CKM_T_CAPITALIZE); - g_assert (hKey == PUBLIC_KEY_CAPITALIZE); - - session->operation = OP_CRYPTO; - session->crypto_method = CKA_ENCRYPT; - session->crypto_mechanism = CKM_T_CAPITALIZE; - session->crypto_key = hKey; - return CKR_OK; -} - -CK_RV -gkm_test_C_Encrypt (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, - CK_BYTE_PTR pEncryptedData, CK_ULONG_PTR pulEncryptedDataLen) -{ - Session *session; - CK_ULONG i; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - if (session->operation != OP_CRYPTO) { - g_assert_not_reached (); /* "invalid call to Encrypt" */ - return CKR_OPERATION_NOT_INITIALIZED; - } - - g_assert (pData); - g_assert (pulEncryptedDataLen); - g_assert (session->crypto_method == CKA_ENCRYPT); - g_assert (session->crypto_mechanism == CKM_T_CAPITALIZE); - g_assert (session->crypto_key == PUBLIC_KEY_CAPITALIZE); - - if (!pEncryptedData) { - *pulEncryptedDataLen = ulDataLen; - return CKR_OK; - } - - if (*pulEncryptedDataLen < ulDataLen) { - *pulEncryptedDataLen = ulDataLen; - return CKR_BUFFER_TOO_SMALL; - } - - for (i = 0; i < ulDataLen; ++i) - pEncryptedData[i] = g_ascii_toupper (pData[i]); - *pulEncryptedDataLen = ulDataLen; - - session->operation = 0; - session->crypto_method = 0; - session->crypto_mechanism = 0; - session->crypto_key = 0; - - return CKR_OK; -} - -CK_RV -gkm_test_C_EncryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, - CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart, - CK_ULONG_PTR pulEncryptedPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_EncryptFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastEncryptedPart, - CK_ULONG_PTR pulLastEncryptedPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DecryptInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hKey) -{ - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - /* Starting an operation, cancels any previous one */ - if (session->operation != 0) - session->operation = 0; - - g_assert (pMechanism); - g_assert (pMechanism->mechanism == CKM_T_CAPITALIZE); - g_assert (hKey == PRIVATE_KEY_CAPITALIZE); - - session->operation = OP_CRYPTO; - session->crypto_method = CKA_DECRYPT; - session->crypto_mechanism = CKM_T_CAPITALIZE; - session->crypto_key = hKey; - return CKR_OK; -} - -CK_RV -gkm_test_C_Decrypt (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData, - CK_ULONG ulEncryptedDataLen, CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen) -{ - Session *session; - CK_ULONG i; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - if (session->operation != OP_CRYPTO) { - g_assert_not_reached (); /* "invalid call to Encrypt" */ - return CKR_OPERATION_NOT_INITIALIZED; - } - - g_assert (pEncryptedData); - g_assert (pulDataLen); - g_assert (session->crypto_method == CKA_DECRYPT); - g_assert (session->crypto_mechanism == CKM_T_CAPITALIZE); - g_assert (session->crypto_key == PRIVATE_KEY_CAPITALIZE); - - if (!pData) { - *pulDataLen = ulEncryptedDataLen; - return CKR_OK; - } - - if (*pulDataLen < ulEncryptedDataLen) { - *pulDataLen = ulEncryptedDataLen; - return CKR_BUFFER_TOO_SMALL; - } - - for (i = 0; i < ulEncryptedDataLen; ++i) - pData[i] = g_ascii_tolower (pEncryptedData[i]); - *pulDataLen = ulEncryptedDataLen; - - session->operation = 0; - session->crypto_method = 0; - session->crypto_mechanism = 0; - session->crypto_key = 0; - - return CKR_OK; -} - -CK_RV -gkm_test_C_DecryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart, - CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart, CK_ULONG_PTR pulPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DecryptFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastPart, - CK_ULONG_PTR pulLastPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DigestInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_Digest (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, - CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DigestUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DigestKey (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DigestFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest, - CK_ULONG_PTR pulDigestLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_SignInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hKey) -{ - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - /* Starting an operation, cancels any previous one */ - if (session->operation != 0) - session->operation = 0; - - g_assert (pMechanism); - g_assert (pMechanism->mechanism == CKM_T_PREFIX); - g_assert (hKey == PRIVATE_KEY_PREFIX); - - session->operation = OP_CRYPTO; - session->crypto_method = CKA_SIGN; - session->crypto_mechanism = CKM_T_PREFIX; - session->crypto_key = hKey; - - if (pMechanism->pParameter) { - g_assert (pMechanism->ulParameterLen < sizeof (session->sign_prefix)); - memcpy (session->sign_prefix, pMechanism->pParameter, pMechanism->ulParameterLen); - session->n_sign_prefix = pMechanism->ulParameterLen; - } else { - g_assert (strlen (SIGNED_PREFIX) + 1 < sizeof (session->sign_prefix)); - strcpy ((gchar*)session->sign_prefix, SIGNED_PREFIX); - session->n_sign_prefix = strlen (SIGNED_PREFIX); - } - - /* The private key has CKA_ALWAYS_AUTHENTICATE above */ - session->want_context_login = CK_TRUE; - - return CKR_OK; -} - -CK_RV -gkm_test_C_Sign (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, - CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen) -{ - Session *session; - CK_ULONG length; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - if (session->operation != OP_CRYPTO) { - g_assert_not_reached (); /* "invalid call to Encrypt" */ - return CKR_OPERATION_NOT_INITIALIZED; - } - - if (session->want_context_login) - return CKR_USER_NOT_LOGGED_IN; - - g_assert (pData); - g_assert (pulSignatureLen); - g_assert (session->crypto_method == CKA_SIGN); - g_assert (session->crypto_mechanism == CKM_T_PREFIX); - g_assert (session->crypto_key == PRIVATE_KEY_PREFIX); - - length = session->n_sign_prefix + ulDataLen; - - if (!pSignature) { - *pulSignatureLen = length; - return CKR_OK; - } - - if (*pulSignatureLen < length) { - *pulSignatureLen = length; - return CKR_BUFFER_TOO_SMALL; - } - - memcpy (pSignature, session->sign_prefix, session->n_sign_prefix); - memcpy (pSignature + session->n_sign_prefix, pData, ulDataLen); - *pulSignatureLen = length; - - session->operation = 0; - session->crypto_method = 0; - session->crypto_mechanism = 0; - session->crypto_key = 0; - - return CKR_OK; -} - -CK_RV -gkm_test_C_SignUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_SignFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, - CK_ULONG_PTR pulSignatureLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_SignRecoverInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hKey) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_SignRecover (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, - CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_VerifyInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hKey) -{ - Session *session; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - /* Starting an operation, cancels any previous one */ - if (session->operation != 0) - session->operation = 0; - - g_assert (pMechanism); - g_assert (pMechanism->mechanism == CKM_T_PREFIX); - g_assert (hKey == PUBLIC_KEY_PREFIX); - - session->operation = OP_CRYPTO; - session->crypto_method = CKA_VERIFY; - session->crypto_mechanism = CKM_T_PREFIX; - session->crypto_key = hKey; - - if (pMechanism->pParameter) { - g_assert (pMechanism->ulParameterLen < sizeof (session->sign_prefix)); - memcpy (session->sign_prefix, pMechanism->pParameter, pMechanism->ulParameterLen); - session->n_sign_prefix = pMechanism->ulParameterLen; - } else { - g_assert (strlen (SIGNED_PREFIX) + 1 < sizeof (session->sign_prefix)); - strcpy ((gchar*)session->sign_prefix, SIGNED_PREFIX); - session->n_sign_prefix = strlen (SIGNED_PREFIX); - } - - return CKR_OK; -} - -CK_RV -gkm_test_C_Verify (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, - CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen) -{ - Session *session; - CK_ULONG length; - - session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession)); - g_assert (session != NULL && "No such session found"); - if (!session) - return CKR_SESSION_HANDLE_INVALID; - - if (session->operation != OP_CRYPTO) { - g_assert_not_reached (); /* "invalid call to Encrypt" */ - return CKR_OPERATION_NOT_INITIALIZED; - } - - g_assert (pData); - g_assert (pSignature); - g_assert (session->crypto_method == CKA_VERIFY); - g_assert (session->crypto_mechanism == CKM_T_PREFIX); - g_assert (session->crypto_key == PUBLIC_KEY_PREFIX); - - length = session->n_sign_prefix + ulDataLen; - - if (ulSignatureLen < length) { - g_assert (FALSE); - return CKR_SIGNATURE_LEN_RANGE; - } - - if (memcmp (pSignature, session->sign_prefix, session->n_sign_prefix) == 0 && - memcmp (pSignature + session->n_sign_prefix, pData, ulDataLen) == 0) - return CKR_OK; - - return CKR_SIGNATURE_INVALID; -} - -CK_RV -gkm_test_C_VerifyUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_VerifyFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, - CK_ULONG pulSignatureLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_VerifyRecoverInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hKey) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_VerifyRecover (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, - CK_ULONG pulSignatureLen, CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DigestEncryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, - CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart, - CK_ULONG_PTR ulEncryptedPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DecryptDigestUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart, - CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart, - CK_ULONG_PTR pulPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_SignEncryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, - CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart, - CK_ULONG_PTR ulEncryptedPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DecryptVerifyUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart, - CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart, - CK_ULONG_PTR pulPartLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_GenerateKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, - CK_OBJECT_HANDLE_PTR phKey) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_GenerateKeyPair (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount, - CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount, - CK_OBJECT_HANDLE_PTR phPublicKey, CK_OBJECT_HANDLE_PTR phPrivateKey) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_WrapKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey, - CK_BYTE_PTR pWrappedKey, CK_ULONG_PTR pulWrappedKeyLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_UnwrapKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE pUnwrappingKey, CK_BYTE_PTR pWrappedKey, - CK_ULONG pulWrappedKeyLen, CK_ATTRIBUTE_PTR pTemplate, - CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_DeriveKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, - CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate, - CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_SeedRandom (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSeed, CK_ULONG ulSeedLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -CK_RV -gkm_test_C_GenerateRandom (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pRandomData, - CK_ULONG ulRandomLen) -{ - return CKR_FUNCTION_NOT_SUPPORTED; -} - -static CK_FUNCTION_LIST functionList = { - { 2, 11 }, /* version */ - gkm_test_C_Initialize, - gkm_test_C_Finalize, - gkm_test_C_GetInfo, - gkm_test_C_GetFunctionList, - gkm_test_C_GetSlotList, - gkm_test_C_GetSlotInfo, - gkm_test_C_GetTokenInfo, - gkm_test_C_GetMechanismList, - gkm_test_C_GetMechanismInfo, - gkm_test_C_InitToken, - gkm_test_C_InitPIN, - gkm_test_C_SetPIN, - gkm_test_C_OpenSession, - gkm_test_C_CloseSession, - gkm_test_C_CloseAllSessions, - gkm_test_C_GetSessionInfo, - gkm_test_C_GetOperationState, - gkm_test_C_SetOperationState, - gkm_test_C_Login, - gkm_test_C_Logout, - gkm_test_C_CreateObject, - gkm_test_C_CopyObject, - gkm_test_C_DestroyObject, - gkm_test_C_GetObjectSize, - gkm_test_C_GetAttributeValue, - gkm_test_C_SetAttributeValue, - gkm_test_C_FindObjectsInit, - gkm_test_C_FindObjects, - gkm_test_C_FindObjectsFinal, - gkm_test_C_EncryptInit, - gkm_test_C_Encrypt, - gkm_test_C_EncryptUpdate, - gkm_test_C_EncryptFinal, - gkm_test_C_DecryptInit, - gkm_test_C_Decrypt, - gkm_test_C_DecryptUpdate, - gkm_test_C_DecryptFinal, - gkm_test_C_DigestInit, - gkm_test_C_Digest, - gkm_test_C_DigestUpdate, - gkm_test_C_DigestKey, - gkm_test_C_DigestFinal, - gkm_test_C_SignInit, - gkm_test_C_Sign, - gkm_test_C_SignUpdate, - gkm_test_C_SignFinal, - gkm_test_C_SignRecoverInit, - gkm_test_C_SignRecover, - gkm_test_C_VerifyInit, - gkm_test_C_Verify, - gkm_test_C_VerifyUpdate, - gkm_test_C_VerifyFinal, - gkm_test_C_VerifyRecoverInit, - gkm_test_C_VerifyRecover, - gkm_test_C_DigestEncryptUpdate, - gkm_test_C_DecryptDigestUpdate, - gkm_test_C_SignEncryptUpdate, - gkm_test_C_DecryptVerifyUpdate, - gkm_test_C_GenerateKey, - gkm_test_C_GenerateKeyPair, - gkm_test_C_WrapKey, - gkm_test_C_UnwrapKey, - gkm_test_C_DeriveKey, - gkm_test_C_SeedRandom, - gkm_test_C_GenerateRandom, - gkm_test_C_GetFunctionStatus, - gkm_test_C_CancelFunction, - gkm_test_C_WaitForSlotEvent -}; |