Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/security/nss/lib/ckfw/dbm/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 7 kB image not shown  

Quelle  token.c   Sprache: 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 "ckdbm.h"

static CK_RV
nss_dbm_mdToken_Setup(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
    CK_RV rv = CKR_OK;

    token->arena = NSSCKFWToken_GetArena(fwToken, &rv);
    token->session_db = nss_dbm_db_open(token->arena, fwInstance, (char *)NULL,
                                        O_RDWR | O_CREAT, &rv);
    if ((nss_dbm_db_t *)NULL == token->session_db) {
        return rv;
    }

    /* Add a label record if there isn't one? */

    return CKR_OK;
}

static void
nss_dbm_mdToken_Invalidate(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;

    if ((nss_dbm_db_t *)NULL != token->session_db) {
        nss_dbm_db_close(token->session_db);
        token->session_db = (nss_dbm_db_t *)NULL;
    }
}

static CK_RV
nss_dbm_mdToken_InitToken(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    NSSItem *pin,
    NSSUTF8 *label)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
    nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc;
    CK_RV rv;

    /* Wipe the session object data */

    if ((nss_dbm_db_t *)NULL != token->session_db) {
        nss_dbm_db_close(token->session_db);
    }

    token->session_db = nss_dbm_db_open(token->arena, fwInstance, (char *)NULL,
                                        O_RDWR | O_CREAT, &rv);
    if ((nss_dbm_db_t *)NULL == token->session_db) {
        return rv;
    }

    /* Wipe the token object data */

    if (token->slot->flags & O_RDWR) {
        if ((nss_dbm_db_t *)NULL != token->slot->token_db) {
            nss_dbm_db_close(token->slot->token_db);
        }

        token->slot->token_db = nss_dbm_db_open(instance->arena, fwInstance,
                                                token->slot->filename,
                                                token->slot->flags | O_CREAT | O_TRUNC,
                                                &rv);
        if ((nss_dbm_db_t *)NULL == token->slot->token_db) {
            return rv;
        }

        /* PIN is irrelevant */

        rv = nss_dbm_db_set_label(token->slot->token_db, label);
        if (CKR_OK != rv) {
            return rv;
        }
    }

    return CKR_OK;
}

static NSSUTF8 *
nss_dbm_mdToken_GetLabel(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    CK_RV *pError)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;

    if ((NSSUTF8 *)NULL == token->label) {
        token->label = nss_dbm_db_get_label(token->slot->token_db, token->arena, pError);
    }

    /* If no label has been set, return *something* */
    if ((NSSUTF8 *)NULL == token->label) {
        return token->slot->filename;
    }

    return token->label;
}

static NSSUTF8 *
nss_dbm_mdToken_GetManufacturerID(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    CK_RV *pError)
{
    return "mozilla.org NSS";
}

static NSSUTF8 *
nss_dbm_mdToken_GetModel(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    CK_RV *pError)
{
    return "dbm";
}

/* GetSerialNumber is irrelevant */
/* GetHasRNG defaults to CK_FALSE */

static CK_BBOOL
nss_dbm_mdToken_GetIsWriteProtected(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;

    if (token->slot->flags & O_RDWR) {
        return CK_FALSE;
    } else {
        return CK_TRUE;
    }
}

/* GetLoginRequired defaults to CK_FALSE */
/* GetUserPinInitialized defaults to CK_FALSE */
/* GetRestoreKeyNotNeeded is irrelevant */
/* GetHasClockOnToken defaults to CK_FALSE */
/* GetHasProtectedAuthenticationPath defaults to CK_FALSE */
/* GetSupportsDualCryptoOperations is irrelevant */

static CK_ULONG
nss_dbm_mdToken_effectively_infinite(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    return CK_EFFECTIVELY_INFINITE;
}

static CK_VERSION
nss_dbm_mdToken_GetHardwareVersion(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
    return nss_dbm_db_get_format_version(token->slot->token_db);
}

/* GetFirmwareVersion is irrelevant */
/* GetUTCTime is irrelevant */

static NSSCKMDSession *
nss_dbm_mdToken_OpenSession(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    NSSCKFWSession *fwSession,
    CK_BBOOL rw,
    CK_RV *pError)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
    return nss_dbm_mdSession_factory(token, fwSession, fwInstance, rw, pError);
}

/* GetMechanismCount defaults to zero */
/* GetMechanismTypes is irrelevant */
/* GetMechanism is irrelevant */

NSS_IMPLEMENT NSSCKMDToken *
nss_dbm_mdToken_factory(
    nss_dbm_slot_t *slot,
    CK_RV *pError)
{
    nss_dbm_token_t *token;
    NSSCKMDToken *rv;

    token = nss_ZNEW(slot->instance->arena, nss_dbm_token_t);
    if ((nss_dbm_token_t *)NULL == token) {
        *pError = CKR_HOST_MEMORY;
        return (NSSCKMDToken *)NULL;
    }

    rv = nss_ZNEW(slot->instance->arena, NSSCKMDToken);
    if ((NSSCKMDToken *)NULL == rv) {
        *pError = CKR_HOST_MEMORY;
        return (NSSCKMDToken *)NULL;
    }

    token->slot = slot;

    rv->etc = (void *)token;
    rv->Setup = nss_dbm_mdToken_Setup;
    rv->Invalidate = nss_dbm_mdToken_Invalidate;
    rv->InitToken = nss_dbm_mdToken_InitToken;
    rv->GetLabel = nss_dbm_mdToken_GetLabel;
    rv->GetManufacturerID = nss_dbm_mdToken_GetManufacturerID;
    rv->GetModel = nss_dbm_mdToken_GetModel;
    /*  GetSerialNumber is irrelevant */
    /*  GetHasRNG defaults to CK_FALSE */
    rv->GetIsWriteProtected = nss_dbm_mdToken_GetIsWriteProtected;
    /*  GetLoginRequired defaults to CK_FALSE */
    /*  GetUserPinInitialized defaults to CK_FALSE */
    /*  GetRestoreKeyNotNeeded is irrelevant */
    /*  GetHasClockOnToken defaults to CK_FALSE */
    /*  GetHasProtectedAuthenticationPath defaults to CK_FALSE */
    /*  GetSupportsDualCryptoOperations is irrelevant */
    rv->GetMaxSessionCount = nss_dbm_mdToken_effectively_infinite;
    rv->GetMaxRwSessionCount = nss_dbm_mdToken_effectively_infinite;
    /*  GetMaxPinLen is irrelevant */
    /*  GetMinPinLen is irrelevant */
    /*  GetTotalPublicMemory defaults to CK_UNAVAILABLE_INFORMATION */
    /*  GetFreePublicMemory defaults to CK_UNAVAILABLE_INFORMATION */
    /*  GetTotalPrivateMemory defaults to CK_UNAVAILABLE_INFORMATION */
    /*  GetFreePrivateMemory defaults to CK_UNAVAILABLE_INFORMATION */
    rv->GetHardwareVersion = nss_dbm_mdToken_GetHardwareVersion;
    /*  GetFirmwareVersion is irrelevant */
    /*  GetUTCTime is irrelevant */
    rv->OpenSession = nss_dbm_mdToken_OpenSession;
    rv->null = NULL;

    return rv;
}

Messung V0.5
C=93 H=98 G=95

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.