summaryrefslogtreecommitdiff
path: root/ckcapi-builtin.c
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2008-12-09 20:09:51 +0000
committerStef Walter <stef@memberwebs.com>2008-12-09 20:09:51 +0000
commitd108e2008ec7205ef3907296fd3e5a810e45919b (patch)
treed4206f5c4187221523a0a47c255f5df00cf6596e /ckcapi-builtin.c
parent2ef411d0fb1923bf75c3c631992cdef787d0c619 (diff)
First shot at renaming the project.
Diffstat (limited to 'ckcapi-builtin.c')
-rw-r--r--ckcapi-builtin.c245
1 files changed, 0 insertions, 245 deletions
diff --git a/ckcapi-builtin.c b/ckcapi-builtin.c
deleted file mode 100644
index 7d92f81..0000000
--- a/ckcapi-builtin.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (C) 2007 Stef Walter
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "ckcapi.h"
-#include "ckcapi-object.h"
-#include "ckcapi-session.h"
-#include "ckcapi-token.h"
-
-#include "pkcs11/pkcs11n.h"
-
-/* --------------------------------------------------------------------------
- * BUILT IN VALUES
- */
-
-static const CK_BBOOL ck_true = CK_TRUE;
-static const CK_BBOOL ck_false = CK_FALSE;
-
-static const CK_OBJECT_CLASS cko_netscape_builtin_root_list = CKO_NETSCAPE_BUILTIN_ROOT_LIST;
-
-static const char ck_root_label[] = "Windows Certificate Roots";
-
-/* --------------------------------------------------------------------------
- * BUILT IN OBJECTS
- */
-
-#define CK_END_LIST (CK_ULONG)-1
-
-static const CK_ATTRIBUTE builtin_root[] = {
- { CKA_TOKEN, (void*)&ck_true, sizeof(CK_BBOOL) },
- { CKA_CLASS, (void*)&cko_netscape_builtin_root_list, sizeof(CK_OBJECT_CLASS) },
- { CKA_PRIVATE, (void*)&ck_false, sizeof(CK_BBOOL) },
- { CKA_MODIFIABLE, (void*)&ck_false, sizeof(CK_BBOOL) },
- { CKA_LABEL, (void*)ck_root_label, sizeof(ck_root_label) },
- { CK_END_LIST, NULL, 0 }
-};
-
-typedef struct _BuiltinMatch
-{
- CK_ATTRIBUTE_PTR attr;
- CK_ULONG slot_flags;
-}
-BuiltinMatch;
-
-static const BuiltinMatch all_builtins[] = {
- { (CK_ATTRIBUTE_PTR)&builtin_root, CKCAPI_SLOT_TRUSTED | CKCAPI_SLOT_CA | CKCAPI_SLOT_CERTS },
- { NULL, 0 }
-};
-
-/* This is filled in later */
-static CK_ULONG num_builtins = 0;
-
-/* --------------------------------------------------------------------------
- * IMPLEMENTATION
- */
-
-/* Represents a loaded builtin object */
-typedef struct _BuiltinObject
-{
- CkCapiObject obj;
- CK_ATTRIBUTE_PTR attr;
-}
-BuiltinObject;
-
-typedef struct _BuiltinObjectData
-{
- CkCapiObjectData base;
- CK_ATTRIBUTE_PTR attr;
-}
-BuiltinObjectData;
-
-static CK_RV
-builtin_attribute(CkCapiObjectData* objdata, CK_ATTRIBUTE_PTR attr)
-{
- BuiltinObjectData* bdata = (BuiltinObjectData*)objdata;
- CK_ATTRIBUTE_PTR builtin = bdata->attr;
-
- ASSERT(attr);
- ASSERT(bdata);
-
- while(builtin->type != CK_END_LIST)
- {
- if(builtin->type == attr->type)
- {
- if(builtin->ulValueLen == 0)
- return CKR_ATTRIBUTE_TYPE_INVALID;
- return ckcapi_return_data(attr, builtin->pValue, builtin->ulValueLen);
- }
-
- builtin++;
- }
-
- return CKR_ATTRIBUTE_TYPE_INVALID;
-}
-
-static void
-builtin_data_release(void* data)
-{
- BuiltinObjectData* bdata = (BuiltinObjectData*)data;
- ASSERT(bdata);
- free(bdata);
-}
-
-static const CkCapiObjectDataVtable builtin_objdata_vtable = {
- builtin_attribute,
- builtin_attribute,
- builtin_attribute,
- builtin_data_release,
-};
-
-static CK_RV
-builtin_load_data(CkCapiSession* sess, CkCapiObject* obj, CkCapiObjectData** objdata)
-{
- BuiltinObject* bobj = (BuiltinObject*)obj;
- BuiltinObjectData* bdata;
-
- ASSERT(bobj);
- ASSERT(objdata);
- ASSERT(num_builtins > 0);
-
- bdata = (BuiltinObjectData*)calloc(1, sizeof(BuiltinObjectData));
- if(!bdata)
- return CKR_HOST_MEMORY;
-
- /* Simple, just use same data */
- bdata->attr = bobj->attr;
-
- bdata->base.object = obj->id;
- bdata->base.data_funcs = &builtin_objdata_vtable;
-
- *objdata = &(bdata->base);
- return CKR_OK;
-}
-
-static unsigned int
-builtin_hash_func(CkCapiObject* obj)
-{
- return ckcapi_hash_pointer(((BuiltinObject*)obj)->attr);
-}
-
-static int
-builtin_equal_func(CkCapiObject* one, CkCapiObject* two)
-{
- return ((BuiltinObject*)one)->attr == ((BuiltinObject*)two)->attr;
-}
-
-static void
-builtin_object_release(void* data)
-{
- BuiltinObject* bobj = (BuiltinObject*)data;
- ASSERT(bobj);
- free(bobj);
-}
-
-static const CkCapiObjectVtable builtin_object_vtable = {
- builtin_load_data,
- builtin_hash_func,
- builtin_equal_func,
- builtin_object_release,
-};
-
-static CK_RV
-register_builtin_object(CkCapiSession* sess, CK_ATTRIBUTE_PTR attr, CkCapiObject** obj)
-{
- BuiltinObject* bobj;
- CK_RV ret;
-
- bobj = calloc(1, sizeof(BuiltinObject));
- if(!bobj)
- return CKR_HOST_MEMORY;
-
- bobj->attr = attr;
-
- bobj->obj.id = 0;
- bobj->obj.obj_funcs = &builtin_object_vtable;
-
- ret = ckcapi_token_register_object(sess->slot, &(bobj->obj));
- if(ret != CKR_OK)
- {
- free(bobj);
- return ret;
- }
-
- ASSERT(bobj->obj.id != 0);
- *obj = &(bobj->obj);
- return CKR_OK;
-}
-
-CK_RV
-ckcapi_builtin_find(CkCapiSession* sess, CK_OBJECT_CLASS cls, CK_ATTRIBUTE_PTR match,
- CK_ULONG count, CkCapiArray* arr)
-{
- CkCapiObject* obj;
- BuiltinObjectData bdata;
- CK_RV ret = CKR_OK;
- CK_ULONG i, fl;
-
- /* First time around count total number */
- if(!num_builtins)
- {
- while(all_builtins[num_builtins].attr)
- ++num_builtins;
- ASSERT(num_builtins > 0);
- }
-
- /* Match each certificate */
- for(i = 0; i < num_builtins; ++i)
- {
- /* Only apply built in objects to appropriate slots */
- fl = ckcapi_token_get_flags(sess->slot) & all_builtins[i].slot_flags;
- if(fl != all_builtins[i].slot_flags)
- continue;
-
- bdata.attr = all_builtins[i].attr;
- bdata.base.object = 0;
- bdata.base.data_funcs = &builtin_objdata_vtable;
-
- if(ckcapi_object_data_match(&bdata.base, match, count))
- {
- ret = register_builtin_object(sess, all_builtins[i].attr, &obj);
- if(ret != CKR_OK)
- break;
-
- ckcapi_array_append(arr, obj->id);
- }
- }
-
- return ret;
-}
-