summaryrefslogtreecommitdiff
path: root/pkcs11/gkm/gkm-test.c
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2010-06-08 20:06:42 +0000
committerStef Walter <stef@memberwebs.com>2010-06-08 20:06:42 +0000
commitf83e2ff053f527a968f77fd0d7b4a6ca76bb07dd (patch)
tree510cd0540206329714efab73ca04d73d5564128c /pkcs11/gkm/gkm-test.c
parent5bf7553731217d4134d19feca0ca827b0645b445 (diff)
downloadgnome-keyring-f83e2ff053f527a968f77fd0d7b4a6ca76bb07dd.tar.gz
Implement testing for context specific login prompt.
Diffstat (limited to 'pkcs11/gkm/gkm-test.c')
-rw-r--r--pkcs11/gkm/gkm-test.c98
1 files changed, 52 insertions, 46 deletions
diff --git a/pkcs11/gkm/gkm-test.c b/pkcs11/gkm/gkm-test.c
index 37c477b7..11a2761e 100644
--- a/pkcs11/gkm/gkm-test.c
+++ b/pkcs11/gkm/gkm-test.c
@@ -123,10 +123,8 @@ lookup_object (Session *session, CK_OBJECT_HANDLE hObject)
CK_RV
gkm_test_C_Initialize (CK_VOID_PTR pInitArgs)
{
-#if 0
GArray *attrs;
CK_ULONG value;
-#endif
CK_C_INITIALIZE_ARGS_PTR args;
g_return_val_if_fail (initialized == FALSE, CKR_CRYPTOKI_ALREADY_INITIALIZED);
@@ -149,61 +147,59 @@ gkm_test_C_Initialize (CK_VOID_PTR pInitArgs)
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);
-#if 0
/* Our token object */
- attrs = gp11_attributes_newv (CKA_CLASS, GP11_ULONG, CKO_DATA,
- CKA_LABEL, GP11_STRING, "TEST LABEL",
- GP11_INVALID);
+ 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 = gp11_attributes_newv (CKA_CLASS, GP11_ULONG, CKO_PRIVATE_KEY,
- CKA_LABEL, GP11_STRING, "Private Capitalize Key",
- CKA_ALLOWED_MECHANISMS, sizeof (value), &value,
- CKA_DECRYPT, GP11_BOOLEAN, TRUE,
- CKA_PRIVATE, GP11_BOOLEAN, TRUE,
- CKA_WRAP, GP11_BOOLEAN, TRUE,
- CKA_UNWRAP, GP11_BOOLEAN, TRUE,
- CKA_DERIVE, GP11_BOOLEAN, TRUE,
- CKA_VALUE, GP11_STRING, "value",
- GP11_INVALID);
+ 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 = gp11_attributes_newv (CKA_CLASS, GP11_ULONG, CKO_PUBLIC_KEY,
- CKA_LABEL, GP11_STRING, "Public Capitalize Key",
- CKA_ALLOWED_MECHANISMS, sizeof (value), &value,
- CKA_ENCRYPT, GP11_BOOLEAN, TRUE,
- CKA_PRIVATE, GP11_BOOLEAN, FALSE,
- CKA_VALUE, GP11_STRING, "value",
- GP11_INVALID);
+ 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 = gp11_attributes_newv (CKA_CLASS, GP11_ULONG, CKO_PRIVATE_KEY,
- CKA_LABEL, GP11_STRING, "Private prefix key",
- CKA_ALLOWED_MECHANISMS, sizeof (value), &value,
- CKA_SIGN, GP11_BOOLEAN, TRUE,
- CKA_PRIVATE, GP11_BOOLEAN, TRUE,
- CKA_ALWAYS_AUTHENTICATE, GP11_BOOLEAN, TRUE,
- CKA_VALUE, GP11_STRING, "value",
- GP11_INVALID);
+ 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 = gp11_attributes_newv (CKA_CLASS, GP11_ULONG, CKO_PUBLIC_KEY,
- CKA_LABEL, GP11_STRING, "Public prefix key",
- CKA_ALLOWED_MECHANISMS, sizeof (value), &value,
- CKA_VERIFY, GP11_BOOLEAN, TRUE,
- CKA_PRIVATE, GP11_BOOLEAN, FALSE,
- CKA_VALUE, GP11_STRING, "value",
- GP11_INVALID);
+ 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);
-#endif
initialized = TRUE;
return CKR_OK;
@@ -343,7 +339,7 @@ static const CK_TOKEN_INFO TEST_TOKEN_ONE = {
CK_RV
gkm_test_C_GetTokenInfo (CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
{
- g_assert (pInfo != NULL && "Invalid pInfo");
+ g_return_val_if_fail (pInfo != NULL, CKR_ARGUMENTS_BAD);
if (slotID == GKM_TEST_SLOT_ONE) {
memcpy (pInfo, &TEST_TOKEN_ONE, sizeof (*pInfo));
@@ -351,11 +347,16 @@ gkm_test_C_GetTokenInfo (CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
} else if (slotID == GKM_TEST_SLOT_TWO) {
return CKR_TOKEN_NOT_PRESENT;
} else {
- g_assert_not_reached (); /* "Invalid slot id" */
- return CKR_SLOT_ID_INVALID;
+ 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
@@ -498,7 +499,7 @@ gkm_test_C_GetSessionInfo (CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo
{
Session *session;
- g_assert (pInfo != NULL && "Invalid pInfo");
+ 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");
@@ -510,6 +511,12 @@ gkm_test_C_GetSessionInfo (CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo
}
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)
{
@@ -587,6 +594,7 @@ gkm_test_C_Login (CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
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;
@@ -773,9 +781,7 @@ gkm_test_C_FindObjectsInit (CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTempla
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;
+ g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
/* Starting an operation, cancels any previous one */
if (session->operation != 0)