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