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: #include "ckcapi.h" michael@0: michael@0: /* michael@0: * ckcapi/ctoken.c michael@0: * michael@0: * This file implements the NSSCKMDToken object for the michael@0: * "nss to capi" cryptoki module. michael@0: */ michael@0: michael@0: static NSSUTF8 * michael@0: ckcapi_mdToken_GetLabel michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: return (NSSUTF8 *)nss_ckcapi_TokenLabel; michael@0: } michael@0: michael@0: static NSSUTF8 * michael@0: ckcapi_mdToken_GetManufacturerID michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: return (NSSUTF8 *)nss_ckcapi_ManufacturerID; michael@0: } michael@0: michael@0: static NSSUTF8 * michael@0: ckcapi_mdToken_GetModel michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: return (NSSUTF8 *)nss_ckcapi_TokenModel; michael@0: } michael@0: michael@0: static NSSUTF8 * michael@0: ckcapi_mdToken_GetSerialNumber michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: return (NSSUTF8 *)nss_ckcapi_TokenSerialNumber; michael@0: } michael@0: michael@0: static CK_BBOOL michael@0: ckcapi_mdToken_GetIsWriteProtected michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: return CK_FALSE; michael@0: } michael@0: michael@0: /* fake out Mozilla so we don't try to initialize the token */ michael@0: static CK_BBOOL michael@0: ckcapi_mdToken_GetUserPinInitialized michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: return CK_TRUE; michael@0: } michael@0: michael@0: static CK_VERSION michael@0: ckcapi_mdToken_GetHardwareVersion michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: return nss_ckcapi_HardwareVersion; michael@0: } michael@0: michael@0: static CK_VERSION michael@0: ckcapi_mdToken_GetFirmwareVersion michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: return nss_ckcapi_FirmwareVersion; michael@0: } michael@0: michael@0: static NSSCKMDSession * michael@0: ckcapi_mdToken_OpenSession michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: NSSCKFWSession *fwSession, michael@0: CK_BBOOL rw, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: return nss_ckcapi_CreateSession(fwSession, pError); michael@0: } michael@0: michael@0: static CK_ULONG michael@0: ckcapi_mdToken_GetMechanismCount michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: return (CK_ULONG)1; michael@0: } michael@0: michael@0: static CK_RV michael@0: ckcapi_mdToken_GetMechanismTypes michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_MECHANISM_TYPE types[] michael@0: ) michael@0: { michael@0: types[0] = CKM_RSA_PKCS; michael@0: return CKR_OK; michael@0: } michael@0: michael@0: static NSSCKMDMechanism * michael@0: ckcapi_mdToken_GetMechanism michael@0: ( michael@0: NSSCKMDToken *mdToken, michael@0: NSSCKFWToken *fwToken, michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_MECHANISM_TYPE which, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: if (which != CKM_RSA_PKCS) { michael@0: *pError = CKR_MECHANISM_INVALID; michael@0: return (NSSCKMDMechanism *)NULL; michael@0: } michael@0: return (NSSCKMDMechanism *)&nss_ckcapi_mdMechanismRSA; michael@0: } michael@0: michael@0: NSS_IMPLEMENT_DATA const NSSCKMDToken michael@0: nss_ckcapi_mdToken = { michael@0: (void *)NULL, /* etc */ michael@0: NULL, /* Setup */ michael@0: NULL, /* Invalidate */ michael@0: NULL, /* InitToken -- default errs */ michael@0: ckcapi_mdToken_GetLabel, michael@0: ckcapi_mdToken_GetManufacturerID, michael@0: ckcapi_mdToken_GetModel, michael@0: ckcapi_mdToken_GetSerialNumber, michael@0: NULL, /* GetHasRNG -- default is false */ michael@0: ckcapi_mdToken_GetIsWriteProtected, michael@0: NULL, /* GetLoginRequired -- default is false */ michael@0: ckcapi_mdToken_GetUserPinInitialized, michael@0: NULL, /* GetRestoreKeyNotNeeded -- irrelevant */ michael@0: NULL, /* GetHasClockOnToken -- default is false */ michael@0: NULL, /* GetHasProtectedAuthenticationPath -- default is false */ michael@0: NULL, /* GetSupportsDualCryptoOperations -- default is false */ michael@0: NULL, /* GetMaxSessionCount -- default is CK_UNAVAILABLE_INFORMATION */ michael@0: NULL, /* GetMaxRwSessionCount -- default is CK_UNAVAILABLE_INFORMATION */ michael@0: NULL, /* GetMaxPinLen -- irrelevant */ michael@0: NULL, /* GetMinPinLen -- irrelevant */ michael@0: NULL, /* GetTotalPublicMemory -- default is CK_UNAVAILABLE_INFORMATION */ michael@0: NULL, /* GetFreePublicMemory -- default is CK_UNAVAILABLE_INFORMATION */ michael@0: NULL, /* GetTotalPrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */ michael@0: NULL, /* GetFreePrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */ michael@0: ckcapi_mdToken_GetHardwareVersion, michael@0: ckcapi_mdToken_GetFirmwareVersion, michael@0: NULL, /* GetUTCTime -- no clock */ michael@0: ckcapi_mdToken_OpenSession, michael@0: ckcapi_mdToken_GetMechanismCount, michael@0: ckcapi_mdToken_GetMechanismTypes, michael@0: ckcapi_mdToken_GetMechanism, michael@0: (void *)NULL /* null terminator */ michael@0: };