/* * 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. */ #ifndef CKCAPI_H #define CKCAPI_H /* -------------------------------------------------------------------- * * Session = CkCapiSession * - A PKCS#11 Session * * Objects = CkCapiObject * - There's a global list of objects in ckcapi-object.c indexed by * object handle. * - The object itself has no attributes or cached data, but knows how * to load data when needed. * - Each object has a unique key which guarantees we don't load the * same object twice with two different object handles. * * Object Data = CkCapiObjectData * - Object Data is owned by the Session * - Loaded data and/or attributes for an object. */ #define WIN32_LEAN_AND_MEAN #define _WIN32_WINNT 0x400 #include #include #define CKCAPI_ENCODINGS (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING) #define CRYPTOKI_EXPORTS #include "pkcs11/pkcs11.h" #include "ckcapi-util.h" struct _CkCapiSlot; struct _CkCapiObject; struct _CkCapiObjectData; struct _CkCapiSession; typedef struct _CkCapiSlot CkCapiSlot; typedef struct _CkCapiObject CkCapiObject; typedef struct _CkCapiObjectData CkCapiObjectData; typedef struct _CkCapiSession CkCapiSession; /* ------------------------------------------------------------------ * cryptoki-capi.c * * Module helper and logging functions. */ #define DBG(args) \ ckcapi_debug args void ckcapi_debug (const char* msg, ...); /* * Protect global data with these. */ void ckcapi_lock_global (void); void ckcapi_unlock_global (void); /* * Convert a GetLastError() windows error to a * PKCS#11 return code. */ CK_RV ckcapi_winerr_to_ckr (DWORD werr); /* * This stores data in the output buffer with appropriate * PKCS#11 codes when the buffer is too short, or the caller * just wants to know the length, etc. */ CK_RV ckcapi_return_data (CK_ATTRIBUTE_PTR attr, CK_VOID_PTR src, DWORD slen); CK_RV ckcapi_return_data_raw (CK_VOID_PTR output, CK_ULONG_PTR n_output, CK_VOID_PTR input, CK_ULONG n_input); /* * This stores a string in the output buffer with appropriate * PKCS#11 codes when the buffer is too short, or the caller * just wants to know the length, etc. */ CK_RV ckcapi_return_string (CK_ATTRIBUTE_PTR attr, WCHAR* string); CK_RV ckcapi_return_dword_as_bytes (CK_ATTRIBUTE_PTR attr, DWORD value); CK_RV ckcapi_return_reversed_data (CK_ATTRIBUTE_PTR attr, CK_VOID_PTR data, CK_ULONG length); CK_RV ckcapi_return_filetime (CK_ATTRIBUTE_PTR attr, FILETIME* ftime); /* ------------------------------------------------------------------ */ typedef void (*CkCapiDestroyFunc)(void* data); #ifndef ASSERT #include "assert.h" #define ASSERT assert #endif /* Represents 'any' class in searches */ #define CKO_ANY CK_INVALID_HANDLE #endif /* CRYPTOKI_CAPI_H */