security/nss/lib/ckfw/builtins/bobject.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.

     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 "builtins.h"
     7 /*
     8  * builtins/object.c
     9  *
    10  * This file implements the NSSCKMDObject object for the
    11  * "builtin objects" cryptoki module.
    12  */
    14 /*
    15  * Finalize - unneeded
    16  * Destroy - CKR_SESSION_READ_ONLY
    17  * IsTokenObject - CK_TRUE
    18  * GetAttributeCount
    19  * GetAttributeTypes
    20  * GetAttributeSize
    21  * GetAttribute
    22  * SetAttribute - unneeded
    23  * GetObjectSize
    24  */
    26 static CK_RV
    27 builtins_mdObject_Destroy
    28 (
    29   NSSCKMDObject *mdObject,
    30   NSSCKFWObject *fwObject,
    31   NSSCKMDSession *mdSession,
    32   NSSCKFWSession *fwSession,
    33   NSSCKMDToken *mdToken,
    34   NSSCKFWToken *fwToken,
    35   NSSCKMDInstance *mdInstance,
    36   NSSCKFWInstance *fwInstance
    37 )
    38 {
    39   return CKR_SESSION_READ_ONLY;
    40 }
    42 static CK_BBOOL
    43 builtins_mdObject_IsTokenObject
    44 (
    45   NSSCKMDObject *mdObject,
    46   NSSCKFWObject *fwObject,
    47   NSSCKMDSession *mdSession,
    48   NSSCKFWSession *fwSession,
    49   NSSCKMDToken *mdToken,
    50   NSSCKFWToken *fwToken,
    51   NSSCKMDInstance *mdInstance,
    52   NSSCKFWInstance *fwInstance
    53 )
    54 {
    55   return CK_TRUE;
    56 }
    58 static CK_ULONG
    59 builtins_mdObject_GetAttributeCount
    60 (
    61   NSSCKMDObject *mdObject,
    62   NSSCKFWObject *fwObject,
    63   NSSCKMDSession *mdSession,
    64   NSSCKFWSession *fwSession,
    65   NSSCKMDToken *mdToken,
    66   NSSCKFWToken *fwToken,
    67   NSSCKMDInstance *mdInstance,
    68   NSSCKFWInstance *fwInstance,
    69   CK_RV *pError
    70 )
    71 {
    72   builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
    73   return io->n;
    74 }
    76 static CK_RV
    77 builtins_mdObject_GetAttributeTypes
    78 (
    79   NSSCKMDObject *mdObject,
    80   NSSCKFWObject *fwObject,
    81   NSSCKMDSession *mdSession,
    82   NSSCKFWSession *fwSession,
    83   NSSCKMDToken *mdToken,
    84   NSSCKFWToken *fwToken,
    85   NSSCKMDInstance *mdInstance,
    86   NSSCKFWInstance *fwInstance,
    87   CK_ATTRIBUTE_TYPE_PTR typeArray,
    88   CK_ULONG ulCount
    89 )
    90 {
    91   builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
    92   CK_ULONG i;
    94   if( io->n != ulCount ) {
    95     return CKR_BUFFER_TOO_SMALL;
    96   }
    98   for( i = 0; i < io->n; i++ ) {
    99     typeArray[i] = io->types[i];
   100   }
   102   return CKR_OK;
   103 }
   105 static CK_ULONG
   106 builtins_mdObject_GetAttributeSize
   107 (
   108   NSSCKMDObject *mdObject,
   109   NSSCKFWObject *fwObject,
   110   NSSCKMDSession *mdSession,
   111   NSSCKFWSession *fwSession,
   112   NSSCKMDToken *mdToken,
   113   NSSCKFWToken *fwToken,
   114   NSSCKMDInstance *mdInstance,
   115   NSSCKFWInstance *fwInstance,
   116   CK_ATTRIBUTE_TYPE attribute,
   117   CK_RV *pError
   118 )
   119 {
   120   builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
   121   CK_ULONG i;
   123   for( i = 0; i < io->n; i++ ) {
   124     if( attribute == io->types[i] ) {
   125       return (CK_ULONG)(io->items[i].size);
   126     }
   127   }
   129   *pError = CKR_ATTRIBUTE_TYPE_INVALID;
   130   return 0;
   131 }
   133 static NSSCKFWItem
   134 builtins_mdObject_GetAttribute
   135 (
   136   NSSCKMDObject *mdObject,
   137   NSSCKFWObject *fwObject,
   138   NSSCKMDSession *mdSession,
   139   NSSCKFWSession *fwSession,
   140   NSSCKMDToken *mdToken,
   141   NSSCKFWToken *fwToken,
   142   NSSCKMDInstance *mdInstance,
   143   NSSCKFWInstance *fwInstance,
   144   CK_ATTRIBUTE_TYPE attribute,
   145   CK_RV *pError
   146 )
   147 {
   148   NSSCKFWItem mdItem;
   149   builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
   150   CK_ULONG i;
   152   mdItem.needsFreeing = PR_FALSE;
   153   mdItem.item = (NSSItem*) NULL;
   155   for( i = 0; i < io->n; i++ ) {
   156     if( attribute == io->types[i] ) {
   157       mdItem.item = (NSSItem*) &io->items[i];
   158       return mdItem;
   159     }
   160   }
   162   *pError = CKR_ATTRIBUTE_TYPE_INVALID;
   163   return mdItem;
   164 }
   166 static CK_ULONG
   167 builtins_mdObject_GetObjectSize
   168 (
   169   NSSCKMDObject *mdObject,
   170   NSSCKFWObject *fwObject,
   171   NSSCKMDSession *mdSession,
   172   NSSCKFWSession *fwSession,
   173   NSSCKMDToken *mdToken,
   174   NSSCKFWToken *fwToken,
   175   NSSCKMDInstance *mdInstance,
   176   NSSCKFWInstance *fwInstance,
   177   CK_RV *pError
   178 )
   179 {
   180   builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc;
   181   CK_ULONG i;
   182   CK_ULONG rv = sizeof(CK_ULONG);
   184   for( i = 0; i < io->n; i++ ) {
   185     rv += sizeof(CK_ATTRIBUTE_TYPE) + sizeof(NSSItem) + io->items[i].size;
   186   }
   188   return rv;
   189 }
   191 static const NSSCKMDObject
   192 builtins_prototype_mdObject = {
   193   (void *)NULL, /* etc */
   194   NULL, /* Finalize */
   195   builtins_mdObject_Destroy,
   196   builtins_mdObject_IsTokenObject,
   197   builtins_mdObject_GetAttributeCount,
   198   builtins_mdObject_GetAttributeTypes,
   199   builtins_mdObject_GetAttributeSize,
   200   builtins_mdObject_GetAttribute,
   201   NULL, /* FreeAttribute */
   202   NULL, /* SetAttribute */
   203   builtins_mdObject_GetObjectSize,
   204   (void *)NULL /* null terminator */
   205 };
   207 NSS_IMPLEMENT NSSCKMDObject *
   208 nss_builtins_CreateMDObject
   209 (
   210   NSSArena *arena,
   211   builtinsInternalObject *io,
   212   CK_RV *pError
   213 )
   214 {
   215   if ( (void*)NULL == io->mdObject.etc) {
   216     (void) nsslibc_memcpy(&io->mdObject,&builtins_prototype_mdObject,
   217 					sizeof(builtins_prototype_mdObject));
   218     io->mdObject.etc = (void *)io;
   219   }
   221   return &io->mdObject;
   222 }

mercurial