зеркало из https://github.com/mozilla/gecko-dev.git
185 строки
5.0 KiB
C
185 строки
5.0 KiB
C
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "ckcapi.h"
|
|
|
|
/*
|
|
* ckcapi/ctoken.c
|
|
*
|
|
* This file implements the NSSCKMDToken object for the
|
|
* "nss to capi" cryptoki module.
|
|
*/
|
|
|
|
static NSSUTF8 *
|
|
ckcapi_mdToken_GetLabel(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance,
|
|
CK_RV *pError)
|
|
{
|
|
return (NSSUTF8 *)nss_ckcapi_TokenLabel;
|
|
}
|
|
|
|
static NSSUTF8 *
|
|
ckcapi_mdToken_GetManufacturerID(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance,
|
|
CK_RV *pError)
|
|
{
|
|
return (NSSUTF8 *)nss_ckcapi_ManufacturerID;
|
|
}
|
|
|
|
static NSSUTF8 *
|
|
ckcapi_mdToken_GetModel(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance,
|
|
CK_RV *pError)
|
|
{
|
|
return (NSSUTF8 *)nss_ckcapi_TokenModel;
|
|
}
|
|
|
|
static NSSUTF8 *
|
|
ckcapi_mdToken_GetSerialNumber(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance,
|
|
CK_RV *pError)
|
|
{
|
|
return (NSSUTF8 *)nss_ckcapi_TokenSerialNumber;
|
|
}
|
|
|
|
static CK_BBOOL
|
|
ckcapi_mdToken_GetIsWriteProtected(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance)
|
|
{
|
|
return CK_FALSE;
|
|
}
|
|
|
|
/* fake out Mozilla so we don't try to initialize the token */
|
|
static CK_BBOOL
|
|
ckcapi_mdToken_GetUserPinInitialized(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance)
|
|
{
|
|
return CK_TRUE;
|
|
}
|
|
|
|
static CK_VERSION
|
|
ckcapi_mdToken_GetHardwareVersion(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance)
|
|
{
|
|
return nss_ckcapi_HardwareVersion;
|
|
}
|
|
|
|
static CK_VERSION
|
|
ckcapi_mdToken_GetFirmwareVersion(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance)
|
|
{
|
|
return nss_ckcapi_FirmwareVersion;
|
|
}
|
|
|
|
static NSSCKMDSession *
|
|
ckcapi_mdToken_OpenSession(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance,
|
|
NSSCKFWSession *fwSession,
|
|
CK_BBOOL rw,
|
|
CK_RV *pError)
|
|
{
|
|
return nss_ckcapi_CreateSession(fwSession, pError);
|
|
}
|
|
|
|
static CK_ULONG
|
|
ckcapi_mdToken_GetMechanismCount(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance)
|
|
{
|
|
return (CK_ULONG)1;
|
|
}
|
|
|
|
static CK_RV
|
|
ckcapi_mdToken_GetMechanismTypes(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance,
|
|
CK_MECHANISM_TYPE types[])
|
|
{
|
|
types[0] = CKM_RSA_PKCS;
|
|
return CKR_OK;
|
|
}
|
|
|
|
static NSSCKMDMechanism *
|
|
ckcapi_mdToken_GetMechanism(
|
|
NSSCKMDToken *mdToken,
|
|
NSSCKFWToken *fwToken,
|
|
NSSCKMDInstance *mdInstance,
|
|
NSSCKFWInstance *fwInstance,
|
|
CK_MECHANISM_TYPE which,
|
|
CK_RV *pError)
|
|
{
|
|
if (which != CKM_RSA_PKCS) {
|
|
*pError = CKR_MECHANISM_INVALID;
|
|
return (NSSCKMDMechanism *)NULL;
|
|
}
|
|
return (NSSCKMDMechanism *)&nss_ckcapi_mdMechanismRSA;
|
|
}
|
|
|
|
NSS_IMPLEMENT_DATA const NSSCKMDToken
|
|
nss_ckcapi_mdToken = {
|
|
(void *)NULL, /* etc */
|
|
NULL, /* Setup */
|
|
NULL, /* Invalidate */
|
|
NULL, /* InitToken -- default errs */
|
|
ckcapi_mdToken_GetLabel,
|
|
ckcapi_mdToken_GetManufacturerID,
|
|
ckcapi_mdToken_GetModel,
|
|
ckcapi_mdToken_GetSerialNumber,
|
|
NULL, /* GetHasRNG -- default is false */
|
|
ckcapi_mdToken_GetIsWriteProtected,
|
|
NULL, /* GetLoginRequired -- default is false */
|
|
ckcapi_mdToken_GetUserPinInitialized,
|
|
NULL, /* GetRestoreKeyNotNeeded -- irrelevant */
|
|
NULL, /* GetHasClockOnToken -- default is false */
|
|
NULL, /* GetHasProtectedAuthenticationPath -- default is false */
|
|
NULL, /* GetSupportsDualCryptoOperations -- default is false */
|
|
NULL, /* GetMaxSessionCount -- default is CK_UNAVAILABLE_INFORMATION */
|
|
NULL, /* GetMaxRwSessionCount -- default is CK_UNAVAILABLE_INFORMATION */
|
|
NULL, /* GetMaxPinLen -- irrelevant */
|
|
NULL, /* GetMinPinLen -- irrelevant */
|
|
NULL, /* GetTotalPublicMemory -- default is CK_UNAVAILABLE_INFORMATION */
|
|
NULL, /* GetFreePublicMemory -- default is CK_UNAVAILABLE_INFORMATION */
|
|
NULL, /* GetTotalPrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */
|
|
NULL, /* GetFreePrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */
|
|
ckcapi_mdToken_GetHardwareVersion,
|
|
ckcapi_mdToken_GetFirmwareVersion,
|
|
NULL, /* GetUTCTime -- no clock */
|
|
ckcapi_mdToken_OpenSession,
|
|
ckcapi_mdToken_GetMechanismCount,
|
|
ckcapi_mdToken_GetMechanismTypes,
|
|
ckcapi_mdToken_GetMechanism,
|
|
(void *)NULL /* null terminator */
|
|
};
|