security/nss/lib/ckfw/dbm/token.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 4
michael@0 5 #include "ckdbm.h"
michael@0 6
michael@0 7 static CK_RV
michael@0 8 nss_dbm_mdToken_Setup
michael@0 9 (
michael@0 10 NSSCKMDToken *mdToken,
michael@0 11 NSSCKFWToken *fwToken,
michael@0 12 NSSCKMDInstance *mdInstance,
michael@0 13 NSSCKFWInstance *fwInstance
michael@0 14 )
michael@0 15 {
michael@0 16 nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
michael@0 17 CK_RV rv = CKR_OK;
michael@0 18
michael@0 19 token->arena = NSSCKFWToken_GetArena(fwToken, &rv);
michael@0 20 token->session_db = nss_dbm_db_open(token->arena, fwInstance, (char *)NULL,
michael@0 21 O_RDWR|O_CREAT, &rv);
michael@0 22 if( (nss_dbm_db_t *)NULL == token->session_db ) {
michael@0 23 return rv;
michael@0 24 }
michael@0 25
michael@0 26 /* Add a label record if there isn't one? */
michael@0 27
michael@0 28 return CKR_OK;
michael@0 29 }
michael@0 30
michael@0 31 static void
michael@0 32 nss_dbm_mdToken_Invalidate
michael@0 33 (
michael@0 34 NSSCKMDToken *mdToken,
michael@0 35 NSSCKFWToken *fwToken,
michael@0 36 NSSCKMDInstance *mdInstance,
michael@0 37 NSSCKFWInstance *fwInstance
michael@0 38 )
michael@0 39 {
michael@0 40 nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
michael@0 41
michael@0 42 if( (nss_dbm_db_t *)NULL != token->session_db ) {
michael@0 43 nss_dbm_db_close(token->session_db);
michael@0 44 token->session_db = (nss_dbm_db_t *)NULL;
michael@0 45 }
michael@0 46 }
michael@0 47
michael@0 48 static CK_RV
michael@0 49 nss_dbm_mdToken_InitToken
michael@0 50 (
michael@0 51 NSSCKMDToken *mdToken,
michael@0 52 NSSCKFWToken *fwToken,
michael@0 53 NSSCKMDInstance *mdInstance,
michael@0 54 NSSCKFWInstance *fwInstance,
michael@0 55 NSSItem *pin,
michael@0 56 NSSUTF8 *label
michael@0 57 )
michael@0 58 {
michael@0 59 nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
michael@0 60 nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc;
michael@0 61 CK_RV rv;
michael@0 62
michael@0 63 /* Wipe the session object data */
michael@0 64
michael@0 65 if( (nss_dbm_db_t *)NULL != token->session_db ) {
michael@0 66 nss_dbm_db_close(token->session_db);
michael@0 67 }
michael@0 68
michael@0 69 token->session_db = nss_dbm_db_open(token->arena, fwInstance, (char *)NULL,
michael@0 70 O_RDWR|O_CREAT, &rv);
michael@0 71 if( (nss_dbm_db_t *)NULL == token->session_db ) {
michael@0 72 return rv;
michael@0 73 }
michael@0 74
michael@0 75 /* Wipe the token object data */
michael@0 76
michael@0 77 if( token->slot->flags & O_RDWR ) {
michael@0 78 if( (nss_dbm_db_t *)NULL != token->slot->token_db ) {
michael@0 79 nss_dbm_db_close(token->slot->token_db);
michael@0 80 }
michael@0 81
michael@0 82 token->slot->token_db = nss_dbm_db_open(instance->arena, fwInstance,
michael@0 83 token->slot->filename,
michael@0 84 token->slot->flags | O_CREAT | O_TRUNC,
michael@0 85 &rv);
michael@0 86 if( (nss_dbm_db_t *)NULL == token->slot->token_db ) {
michael@0 87 return rv;
michael@0 88 }
michael@0 89
michael@0 90 /* PIN is irrelevant */
michael@0 91
michael@0 92 rv = nss_dbm_db_set_label(token->slot->token_db, label);
michael@0 93 if( CKR_OK != rv ) {
michael@0 94 return rv;
michael@0 95 }
michael@0 96 }
michael@0 97
michael@0 98 return CKR_OK;
michael@0 99 }
michael@0 100
michael@0 101 static NSSUTF8 *
michael@0 102 nss_dbm_mdToken_GetLabel
michael@0 103 (
michael@0 104 NSSCKMDToken *mdToken,
michael@0 105 NSSCKFWToken *fwToken,
michael@0 106 NSSCKMDInstance *mdInstance,
michael@0 107 NSSCKFWInstance *fwInstance,
michael@0 108 CK_RV *pError
michael@0 109 )
michael@0 110 {
michael@0 111 nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
michael@0 112
michael@0 113 if( (NSSUTF8 *)NULL == token->label ) {
michael@0 114 token->label = nss_dbm_db_get_label(token->slot->token_db, token->arena, pError);
michael@0 115 }
michael@0 116
michael@0 117 /* If no label has been set, return *something* */
michael@0 118 if( (NSSUTF8 *)NULL == token->label ) {
michael@0 119 return token->slot->filename;
michael@0 120 }
michael@0 121
michael@0 122 return token->label;
michael@0 123 }
michael@0 124
michael@0 125 static NSSUTF8 *
michael@0 126 nss_dbm_mdToken_GetManufacturerID
michael@0 127 (
michael@0 128 NSSCKMDToken *mdToken,
michael@0 129 NSSCKFWToken *fwToken,
michael@0 130 NSSCKMDInstance *mdInstance,
michael@0 131 NSSCKFWInstance *fwInstance,
michael@0 132 CK_RV *pError
michael@0 133 )
michael@0 134 {
michael@0 135 return "mozilla.org NSS";
michael@0 136 }
michael@0 137
michael@0 138 static NSSUTF8 *
michael@0 139 nss_dbm_mdToken_GetModel
michael@0 140 (
michael@0 141 NSSCKMDToken *mdToken,
michael@0 142 NSSCKFWToken *fwToken,
michael@0 143 NSSCKMDInstance *mdInstance,
michael@0 144 NSSCKFWInstance *fwInstance,
michael@0 145 CK_RV *pError
michael@0 146 )
michael@0 147 {
michael@0 148 return "dbm";
michael@0 149 }
michael@0 150
michael@0 151 /* GetSerialNumber is irrelevant */
michael@0 152 /* GetHasRNG defaults to CK_FALSE */
michael@0 153
michael@0 154 static CK_BBOOL
michael@0 155 nss_dbm_mdToken_GetIsWriteProtected
michael@0 156 (
michael@0 157 NSSCKMDToken *mdToken,
michael@0 158 NSSCKFWToken *fwToken,
michael@0 159 NSSCKMDInstance *mdInstance,
michael@0 160 NSSCKFWInstance *fwInstance
michael@0 161 )
michael@0 162 {
michael@0 163 nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
michael@0 164
michael@0 165 if( token->slot->flags & O_RDWR ) {
michael@0 166 return CK_FALSE;
michael@0 167 } else {
michael@0 168 return CK_TRUE;
michael@0 169 }
michael@0 170 }
michael@0 171
michael@0 172 /* GetLoginRequired defaults to CK_FALSE */
michael@0 173 /* GetUserPinInitialized defaults to CK_FALSE */
michael@0 174 /* GetRestoreKeyNotNeeded is irrelevant */
michael@0 175 /* GetHasClockOnToken defaults to CK_FALSE */
michael@0 176 /* GetHasProtectedAuthenticationPath defaults to CK_FALSE */
michael@0 177 /* GetSupportsDualCryptoOperations is irrelevant */
michael@0 178
michael@0 179 static CK_ULONG
michael@0 180 nss_dbm_mdToken_effectively_infinite
michael@0 181 (
michael@0 182 NSSCKMDToken *mdToken,
michael@0 183 NSSCKFWToken *fwToken,
michael@0 184 NSSCKMDInstance *mdInstance,
michael@0 185 NSSCKFWInstance *fwInstance
michael@0 186 )
michael@0 187 {
michael@0 188 return CK_EFFECTIVELY_INFINITE;
michael@0 189 }
michael@0 190
michael@0 191 static CK_VERSION
michael@0 192 nss_dbm_mdToken_GetHardwareVersion
michael@0 193 (
michael@0 194 NSSCKMDToken *mdToken,
michael@0 195 NSSCKFWToken *fwToken,
michael@0 196 NSSCKMDInstance *mdInstance,
michael@0 197 NSSCKFWInstance *fwInstance
michael@0 198 )
michael@0 199 {
michael@0 200 nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
michael@0 201 return nss_dbm_db_get_format_version(token->slot->token_db);
michael@0 202 }
michael@0 203
michael@0 204 /* GetFirmwareVersion is irrelevant */
michael@0 205 /* GetUTCTime is irrelevant */
michael@0 206
michael@0 207 static NSSCKMDSession *
michael@0 208 nss_dbm_mdToken_OpenSession
michael@0 209 (
michael@0 210 NSSCKMDToken *mdToken,
michael@0 211 NSSCKFWToken *fwToken,
michael@0 212 NSSCKMDInstance *mdInstance,
michael@0 213 NSSCKFWInstance *fwInstance,
michael@0 214 NSSCKFWSession *fwSession,
michael@0 215 CK_BBOOL rw,
michael@0 216 CK_RV *pError
michael@0 217 )
michael@0 218 {
michael@0 219 nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
michael@0 220 return nss_dbm_mdSession_factory(token, fwSession, fwInstance, rw, pError);
michael@0 221 }
michael@0 222
michael@0 223 /* GetMechanismCount defaults to zero */
michael@0 224 /* GetMechanismTypes is irrelevant */
michael@0 225 /* GetMechanism is irrelevant */
michael@0 226
michael@0 227 NSS_IMPLEMENT NSSCKMDToken *
michael@0 228 nss_dbm_mdToken_factory
michael@0 229 (
michael@0 230 nss_dbm_slot_t *slot,
michael@0 231 CK_RV *pError
michael@0 232 )
michael@0 233 {
michael@0 234 nss_dbm_token_t *token;
michael@0 235 NSSCKMDToken *rv;
michael@0 236
michael@0 237 token = nss_ZNEW(slot->instance->arena, nss_dbm_token_t);
michael@0 238 if( (nss_dbm_token_t *)NULL == token ) {
michael@0 239 *pError = CKR_HOST_MEMORY;
michael@0 240 return (NSSCKMDToken *)NULL;
michael@0 241 }
michael@0 242
michael@0 243 rv = nss_ZNEW(slot->instance->arena, NSSCKMDToken);
michael@0 244 if( (NSSCKMDToken *)NULL == rv ) {
michael@0 245 *pError = CKR_HOST_MEMORY;
michael@0 246 return (NSSCKMDToken *)NULL;
michael@0 247 }
michael@0 248
michael@0 249 token->slot = slot;
michael@0 250
michael@0 251 rv->etc = (void *)token;
michael@0 252 rv->Setup = nss_dbm_mdToken_Setup;
michael@0 253 rv->Invalidate = nss_dbm_mdToken_Invalidate;
michael@0 254 rv->InitToken = nss_dbm_mdToken_InitToken;
michael@0 255 rv->GetLabel = nss_dbm_mdToken_GetLabel;
michael@0 256 rv->GetManufacturerID = nss_dbm_mdToken_GetManufacturerID;
michael@0 257 rv->GetModel = nss_dbm_mdToken_GetModel;
michael@0 258 /* GetSerialNumber is irrelevant */
michael@0 259 /* GetHasRNG defaults to CK_FALSE */
michael@0 260 rv->GetIsWriteProtected = nss_dbm_mdToken_GetIsWriteProtected;
michael@0 261 /* GetLoginRequired defaults to CK_FALSE */
michael@0 262 /* GetUserPinInitialized defaults to CK_FALSE */
michael@0 263 /* GetRestoreKeyNotNeeded is irrelevant */
michael@0 264 /* GetHasClockOnToken defaults to CK_FALSE */
michael@0 265 /* GetHasProtectedAuthenticationPath defaults to CK_FALSE */
michael@0 266 /* GetSupportsDualCryptoOperations is irrelevant */
michael@0 267 rv->GetMaxSessionCount = nss_dbm_mdToken_effectively_infinite;
michael@0 268 rv->GetMaxRwSessionCount = nss_dbm_mdToken_effectively_infinite;
michael@0 269 /* GetMaxPinLen is irrelevant */
michael@0 270 /* GetMinPinLen is irrelevant */
michael@0 271 /* GetTotalPublicMemory defaults to CK_UNAVAILABLE_INFORMATION */
michael@0 272 /* GetFreePublicMemory defaults to CK_UNAVAILABLE_INFORMATION */
michael@0 273 /* GetTotalPrivateMemory defaults to CK_UNAVAILABLE_INFORMATION */
michael@0 274 /* GetFreePrivateMemory defaults to CK_UNAVAILABLE_INFORMATION */
michael@0 275 rv->GetHardwareVersion = nss_dbm_mdToken_GetHardwareVersion;
michael@0 276 /* GetFirmwareVersion is irrelevant */
michael@0 277 /* GetUTCTime is irrelevant */
michael@0 278 rv->OpenSession = nss_dbm_mdToken_OpenSession;
michael@0 279 rv->null = NULL;
michael@0 280
michael@0 281 return rv;
michael@0 282 }

mercurial