|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* gnome-keyring
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* Copyright (C) 2010 Stefan Walter
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* This program is free software; you can redistribute it and/or modify
|
|
Packit Service |
f02b19 |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit Service |
f02b19 |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit Service |
f02b19 |
* the License, or (at your option) any later version.
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* This program is distributed in the hope that it will be useful, but
|
|
Packit Service |
f02b19 |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
f02b19 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
f02b19 |
* Lesser General Public License for more details.
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
f02b19 |
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "config.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "gck.h"
|
|
Packit Service |
f02b19 |
#include "gck-mock.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include <p11-kit/pkcs11.h>
|
|
Packit Service |
f02b19 |
#include "pkcs11i.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include <glib.h>
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include <string.h>
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* This is *NOT* how you'd want to implement a PKCS#11 module. This
|
|
Packit Service |
f02b19 |
* fake module simply provides enough for gck library to test against.
|
|
Packit Service |
f02b19 |
* It doesn't pass any tests, or behave as expected from a PKCS#11 module.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean initialized = FALSE;
|
|
Packit Service |
f02b19 |
static gchar *the_pin = NULL;
|
|
Packit Service |
f02b19 |
static gulong n_the_pin = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean logged_in = FALSE;
|
|
Packit Service |
f02b19 |
static CK_USER_TYPE user_type = 0;
|
|
Packit Service |
f02b19 |
static CK_FUNCTION_LIST functionList;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef enum _Operation {
|
|
Packit Service |
f02b19 |
OP_FIND = 1,
|
|
Packit Service |
f02b19 |
OP_CRYPTO
|
|
Packit Service |
f02b19 |
} Operation;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef struct _Session {
|
|
Packit Service |
f02b19 |
CK_SESSION_HANDLE handle;
|
|
Packit Service |
f02b19 |
CK_SESSION_INFO info;
|
|
Packit Service |
f02b19 |
GHashTable *objects;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
Operation operation;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* For find operations */
|
|
Packit Service |
f02b19 |
GList *matches;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* For crypto operations */
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE crypto_key;
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_TYPE crypto_method;
|
|
Packit Service |
f02b19 |
CK_MECHANISM_TYPE crypto_mechanism;
|
|
Packit Service |
f02b19 |
CK_BBOOL want_context_login;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* For 'signing' with CKM_MOCK_PREFIX */
|
|
Packit Service |
f02b19 |
CK_BYTE sign_prefix[128];
|
|
Packit Service |
f02b19 |
CK_ULONG n_sign_prefix;
|
|
Packit Service |
f02b19 |
} Session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static guint unique_identifier = 100;
|
|
Packit Service |
f02b19 |
static GHashTable *the_sessions = NULL;
|
|
Packit Service |
f02b19 |
static GHashTable *the_objects = NULL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
enum {
|
|
Packit Service |
f02b19 |
PRIVATE_KEY_CAPITALIZE = 3,
|
|
Packit Service |
f02b19 |
PUBLIC_KEY_CAPITALIZE = 4,
|
|
Packit Service |
f02b19 |
PRIVATE_KEY_PREFIX = 5,
|
|
Packit Service |
f02b19 |
PUBLIC_KEY_PREFIX = 6
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#define SIGNED_PREFIX "signed-prefix:"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
free_session (gpointer data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *sess = (Session*)data;
|
|
Packit Service |
f02b19 |
if (sess)
|
|
Packit Service |
f02b19 |
g_hash_table_destroy (sess->objects);
|
|
Packit Service |
f02b19 |
g_free (sess);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static GckAttributes *
|
|
Packit Service |
f02b19 |
lookup_object (Session *session,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hObject,
|
|
Packit Service |
f02b19 |
GHashTable **table)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = g_hash_table_lookup (the_objects, GUINT_TO_POINTER (hObject));
|
|
Packit Service |
f02b19 |
if (attrs) {
|
|
Packit Service |
f02b19 |
if (table)
|
|
Packit Service |
f02b19 |
*table = the_objects;
|
|
Packit Service |
f02b19 |
return attrs;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = g_hash_table_lookup (session->objects, GUINT_TO_POINTER (hObject));
|
|
Packit Service |
f02b19 |
if (attrs) {
|
|
Packit Service |
f02b19 |
if (table)
|
|
Packit Service |
f02b19 |
*table = session->objects;
|
|
Packit Service |
f02b19 |
return attrs;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return NULL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE
|
|
Packit Service |
f02b19 |
gck_mock_module_add_object (GckAttributes *attrs)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder;
|
|
Packit Service |
f02b19 |
gboolean token;
|
|
Packit Service |
f02b19 |
guint handle;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (the_objects, 0);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
handle = ++unique_identifier;
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (attrs, CKA_TOKEN, &token)) {
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (token == TRUE, 0);
|
|
Packit Service |
f02b19 |
gck_attributes_ref_sink (attrs);
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
gck_builder_add_except (&builder, attrs, CKA_TOKEN, GCK_INVALID);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_TOKEN, TRUE);
|
|
Packit Service |
f02b19 |
gck_attributes_unref (attrs);
|
|
Packit Service |
f02b19 |
attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (handle), attrs);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return handle;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
void
|
|
Packit Service |
f02b19 |
gck_mock_module_enumerate_objects (CK_SESSION_HANDLE handle, GckMockEnumerator func,
|
|
Packit Service |
f02b19 |
gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GHashTableIter iter;
|
|
Packit Service |
f02b19 |
gpointer key;
|
|
Packit Service |
f02b19 |
gpointer value;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (the_objects);
|
|
Packit Service |
f02b19 |
g_assert (func);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Token objects */
|
|
Packit Service |
f02b19 |
g_hash_table_iter_init (&iter, the_objects);
|
|
Packit Service |
f02b19 |
while (g_hash_table_iter_next (&iter, &key, &value)) {
|
|
Packit Service |
f02b19 |
if (!(func) (GPOINTER_TO_UINT (key), value, user_data))
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* session objects */
|
|
Packit Service |
f02b19 |
if (handle) {
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (handle));
|
|
Packit Service |
f02b19 |
if (session) {
|
|
Packit Service |
f02b19 |
g_hash_table_iter_init (&iter, session->objects);
|
|
Packit Service |
f02b19 |
while (g_hash_table_iter_next (&iter, &key, &value)) {
|
|
Packit Service |
f02b19 |
if (!(func) (GPOINTER_TO_UINT (key), value, user_data))
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef struct _FindObject {
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR attrs;
|
|
Packit Service |
f02b19 |
CK_ULONG n_attrs;
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE object;
|
|
Packit Service |
f02b19 |
} FindObject;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
enumerate_and_find_object (CK_OBJECT_HANDLE object, GckAttributes *attrs, gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
FindObject *ctx = user_data;
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR match;
|
|
Packit Service |
f02b19 |
const GckAttribute *attr;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for (i = 0; i < ctx->n_attrs; ++i) {
|
|
Packit Service |
f02b19 |
match = ctx->attrs + i;
|
|
Packit Service |
f02b19 |
attr = gck_attributes_find (attrs, match->type);
|
|
Packit Service |
f02b19 |
if (!attr)
|
|
Packit Service |
f02b19 |
return TRUE; /* Continue */
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (attr->length != match->ulValueLen ||
|
|
Packit Service |
f02b19 |
memcmp (attr->value, match->pValue, attr->length) != 0)
|
|
Packit Service |
f02b19 |
return TRUE; /* Continue */
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
ctx->object = object;
|
|
Packit Service |
f02b19 |
return FALSE; /* Stop iteration */
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE
|
|
Packit Service |
f02b19 |
gck_mock_module_find_object (CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attrs, CK_ULONG n_attrs)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
FindObject ctx;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
ctx.attrs = attrs;
|
|
Packit Service |
f02b19 |
ctx.n_attrs = n_attrs;
|
|
Packit Service |
f02b19 |
ctx.object = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_mock_module_enumerate_objects (session, enumerate_and_find_object, &ctx;;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return ctx.object;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
enumerate_and_count_objects (CK_OBJECT_HANDLE object, GckAttributes *attrs, gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
guint *n_objects = user_data;
|
|
Packit Service |
f02b19 |
++(*n_objects);
|
|
Packit Service |
f02b19 |
return TRUE; /* Continue */
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
guint
|
|
Packit Service |
f02b19 |
gck_mock_module_count_objects (CK_SESSION_HANDLE session)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
guint n_objects = 0;
|
|
Packit Service |
f02b19 |
gck_mock_module_enumerate_objects (session, enumerate_and_count_objects, &n_objects);
|
|
Packit Service |
f02b19 |
return n_objects;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static GckAttributes *
|
|
Packit Service |
f02b19 |
replace_attributes (GckAttributes *atts,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR attrs,
|
|
Packit Service |
f02b19 |
CK_ULONG n_attrs)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR set;
|
|
Packit Service |
f02b19 |
gulong *types;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!n_attrs)
|
|
Packit Service |
f02b19 |
return gck_attributes_ref_sink (atts);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
types = g_new0 (gulong, n_attrs);
|
|
Packit Service |
f02b19 |
for (i = 0; i < n_attrs; ++i) {
|
|
Packit Service |
f02b19 |
set = attrs + i;
|
|
Packit Service |
f02b19 |
types[i] = set->type;
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, set->type, set->pValue, set->ulValueLen);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
gck_builder_add_exceptv (&builder, atts, types, n_attrs);
|
|
Packit Service |
f02b19 |
g_free (types);
|
|
Packit Service |
f02b19 |
return gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
void
|
|
Packit Service |
f02b19 |
gck_mock_module_set_object (CK_OBJECT_HANDLE object, CK_ATTRIBUTE_PTR attrs,
|
|
Packit Service |
f02b19 |
CK_ULONG n_attrs)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckAttributes *atts;
|
|
Packit Service |
f02b19 |
GckAttributes *replaced;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_if_fail (object != 0);
|
|
Packit Service |
f02b19 |
g_return_if_fail (the_objects);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
atts = g_hash_table_lookup (the_objects, GUINT_TO_POINTER (object));
|
|
Packit Service |
f02b19 |
g_return_if_fail (atts);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!n_attrs)
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
replaced = replace_attributes (atts, attrs, n_attrs);
|
|
Packit Service |
f02b19 |
g_hash_table_replace (the_objects, GUINT_TO_POINTER (object), replaced);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
void
|
|
Packit Service |
f02b19 |
gck_mock_module_set_pin (const gchar *password)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_free (the_pin);
|
|
Packit Service |
f02b19 |
the_pin = g_strdup (password);
|
|
Packit Service |
f02b19 |
n_the_pin = strlen (password);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Initialize (CK_VOID_PTR pInitArgs)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder;
|
|
Packit Service |
f02b19 |
CK_ULONG value;
|
|
Packit Service |
f02b19 |
CK_C_INITIALIZE_ARGS_PTR args;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (initialized == FALSE, CKR_CRYPTOKI_ALREADY_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
args = (CK_C_INITIALIZE_ARGS_PTR)pInitArgs;
|
|
Packit Service |
f02b19 |
if (args) {
|
|
Packit Service |
f02b19 |
g_return_val_if_fail(
|
|
Packit Service |
f02b19 |
(args->CreateMutex == NULL && args->DestroyMutex == NULL &&
|
|
Packit Service |
f02b19 |
args->LockMutex == NULL && args->UnlockMutex == NULL) ||
|
|
Packit Service |
f02b19 |
(args->CreateMutex != NULL && args->DestroyMutex != NULL &&
|
|
Packit Service |
f02b19 |
args->LockMutex != NULL && args->UnlockMutex != NULL),
|
|
Packit Service |
f02b19 |
CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Flags should allow OS locking and os threads */
|
|
Packit Service |
f02b19 |
g_return_val_if_fail ((args->flags & CKF_OS_LOCKING_OK), CKR_CANT_LOCK);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail ((args->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS) == 0, CKR_NEED_TO_CREATE_THREADS);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
the_pin = g_strdup ("booo");
|
|
Packit Service |
f02b19 |
n_the_pin = strlen (the_pin);
|
|
Packit Service |
f02b19 |
the_sessions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, free_session);
|
|
Packit Service |
f02b19 |
the_objects = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)gck_attributes_unref);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Our token object */
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_DATA);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_LABEL, "TEST LABEL");
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (2),
|
|
Packit Service |
f02b19 |
gck_attributes_ref_sink (gck_builder_end (&builder)));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Private capitalize key */
|
|
Packit Service |
f02b19 |
value = CKM_MOCK_CAPITALIZE;
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PRIVATE_KEY);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_LABEL, "Private Capitalize Key");
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, CKA_ALLOWED_MECHANISMS, (const guchar *)&value, sizeof (value));
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_DECRYPT, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_PRIVATE, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_WRAP, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_UNWRAP, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_DERIVE, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_VALUE, "value");
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_GNOME_UNIQUE, "unique1");
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (PRIVATE_KEY_CAPITALIZE),
|
|
Packit Service |
f02b19 |
gck_attributes_ref_sink (gck_builder_end (&builder)));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Public capitalize key */
|
|
Packit Service |
f02b19 |
value = CKM_MOCK_CAPITALIZE;
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PUBLIC_KEY);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_LABEL, "Public Capitalize Key");
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, CKA_ALLOWED_MECHANISMS, (const guchar *)&value, sizeof (value));
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_ENCRYPT, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_PRIVATE, CK_FALSE);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_VALUE, "value");
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_GNOME_UNIQUE, "unique2");
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (PUBLIC_KEY_CAPITALIZE), gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Private prefix key */
|
|
Packit Service |
f02b19 |
value = CKM_MOCK_PREFIX;
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PRIVATE_KEY);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_LABEL, "Private prefix key");
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, CKA_ALLOWED_MECHANISMS, (const guchar *)&value, sizeof (value));
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_SIGN, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_PRIVATE, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_ALWAYS_AUTHENTICATE, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_VALUE, "value");
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_GNOME_UNIQUE, "unique3");
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (PRIVATE_KEY_PREFIX),
|
|
Packit Service |
f02b19 |
gck_attributes_ref_sink (gck_builder_end (&builder)));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Private prefix key */
|
|
Packit Service |
f02b19 |
value = CKM_MOCK_PREFIX;
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PUBLIC_KEY);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_LABEL, "Public prefix key");
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, CKA_ALLOWED_MECHANISMS, (const guchar *)&value, sizeof (value));
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_VERIFY, CK_TRUE);
|
|
Packit Service |
f02b19 |
gck_builder_add_boolean (&builder, CKA_PRIVATE, CK_FALSE);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_VALUE, "value");
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_GNOME_UNIQUE, "unique4");
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (PUBLIC_KEY_PREFIX),
|
|
Packit Service |
f02b19 |
gck_attributes_ref_sink (gck_builder_end (&builder)));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
logged_in = FALSE;
|
|
Packit Service |
f02b19 |
initialized = TRUE;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_validate_and_C_Initialize (CK_VOID_PTR pInitArgs)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
CK_C_INITIALIZE_ARGS_PTR args;
|
|
Packit Service |
f02b19 |
void *mutex;
|
|
Packit Service |
f02b19 |
CK_RV rv;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
args = (CK_C_INITIALIZE_ARGS_PTR)pInitArgs;
|
|
Packit Service |
f02b19 |
if (args) {
|
|
Packit Service |
f02b19 |
g_assert ((args->CreateMutex) (NULL) == CKR_ARGUMENTS_BAD && "CreateMutex succeeded wrong");
|
|
Packit Service |
f02b19 |
g_assert ((args->DestroyMutex) (NULL) == CKR_MUTEX_BAD && "DestroyMutex succeeded wrong");
|
|
Packit Service |
f02b19 |
g_assert ((args->LockMutex) (NULL) == CKR_MUTEX_BAD && "LockMutex succeeded wrong");
|
|
Packit Service |
f02b19 |
g_assert ((args->UnlockMutex) (NULL) == CKR_MUTEX_BAD && "UnlockMutex succeeded wrong");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Try to create an actual mutex */
|
|
Packit Service |
f02b19 |
rv = (args->CreateMutex) (&mutex);
|
|
Packit Service |
f02b19 |
g_assert (rv == CKR_OK && "CreateMutex g_assert_not_reacheded");
|
|
Packit Service |
f02b19 |
g_assert (mutex != NULL && "CreateMutex created null mutex");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Try and lock the mutex */
|
|
Packit Service |
f02b19 |
rv = (args->LockMutex) (mutex);
|
|
Packit Service |
f02b19 |
g_assert (rv == CKR_OK && "LockMutex g_assert_not_reacheded");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Try and unlock the mutex */
|
|
Packit Service |
f02b19 |
rv = (args->UnlockMutex) (mutex);
|
|
Packit Service |
f02b19 |
g_assert (rv == CKR_OK && "UnlockMutex g_assert_not_reacheded");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Try and destroy the mutex */
|
|
Packit Service |
f02b19 |
rv = (args->DestroyMutex) (mutex);
|
|
Packit Service |
f02b19 |
g_assert (rv == CKR_OK && "DestroyMutex g_assert_not_reacheded");
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return gck_mock_C_Initialize (pInitArgs);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Finalize (CK_VOID_PTR pReserved)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pReserved == NULL, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (initialized == TRUE, CKR_CRYPTOKI_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
initialized = FALSE;
|
|
Packit Service |
f02b19 |
logged_in = FALSE;
|
|
Packit Service |
f02b19 |
g_hash_table_destroy (the_objects);
|
|
Packit Service |
f02b19 |
the_objects = NULL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_hash_table_destroy (the_sessions);
|
|
Packit Service |
f02b19 |
the_sessions = NULL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_free (the_pin);
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const CK_INFO TEST_INFO = {
|
|
Packit Service |
f02b19 |
{ CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR },
|
|
Packit Service |
f02b19 |
"TEST MANUFACTURER ",
|
|
Packit Service |
f02b19 |
0,
|
|
Packit Service |
f02b19 |
"TEST LIBRARY ",
|
|
Packit Service |
f02b19 |
{ 45, 145 }
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetInfo (CK_INFO_PTR pInfo)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pInfo, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
memcpy (pInfo, &TEST_INFO, sizeof (*pInfo));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (list, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
*list = &functionList;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* Two slots
|
|
Packit Service |
f02b19 |
* ONE: token present
|
|
Packit Service |
f02b19 |
* TWO: token not present
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetSlotList (CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK_ULONG_PTR pulCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
CK_ULONG count;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pulCount, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
count = tokenPresent ? 1 : 2;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Application only wants to know the number of slots. */
|
|
Packit Service |
f02b19 |
if (pSlotList == NULL) {
|
|
Packit Service |
f02b19 |
*pulCount = count;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (*pulCount < count)
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_BUFFER_TOO_SMALL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
*pulCount = count;
|
|
Packit Service |
f02b19 |
pSlotList[0] = GCK_MOCK_SLOT_ONE_ID;
|
|
Packit Service |
f02b19 |
if (!tokenPresent)
|
|
Packit Service |
f02b19 |
pSlotList[1] = GCK_MOCK_SLOT_TWO_ID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Update gck-mock.h URIs when updating this */
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const CK_SLOT_INFO TEST_INFO_ONE = {
|
|
Packit Service |
f02b19 |
"TEST SLOT ",
|
|
Packit Service |
f02b19 |
"TEST MANUFACTURER ",
|
|
Packit Service |
f02b19 |
CKF_TOKEN_PRESENT | CKF_REMOVABLE_DEVICE,
|
|
Packit Service |
f02b19 |
{ 55, 155 },
|
|
Packit Service |
f02b19 |
{ 65, 165 },
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Update gck-mock.h URIs when updating this */
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const CK_SLOT_INFO TEST_INFO_TWO = {
|
|
Packit Service |
f02b19 |
"TEST SLOT ",
|
|
Packit Service |
f02b19 |
"TEST MANUFACTURER ",
|
|
Packit Service |
f02b19 |
CKF_REMOVABLE_DEVICE,
|
|
Packit Service |
f02b19 |
{ 55, 155 },
|
|
Packit Service |
f02b19 |
{ 65, 165 },
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetSlotInfo (CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pInfo, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (slotID == GCK_MOCK_SLOT_ONE_ID) {
|
|
Packit Service |
f02b19 |
memcpy (pInfo, &TEST_INFO_ONE, sizeof (*pInfo));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
} else if (slotID == GCK_MOCK_SLOT_TWO_ID) {
|
|
Packit Service |
f02b19 |
memcpy (pInfo, &TEST_INFO_TWO, sizeof (*pInfo));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_SLOT_ID_INVALID);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Update gck-mock.h URIs when updating this */
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const CK_TOKEN_INFO TEST_TOKEN_ONE = {
|
|
Packit Service |
f02b19 |
"TEST LABEL ",
|
|
Packit Service |
f02b19 |
"TEST MANUFACTURER ",
|
|
Packit Service |
f02b19 |
"TEST MODEL ",
|
|
Packit Service |
f02b19 |
"TEST SERIAL ",
|
|
Packit Service |
f02b19 |
CKF_LOGIN_REQUIRED | CKF_USER_PIN_INITIALIZED | CKF_CLOCK_ON_TOKEN | CKF_TOKEN_INITIALIZED,
|
|
Packit Service |
f02b19 |
1,
|
|
Packit Service |
f02b19 |
2,
|
|
Packit Service |
f02b19 |
3,
|
|
Packit Service |
f02b19 |
4,
|
|
Packit Service |
f02b19 |
5,
|
|
Packit Service |
f02b19 |
6,
|
|
Packit Service |
f02b19 |
7,
|
|
Packit Service |
f02b19 |
8,
|
|
Packit Service |
f02b19 |
9,
|
|
Packit Service |
f02b19 |
10,
|
|
Packit Service |
f02b19 |
{ 75, 175 },
|
|
Packit Service |
f02b19 |
{ 85, 185 },
|
|
Packit Service |
f02b19 |
{ '1', '9', '9', '9', '0', '5', '2', '5', '0', '9', '1', '9', '5', '9', '0', '0' }
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetTokenInfo (CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pInfo != NULL, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (slotID == GCK_MOCK_SLOT_ONE_ID) {
|
|
Packit Service |
f02b19 |
memcpy (pInfo, &TEST_TOKEN_ONE, sizeof (*pInfo));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
} else if (slotID == GCK_MOCK_SLOT_TWO_ID) {
|
|
Packit Service |
f02b19 |
return CKR_TOKEN_NOT_PRESENT;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_SLOT_ID_INVALID);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_fail_C_GetTokenInfo (CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_GENERAL_ERROR;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* TWO mechanisms:
|
|
Packit Service |
f02b19 |
* CKM_MOCK_CAPITALIZE
|
|
Packit Service |
f02b19 |
* CKM_MOCK_PREFIX
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetMechanismList (CK_SLOT_ID slotID, CK_MECHANISM_TYPE_PTR pMechanismList,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (slotID == GCK_MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pulCount, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Application only wants to know the number of slots. */
|
|
Packit Service |
f02b19 |
if (pMechanismList == NULL) {
|
|
Packit Service |
f02b19 |
*pulCount = 2;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (*pulCount != 2)
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_BUFFER_TOO_SMALL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
pMechanismList[0] = CKM_MOCK_CAPITALIZE;
|
|
Packit Service |
f02b19 |
pMechanismList[1] = CKM_MOCK_PREFIX;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const CK_MECHANISM_INFO TEST_MECH_CAPITALIZE = {
|
|
Packit Service |
f02b19 |
512, 4096, 0
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const CK_MECHANISM_INFO TEST_MECH_PREFIX = {
|
|
Packit Service |
f02b19 |
2048, 2048, 0
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetMechanismInfo (CK_SLOT_ID slotID, CK_MECHANISM_TYPE type,
|
|
Packit Service |
f02b19 |
CK_MECHANISM_INFO_PTR pInfo)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (slotID == GCK_MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pInfo, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (type == CKM_MOCK_CAPITALIZE) {
|
|
Packit Service |
f02b19 |
memcpy (pInfo, &TEST_MECH_CAPITALIZE, sizeof (*pInfo));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
} else if (type == CKM_MOCK_PREFIX) {
|
|
Packit Service |
f02b19 |
memcpy (pInfo, &TEST_MECH_PREFIX, sizeof (*pInfo));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_MECHANISM_INVALID);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_specific_args_C_InitToken (CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen,
|
|
Packit Service |
f02b19 |
CK_UTF8CHAR_PTR pLabel)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (slotID == GCK_MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pPin, CKR_PIN_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (strlen ("TEST PIN") == ulPinLen, CKR_PIN_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (strncmp ((gchar*)pPin, "TEST PIN", ulPinLen) == 0, CKR_PIN_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pLabel != NULL, CKR_PIN_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (strcmp ((gchar*)pPin, "TEST LABEL") == 0, CKR_PIN_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_free (the_pin);
|
|
Packit Service |
f02b19 |
the_pin = g_strndup ((gchar*)pPin, ulPinLen);
|
|
Packit Service |
f02b19 |
n_the_pin = ulPinLen;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_WaitForSlotEvent (CK_FLAGS flags, CK_SLOT_ID_PTR pSlot, CK_VOID_PTR pReserved)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_OpenSession (CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication,
|
|
Packit Service |
f02b19 |
CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *sess;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (slotID == GCK_MOCK_SLOT_ONE_ID || slotID == GCK_MOCK_SLOT_TWO_ID, CKR_SLOT_ID_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (phSession != NULL, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail ((flags & CKF_SERIAL_SESSION) == CKF_SERIAL_SESSION, CKR_SESSION_PARALLEL_NOT_SUPPORTED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
sess = g_new0 (Session, 1);
|
|
Packit Service |
f02b19 |
sess->handle = ++unique_identifier;
|
|
Packit Service |
f02b19 |
sess->info.flags = flags;
|
|
Packit Service |
f02b19 |
sess->info.slotID = slotID;
|
|
Packit Service |
f02b19 |
sess->info.state = 0;
|
|
Packit Service |
f02b19 |
sess->info.ulDeviceError = 1414;
|
|
Packit Service |
f02b19 |
sess->objects = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)gck_attributes_unref);
|
|
Packit Service |
f02b19 |
*phSession = sess->handle;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_hash_table_replace (the_sessions, GUINT_TO_POINTER (sess->handle), sess);
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_fail_C_OpenSession (CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication,
|
|
Packit Service |
f02b19 |
CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_GENERAL_ERROR;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_CloseSession (CK_SESSION_HANDLE hSession)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_hash_table_remove (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_CloseAllSessions (CK_SLOT_ID slotID)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (slotID == GCK_MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_hash_table_remove_all (the_sessions);
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetFunctionStatus (CK_SESSION_HANDLE hSession)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_PARALLEL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_CancelFunction (CK_SESSION_HANDLE hSession)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_PARALLEL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetSessionInfo (CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pInfo != NULL, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_assert (session != NULL && "No such session found");
|
|
Packit Service |
f02b19 |
if (!session)
|
|
Packit Service |
f02b19 |
return CKR_SESSION_HANDLE_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (logged_in) {
|
|
Packit Service |
f02b19 |
if (session->info.flags & CKF_RW_SESSION)
|
|
Packit Service |
f02b19 |
session->info.state = CKS_RW_USER_FUNCTIONS;
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
session->info.state = CKS_RO_USER_FUNCTIONS;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
if (session->info.flags & CKF_RW_SESSION)
|
|
Packit Service |
f02b19 |
session->info.state = CKS_RW_PUBLIC_SESSION;
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
session->info.state = CKS_RO_PUBLIC_SESSION;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
memcpy (pInfo, &session->info, sizeof (*pInfo));
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_fail_C_GetSessionInfo (CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_GENERAL_ERROR;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_InitPIN (CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pPin,
|
|
Packit Service |
f02b19 |
CK_ULONG ulPinLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_free (the_pin);
|
|
Packit Service |
f02b19 |
the_pin = g_strndup ((gchar*)pPin, ulPinLen);
|
|
Packit Service |
f02b19 |
n_the_pin = ulPinLen;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_SetPIN (CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pOldPin,
|
|
Packit Service |
f02b19 |
CK_ULONG ulOldLen, CK_UTF8CHAR_PTR pNewPin, CK_ULONG ulNewLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
gboolean match;
|
|
Packit Service |
f02b19 |
gchar *old;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
old = g_strndup ((gchar*)pOldPin, ulOldLen);
|
|
Packit Service |
f02b19 |
match = old && g_str_equal (old, the_pin);
|
|
Packit Service |
f02b19 |
g_free (old);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!match)
|
|
Packit Service |
f02b19 |
return CKR_PIN_INCORRECT;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_free (the_pin);
|
|
Packit Service |
f02b19 |
the_pin = g_strndup ((gchar*)pNewPin, ulNewLen);
|
|
Packit Service |
f02b19 |
n_the_pin = ulNewLen;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GetOperationState (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOperationState,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulOperationStateLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SetOperationState (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOperationState,
|
|
Packit Service |
f02b19 |
CK_ULONG ulOperationStateLen, CK_OBJECT_HANDLE hEncryptionKey,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hAuthenticationKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Login (CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
|
|
Packit Service |
f02b19 |
CK_UTF8CHAR_PTR pPin, CK_ULONG pPinLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (userType == CKU_SO ||
|
|
Packit Service |
f02b19 |
userType == CKU_USER ||
|
|
Packit Service |
f02b19 |
userType == CKU_CONTEXT_SPECIFIC,
|
|
Packit Service |
f02b19 |
CKR_USER_TYPE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (logged_in == FALSE, CKR_USER_ALREADY_LOGGED_IN);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!pPin)
|
|
Packit Service |
f02b19 |
return CKR_PIN_INCORRECT;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pPinLen != strlen (the_pin))
|
|
Packit Service |
f02b19 |
return CKR_PIN_INCORRECT;
|
|
Packit Service |
f02b19 |
if (strncmp ((gchar*)pPin, the_pin, pPinLen) != 0)
|
|
Packit Service |
f02b19 |
return CKR_PIN_INCORRECT;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (userType == CKU_CONTEXT_SPECIFIC) {
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->want_context_login == TRUE, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
session->want_context_login = CK_FALSE;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
logged_in = TRUE;
|
|
Packit Service |
f02b19 |
user_type = userType;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Logout (CK_SESSION_HANDLE hSession)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_assert (session != NULL && "No such session found");
|
|
Packit Service |
f02b19 |
if (!session)
|
|
Packit Service |
f02b19 |
return CKR_SESSION_HANDLE_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (logged_in && "Not logged in");
|
|
Packit Service |
f02b19 |
logged_in = FALSE;
|
|
Packit Service |
f02b19 |
user_type = 0;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_CreateObject (CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate,
|
|
Packit Service |
f02b19 |
CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phObject)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder;
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
gboolean token, priv;
|
|
Packit Service |
f02b19 |
CK_OBJECT_CLASS klass;
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE object;
|
|
Packit Service |
f02b19 |
const GckAttribute *attr;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (phObject, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulCount; ++i)
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, pTemplate[i].type, pTemplate[i].pValue, pTemplate[i].ulValueLen);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (attrs, CKA_PRIVATE, &priv) && priv) {
|
|
Packit Service |
f02b19 |
if (!logged_in) {
|
|
Packit Service |
f02b19 |
gck_attributes_unref (attrs);
|
|
Packit Service |
f02b19 |
return CKR_USER_NOT_LOGGED_IN;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* In order to create a credential we must check CK_VALUE */
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_ulong (attrs, CKA_CLASS, &klass) && klass == CKO_G_CREDENTIAL) {
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_ulong (attrs, CKA_G_OBJECT, &object)) {
|
|
Packit Service |
f02b19 |
attr = gck_attributes_find (attrs, CKA_VALUE);
|
|
Packit Service |
f02b19 |
if (!attr || attr->length != n_the_pin ||
|
|
Packit Service |
f02b19 |
memcmp (attr->value, the_pin, attr->length) != 0) {
|
|
Packit Service |
f02b19 |
gck_attributes_unref (attrs);
|
|
Packit Service |
f02b19 |
return CKR_PIN_INCORRECT;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
*phObject = ++unique_identifier;
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (attrs, CKA_TOKEN, &token) && token)
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (*phObject), attrs);
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
g_hash_table_insert (session->objects, GUINT_TO_POINTER (*phObject), attrs);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_fail_C_CreateObject (CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate,
|
|
Packit Service |
f02b19 |
CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phObject)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
/* Always fails */
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_FAILED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_CopyObject (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE_PTR phNewObject)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_DestroyObject (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
gboolean priv;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = lookup_object (session, hObject, NULL);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (attrs, CKR_OBJECT_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (attrs, CKA_PRIVATE, &priv) && priv) {
|
|
Packit Service |
f02b19 |
if (!logged_in)
|
|
Packit Service |
f02b19 |
return CKR_USER_NOT_LOGGED_IN;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_hash_table_remove (the_objects, GUINT_TO_POINTER (hObject));
|
|
Packit Service |
f02b19 |
g_hash_table_remove (session->objects, GUINT_TO_POINTER (hObject));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GetObjectSize (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulSize)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_GetAttributeValue (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR result;
|
|
Packit Service |
f02b19 |
CK_RV ret = CKR_OK;
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
const GckAttribute *attr;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
if (session == NULL)
|
|
Packit Service |
f02b19 |
return CKR_SESSION_HANDLE_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = lookup_object (session, hObject, NULL);
|
|
Packit Service |
f02b19 |
if (!attrs)
|
|
Packit Service |
f02b19 |
return CKR_OBJECT_HANDLE_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulCount; ++i) {
|
|
Packit Service |
f02b19 |
result = pTemplate + i;
|
|
Packit Service |
f02b19 |
attr = gck_attributes_find (attrs, result->type);
|
|
Packit Service |
f02b19 |
if (!attr) {
|
|
Packit Service |
f02b19 |
result->ulValueLen = (CK_ULONG)-1;
|
|
Packit Service |
f02b19 |
ret = CKR_ATTRIBUTE_TYPE_INVALID;
|
|
Packit Service |
f02b19 |
continue;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!result->pValue) {
|
|
Packit Service |
f02b19 |
result->ulValueLen = attr->length;
|
|
Packit Service |
f02b19 |
continue;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (result->ulValueLen >= attr->length) {
|
|
Packit Service |
f02b19 |
memcpy (result->pValue, attr->value, attr->length);
|
|
Packit Service |
f02b19 |
continue;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
result->ulValueLen = (CK_ULONG)-1;
|
|
Packit Service |
f02b19 |
ret = CKR_BUFFER_TOO_SMALL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return ret;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_fail_C_GetAttributeValue (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_FAILED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_SetAttributeValue (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
GckAttributes *replaced;
|
|
Packit Service |
f02b19 |
GHashTable *table;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = lookup_object (session, hObject, &table);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (attrs, CKR_OBJECT_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
replaced = replace_attributes (attrs, pTemplate, ulCount);
|
|
Packit Service |
f02b19 |
g_hash_table_replace (table, GUINT_TO_POINTER (hObject), replaced);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef struct _FindObjects {
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR template;
|
|
Packit Service |
f02b19 |
CK_ULONG count;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
} FindObjects;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
enumerate_and_find_objects (CK_OBJECT_HANDLE object, GckAttributes *attrs, gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
FindObjects *ctx = user_data;
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR match;
|
|
Packit Service |
f02b19 |
const GckAttribute *attr;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for (i = 0; i < ctx->count; ++i) {
|
|
Packit Service |
f02b19 |
match = ctx->template + i;
|
|
Packit Service |
f02b19 |
attr = gck_attributes_find (attrs, match->type);
|
|
Packit Service |
f02b19 |
if (!attr)
|
|
Packit Service |
f02b19 |
return TRUE; /* Continue */
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (attr->length != match->ulValueLen ||
|
|
Packit Service |
f02b19 |
memcmp (attr->value, match->pValue, attr->length) != 0)
|
|
Packit Service |
f02b19 |
return TRUE; /* Continue */
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
ctx->session->matches = g_list_prepend (ctx->session->matches, GUINT_TO_POINTER (object));
|
|
Packit Service |
f02b19 |
return TRUE; /* Continue */
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_FindObjectsInit (CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate,
|
|
Packit Service |
f02b19 |
CK_ULONG ulCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
FindObjects ctx;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Starting an operation, cancels any previous one */
|
|
Packit Service |
f02b19 |
if (session->operation != 0)
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = OP_FIND;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
ctx.template = pTemplate;
|
|
Packit Service |
f02b19 |
ctx.count = ulCount;
|
|
Packit Service |
f02b19 |
ctx.session = session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_mock_module_enumerate_objects (hSession, enumerate_and_find_objects, &ctx;;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_fail_C_FindObjects (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject,
|
|
Packit Service |
f02b19 |
CK_ULONG ulMaxObjectCount, CK_ULONG_PTR pulObjectCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
/* Always fails */
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_FAILED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_FindObjects (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject,
|
|
Packit Service |
f02b19 |
CK_ULONG ulMaxObjectCount, CK_ULONG_PTR pulObjectCount)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (phObject, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pulObjectCount, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (ulMaxObjectCount != 0, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->operation == OP_FIND, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
*pulObjectCount = 0;
|
|
Packit Service |
f02b19 |
while (ulMaxObjectCount > 0 && session->matches) {
|
|
Packit Service |
f02b19 |
*phObject = GPOINTER_TO_UINT (session->matches->data);
|
|
Packit Service |
f02b19 |
++phObject;
|
|
Packit Service |
f02b19 |
--ulMaxObjectCount;
|
|
Packit Service |
f02b19 |
++(*pulObjectCount);
|
|
Packit Service |
f02b19 |
session->matches = g_list_remove (session->matches, session->matches->data);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_FindObjectsFinal (CK_SESSION_HANDLE hSession)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->operation == OP_FIND, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
g_list_free (session->matches);
|
|
Packit Service |
f02b19 |
session->matches = NULL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_EncryptInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Starting an operation, cancels any previous one */
|
|
Packit Service |
f02b19 |
if (session->operation != 0)
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (pMechanism);
|
|
Packit Service |
f02b19 |
g_assert (pMechanism->mechanism == CKM_MOCK_CAPITALIZE);
|
|
Packit Service |
f02b19 |
g_assert (hKey == PUBLIC_KEY_CAPITALIZE);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = OP_CRYPTO;
|
|
Packit Service |
f02b19 |
session->crypto_method = CKA_ENCRYPT;
|
|
Packit Service |
f02b19 |
session->crypto_mechanism = CKM_MOCK_CAPITALIZE;
|
|
Packit Service |
f02b19 |
session->crypto_key = hKey;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Encrypt (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
|
|
Packit Service |
f02b19 |
CK_BYTE_PTR pEncryptedData, CK_ULONG_PTR pulEncryptedDataLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pData, CKR_DATA_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pulEncryptedDataLen, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->operation == OP_CRYPTO, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->crypto_method == CKA_ENCRYPT, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_mechanism == CKM_MOCK_CAPITALIZE);
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_key == PUBLIC_KEY_CAPITALIZE);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!pEncryptedData) {
|
|
Packit Service |
f02b19 |
*pulEncryptedDataLen = ulDataLen;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (*pulEncryptedDataLen < ulDataLen) {
|
|
Packit Service |
f02b19 |
*pulEncryptedDataLen = ulDataLen;
|
|
Packit Service |
f02b19 |
return CKR_BUFFER_TOO_SMALL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulDataLen; ++i)
|
|
Packit Service |
f02b19 |
pEncryptedData[i] = g_ascii_toupper (pData[i]);
|
|
Packit Service |
f02b19 |
*pulEncryptedDataLen = ulDataLen;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
session->crypto_method = 0;
|
|
Packit Service |
f02b19 |
session->crypto_mechanism = 0;
|
|
Packit Service |
f02b19 |
session->crypto_key = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_EncryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
|
|
Packit Service |
f02b19 |
CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulEncryptedPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_EncryptFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastEncryptedPart,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulLastEncryptedPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_DecryptInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Starting an operation, cancels any previous one */
|
|
Packit Service |
f02b19 |
if (session->operation != 0)
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (pMechanism);
|
|
Packit Service |
f02b19 |
g_assert (pMechanism->mechanism == CKM_MOCK_CAPITALIZE);
|
|
Packit Service |
f02b19 |
g_assert (hKey == PRIVATE_KEY_CAPITALIZE);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = OP_CRYPTO;
|
|
Packit Service |
f02b19 |
session->crypto_method = CKA_DECRYPT;
|
|
Packit Service |
f02b19 |
session->crypto_mechanism = CKM_MOCK_CAPITALIZE;
|
|
Packit Service |
f02b19 |
session->crypto_key = hKey;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Decrypt (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData,
|
|
Packit Service |
f02b19 |
CK_ULONG ulEncryptedDataLen, CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pEncryptedData, CKR_ENCRYPTED_DATA_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pulDataLen, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->operation == OP_CRYPTO, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->crypto_method == CKA_DECRYPT, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_method == CKA_DECRYPT);
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_mechanism == CKM_MOCK_CAPITALIZE);
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_key == PRIVATE_KEY_CAPITALIZE);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!pData) {
|
|
Packit Service |
f02b19 |
*pulDataLen = ulEncryptedDataLen;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (*pulDataLen < ulEncryptedDataLen) {
|
|
Packit Service |
f02b19 |
*pulDataLen = ulEncryptedDataLen;
|
|
Packit Service |
f02b19 |
return CKR_BUFFER_TOO_SMALL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulEncryptedDataLen; ++i)
|
|
Packit Service |
f02b19 |
pData[i] = g_ascii_tolower (pEncryptedData[i]);
|
|
Packit Service |
f02b19 |
*pulDataLen = ulEncryptedDataLen;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
session->crypto_method = 0;
|
|
Packit Service |
f02b19 |
session->crypto_mechanism = 0;
|
|
Packit Service |
f02b19 |
session->crypto_key = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart,
|
|
Packit Service |
f02b19 |
CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart, CK_ULONG_PTR pulPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastPart,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulLastPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_Digest (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
|
|
Packit Service |
f02b19 |
CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestKey (CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulDigestLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_SignInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Starting an operation, cancels any previous one */
|
|
Packit Service |
f02b19 |
if (session->operation != 0)
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (pMechanism);
|
|
Packit Service |
f02b19 |
g_assert (pMechanism->mechanism == CKM_MOCK_PREFIX);
|
|
Packit Service |
f02b19 |
g_assert (hKey == PRIVATE_KEY_PREFIX);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = OP_CRYPTO;
|
|
Packit Service |
f02b19 |
session->crypto_method = CKA_SIGN;
|
|
Packit Service |
f02b19 |
session->crypto_mechanism = CKM_MOCK_PREFIX;
|
|
Packit Service |
f02b19 |
session->crypto_key = hKey;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->pParameter) {
|
|
Packit Service |
f02b19 |
g_assert (pMechanism->ulParameterLen < sizeof (session->sign_prefix));
|
|
Packit Service |
f02b19 |
memcpy (session->sign_prefix, pMechanism->pParameter, pMechanism->ulParameterLen);
|
|
Packit Service |
f02b19 |
session->n_sign_prefix = pMechanism->ulParameterLen;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
g_assert (strlen (SIGNED_PREFIX) + 1 < sizeof (session->sign_prefix));
|
|
Packit Service |
f02b19 |
strcpy ((gchar*)session->sign_prefix, SIGNED_PREFIX);
|
|
Packit Service |
f02b19 |
session->n_sign_prefix = strlen (SIGNED_PREFIX);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The private key has CKA_ALWAYS_AUTHENTICATE above */
|
|
Packit Service |
f02b19 |
session->want_context_login = CK_TRUE;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Sign (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
|
|
Packit Service |
f02b19 |
CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
CK_ULONG length;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pData, CKR_DATA_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pulSignatureLen, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->operation == OP_CRYPTO, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->crypto_method == CKA_SIGN, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (session->want_context_login)
|
|
Packit Service |
f02b19 |
return CKR_USER_NOT_LOGGED_IN;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_method == CKA_SIGN);
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_mechanism == CKM_MOCK_PREFIX);
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_key == PRIVATE_KEY_PREFIX);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
length = session->n_sign_prefix + ulDataLen;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!pSignature) {
|
|
Packit Service |
f02b19 |
*pulSignatureLen = length;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (*pulSignatureLen < length) {
|
|
Packit Service |
f02b19 |
*pulSignatureLen = length;
|
|
Packit Service |
f02b19 |
return CKR_BUFFER_TOO_SMALL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
memcpy (pSignature, session->sign_prefix, session->n_sign_prefix);
|
|
Packit Service |
f02b19 |
memcpy (pSignature + session->n_sign_prefix, pData, ulDataLen);
|
|
Packit Service |
f02b19 |
*pulSignatureLen = length;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
session->crypto_method = 0;
|
|
Packit Service |
f02b19 |
session->crypto_mechanism = 0;
|
|
Packit Service |
f02b19 |
session->crypto_key = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulSignatureLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignRecoverInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignRecover (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
|
|
Packit Service |
f02b19 |
CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_VerifyInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Starting an operation, cancels any previous one */
|
|
Packit Service |
f02b19 |
if (session->operation != 0)
|
|
Packit Service |
f02b19 |
session->operation = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (pMechanism);
|
|
Packit Service |
f02b19 |
g_assert (pMechanism->mechanism == CKM_MOCK_PREFIX);
|
|
Packit Service |
f02b19 |
g_assert (hKey == PUBLIC_KEY_PREFIX);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session->operation = OP_CRYPTO;
|
|
Packit Service |
f02b19 |
session->crypto_method = CKA_VERIFY;
|
|
Packit Service |
f02b19 |
session->crypto_mechanism = CKM_MOCK_PREFIX;
|
|
Packit Service |
f02b19 |
session->crypto_key = hKey;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->pParameter) {
|
|
Packit Service |
f02b19 |
g_assert (pMechanism->ulParameterLen < sizeof (session->sign_prefix));
|
|
Packit Service |
f02b19 |
memcpy (session->sign_prefix, pMechanism->pParameter, pMechanism->ulParameterLen);
|
|
Packit Service |
f02b19 |
session->n_sign_prefix = pMechanism->ulParameterLen;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
g_assert (strlen (SIGNED_PREFIX) + 1 < sizeof (session->sign_prefix));
|
|
Packit Service |
f02b19 |
strcpy ((gchar*)session->sign_prefix, SIGNED_PREFIX);
|
|
Packit Service |
f02b19 |
session->n_sign_prefix = strlen (SIGNED_PREFIX);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_C_Verify (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
|
|
Packit Service |
f02b19 |
CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
CK_ULONG length;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pData, CKR_DATA_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pSignature, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->operation == OP_CRYPTO, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session->crypto_method == CKA_VERIFY, CKR_OPERATION_NOT_INITIALIZED);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_method == CKA_VERIFY);
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_mechanism == CKM_MOCK_PREFIX);
|
|
Packit Service |
f02b19 |
g_assert (session->crypto_key == PUBLIC_KEY_PREFIX);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
length = session->n_sign_prefix + ulDataLen;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (ulSignatureLen < length) {
|
|
Packit Service |
f02b19 |
g_assert (FALSE);
|
|
Packit Service |
f02b19 |
return CKR_SIGNATURE_LEN_RANGE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (memcmp (pSignature, session->sign_prefix, session->n_sign_prefix) == 0 &&
|
|
Packit Service |
f02b19 |
memcmp (pSignature + session->n_sign_prefix, pData, ulDataLen) == 0)
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_SIGNATURE_INVALID;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyFinal (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
|
|
Packit Service |
f02b19 |
CK_ULONG pulSignatureLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyRecoverInit (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyRecover (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
|
|
Packit Service |
f02b19 |
CK_ULONG pulSignatureLen, CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestEncryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
|
|
Packit Service |
f02b19 |
CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR ulEncryptedPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptDigestUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart,
|
|
Packit Service |
f02b19 |
CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignEncryptUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
|
|
Packit Service |
f02b19 |
CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR ulEncryptedPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptVerifyUpdate (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart,
|
|
Packit Service |
f02b19 |
CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart,
|
|
Packit Service |
f02b19 |
CK_ULONG_PTR pulPartLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GenerateKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE_PTR phKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GenerateKeyPair (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount,
|
|
Packit Service |
f02b19 |
CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE_PTR phPublicKey, CK_OBJECT_HANDLE_PTR phPrivateKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder;
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
gboolean token;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pMechanism, CKR_MECHANISM_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pPublicKeyTemplate, CKR_TEMPLATE_INCOMPLETE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (ulPublicKeyAttributeCount, CKR_TEMPLATE_INCOMPLETE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pPrivateKeyTemplate, CKR_TEMPLATE_INCOMPLETE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (ulPrivateKeyAttributeCount, CKR_TEMPLATE_INCOMPLETE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (phPublicKey, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (phPrivateKey, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->mechanism != CKM_MOCK_GENERATE)
|
|
Packit Service |
f02b19 |
return CKR_MECHANISM_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!pMechanism->pParameter || pMechanism->ulParameterLen != 9 ||
|
|
Packit Service |
f02b19 |
memcmp (pMechanism->pParameter, "generate", 9) != 0)
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_MECHANISM_PARAM_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_VALUE, "generated");
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulPublicKeyAttributeCount; ++i)
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, pPublicKeyTemplate[i].type,
|
|
Packit Service |
f02b19 |
pPublicKeyTemplate[i].pValue,
|
|
Packit Service |
f02b19 |
pPublicKeyTemplate[i].ulValueLen);
|
|
Packit Service |
f02b19 |
*phPublicKey = ++unique_identifier;
|
|
Packit Service |
f02b19 |
attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (attrs, CKA_TOKEN, &token) && token)
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (*phPublicKey), attrs);
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
g_hash_table_insert (session->objects, GUINT_TO_POINTER (*phPublicKey), attrs);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_VALUE, "generated");
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulPrivateKeyAttributeCount; ++i)
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, pPrivateKeyTemplate[i].type,
|
|
Packit Service |
f02b19 |
pPrivateKeyTemplate[i].pValue,
|
|
Packit Service |
f02b19 |
pPrivateKeyTemplate[i].ulValueLen);
|
|
Packit Service |
f02b19 |
*phPrivateKey = ++unique_identifier;
|
|
Packit Service |
f02b19 |
attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (attrs, CKA_TOKEN, &token) && token)
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (*phPrivateKey), attrs);
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
g_hash_table_insert (session->objects, GUINT_TO_POINTER (*phPrivateKey), attrs);
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_WrapKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey,
|
|
Packit Service |
f02b19 |
CK_BYTE_PTR pWrappedKey, CK_ULONG_PTR pulWrappedKeyLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
const GckAttribute *attr;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pMechanism, CKR_MECHANISM_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (hWrappingKey, CKR_OBJECT_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (hKey, CKR_OBJECT_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pulWrappedKeyLen, CKR_WRAPPED_KEY_LEN_RANGE);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = lookup_object (session, hWrappingKey, NULL);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (attrs, CKR_WRAPPING_KEY_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = lookup_object (session, hKey, NULL);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (attrs, CKR_WRAPPED_KEY_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->mechanism != CKM_MOCK_WRAP)
|
|
Packit Service |
f02b19 |
return CKR_MECHANISM_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->pParameter) {
|
|
Packit Service |
f02b19 |
if (pMechanism->ulParameterLen != 4 ||
|
|
Packit Service |
f02b19 |
memcmp (pMechanism->pParameter, "wrap", 4) != 0)
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_MECHANISM_PARAM_INVALID);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attr = gck_attributes_find (attrs, CKA_VALUE);
|
|
Packit Service |
f02b19 |
if (attr == NULL)
|
|
Packit Service |
f02b19 |
return CKR_WRAPPED_KEY_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!pWrappedKey) {
|
|
Packit Service |
f02b19 |
*pulWrappedKeyLen = attr->length;
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (*pulWrappedKeyLen < attr->length) {
|
|
Packit Service |
f02b19 |
*pulWrappedKeyLen = attr->length;
|
|
Packit Service |
f02b19 |
return CKR_BUFFER_TOO_SMALL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
memcpy (pWrappedKey, attr->value, attr->length);
|
|
Packit Service |
f02b19 |
*pulWrappedKeyLen = attr->length;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_UnwrapKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hUnwrappingKey, CK_BYTE_PTR pWrappedKey,
|
|
Packit Service |
f02b19 |
CK_ULONG ulWrappedKeyLen, CK_ATTRIBUTE_PTR pTemplate,
|
|
Packit Service |
f02b19 |
CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder;
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
gboolean token;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pMechanism, CKR_MECHANISM_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (hUnwrappingKey, CKR_WRAPPING_KEY_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pWrappedKey, CKR_WRAPPED_KEY_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (ulWrappedKeyLen, CKR_WRAPPED_KEY_LEN_RANGE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (phKey, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pTemplate, CKR_TEMPLATE_INCOMPLETE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (ulCount, CKR_TEMPLATE_INCONSISTENT);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session != NULL, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = lookup_object (session, hUnwrappingKey, NULL);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (attrs, CKR_WRAPPING_KEY_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->mechanism != CKM_MOCK_WRAP)
|
|
Packit Service |
f02b19 |
return CKR_MECHANISM_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->pParameter) {
|
|
Packit Service |
f02b19 |
if (pMechanism->ulParameterLen != 4 ||
|
|
Packit Service |
f02b19 |
memcmp (pMechanism->pParameter, "wrap", 4) != 0)
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_MECHANISM_PARAM_INVALID);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, CKA_VALUE, pWrappedKey, ulWrappedKeyLen);
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulCount; ++i)
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, pTemplate[i].type,
|
|
Packit Service |
f02b19 |
pTemplate[i].pValue,
|
|
Packit Service |
f02b19 |
pTemplate[i].ulValueLen);
|
|
Packit Service |
f02b19 |
*phKey = ++unique_identifier;
|
|
Packit Service |
f02b19 |
attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (attrs, CKA_TOKEN, &token) && token)
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (*phKey), attrs);
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
g_hash_table_insert (session->objects, GUINT_TO_POINTER (*phKey), attrs);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DeriveKey (CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
|
|
Packit Service |
f02b19 |
CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate,
|
|
Packit Service |
f02b19 |
CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder;
|
|
Packit Service |
f02b19 |
GckAttributes *attrs, *copy;
|
|
Packit Service |
f02b19 |
Session *session;
|
|
Packit Service |
f02b19 |
gboolean token;
|
|
Packit Service |
f02b19 |
CK_ULONG i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pMechanism, CKR_MECHANISM_INVALID);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (ulCount, CKR_TEMPLATE_INCOMPLETE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (pTemplate, CKR_TEMPLATE_INCOMPLETE);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (phKey, CKR_ARGUMENTS_BAD);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (hSession));
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
attrs = lookup_object (session, hBaseKey, NULL);
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (attrs, CKR_KEY_HANDLE_INVALID);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->mechanism != CKM_MOCK_DERIVE)
|
|
Packit Service |
f02b19 |
return CKR_MECHANISM_INVALID;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pMechanism->pParameter) {
|
|
Packit Service |
f02b19 |
if (pMechanism->ulParameterLen != 6 ||
|
|
Packit Service |
f02b19 |
memcmp (pMechanism->pParameter, "derive", 6) != 0)
|
|
Packit Service |
f02b19 |
g_return_val_if_reached (CKR_MECHANISM_PARAM_INVALID);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_builder_init (&builder);
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_VALUE, "derived");
|
|
Packit Service |
f02b19 |
for (i = 0; i < ulCount; ++i)
|
|
Packit Service |
f02b19 |
gck_builder_add_data (&builder, pTemplate[i].type,
|
|
Packit Service |
f02b19 |
pTemplate[i].pValue,
|
|
Packit Service |
f02b19 |
pTemplate[i].ulValueLen);
|
|
Packit Service |
f02b19 |
gck_builder_add_all (&builder, attrs);
|
|
Packit Service |
f02b19 |
*phKey = ++unique_identifier;
|
|
Packit Service |
f02b19 |
copy = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
if (gck_attributes_find_boolean (copy, CKA_TOKEN, &token) && token)
|
|
Packit Service |
f02b19 |
g_hash_table_insert (the_objects, GUINT_TO_POINTER (*phKey), copy);
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
g_hash_table_insert (session->objects, GUINT_TO_POINTER (*phKey), copy);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return CKR_OK;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SeedRandom (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSeed, CK_ULONG ulSeedLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
CK_RV
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GenerateRandom (CK_SESSION_HANDLE hSession, CK_BYTE_PTR pRandomData,
|
|
Packit Service |
f02b19 |
CK_ULONG ulRandomLen)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
return CKR_FUNCTION_NOT_SUPPORTED;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static CK_FUNCTION_LIST functionList = {
|
|
Packit Service |
f02b19 |
{ 2, 11 }, /* version */
|
|
Packit Service |
f02b19 |
gck_mock_C_Initialize,
|
|
Packit Service |
f02b19 |
gck_mock_C_Finalize,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetInfo,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetFunctionList,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetSlotList,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetSlotInfo,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetTokenInfo,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetMechanismList,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetMechanismInfo,
|
|
Packit Service |
f02b19 |
gck_mock_specific_args_C_InitToken,
|
|
Packit Service |
f02b19 |
gck_mock_C_InitPIN,
|
|
Packit Service |
f02b19 |
gck_mock_C_SetPIN,
|
|
Packit Service |
f02b19 |
gck_mock_C_OpenSession,
|
|
Packit Service |
f02b19 |
gck_mock_C_CloseSession,
|
|
Packit Service |
f02b19 |
gck_mock_C_CloseAllSessions,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetSessionInfo,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GetOperationState,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SetOperationState,
|
|
Packit Service |
f02b19 |
gck_mock_C_Login,
|
|
Packit Service |
f02b19 |
gck_mock_C_Logout,
|
|
Packit Service |
f02b19 |
gck_mock_C_CreateObject,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_CopyObject,
|
|
Packit Service |
f02b19 |
gck_mock_C_DestroyObject,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GetObjectSize,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetAttributeValue,
|
|
Packit Service |
f02b19 |
gck_mock_C_SetAttributeValue,
|
|
Packit Service |
f02b19 |
gck_mock_C_FindObjectsInit,
|
|
Packit Service |
f02b19 |
gck_mock_C_FindObjects,
|
|
Packit Service |
f02b19 |
gck_mock_C_FindObjectsFinal,
|
|
Packit Service |
f02b19 |
gck_mock_C_EncryptInit,
|
|
Packit Service |
f02b19 |
gck_mock_C_Encrypt,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_EncryptUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_EncryptFinal,
|
|
Packit Service |
f02b19 |
gck_mock_C_DecryptInit,
|
|
Packit Service |
f02b19 |
gck_mock_C_Decrypt,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptFinal,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestInit,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_Digest,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestKey,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestFinal,
|
|
Packit Service |
f02b19 |
gck_mock_C_SignInit,
|
|
Packit Service |
f02b19 |
gck_mock_C_Sign,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignFinal,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignRecoverInit,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignRecover,
|
|
Packit Service |
f02b19 |
gck_mock_C_VerifyInit,
|
|
Packit Service |
f02b19 |
gck_mock_C_Verify,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyFinal,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyRecoverInit,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_VerifyRecover,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DigestEncryptUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptDigestUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SignEncryptUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DecryptVerifyUpdate,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GenerateKey,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GenerateKeyPair,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_WrapKey,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_UnwrapKey,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_DeriveKey,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_SeedRandom,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_GenerateRandom,
|
|
Packit Service |
f02b19 |
gck_mock_C_GetFunctionStatus,
|
|
Packit Service |
f02b19 |
gck_mock_C_CancelFunction,
|
|
Packit Service |
f02b19 |
gck_mock_unsupported_C_WaitForSlotEvent
|
|
Packit Service |
f02b19 |
};
|