Blame nss/lib/ckfw/builtins/bobject.c

Packit 40b132
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit 40b132
Packit 40b132
#include "builtins.h"
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * builtins/object.c
Packit 40b132
 *
Packit 40b132
 * This file implements the NSSCKMDObject object for the
Packit 40b132
 * "builtin objects" cryptoki module.
Packit 40b132
 */
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * Finalize - unneeded
Packit 40b132
 * Destroy - CKR_SESSION_READ_ONLY
Packit 40b132
 * IsTokenObject - CK_TRUE
Packit 40b132
 * GetAttributeCount
Packit 40b132
 * GetAttributeTypes
Packit 40b132
 * GetAttributeSize
Packit 40b132
 * GetAttribute
Packit 40b132
 * SetAttribute - unneeded
Packit 40b132
 * GetObjectSize
Packit 40b132
 */
Packit 40b132
Packit 40b132
static CK_RV
Packit 40b132
builtins_mdObject_Destroy
Packit 40b132
(
Packit 40b132
  NSSCKMDObject *mdObject,
Packit 40b132
  NSSCKFWObject *fwObject,
Packit 40b132
  NSSCKMDSession *mdSession,
Packit 40b132
  NSSCKFWSession *fwSession,
Packit 40b132
  NSSCKMDToken *mdToken,
Packit 40b132
  NSSCKFWToken *fwToken,
Packit 40b132
  NSSCKMDInstance *mdInstance,
Packit 40b132
  NSSCKFWInstance *fwInstance
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  return CKR_SESSION_READ_ONLY;
Packit 40b132
}
Packit 40b132
Packit 40b132
static CK_BBOOL
Packit 40b132
builtins_mdObject_IsTokenObject
Packit 40b132
(
Packit 40b132
  NSSCKMDObject *mdObject,
Packit 40b132
  NSSCKFWObject *fwObject,
Packit 40b132
  NSSCKMDSession *mdSession,
Packit 40b132
  NSSCKFWSession *fwSession,
Packit 40b132
  NSSCKMDToken *mdToken,
Packit 40b132
  NSSCKFWToken *fwToken,
Packit 40b132
  NSSCKMDInstance *mdInstance,
Packit 40b132
  NSSCKFWInstance *fwInstance
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  return CK_TRUE;
Packit 40b132
}
Packit 40b132
Packit 40b132
static CK_ULONG
Packit 40b132
builtins_mdObject_GetAttributeCount
Packit 40b132
(
Packit 40b132
  NSSCKMDObject *mdObject,
Packit 40b132
  NSSCKFWObject *fwObject,
Packit 40b132
  NSSCKMDSession *mdSession,
Packit 40b132
  NSSCKFWSession *fwSession,
Packit 40b132
  NSSCKMDToken *mdToken,
Packit 40b132
  NSSCKFWToken *fwToken,
Packit 40b132
  NSSCKMDInstance *mdInstance,
Packit 40b132
  NSSCKFWInstance *fwInstance,
Packit 40b132
  CK_RV *pError
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
Packit 40b132
  return io->n;
Packit 40b132
}
Packit 40b132
Packit 40b132
static CK_RV
Packit 40b132
builtins_mdObject_GetAttributeTypes
Packit 40b132
(
Packit 40b132
  NSSCKMDObject *mdObject,
Packit 40b132
  NSSCKFWObject *fwObject,
Packit 40b132
  NSSCKMDSession *mdSession,
Packit 40b132
  NSSCKFWSession *fwSession,
Packit 40b132
  NSSCKMDToken *mdToken,
Packit 40b132
  NSSCKFWToken *fwToken,
Packit 40b132
  NSSCKMDInstance *mdInstance,
Packit 40b132
  NSSCKFWInstance *fwInstance,
Packit 40b132
  CK_ATTRIBUTE_TYPE_PTR typeArray,
Packit 40b132
  CK_ULONG ulCount
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
Packit 40b132
  CK_ULONG i;
Packit 40b132
Packit 40b132
  if( io->n != ulCount ) {
Packit 40b132
    return CKR_BUFFER_TOO_SMALL;
Packit 40b132
  }
Packit 40b132
Packit 40b132
  for( i = 0; i < io->n; i++ ) {
Packit 40b132
    typeArray[i] = io->types[i];
Packit 40b132
  }
Packit 40b132
Packit 40b132
  return CKR_OK;
Packit 40b132
}
Packit 40b132
Packit 40b132
static CK_ULONG
Packit 40b132
builtins_mdObject_GetAttributeSize
Packit 40b132
(
Packit 40b132
  NSSCKMDObject *mdObject,
Packit 40b132
  NSSCKFWObject *fwObject,
Packit 40b132
  NSSCKMDSession *mdSession,
Packit 40b132
  NSSCKFWSession *fwSession,
Packit 40b132
  NSSCKMDToken *mdToken,
Packit 40b132
  NSSCKFWToken *fwToken,
Packit 40b132
  NSSCKMDInstance *mdInstance,
Packit 40b132
  NSSCKFWInstance *fwInstance,
Packit 40b132
  CK_ATTRIBUTE_TYPE attribute,
Packit 40b132
  CK_RV *pError
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
Packit 40b132
  CK_ULONG i;
Packit 40b132
Packit 40b132
  for( i = 0; i < io->n; i++ ) {
Packit 40b132
    if( attribute == io->types[i] ) {
Packit 40b132
      return (CK_ULONG)(io->items[i].size);
Packit 40b132
    }
Packit 40b132
  }
Packit 40b132
Packit 40b132
  *pError = CKR_ATTRIBUTE_TYPE_INVALID;
Packit 40b132
  return 0;
Packit 40b132
}
Packit 40b132
Packit 40b132
static NSSCKFWItem
Packit 40b132
builtins_mdObject_GetAttribute
Packit 40b132
(
Packit 40b132
  NSSCKMDObject *mdObject,
Packit 40b132
  NSSCKFWObject *fwObject,
Packit 40b132
  NSSCKMDSession *mdSession,
Packit 40b132
  NSSCKFWSession *fwSession,
Packit 40b132
  NSSCKMDToken *mdToken,
Packit 40b132
  NSSCKFWToken *fwToken,
Packit 40b132
  NSSCKMDInstance *mdInstance,
Packit 40b132
  NSSCKFWInstance *fwInstance,
Packit 40b132
  CK_ATTRIBUTE_TYPE attribute,
Packit 40b132
  CK_RV *pError
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  NSSCKFWItem mdItem;
Packit 40b132
  builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
Packit 40b132
  CK_ULONG i;
Packit 40b132
Packit 40b132
  mdItem.needsFreeing = PR_FALSE;
Packit 40b132
  mdItem.item = (NSSItem*) NULL;
Packit 40b132
Packit 40b132
  for( i = 0; i < io->n; i++ ) {
Packit 40b132
    if( attribute == io->types[i] ) {
Packit 40b132
      mdItem.item = (NSSItem*) &io->items[i];
Packit 40b132
      return mdItem;
Packit 40b132
    }
Packit 40b132
  }
Packit 40b132
Packit 40b132
  *pError = CKR_ATTRIBUTE_TYPE_INVALID;
Packit 40b132
  return mdItem;
Packit 40b132
}
Packit 40b132
Packit 40b132
static CK_ULONG
Packit 40b132
builtins_mdObject_GetObjectSize
Packit 40b132
(
Packit 40b132
  NSSCKMDObject *mdObject,
Packit 40b132
  NSSCKFWObject *fwObject,
Packit 40b132
  NSSCKMDSession *mdSession,
Packit 40b132
  NSSCKFWSession *fwSession,
Packit 40b132
  NSSCKMDToken *mdToken,
Packit 40b132
  NSSCKFWToken *fwToken,
Packit 40b132
  NSSCKMDInstance *mdInstance,
Packit 40b132
  NSSCKFWInstance *fwInstance,
Packit 40b132
  CK_RV *pError
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
Packit 40b132
  CK_ULONG i;
Packit 40b132
  CK_ULONG rv = sizeof(CK_ULONG);
Packit 40b132
Packit 40b132
  for( i = 0; i < io->n; i++ ) {
Packit 40b132
    rv += sizeof(CK_ATTRIBUTE_TYPE) + sizeof(NSSItem) + io->items[i].size;
Packit 40b132
  }
Packit 40b132
Packit 40b132
  return rv;
Packit 40b132
}
Packit 40b132
Packit 40b132
static const NSSCKMDObject
Packit 40b132
builtins_prototype_mdObject = {
Packit 40b132
  (void *)NULL, /* etc */
Packit 40b132
  NULL, /* Finalize */
Packit 40b132
  builtins_mdObject_Destroy,
Packit 40b132
  builtins_mdObject_IsTokenObject,
Packit 40b132
  builtins_mdObject_GetAttributeCount,
Packit 40b132
  builtins_mdObject_GetAttributeTypes,
Packit 40b132
  builtins_mdObject_GetAttributeSize,
Packit 40b132
  builtins_mdObject_GetAttribute,
Packit 40b132
  NULL, /* FreeAttribute */
Packit 40b132
  NULL, /* SetAttribute */
Packit 40b132
  builtins_mdObject_GetObjectSize,
Packit 40b132
  (void *)NULL /* null terminator */
Packit 40b132
};
Packit 40b132
Packit 40b132
NSS_IMPLEMENT NSSCKMDObject *
Packit 40b132
nss_builtins_CreateMDObject
Packit 40b132
(
Packit 40b132
  NSSArena *arena,
Packit 40b132
  builtinsInternalObject *io,
Packit 40b132
  CK_RV *pError
Packit 40b132
)
Packit 40b132
{
Packit 40b132
  if ( (void*)NULL == io->mdObject.etc) {
Packit 40b132
    (void) nsslibc_memcpy(&io->mdObject,&builtins_prototype_mdObject,
Packit 40b132
					sizeof(builtins_prototype_mdObject));
Packit 40b132
    io->mdObject.etc = (void *)io;
Packit 40b132
  }
Packit 40b132
Packit 40b132
  return &io->mdObject;
Packit 40b132
}