1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/nss/lib/ckfw/nssmkey/mtoken.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,208 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#include "ckmk.h" 1.9 + 1.10 +/* 1.11 + * nssmkey/mtoken.c 1.12 + * 1.13 + * This file implements the NSSCKMDToken object for the 1.14 + * "nssmkey" cryptoki module. 1.15 + */ 1.16 + 1.17 +static NSSUTF8 * 1.18 +ckmk_mdToken_GetLabel 1.19 +( 1.20 + NSSCKMDToken *mdToken, 1.21 + NSSCKFWToken *fwToken, 1.22 + NSSCKMDInstance *mdInstance, 1.23 + NSSCKFWInstance *fwInstance, 1.24 + CK_RV *pError 1.25 +) 1.26 +{ 1.27 + return (NSSUTF8 *)nss_ckmk_TokenLabel; 1.28 +} 1.29 + 1.30 +static NSSUTF8 * 1.31 +ckmk_mdToken_GetManufacturerID 1.32 +( 1.33 + NSSCKMDToken *mdToken, 1.34 + NSSCKFWToken *fwToken, 1.35 + NSSCKMDInstance *mdInstance, 1.36 + NSSCKFWInstance *fwInstance, 1.37 + CK_RV *pError 1.38 +) 1.39 +{ 1.40 + return (NSSUTF8 *)nss_ckmk_ManufacturerID; 1.41 +} 1.42 + 1.43 +static NSSUTF8 * 1.44 +ckmk_mdToken_GetModel 1.45 +( 1.46 + NSSCKMDToken *mdToken, 1.47 + NSSCKFWToken *fwToken, 1.48 + NSSCKMDInstance *mdInstance, 1.49 + NSSCKFWInstance *fwInstance, 1.50 + CK_RV *pError 1.51 +) 1.52 +{ 1.53 + return (NSSUTF8 *)nss_ckmk_TokenModel; 1.54 +} 1.55 + 1.56 +static NSSUTF8 * 1.57 +ckmk_mdToken_GetSerialNumber 1.58 +( 1.59 + NSSCKMDToken *mdToken, 1.60 + NSSCKFWToken *fwToken, 1.61 + NSSCKMDInstance *mdInstance, 1.62 + NSSCKFWInstance *fwInstance, 1.63 + CK_RV *pError 1.64 +) 1.65 +{ 1.66 + return (NSSUTF8 *)nss_ckmk_TokenSerialNumber; 1.67 +} 1.68 + 1.69 +static CK_BBOOL 1.70 +ckmk_mdToken_GetIsWriteProtected 1.71 +( 1.72 + NSSCKMDToken *mdToken, 1.73 + NSSCKFWToken *fwToken, 1.74 + NSSCKMDInstance *mdInstance, 1.75 + NSSCKFWInstance *fwInstance 1.76 +) 1.77 +{ 1.78 + return CK_FALSE; 1.79 +} 1.80 + 1.81 +/* fake out Mozilla so we don't try to initialize the token */ 1.82 +static CK_BBOOL 1.83 +ckmk_mdToken_GetUserPinInitialized 1.84 +( 1.85 + NSSCKMDToken *mdToken, 1.86 + NSSCKFWToken *fwToken, 1.87 + NSSCKMDInstance *mdInstance, 1.88 + NSSCKFWInstance *fwInstance 1.89 +) 1.90 +{ 1.91 + return CK_TRUE; 1.92 +} 1.93 + 1.94 +static CK_VERSION 1.95 +ckmk_mdToken_GetHardwareVersion 1.96 +( 1.97 + NSSCKMDToken *mdToken, 1.98 + NSSCKFWToken *fwToken, 1.99 + NSSCKMDInstance *mdInstance, 1.100 + NSSCKFWInstance *fwInstance 1.101 +) 1.102 +{ 1.103 + return nss_ckmk_HardwareVersion; 1.104 +} 1.105 + 1.106 +static CK_VERSION 1.107 +ckmk_mdToken_GetFirmwareVersion 1.108 +( 1.109 + NSSCKMDToken *mdToken, 1.110 + NSSCKFWToken *fwToken, 1.111 + NSSCKMDInstance *mdInstance, 1.112 + NSSCKFWInstance *fwInstance 1.113 +) 1.114 +{ 1.115 + return nss_ckmk_FirmwareVersion; 1.116 +} 1.117 + 1.118 +static NSSCKMDSession * 1.119 +ckmk_mdToken_OpenSession 1.120 +( 1.121 + NSSCKMDToken *mdToken, 1.122 + NSSCKFWToken *fwToken, 1.123 + NSSCKMDInstance *mdInstance, 1.124 + NSSCKFWInstance *fwInstance, 1.125 + NSSCKFWSession *fwSession, 1.126 + CK_BBOOL rw, 1.127 + CK_RV *pError 1.128 +) 1.129 +{ 1.130 + return nss_ckmk_CreateSession(fwSession, pError); 1.131 +} 1.132 + 1.133 +static CK_ULONG 1.134 +ckmk_mdToken_GetMechanismCount 1.135 +( 1.136 + NSSCKMDToken *mdToken, 1.137 + NSSCKFWToken *fwToken, 1.138 + NSSCKMDInstance *mdInstance, 1.139 + NSSCKFWInstance *fwInstance 1.140 +) 1.141 +{ 1.142 + return (CK_ULONG)1; 1.143 +} 1.144 + 1.145 +static CK_RV 1.146 +ckmk_mdToken_GetMechanismTypes 1.147 +( 1.148 + NSSCKMDToken *mdToken, 1.149 + NSSCKFWToken *fwToken, 1.150 + NSSCKMDInstance *mdInstance, 1.151 + NSSCKFWInstance *fwInstance, 1.152 + CK_MECHANISM_TYPE types[] 1.153 +) 1.154 +{ 1.155 + types[0] = CKM_RSA_PKCS; 1.156 + return CKR_OK; 1.157 +} 1.158 + 1.159 +static NSSCKMDMechanism * 1.160 +ckmk_mdToken_GetMechanism 1.161 +( 1.162 + NSSCKMDToken *mdToken, 1.163 + NSSCKFWToken *fwToken, 1.164 + NSSCKMDInstance *mdInstance, 1.165 + NSSCKFWInstance *fwInstance, 1.166 + CK_MECHANISM_TYPE which, 1.167 + CK_RV *pError 1.168 +) 1.169 +{ 1.170 + if (which != CKM_RSA_PKCS) { 1.171 + *pError = CKR_MECHANISM_INVALID; 1.172 + return (NSSCKMDMechanism *)NULL; 1.173 + } 1.174 + return (NSSCKMDMechanism *)&nss_ckmk_mdMechanismRSA; 1.175 +} 1.176 + 1.177 +NSS_IMPLEMENT_DATA const NSSCKMDToken 1.178 +nss_ckmk_mdToken = { 1.179 + (void *)NULL, /* etc */ 1.180 + NULL, /* Setup */ 1.181 + NULL, /* Invalidate */ 1.182 + NULL, /* InitToken -- default errs */ 1.183 + ckmk_mdToken_GetLabel, 1.184 + ckmk_mdToken_GetManufacturerID, 1.185 + ckmk_mdToken_GetModel, 1.186 + ckmk_mdToken_GetSerialNumber, 1.187 + NULL, /* GetHasRNG -- default is false */ 1.188 + ckmk_mdToken_GetIsWriteProtected, 1.189 + NULL, /* GetLoginRequired -- default is false */ 1.190 + ckmk_mdToken_GetUserPinInitialized, 1.191 + NULL, /* GetRestoreKeyNotNeeded -- irrelevant */ 1.192 + NULL, /* GetHasClockOnToken -- default is false */ 1.193 + NULL, /* GetHasProtectedAuthenticationPath -- default is false */ 1.194 + NULL, /* GetSupportsDualCryptoOperations -- default is false */ 1.195 + NULL, /* GetMaxSessionCount -- default is CK_UNAVAILABLE_INFORMATION */ 1.196 + NULL, /* GetMaxRwSessionCount -- default is CK_UNAVAILABLE_INFORMATION */ 1.197 + NULL, /* GetMaxPinLen -- irrelevant */ 1.198 + NULL, /* GetMinPinLen -- irrelevant */ 1.199 + NULL, /* GetTotalPublicMemory -- default is CK_UNAVAILABLE_INFORMATION */ 1.200 + NULL, /* GetFreePublicMemory -- default is CK_UNAVAILABLE_INFORMATION */ 1.201 + NULL, /* GetTotalPrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */ 1.202 + NULL, /* GetFreePrivateMemory -- default is CK_UNAVAILABLE_INFORMATION */ 1.203 + ckmk_mdToken_GetHardwareVersion, 1.204 + ckmk_mdToken_GetFirmwareVersion, 1.205 + NULL, /* GetUTCTime -- no clock */ 1.206 + ckmk_mdToken_OpenSession, 1.207 + ckmk_mdToken_GetMechanismCount, 1.208 + ckmk_mdToken_GetMechanismTypes, 1.209 + ckmk_mdToken_GetMechanism, 1.210 + (void *)NULL /* null terminator */ 1.211 +};