michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef CKMK_H michael@0: #define CKMK_H 1 michael@0: michael@0: #include michael@0: #include michael@0: #include michael@0: #include michael@0: #include michael@0: #include michael@0: #include michael@0: michael@0: #define NTO michael@0: michael@0: #include "nssckmdt.h" michael@0: #include "nssckfw.h" michael@0: /* michael@0: * I'm including this for access to the arena functions. michael@0: * Looks like we should publish that API. michael@0: */ michael@0: #ifndef BASE_H michael@0: #include "base.h" michael@0: #endif /* BASE_H */ michael@0: /* michael@0: * This is where the Netscape extensions live, at least for now. michael@0: */ michael@0: #ifndef CKT_H michael@0: #include "ckt.h" michael@0: #endif /* CKT_H */ michael@0: michael@0: /* michael@0: * statically defined raw objects. Allows us to data description objects michael@0: * to this PKCS #11 module. michael@0: */ michael@0: struct ckmkRawObjectStr { michael@0: CK_ULONG n; michael@0: const CK_ATTRIBUTE_TYPE *types; michael@0: const NSSItem *items; michael@0: }; michael@0: typedef struct ckmkRawObjectStr ckmkRawObject; michael@0: michael@0: /* michael@0: * Key/Cert Items michael@0: */ michael@0: struct ckmkItemObjectStr { michael@0: SecKeychainItemRef itemRef; michael@0: SecItemClass itemClass; michael@0: PRBool hasID; michael@0: NSSItem modify; michael@0: NSSItem private; michael@0: NSSItem encrypt; michael@0: NSSItem decrypt; michael@0: NSSItem derive; michael@0: NSSItem sign; michael@0: NSSItem signRecover; michael@0: NSSItem verify; michael@0: NSSItem verifyRecover; michael@0: NSSItem wrap; michael@0: NSSItem unwrap; michael@0: NSSItem label; michael@0: NSSItem subject; michael@0: NSSItem issuer; michael@0: NSSItem serial; michael@0: NSSItem derCert; michael@0: NSSItem id; michael@0: NSSItem modulus; michael@0: NSSItem exponent; michael@0: NSSItem privateExponent; michael@0: NSSItem prime1; michael@0: NSSItem prime2; michael@0: NSSItem exponent1; michael@0: NSSItem exponent2; michael@0: NSSItem coefficient; michael@0: }; michael@0: typedef struct ckmkItemObjectStr ckmkItemObject; michael@0: michael@0: typedef enum { michael@0: ckmkRaw, michael@0: ckmkItem, michael@0: } ckmkObjectType; michael@0: michael@0: /* michael@0: * all the various types of objects are abstracted away in cobject and michael@0: * cfind as ckmkInternalObjects. michael@0: */ michael@0: struct ckmkInternalObjectStr { michael@0: ckmkObjectType type; michael@0: union { michael@0: ckmkRawObject raw; michael@0: ckmkItemObject item; michael@0: } u; michael@0: CK_OBJECT_CLASS objClass; michael@0: NSSItem hashKey; michael@0: unsigned char hashKeyData[128]; michael@0: NSSCKMDObject mdObject; michael@0: }; michael@0: typedef struct ckmkInternalObjectStr ckmkInternalObject; michael@0: michael@0: /* our raw object data array */ michael@0: NSS_EXTERN_DATA ckmkInternalObject nss_ckmk_data[]; michael@0: NSS_EXTERN_DATA const PRUint32 nss_ckmk_nObjects; michael@0: michael@0: NSS_EXTERN_DATA const CK_VERSION nss_ckmk_CryptokiVersion; michael@0: NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_ManufacturerID; michael@0: NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_LibraryDescription; michael@0: NSS_EXTERN_DATA const CK_VERSION nss_ckmk_LibraryVersion; michael@0: NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_SlotDescription; michael@0: NSS_EXTERN_DATA const CK_VERSION nss_ckmk_HardwareVersion; michael@0: NSS_EXTERN_DATA const CK_VERSION nss_ckmk_FirmwareVersion; michael@0: NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenLabel; michael@0: NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenModel; michael@0: NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenSerialNumber; michael@0: michael@0: NSS_EXTERN_DATA const NSSCKMDInstance nss_ckmk_mdInstance; michael@0: NSS_EXTERN_DATA const NSSCKMDSlot nss_ckmk_mdSlot; michael@0: NSS_EXTERN_DATA const NSSCKMDToken nss_ckmk_mdToken; michael@0: NSS_EXTERN_DATA const NSSCKMDMechanism nss_ckmk_mdMechanismRSA; michael@0: michael@0: NSS_EXTERN NSSCKMDSession * michael@0: nss_ckmk_CreateSession michael@0: ( michael@0: NSSCKFWSession *fwSession, michael@0: CK_RV *pError michael@0: ); michael@0: michael@0: NSS_EXTERN NSSCKMDFindObjects * michael@0: nss_ckmk_FindObjectsInit michael@0: ( michael@0: NSSCKFWSession *fwSession, michael@0: CK_ATTRIBUTE_PTR pTemplate, michael@0: CK_ULONG ulAttributeCount, michael@0: CK_RV *pError michael@0: ); michael@0: michael@0: /* michael@0: * Object Utilities michael@0: */ michael@0: NSS_EXTERN NSSCKMDObject * michael@0: nss_ckmk_CreateMDObject michael@0: ( michael@0: NSSArena *arena, michael@0: ckmkInternalObject *io, michael@0: CK_RV *pError michael@0: ); michael@0: michael@0: NSS_EXTERN NSSCKMDObject * michael@0: nss_ckmk_CreateObject michael@0: ( michael@0: NSSCKFWSession *fwSession, michael@0: CK_ATTRIBUTE_PTR pTemplate, michael@0: CK_ULONG ulAttributeCount, michael@0: CK_RV *pError michael@0: ); michael@0: michael@0: NSS_EXTERN const NSSItem * michael@0: nss_ckmk_FetchAttribute michael@0: ( michael@0: ckmkInternalObject *io, michael@0: CK_ATTRIBUTE_TYPE type, michael@0: CK_RV *pError michael@0: ); michael@0: michael@0: NSS_EXTERN void michael@0: nss_ckmk_DestroyInternalObject michael@0: ( michael@0: ckmkInternalObject *io michael@0: ); michael@0: michael@0: unsigned char * michael@0: nss_ckmk_DERUnwrap michael@0: ( michael@0: unsigned char *src, michael@0: int size, michael@0: int *outSize, michael@0: unsigned char **next michael@0: ); michael@0: michael@0: CK_ULONG michael@0: nss_ckmk_GetULongAttribute michael@0: ( michael@0: CK_ATTRIBUTE_TYPE type, michael@0: CK_ATTRIBUTE *template, michael@0: CK_ULONG templateSize, michael@0: CK_RV *pError michael@0: ); michael@0: michael@0: #define NSS_CKMK_ARRAY_SIZE(x) ((sizeof (x))/(sizeof ((x)[0]))) michael@0: michael@0: #ifdef DEBUG michael@0: #define CKMK_MACERR(str,err) cssmPerror(str,err) michael@0: #else michael@0: #define CKMK_MACERR(str,err) michael@0: #endif michael@0: michael@0: #endif