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.

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

mercurial