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

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

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

mercurial