| OLD | NEW |
| 1 /* This Source Code Form is subject to the terms of the Mozilla Public | 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 | 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/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 4 | 4 |
| 5 /* | 5 /* |
| 6 * instance.c | 6 * instance.c |
| 7 * | 7 * |
| 8 * This file implements the NSSCKFWInstance type and methods. | 8 * This file implements the NSSCKFWInstance type and methods. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 * NSSCKFWInstance_CreateMutex | 26 * NSSCKFWInstance_CreateMutex |
| 27 * NSSCKFWInstance_GetConfigurationData | 27 * NSSCKFWInstance_GetConfigurationData |
| 28 * NSSCKFWInstance_GetInitArgs | 28 * NSSCKFWInstance_GetInitArgs |
| 29 * | 29 * |
| 30 * -- implement public accessors -- | 30 * -- implement public accessors -- |
| 31 * nssCKFWInstance_GetMDInstance | 31 * nssCKFWInstance_GetMDInstance |
| 32 * nssCKFWInstance_GetArena | 32 * nssCKFWInstance_GetArena |
| 33 * nssCKFWInstance_MayCreatePthreads | 33 * nssCKFWInstance_MayCreatePthreads |
| 34 * nssCKFWInstance_CreateMutex | 34 * nssCKFWInstance_CreateMutex |
| 35 * nssCKFWInstance_GetConfigurationData | 35 * nssCKFWInstance_GetConfigurationData |
| 36 * nssCKFWInstance_GetInitArgs | 36 * nssCKFWInstance_GetInitArgs |
| 37 * | 37 * |
| 38 * -- private accessors -- | 38 * -- private accessors -- |
| 39 * nssCKFWInstance_CreateSessionHandle | 39 * nssCKFWInstance_CreateSessionHandle |
| 40 * nssCKFWInstance_ResolveSessionHandle | 40 * nssCKFWInstance_ResolveSessionHandle |
| 41 * nssCKFWInstance_DestroySessionHandle | 41 * nssCKFWInstance_DestroySessionHandle |
| 42 * nssCKFWInstance_FindSessionHandle | 42 * nssCKFWInstance_FindSessionHandle |
| 43 * nssCKFWInstance_CreateObjectHandle | 43 * nssCKFWInstance_CreateObjectHandle |
| 44 * nssCKFWInstance_ResolveObjectHandle | 44 * nssCKFWInstance_ResolveObjectHandle |
| 45 * nssCKFWInstance_DestroyObjectHandle | 45 * nssCKFWInstance_DestroyObjectHandle |
| 46 * | 46 * |
| 47 * -- module fronts -- | 47 * -- module fronts -- |
| 48 * nssCKFWInstance_GetNSlots | 48 * nssCKFWInstance_GetNSlots |
| 49 * nssCKFWInstance_GetCryptokiVersion | 49 * nssCKFWInstance_GetCryptokiVersion |
| 50 * nssCKFWInstance_GetManufacturerID | 50 * nssCKFWInstance_GetManufacturerID |
| 51 * nssCKFWInstance_GetFlags | 51 * nssCKFWInstance_GetFlags |
| 52 * nssCKFWInstance_GetLibraryDescription | 52 * nssCKFWInstance_GetLibraryDescription |
| 53 * nssCKFWInstance_GetLibraryVersion | 53 * nssCKFWInstance_GetLibraryVersion |
| 54 * nssCKFWInstance_GetModuleHandlesSessionObjects | 54 * nssCKFWInstance_GetModuleHandlesSessionObjects |
| 55 * nssCKFWInstance_GetSlots | 55 * nssCKFWInstance_GetSlots |
| 56 * nssCKFWInstance_WaitForSlotEvent | 56 * nssCKFWInstance_WaitForSlotEvent |
| 57 * | 57 * |
| 58 * -- debugging versions only -- | 58 * -- debugging versions only -- |
| 59 * nssCKFWInstance_verifyPointer | 59 * nssCKFWInstance_verifyPointer |
| 60 */ | 60 */ |
| 61 | 61 |
| 62 struct NSSCKFWInstanceStr { | 62 struct NSSCKFWInstanceStr { |
| 63 NSSCKFWMutex *mutex; | 63 NSSCKFWMutex *mutex; |
| 64 NSSArena *arena; | 64 NSSArena *arena; |
| 65 NSSCKMDInstance *mdInstance; | 65 NSSCKMDInstance *mdInstance; |
| 66 CK_C_INITIALIZE_ARGS_PTR pInitArgs; | 66 CK_C_INITIALIZE_ARGS_PTR pInitArgs; |
| 67 CK_C_INITIALIZE_ARGS initArgs; | 67 CK_C_INITIALIZE_ARGS initArgs; |
| 68 CryptokiLockingState LockingState; | 68 CryptokiLockingState LockingState; |
| 69 CK_BBOOL mayCreatePthreads; | 69 CK_BBOOL mayCreatePthreads; |
| 70 NSSUTF8 *configurationData; | 70 NSSUTF8 *configurationData; |
| 71 CK_ULONG nSlots; | 71 CK_ULONG nSlots; |
| 72 NSSCKFWSlot **fwSlotList; | 72 NSSCKFWSlot **fwSlotList; |
| 73 NSSCKMDSlot **mdSlotList; | 73 NSSCKMDSlot **mdSlotList; |
| 74 CK_BBOOL moduleHandlesSessionObjects; | 74 CK_BBOOL moduleHandlesSessionObjects; |
| 75 | 75 |
| 76 /* | 76 /* |
| 77 * Everything above is set at creation time, and then not modified. | 77 * Everything above is set at creation time, and then not modified. |
| 78 * The invariants the mutex protects are: | 78 * The invariants the mutex protects are: |
| 79 * | 79 * |
| 80 * 1) Each of the cached descriptions (versions, etc.) are in an | 80 * 1) Each of the cached descriptions (versions, etc.) are in an |
| 81 * internally consistant state. | 81 * internally consistant state. |
| 82 * | 82 * |
| 83 * 2) The session handle hashes and count are consistant | 83 * 2) The session handle hashes and count are consistant |
| 84 * | 84 * |
| 85 * 3) The object handle hashes and count are consistant. | 85 * 3) The object handle hashes and count are consistant. |
| 86 * | 86 * |
| 87 * I could use multiple locks, but let's wait to see if that's | 87 * I could use multiple locks, but let's wait to see if that's |
| 88 * really necessary. | 88 * really necessary. |
| 89 * | 89 * |
| 90 * Note that the calls accessing the cached descriptions will | 90 * Note that the calls accessing the cached descriptions will |
| 91 * call the NSSCKMDInstance methods with the mutex locked. Those | 91 * call the NSSCKMDInstance methods with the mutex locked. Those |
| 92 * methods may then call the public NSSCKFWInstance routines. | 92 * methods may then call the public NSSCKFWInstance routines. |
| 93 * Those public routines only access the constant data above, so | 93 * Those public routines only access the constant data above, so |
| 94 * there's no problem. But be careful if you add to this object; | 94 * there's no problem. But be careful if you add to this object; |
| 95 * mutexes are in general not reentrant, so don't create deadlock | 95 * mutexes are in general not reentrant, so don't create deadlock |
| 96 * situations. | 96 * situations. |
| 97 */ | 97 */ |
| 98 | 98 |
| 99 CK_VERSION cryptokiVersion; | 99 CK_VERSION cryptokiVersion; |
| 100 NSSUTF8 *manufacturerID; | 100 NSSUTF8 *manufacturerID; |
| 101 NSSUTF8 *libraryDescription; | 101 NSSUTF8 *libraryDescription; |
| 102 CK_VERSION libraryVersion; | 102 CK_VERSION libraryVersion; |
| 103 | 103 |
| 104 CK_ULONG lastSessionHandle; | 104 CK_ULONG lastSessionHandle; |
| 105 nssCKFWHash *sessionHandleHash; | 105 nssCKFWHash *sessionHandleHash; |
| 106 | 106 |
| 107 CK_ULONG lastObjectHandle; | 107 CK_ULONG lastObjectHandle; |
| 108 nssCKFWHash *objectHandleHash; | 108 nssCKFWHash *objectHandleHash; |
| 109 }; | 109 }; |
| 110 | 110 |
| 111 #ifdef DEBUG | 111 #ifdef DEBUG |
| 112 /* | 112 /* |
| 113 * But first, the pointer-tracking stuff. | 113 * But first, the pointer-tracking stuff. |
| 114 * | 114 * |
| 115 * NOTE: the pointer-tracking support in NSS/base currently relies | 115 * NOTE: the pointer-tracking support in NSS/base currently relies |
| 116 * upon NSPR's CallOnce support. That, however, relies upon NSPR's | 116 * upon NSPR's CallOnce support. That, however, relies upon NSPR's |
| 117 * locking, which is tied into the runtime. We need a pointer-tracker | 117 * locking, which is tied into the runtime. We need a pointer-tracker |
| 118 * implementation that uses the locks supplied through C_Initialize. | 118 * implementation that uses the locks supplied through C_Initialize. |
| 119 * That support, however, can be filled in later. So for now, I'll | 119 * That support, however, can be filled in later. So for now, I'll |
| 120 * just do this routines as no-ops. | 120 * just do this routines as no-ops. |
| 121 */ | 121 */ |
| 122 | 122 |
| 123 static CK_RV | 123 static CK_RV |
| 124 instance_add_pointer | 124 instance_add_pointer( |
| 125 ( | 125 const NSSCKFWInstance *fwInstance) |
| 126 const NSSCKFWInstance *fwInstance | |
| 127 ) | |
| 128 { | 126 { |
| 129 return CKR_OK; | 127 return CKR_OK; |
| 130 } | 128 } |
| 131 | 129 |
| 132 static CK_RV | 130 static CK_RV |
| 133 instance_remove_pointer | 131 instance_remove_pointer( |
| 134 ( | 132 const NSSCKFWInstance *fwInstance) |
| 135 const NSSCKFWInstance *fwInstance | |
| 136 ) | |
| 137 { | 133 { |
| 138 return CKR_OK; | 134 return CKR_OK; |
| 139 } | 135 } |
| 140 | 136 |
| 141 NSS_IMPLEMENT CK_RV | 137 NSS_IMPLEMENT CK_RV |
| 142 nssCKFWInstance_verifyPointer | 138 nssCKFWInstance_verifyPointer( |
| 143 ( | 139 const NSSCKFWInstance *fwInstance) |
| 144 const NSSCKFWInstance *fwInstance | |
| 145 ) | |
| 146 { | 140 { |
| 147 return CKR_OK; | 141 return CKR_OK; |
| 148 } | 142 } |
| 149 | 143 |
| 150 #endif /* DEBUG */ | 144 #endif /* DEBUG */ |
| 151 | 145 |
| 152 /* | 146 /* |
| 153 * nssCKFWInstance_Create | 147 * nssCKFWInstance_Create |
| 154 * | 148 * |
| 155 */ | 149 */ |
| 156 NSS_IMPLEMENT NSSCKFWInstance * | 150 NSS_IMPLEMENT NSSCKFWInstance * |
| 157 nssCKFWInstance_Create | 151 nssCKFWInstance_Create( |
| 158 ( | 152 CK_C_INITIALIZE_ARGS_PTR pInitArgs, |
| 159 CK_C_INITIALIZE_ARGS_PTR pInitArgs, | 153 CryptokiLockingState LockingState, |
| 160 CryptokiLockingState LockingState, | 154 NSSCKMDInstance *mdInstance, |
| 161 NSSCKMDInstance *mdInstance, | 155 CK_RV *pError) |
| 162 CK_RV *pError | |
| 163 ) | |
| 164 { | 156 { |
| 165 NSSCKFWInstance *fwInstance; | 157 NSSCKFWInstance *fwInstance; |
| 166 NSSArena *arena = (NSSArena *)NULL; | 158 NSSArena *arena = (NSSArena *)NULL; |
| 167 CK_ULONG i; | 159 CK_ULONG i; |
| 168 CK_BBOOL called_Initialize = CK_FALSE; | 160 CK_BBOOL called_Initialize = CK_FALSE; |
| 169 | 161 |
| 170 #ifdef NSSDEBUG | 162 #ifdef NSSDEBUG |
| 171 if( (CK_RV)NULL == pError ) { | 163 if ((CK_RV)NULL == pError) { |
| 172 return (NSSCKFWInstance *)NULL; | 164 return (NSSCKFWInstance *)NULL; |
| 173 } | 165 } |
| 174 | 166 |
| 175 if (!mdInstance) { | 167 if (!mdInstance) { |
| 176 *pError = CKR_ARGUMENTS_BAD; | 168 *pError = CKR_ARGUMENTS_BAD; |
| 177 return (NSSCKFWInstance *)NULL; | 169 return (NSSCKFWInstance *)NULL; |
| 178 } | 170 } |
| 179 #endif /* NSSDEBUG */ | 171 #endif /* NSSDEBUG */ |
| 180 | 172 |
| 181 arena = NSSArena_Create(); | 173 arena = NSSArena_Create(); |
| 182 if (!arena) { | 174 if (!arena) { |
| 183 *pError = CKR_HOST_MEMORY; | 175 *pError = CKR_HOST_MEMORY; |
| 184 return (NSSCKFWInstance *)NULL; | 176 return (NSSCKFWInstance *)NULL; |
| 185 } | |
| 186 | |
| 187 fwInstance = nss_ZNEW(arena, NSSCKFWInstance); | |
| 188 if (!fwInstance) { | |
| 189 goto nomem; | |
| 190 } | |
| 191 | |
| 192 fwInstance->arena = arena; | |
| 193 fwInstance->mdInstance = mdInstance; | |
| 194 | |
| 195 fwInstance->LockingState = LockingState; | |
| 196 if( (CK_C_INITIALIZE_ARGS_PTR)NULL != pInitArgs ) { | |
| 197 fwInstance->initArgs = *pInitArgs; | |
| 198 fwInstance->pInitArgs = &fwInstance->initArgs; | |
| 199 if( pInitArgs->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS ) { | |
| 200 fwInstance->mayCreatePthreads = CK_FALSE; | |
| 201 } else { | |
| 202 fwInstance->mayCreatePthreads = CK_TRUE; | |
| 203 } | |
| 204 fwInstance->configurationData = (NSSUTF8 *)(pInitArgs->pReserved); | |
| 205 } else { | |
| 206 fwInstance->mayCreatePthreads = CK_TRUE; | |
| 207 } | |
| 208 | |
| 209 fwInstance->mutex = nssCKFWMutex_Create(pInitArgs, LockingState, arena, | |
| 210 pError); | |
| 211 if (!fwInstance->mutex) { | |
| 212 if( CKR_OK == *pError ) { | |
| 213 *pError = CKR_GENERAL_ERROR; | |
| 214 } | |
| 215 goto loser; | |
| 216 } | |
| 217 | |
| 218 if (mdInstance->Initialize) { | |
| 219 *pError = mdInstance->Initialize(mdInstance, fwInstance, fwInstance->configu
rationData); | |
| 220 if( CKR_OK != *pError ) { | |
| 221 goto loser; | |
| 222 } | 177 } |
| 223 | 178 |
| 224 called_Initialize = CK_TRUE; | 179 fwInstance = nss_ZNEW(arena, NSSCKFWInstance); |
| 225 } | 180 if (!fwInstance) { |
| 226 | 181 goto nomem; |
| 227 if (mdInstance->ModuleHandlesSessionObjects) { | |
| 228 fwInstance->moduleHandlesSessionObjects = | |
| 229 mdInstance->ModuleHandlesSessionObjects(mdInstance, fwInstance); | |
| 230 } else { | |
| 231 fwInstance->moduleHandlesSessionObjects = CK_FALSE; | |
| 232 } | |
| 233 | |
| 234 if (!mdInstance->GetNSlots) { | |
| 235 /* That routine is required */ | |
| 236 *pError = CKR_GENERAL_ERROR; | |
| 237 goto loser; | |
| 238 } | |
| 239 | |
| 240 fwInstance->nSlots = mdInstance->GetNSlots(mdInstance, fwInstance, pError); | |
| 241 if( (CK_ULONG)0 == fwInstance->nSlots ) { | |
| 242 if( CKR_OK == *pError ) { | |
| 243 /* Zero is not a legitimate answer */ | |
| 244 *pError = CKR_GENERAL_ERROR; | |
| 245 } | |
| 246 goto loser; | |
| 247 } | |
| 248 | |
| 249 fwInstance->fwSlotList = nss_ZNEWARRAY(arena, NSSCKFWSlot *, fwInstance->nSlot
s); | |
| 250 if( (NSSCKFWSlot **)NULL == fwInstance->fwSlotList ) { | |
| 251 goto nomem; | |
| 252 } | |
| 253 | |
| 254 fwInstance->mdSlotList = nss_ZNEWARRAY(arena, NSSCKMDSlot *, fwInstance->nSlot
s); | |
| 255 if( (NSSCKMDSlot **)NULL == fwInstance->mdSlotList ) { | |
| 256 goto nomem; | |
| 257 } | |
| 258 | |
| 259 fwInstance->sessionHandleHash = nssCKFWHash_Create(fwInstance, | |
| 260 fwInstance->arena, pError); | |
| 261 if (!fwInstance->sessionHandleHash) { | |
| 262 goto loser; | |
| 263 } | |
| 264 | |
| 265 fwInstance->objectHandleHash = nssCKFWHash_Create(fwInstance, | |
| 266 fwInstance->arena, pError); | |
| 267 if (!fwInstance->objectHandleHash) { | |
| 268 goto loser; | |
| 269 } | |
| 270 | |
| 271 if (!mdInstance->GetSlots) { | |
| 272 /* That routine is required */ | |
| 273 *pError = CKR_GENERAL_ERROR; | |
| 274 goto loser; | |
| 275 } | |
| 276 | |
| 277 *pError = mdInstance->GetSlots(mdInstance, fwInstance, fwInstance->mdSlotList)
; | |
| 278 if( CKR_OK != *pError ) { | |
| 279 goto loser; | |
| 280 } | |
| 281 | |
| 282 for( i = 0; i < fwInstance->nSlots; i++ ) { | |
| 283 NSSCKMDSlot *mdSlot = fwInstance->mdSlotList[i]; | |
| 284 | |
| 285 if (!mdSlot) { | |
| 286 *pError = CKR_GENERAL_ERROR; | |
| 287 goto loser; | |
| 288 } | 182 } |
| 289 | 183 |
| 290 fwInstance->fwSlotList[i] = nssCKFWSlot_Create(fwInstance, mdSlot, i, pError
); | 184 fwInstance->arena = arena; |
| 291 if( CKR_OK != *pError ) { | 185 fwInstance->mdInstance = mdInstance; |
| 292 CK_ULONG j; | |
| 293 | 186 |
| 294 for( j = 0; j < i; j++ ) { | 187 fwInstance->LockingState = LockingState; |
| 295 (void)nssCKFWSlot_Destroy(fwInstance->fwSlotList[j]); | 188 if ((CK_C_INITIALIZE_ARGS_PTR)NULL != pInitArgs) { |
| 296 } | 189 fwInstance->initArgs = *pInitArgs; |
| 190 fwInstance->pInitArgs = &fwInstance->initArgs; |
| 191 if (pInitArgs->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS) { |
| 192 fwInstance->mayCreatePthreads = CK_FALSE; |
| 193 } else { |
| 194 fwInstance->mayCreatePthreads = CK_TRUE; |
| 195 } |
| 196 fwInstance->configurationData = (NSSUTF8 *)(pInitArgs->pReserved); |
| 197 } else { |
| 198 fwInstance->mayCreatePthreads = CK_TRUE; |
| 199 } |
| 297 | 200 |
| 298 for( j = i; j < fwInstance->nSlots; j++ ) { | 201 fwInstance->mutex = nssCKFWMutex_Create(pInitArgs, LockingState, arena, |
| 299 NSSCKMDSlot *mds = fwInstance->mdSlotList[j]; | 202 pError); |
| 300 if (mds->Destroy) { | 203 if (!fwInstance->mutex) { |
| 301 mds->Destroy(mds, (NSSCKFWSlot *)NULL, mdInstance, fwInstance); | 204 if (CKR_OK == *pError) { |
| 205 *pError = CKR_GENERAL_ERROR; |
| 302 } | 206 } |
| 303 } | 207 goto loser; |
| 208 } |
| 304 | 209 |
| 305 goto loser; | 210 if (mdInstance->Initialize) { |
| 211 *pError = mdInstance->Initialize(mdInstance, fwInstance, fwInstance->con
figurationData); |
| 212 if (CKR_OK != *pError) { |
| 213 goto loser; |
| 214 } |
| 215 |
| 216 called_Initialize = CK_TRUE; |
| 306 } | 217 } |
| 307 } | 218 |
| 219 if (mdInstance->ModuleHandlesSessionObjects) { |
| 220 fwInstance->moduleHandlesSessionObjects = |
| 221 mdInstance->ModuleHandlesSessionObjects(mdInstance, fwInstance); |
| 222 } else { |
| 223 fwInstance->moduleHandlesSessionObjects = CK_FALSE; |
| 224 } |
| 225 |
| 226 if (!mdInstance->GetNSlots) { |
| 227 /* That routine is required */ |
| 228 *pError = CKR_GENERAL_ERROR; |
| 229 goto loser; |
| 230 } |
| 231 |
| 232 fwInstance->nSlots = mdInstance->GetNSlots(mdInstance, fwInstance, pError); |
| 233 if ((CK_ULONG)0 == fwInstance->nSlots) { |
| 234 if (CKR_OK == *pError) { |
| 235 /* Zero is not a legitimate answer */ |
| 236 *pError = CKR_GENERAL_ERROR; |
| 237 } |
| 238 goto loser; |
| 239 } |
| 240 |
| 241 fwInstance->fwSlotList = nss_ZNEWARRAY(arena, NSSCKFWSlot *, fwInstance->nSl
ots); |
| 242 if ((NSSCKFWSlot **)NULL == fwInstance->fwSlotList) { |
| 243 goto nomem; |
| 244 } |
| 245 |
| 246 fwInstance->mdSlotList = nss_ZNEWARRAY(arena, NSSCKMDSlot *, fwInstance->nSl
ots); |
| 247 if ((NSSCKMDSlot **)NULL == fwInstance->mdSlotList) { |
| 248 goto nomem; |
| 249 } |
| 250 |
| 251 fwInstance->sessionHandleHash = nssCKFWHash_Create(fwInstance, |
| 252 fwInstance->arena, pError
); |
| 253 if (!fwInstance->sessionHandleHash) { |
| 254 goto loser; |
| 255 } |
| 256 |
| 257 fwInstance->objectHandleHash = nssCKFWHash_Create(fwInstance, |
| 258 fwInstance->arena, pError)
; |
| 259 if (!fwInstance->objectHandleHash) { |
| 260 goto loser; |
| 261 } |
| 262 |
| 263 if (!mdInstance->GetSlots) { |
| 264 /* That routine is required */ |
| 265 *pError = CKR_GENERAL_ERROR; |
| 266 goto loser; |
| 267 } |
| 268 |
| 269 *pError = mdInstance->GetSlots(mdInstance, fwInstance, fwInstance->mdSlotLis
t); |
| 270 if (CKR_OK != *pError) { |
| 271 goto loser; |
| 272 } |
| 273 |
| 274 for (i = 0; i < fwInstance->nSlots; i++) { |
| 275 NSSCKMDSlot *mdSlot = fwInstance->mdSlotList[i]; |
| 276 |
| 277 if (!mdSlot) { |
| 278 *pError = CKR_GENERAL_ERROR; |
| 279 goto loser; |
| 280 } |
| 281 |
| 282 fwInstance->fwSlotList[i] = nssCKFWSlot_Create(fwInstance, mdSlot, i, pE
rror); |
| 283 if (CKR_OK != *pError) { |
| 284 CK_ULONG j; |
| 285 |
| 286 for (j = 0; j < i; j++) { |
| 287 (void)nssCKFWSlot_Destroy(fwInstance->fwSlotList[j]); |
| 288 } |
| 289 |
| 290 for (j = i; j < fwInstance->nSlots; j++) { |
| 291 NSSCKMDSlot *mds = fwInstance->mdSlotList[j]; |
| 292 if (mds->Destroy) { |
| 293 mds->Destroy(mds, (NSSCKFWSlot *)NULL, mdInstance, fwInstanc
e); |
| 294 } |
| 295 } |
| 296 |
| 297 goto loser; |
| 298 } |
| 299 } |
| 308 | 300 |
| 309 #ifdef DEBUG | 301 #ifdef DEBUG |
| 310 *pError = instance_add_pointer(fwInstance); | 302 *pError = instance_add_pointer(fwInstance); |
| 311 if( CKR_OK != *pError ) { | 303 if (CKR_OK != *pError) { |
| 312 for( i = 0; i < fwInstance->nSlots; i++ ) { | 304 for (i = 0; i < fwInstance->nSlots; i++) { |
| 313 (void)nssCKFWSlot_Destroy(fwInstance->fwSlotList[i]); | 305 (void)nssCKFWSlot_Destroy(fwInstance->fwSlotList[i]); |
| 306 } |
| 307 |
| 308 goto loser; |
| 314 } | 309 } |
| 315 | |
| 316 goto loser; | |
| 317 } | |
| 318 #endif /* DEBUG */ | 310 #endif /* DEBUG */ |
| 319 | 311 |
| 320 *pError = CKR_OK; | 312 *pError = CKR_OK; |
| 321 return fwInstance; | 313 return fwInstance; |
| 322 | 314 |
| 323 nomem: | 315 nomem: |
| 324 *pError = CKR_HOST_MEMORY; | 316 *pError = CKR_HOST_MEMORY; |
| 325 /*FALLTHROUGH*/ | 317 /*FALLTHROUGH*/ |
| 326 loser: | 318 loser: |
| 327 | 319 |
| 328 if( CK_TRUE == called_Initialize ) { | 320 if (CK_TRUE == called_Initialize) { |
| 329 if (mdInstance->Finalize) { | 321 if (mdInstance->Finalize) { |
| 330 mdInstance->Finalize(mdInstance, fwInstance); | 322 mdInstance->Finalize(mdInstance, fwInstance); |
| 323 } |
| 331 } | 324 } |
| 332 } | |
| 333 | 325 |
| 334 if (fwInstance && fwInstance->mutex) { | 326 if (fwInstance && fwInstance->mutex) { |
| 335 nssCKFWMutex_Destroy(fwInstance->mutex); | 327 nssCKFWMutex_Destroy(fwInstance->mutex); |
| 336 } | 328 } |
| 337 | 329 |
| 338 if (arena) { | 330 if (arena) { |
| 339 (void)NSSArena_Destroy(arena); | 331 (void)NSSArena_Destroy(arena); |
| 340 } | 332 } |
| 341 return (NSSCKFWInstance *)NULL; | 333 return (NSSCKFWInstance *)NULL; |
| 342 } | 334 } |
| 343 | 335 |
| 344 /* | 336 /* |
| 345 * nssCKFWInstance_Destroy | 337 * nssCKFWInstance_Destroy |
| 346 * | 338 * |
| 347 */ | 339 */ |
| 348 NSS_IMPLEMENT CK_RV | 340 NSS_IMPLEMENT CK_RV |
| 349 nssCKFWInstance_Destroy | 341 nssCKFWInstance_Destroy( |
| 350 ( | 342 NSSCKFWInstance *fwInstance) |
| 351 NSSCKFWInstance *fwInstance | |
| 352 ) | |
| 353 { | 343 { |
| 354 #ifdef NSSDEBUG | 344 #ifdef NSSDEBUG |
| 355 CK_RV error = CKR_OK; | 345 CK_RV error = CKR_OK; |
| 356 #endif /* NSSDEBUG */ | 346 #endif /* NSSDEBUG */ |
| 357 CK_ULONG i; | 347 CK_ULONG i; |
| 358 | 348 |
| 359 #ifdef NSSDEBUG | 349 #ifdef NSSDEBUG |
| 360 error = nssCKFWInstance_verifyPointer(fwInstance); | 350 error = nssCKFWInstance_verifyPointer(fwInstance); |
| 361 if( CKR_OK != error ) { | 351 if (CKR_OK != error) { |
| 362 return error; | 352 return error; |
| 363 } | 353 } |
| 364 #endif /* NSSDEBUG */ | 354 #endif /* NSSDEBUG */ |
| 365 | 355 |
| 366 nssCKFWMutex_Destroy(fwInstance->mutex); | 356 nssCKFWMutex_Destroy(fwInstance->mutex); |
| 367 | 357 |
| 368 for( i = 0; i < fwInstance->nSlots; i++ ) { | 358 for (i = 0; i < fwInstance->nSlots; i++) { |
| 369 (void)nssCKFWSlot_Destroy(fwInstance->fwSlotList[i]); | 359 (void)nssCKFWSlot_Destroy(fwInstance->fwSlotList[i]); |
| 370 } | 360 } |
| 371 | 361 |
| 372 if (fwInstance->mdInstance->Finalize) { | 362 if (fwInstance->mdInstance->Finalize) { |
| 373 fwInstance->mdInstance->Finalize(fwInstance->mdInstance, fwInstance); | 363 fwInstance->mdInstance->Finalize(fwInstance->mdInstance, fwInstance); |
| 374 } | 364 } |
| 375 | 365 |
| 376 if (fwInstance->sessionHandleHash) { | 366 if (fwInstance->sessionHandleHash) { |
| 377 nssCKFWHash_Destroy(fwInstance->sessionHandleHash); | 367 nssCKFWHash_Destroy(fwInstance->sessionHandleHash); |
| 378 } | 368 } |
| 379 | 369 |
| 380 if (fwInstance->objectHandleHash) { | 370 if (fwInstance->objectHandleHash) { |
| 381 nssCKFWHash_Destroy(fwInstance->objectHandleHash); | 371 nssCKFWHash_Destroy(fwInstance->objectHandleHash); |
| 382 } | 372 } |
| 383 | 373 |
| 384 #ifdef DEBUG | 374 #ifdef DEBUG |
| 385 (void)instance_remove_pointer(fwInstance); | 375 (void)instance_remove_pointer(fwInstance); |
| 386 #endif /* DEBUG */ | 376 #endif /* DEBUG */ |
| 387 | 377 |
| 388 (void)NSSArena_Destroy(fwInstance->arena); | 378 (void)NSSArena_Destroy(fwInstance->arena); |
| 389 return CKR_OK; | 379 return CKR_OK; |
| 390 } | 380 } |
| 391 | 381 |
| 392 /* | 382 /* |
| 393 * nssCKFWInstance_GetMDInstance | 383 * nssCKFWInstance_GetMDInstance |
| 394 * | 384 * |
| 395 */ | 385 */ |
| 396 NSS_IMPLEMENT NSSCKMDInstance * | 386 NSS_IMPLEMENT NSSCKMDInstance * |
| 397 nssCKFWInstance_GetMDInstance | 387 nssCKFWInstance_GetMDInstance( |
| 398 ( | 388 NSSCKFWInstance *fwInstance) |
| 399 NSSCKFWInstance *fwInstance | |
| 400 ) | |
| 401 { | 389 { |
| 402 #ifdef NSSDEBUG | 390 #ifdef NSSDEBUG |
| 403 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 391 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 404 return (NSSCKMDInstance *)NULL; | 392 return (NSSCKMDInstance *)NULL; |
| 405 } | 393 } |
| 406 #endif /* NSSDEBUG */ | 394 #endif /* NSSDEBUG */ |
| 407 | 395 |
| 408 return fwInstance->mdInstance; | 396 return fwInstance->mdInstance; |
| 409 } | 397 } |
| 410 | 398 |
| 411 /* | 399 /* |
| 412 * nssCKFWInstance_GetArena | 400 * nssCKFWInstance_GetArena |
| 413 * | 401 * |
| 414 */ | 402 */ |
| 415 NSS_IMPLEMENT NSSArena * | 403 NSS_IMPLEMENT NSSArena * |
| 416 nssCKFWInstance_GetArena | 404 nssCKFWInstance_GetArena( |
| 417 ( | 405 NSSCKFWInstance *fwInstance, |
| 418 NSSCKFWInstance *fwInstance, | 406 CK_RV *pError) |
| 419 CK_RV *pError | |
| 420 ) | |
| 421 { | 407 { |
| 422 #ifdef NSSDEBUG | 408 #ifdef NSSDEBUG |
| 423 if (!pError) { | 409 if (!pError) { |
| 424 return (NSSArena *)NULL; | 410 return (NSSArena *)NULL; |
| 425 } | 411 } |
| 426 | 412 |
| 427 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 413 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 428 if( CKR_OK != *pError ) { | 414 if (CKR_OK != *pError) { |
| 429 return (NSSArena *)NULL; | 415 return (NSSArena *)NULL; |
| 430 } | 416 } |
| 431 #endif /* NSSDEBUG */ | 417 #endif /* NSSDEBUG */ |
| 432 | 418 |
| 433 *pError = CKR_OK; | 419 *pError = CKR_OK; |
| 434 return fwInstance->arena; | 420 return fwInstance->arena; |
| 435 } | 421 } |
| 436 | 422 |
| 437 /* | 423 /* |
| 438 * nssCKFWInstance_MayCreatePthreads | 424 * nssCKFWInstance_MayCreatePthreads |
| 439 * | 425 * |
| 440 */ | 426 */ |
| 441 NSS_IMPLEMENT CK_BBOOL | 427 NSS_IMPLEMENT CK_BBOOL |
| 442 nssCKFWInstance_MayCreatePthreads | 428 nssCKFWInstance_MayCreatePthreads( |
| 443 ( | 429 NSSCKFWInstance *fwInstance) |
| 444 NSSCKFWInstance *fwInstance | |
| 445 ) | |
| 446 { | 430 { |
| 447 #ifdef NSSDEBUG | 431 #ifdef NSSDEBUG |
| 448 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 432 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 449 return CK_FALSE; | 433 return CK_FALSE; |
| 450 } | 434 } |
| 451 #endif /* NSSDEBUG */ | 435 #endif /* NSSDEBUG */ |
| 452 | 436 |
| 453 return fwInstance->mayCreatePthreads; | 437 return fwInstance->mayCreatePthreads; |
| 454 } | 438 } |
| 455 | 439 |
| 456 /* | 440 /* |
| 457 * nssCKFWInstance_CreateMutex | 441 * nssCKFWInstance_CreateMutex |
| 458 * | 442 * |
| 459 */ | 443 */ |
| 460 NSS_IMPLEMENT NSSCKFWMutex * | 444 NSS_IMPLEMENT NSSCKFWMutex * |
| 461 nssCKFWInstance_CreateMutex | 445 nssCKFWInstance_CreateMutex( |
| 462 ( | 446 NSSCKFWInstance *fwInstance, |
| 463 NSSCKFWInstance *fwInstance, | 447 NSSArena *arena, |
| 464 NSSArena *arena, | 448 CK_RV *pError) |
| 465 CK_RV *pError | |
| 466 ) | |
| 467 { | 449 { |
| 468 NSSCKFWMutex *mutex; | 450 NSSCKFWMutex *mutex; |
| 469 | 451 |
| 470 #ifdef NSSDEBUG | 452 #ifdef NSSDEBUG |
| 471 if (!pError) { | 453 if (!pError) { |
| 472 return (NSSCKFWMutex *)NULL; | 454 return (NSSCKFWMutex *)NULL; |
| 473 } | 455 } |
| 474 | 456 |
| 475 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 457 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 476 if( CKR_OK != *pError ) { | 458 if (CKR_OK != *pError) { |
| 477 return (NSSCKFWMutex *)NULL; | 459 return (NSSCKFWMutex *)NULL; |
| 478 } | 460 } |
| 479 #endif /* NSSDEBUG */ | 461 #endif /* NSSDEBUG */ |
| 480 | 462 |
| 481 mutex = nssCKFWMutex_Create(fwInstance->pInitArgs, fwInstance->LockingState, | 463 mutex = nssCKFWMutex_Create(fwInstance->pInitArgs, fwInstance->LockingState, |
| 482 arena, pError); | 464 arena, pError); |
| 483 if (!mutex) { | 465 if (!mutex) { |
| 484 if( CKR_OK == *pError ) { | 466 if (CKR_OK == *pError) { |
| 485 *pError = CKR_GENERAL_ERROR; | 467 *pError = CKR_GENERAL_ERROR; |
| 468 } |
| 469 |
| 470 return (NSSCKFWMutex *)NULL; |
| 486 } | 471 } |
| 487 | 472 |
| 488 return (NSSCKFWMutex *)NULL; | 473 return mutex; |
| 489 } | |
| 490 | |
| 491 return mutex; | |
| 492 } | 474 } |
| 493 | 475 |
| 494 /* | 476 /* |
| 495 * nssCKFWInstance_GetConfigurationData | 477 * nssCKFWInstance_GetConfigurationData |
| 496 * | 478 * |
| 497 */ | 479 */ |
| 498 NSS_IMPLEMENT NSSUTF8 * | 480 NSS_IMPLEMENT NSSUTF8 * |
| 499 nssCKFWInstance_GetConfigurationData | 481 nssCKFWInstance_GetConfigurationData( |
| 500 ( | 482 NSSCKFWInstance *fwInstance) |
| 501 NSSCKFWInstance *fwInstance | |
| 502 ) | |
| 503 { | 483 { |
| 504 #ifdef NSSDEBUG | 484 #ifdef NSSDEBUG |
| 505 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 485 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 506 return (NSSUTF8 *)NULL; | 486 return (NSSUTF8 *)NULL; |
| 507 } | 487 } |
| 508 #endif /* NSSDEBUG */ | 488 #endif /* NSSDEBUG */ |
| 509 | 489 |
| 510 return fwInstance->configurationData; | 490 return fwInstance->configurationData; |
| 511 } | 491 } |
| 512 | 492 |
| 513 /* | 493 /* |
| 514 * nssCKFWInstance_GetInitArgs | 494 * nssCKFWInstance_GetInitArgs |
| 515 * | 495 * |
| 516 */ | 496 */ |
| 517 CK_C_INITIALIZE_ARGS_PTR | 497 CK_C_INITIALIZE_ARGS_PTR |
| 518 nssCKFWInstance_GetInitArgs | 498 nssCKFWInstance_GetInitArgs( |
| 519 ( | 499 NSSCKFWInstance *fwInstance) |
| 520 NSSCKFWInstance *fwInstance | |
| 521 ) | |
| 522 { | 500 { |
| 523 #ifdef NSSDEBUG | 501 #ifdef NSSDEBUG |
| 524 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 502 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 525 return (CK_C_INITIALIZE_ARGS_PTR)NULL; | 503 return (CK_C_INITIALIZE_ARGS_PTR)NULL; |
| 526 } | 504 } |
| 527 #endif /* NSSDEBUG */ | 505 #endif /* NSSDEBUG */ |
| 528 | 506 |
| 529 return fwInstance->pInitArgs; | 507 return fwInstance->pInitArgs; |
| 530 } | 508 } |
| 531 | 509 |
| 532 /* | 510 /* |
| 533 * nssCKFWInstance_CreateSessionHandle | 511 * nssCKFWInstance_CreateSessionHandle |
| 534 * | 512 * |
| 535 */ | 513 */ |
| 536 NSS_IMPLEMENT CK_SESSION_HANDLE | 514 NSS_IMPLEMENT CK_SESSION_HANDLE |
| 537 nssCKFWInstance_CreateSessionHandle | 515 nssCKFWInstance_CreateSessionHandle( |
| 538 ( | 516 NSSCKFWInstance *fwInstance, |
| 539 NSSCKFWInstance *fwInstance, | 517 NSSCKFWSession *fwSession, |
| 540 NSSCKFWSession *fwSession, | 518 CK_RV *pError) |
| 541 CK_RV *pError | |
| 542 ) | |
| 543 { | 519 { |
| 544 CK_SESSION_HANDLE hSession; | 520 CK_SESSION_HANDLE hSession; |
| 545 | 521 |
| 546 #ifdef NSSDEBUG | 522 #ifdef NSSDEBUG |
| 547 if (!pError) { | 523 if (!pError) { |
| 548 return (CK_SESSION_HANDLE)0; | 524 return (CK_SESSION_HANDLE)0; |
| 549 } | 525 } |
| 550 | 526 |
| 551 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 527 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 552 if( CKR_OK != *pError ) { | 528 if (CKR_OK != *pError) { |
| 553 return (CK_SESSION_HANDLE)0; | 529 return (CK_SESSION_HANDLE)0; |
| 554 } | 530 } |
| 555 #endif /* NSSDEBUG */ | 531 #endif /* NSSDEBUG */ |
| 556 | 532 |
| 557 *pError = nssCKFWMutex_Lock(fwInstance->mutex); | 533 *pError = nssCKFWMutex_Lock(fwInstance->mutex); |
| 558 if( CKR_OK != *pError ) { | 534 if (CKR_OK != *pError) { |
| 559 return (CK_SESSION_HANDLE)0; | 535 return (CK_SESSION_HANDLE)0; |
| 560 } | 536 } |
| 561 | 537 |
| 562 hSession = ++(fwInstance->lastSessionHandle); | 538 hSession = ++(fwInstance->lastSessionHandle); |
| 563 | 539 |
| 564 /* Alan would say I should unlock for this call. */ | 540 /* Alan would say I should unlock for this call. */ |
| 565 | |
| 566 *pError = nssCKFWSession_SetHandle(fwSession, hSession); | |
| 567 if( CKR_OK != *pError ) { | |
| 568 goto done; | |
| 569 } | |
| 570 | 541 |
| 571 *pError = nssCKFWHash_Add(fwInstance->sessionHandleHash, | 542 *pError = nssCKFWSession_SetHandle(fwSession, hSession); |
| 572 (const void *)hSession, (const void *)fwSession); | 543 if (CKR_OK != *pError) { |
| 573 if( CKR_OK != *pError ) { | 544 goto done; |
| 574 hSession = (CK_SESSION_HANDLE)0; | 545 } |
| 575 goto done; | |
| 576 } | |
| 577 | 546 |
| 578 done: | 547 *pError = nssCKFWHash_Add(fwInstance->sessionHandleHash, |
| 579 nssCKFWMutex_Unlock(fwInstance->mutex); | 548 (const void *)hSession, (const void *)fwSession); |
| 580 return hSession; | 549 if (CKR_OK != *pError) { |
| 550 hSession = (CK_SESSION_HANDLE)0; |
| 551 goto done; |
| 552 } |
| 553 |
| 554 done: |
| 555 nssCKFWMutex_Unlock(fwInstance->mutex); |
| 556 return hSession; |
| 581 } | 557 } |
| 582 | 558 |
| 583 /* | 559 /* |
| 584 * nssCKFWInstance_ResolveSessionHandle | 560 * nssCKFWInstance_ResolveSessionHandle |
| 585 * | 561 * |
| 586 */ | 562 */ |
| 587 NSS_IMPLEMENT NSSCKFWSession * | 563 NSS_IMPLEMENT NSSCKFWSession * |
| 588 nssCKFWInstance_ResolveSessionHandle | 564 nssCKFWInstance_ResolveSessionHandle( |
| 589 ( | 565 NSSCKFWInstance *fwInstance, |
| 590 NSSCKFWInstance *fwInstance, | 566 CK_SESSION_HANDLE hSession) |
| 591 CK_SESSION_HANDLE hSession | |
| 592 ) | |
| 593 { | 567 { |
| 594 NSSCKFWSession *fwSession; | 568 NSSCKFWSession *fwSession; |
| 595 | 569 |
| 596 #ifdef NSSDEBUG | 570 #ifdef NSSDEBUG |
| 597 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 571 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 598 return (NSSCKFWSession *)NULL; | 572 return (NSSCKFWSession *)NULL; |
| 599 } | 573 } |
| 600 #endif /* NSSDEBUG */ | 574 #endif /* NSSDEBUG */ |
| 601 | 575 |
| 602 if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { | 576 if (CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex)) { |
| 603 return (NSSCKFWSession *)NULL; | 577 return (NSSCKFWSession *)NULL; |
| 604 } | 578 } |
| 605 | 579 |
| 606 fwSession = (NSSCKFWSession *)nssCKFWHash_Lookup( | 580 fwSession = (NSSCKFWSession *)nssCKFWHash_Lookup( |
| 607 fwInstance->sessionHandleHash, (const void *)hSession); | 581 fwInstance->sessionHandleHash, (const void *)hSession); |
| 608 | 582 |
| 609 /* Assert(hSession == nssCKFWSession_GetHandle(fwSession)) */ | 583 /* Assert(hSession == nssCKFWSession_GetHandle(fwSession)) */ |
| 610 | 584 |
| 611 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | 585 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 612 | 586 |
| 613 return fwSession; | 587 return fwSession; |
| 614 } | 588 } |
| 615 | 589 |
| 616 /* | 590 /* |
| 617 * nssCKFWInstance_DestroySessionHandle | 591 * nssCKFWInstance_DestroySessionHandle |
| 618 * | 592 * |
| 619 */ | 593 */ |
| 620 NSS_IMPLEMENT void | 594 NSS_IMPLEMENT void |
| 621 nssCKFWInstance_DestroySessionHandle | 595 nssCKFWInstance_DestroySessionHandle( |
| 622 ( | 596 NSSCKFWInstance *fwInstance, |
| 623 NSSCKFWInstance *fwInstance, | 597 CK_SESSION_HANDLE hSession) |
| 624 CK_SESSION_HANDLE hSession | |
| 625 ) | |
| 626 { | 598 { |
| 627 NSSCKFWSession *fwSession; | 599 NSSCKFWSession *fwSession; |
| 628 | 600 |
| 629 #ifdef NSSDEBUG | 601 #ifdef NSSDEBUG |
| 630 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 602 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 631 return; | 603 return; |
| 632 } | 604 } |
| 633 #endif /* NSSDEBUG */ | 605 #endif /* NSSDEBUG */ |
| 634 | 606 |
| 635 if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { | 607 if (CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex)) { |
| 608 return; |
| 609 } |
| 610 |
| 611 fwSession = (NSSCKFWSession *)nssCKFWHash_Lookup( |
| 612 fwInstance->sessionHandleHash, (const void *)hSession); |
| 613 if (fwSession) { |
| 614 nssCKFWHash_Remove(fwInstance->sessionHandleHash, (const void *)hSession
); |
| 615 nssCKFWSession_SetHandle(fwSession, (CK_SESSION_HANDLE)0); |
| 616 } |
| 617 |
| 618 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 619 |
| 636 return; | 620 return; |
| 637 } | |
| 638 | |
| 639 fwSession = (NSSCKFWSession *)nssCKFWHash_Lookup( | |
| 640 fwInstance->sessionHandleHash, (const void *)hSession); | |
| 641 if (fwSession) { | |
| 642 nssCKFWHash_Remove(fwInstance->sessionHandleHash, (const void *)hSession); | |
| 643 nssCKFWSession_SetHandle(fwSession, (CK_SESSION_HANDLE)0); | |
| 644 } | |
| 645 | |
| 646 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | |
| 647 | |
| 648 return; | |
| 649 } | 621 } |
| 650 | 622 |
| 651 /* | 623 /* |
| 652 * nssCKFWInstance_FindSessionHandle | 624 * nssCKFWInstance_FindSessionHandle |
| 653 * | 625 * |
| 654 */ | 626 */ |
| 655 NSS_IMPLEMENT CK_SESSION_HANDLE | 627 NSS_IMPLEMENT CK_SESSION_HANDLE |
| 656 nssCKFWInstance_FindSessionHandle | 628 nssCKFWInstance_FindSessionHandle( |
| 657 ( | 629 NSSCKFWInstance *fwInstance, |
| 658 NSSCKFWInstance *fwInstance, | 630 NSSCKFWSession *fwSession) |
| 659 NSSCKFWSession *fwSession | |
| 660 ) | |
| 661 { | 631 { |
| 662 #ifdef NSSDEBUG | 632 #ifdef NSSDEBUG |
| 663 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 633 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 664 return (CK_SESSION_HANDLE)0; | 634 return (CK_SESSION_HANDLE)0; |
| 665 } | 635 } |
| 666 | 636 |
| 667 if( CKR_OK != nssCKFWSession_verifyPointer(fwSession) ) { | 637 if (CKR_OK != nssCKFWSession_verifyPointer(fwSession)) { |
| 668 return (CK_SESSION_HANDLE)0; | 638 return (CK_SESSION_HANDLE)0; |
| 669 } | 639 } |
| 670 #endif /* NSSDEBUG */ | 640 #endif /* NSSDEBUG */ |
| 671 | 641 |
| 672 return nssCKFWSession_GetHandle(fwSession); | 642 return nssCKFWSession_GetHandle(fwSession); |
| 673 /* look it up and assert? */ | 643 /* look it up and assert? */ |
| 674 } | 644 } |
| 675 | 645 |
| 676 /* | 646 /* |
| 677 * nssCKFWInstance_CreateObjectHandle | 647 * nssCKFWInstance_CreateObjectHandle |
| 678 * | 648 * |
| 679 */ | 649 */ |
| 680 NSS_IMPLEMENT CK_OBJECT_HANDLE | 650 NSS_IMPLEMENT CK_OBJECT_HANDLE |
| 681 nssCKFWInstance_CreateObjectHandle | 651 nssCKFWInstance_CreateObjectHandle( |
| 682 ( | 652 NSSCKFWInstance *fwInstance, |
| 683 NSSCKFWInstance *fwInstance, | 653 NSSCKFWObject *fwObject, |
| 684 NSSCKFWObject *fwObject, | 654 CK_RV *pError) |
| 685 CK_RV *pError | |
| 686 ) | |
| 687 { | 655 { |
| 688 CK_OBJECT_HANDLE hObject; | 656 CK_OBJECT_HANDLE hObject; |
| 689 | 657 |
| 690 #ifdef NSSDEBUG | 658 #ifdef NSSDEBUG |
| 691 if (!pError) { | 659 if (!pError) { |
| 692 return (CK_OBJECT_HANDLE)0; | 660 return (CK_OBJECT_HANDLE)0; |
| 693 } | 661 } |
| 694 | 662 |
| 695 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 663 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 696 if( CKR_OK != *pError ) { | 664 if (CKR_OK != *pError) { |
| 697 return (CK_OBJECT_HANDLE)0; | 665 return (CK_OBJECT_HANDLE)0; |
| 698 } | 666 } |
| 699 #endif /* NSSDEBUG */ | 667 #endif /* NSSDEBUG */ |
| 700 | 668 |
| 701 *pError = nssCKFWMutex_Lock(fwInstance->mutex); | 669 *pError = nssCKFWMutex_Lock(fwInstance->mutex); |
| 702 if( CKR_OK != *pError ) { | 670 if (CKR_OK != *pError) { |
| 703 return (CK_OBJECT_HANDLE)0; | 671 return (CK_OBJECT_HANDLE)0; |
| 704 } | 672 } |
| 705 | 673 |
| 706 hObject = ++(fwInstance->lastObjectHandle); | 674 hObject = ++(fwInstance->lastObjectHandle); |
| 707 | 675 |
| 708 *pError = nssCKFWObject_SetHandle(fwObject, hObject); | 676 *pError = nssCKFWObject_SetHandle(fwObject, hObject); |
| 709 if( CKR_OK != *pError ) { | 677 if (CKR_OK != *pError) { |
| 710 hObject = (CK_OBJECT_HANDLE)0; | 678 hObject = (CK_OBJECT_HANDLE)0; |
| 711 goto done; | 679 goto done; |
| 712 } | 680 } |
| 713 | 681 |
| 714 *pError = nssCKFWHash_Add(fwInstance->objectHandleHash, | 682 *pError = nssCKFWHash_Add(fwInstance->objectHandleHash, |
| 715 (const void *)hObject, (const void *)fwObject); | 683 (const void *)hObject, (const void *)fwObject); |
| 716 if( CKR_OK != *pError ) { | 684 if (CKR_OK != *pError) { |
| 717 hObject = (CK_OBJECT_HANDLE)0; | 685 hObject = (CK_OBJECT_HANDLE)0; |
| 718 goto done; | 686 goto done; |
| 719 } | 687 } |
| 720 | 688 |
| 721 done: | 689 done: |
| 722 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | 690 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 723 return hObject; | 691 return hObject; |
| 724 } | 692 } |
| 725 | 693 |
| 726 /* | 694 /* |
| 727 * nssCKFWInstance_ResolveObjectHandle | 695 * nssCKFWInstance_ResolveObjectHandle |
| 728 * | 696 * |
| 729 */ | 697 */ |
| 730 NSS_IMPLEMENT NSSCKFWObject * | 698 NSS_IMPLEMENT NSSCKFWObject * |
| 731 nssCKFWInstance_ResolveObjectHandle | 699 nssCKFWInstance_ResolveObjectHandle( |
| 732 ( | 700 NSSCKFWInstance *fwInstance, |
| 733 NSSCKFWInstance *fwInstance, | 701 CK_OBJECT_HANDLE hObject) |
| 734 CK_OBJECT_HANDLE hObject | |
| 735 ) | |
| 736 { | 702 { |
| 737 NSSCKFWObject *fwObject; | 703 NSSCKFWObject *fwObject; |
| 738 | 704 |
| 739 #ifdef NSSDEBUG | 705 #ifdef NSSDEBUG |
| 740 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 706 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 741 return (NSSCKFWObject *)NULL; | 707 return (NSSCKFWObject *)NULL; |
| 742 } | 708 } |
| 743 #endif /* NSSDEBUG */ | 709 #endif /* NSSDEBUG */ |
| 744 | 710 |
| 745 if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { | 711 if (CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex)) { |
| 746 return (NSSCKFWObject *)NULL; | 712 return (NSSCKFWObject *)NULL; |
| 747 } | 713 } |
| 748 | 714 |
| 749 fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup( | 715 fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup( |
| 750 fwInstance->objectHandleHash, (const void *)hObject); | 716 fwInstance->objectHandleHash, (const void *)hObject); |
| 751 | 717 |
| 752 /* Assert(hObject == nssCKFWObject_GetHandle(fwObject)) */ | 718 /* Assert(hObject == nssCKFWObject_GetHandle(fwObject)) */ |
| 753 | 719 |
| 754 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | 720 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 755 return fwObject; | 721 return fwObject; |
| 756 } | 722 } |
| 757 | 723 |
| 758 /* | 724 /* |
| 759 * nssCKFWInstance_ReassignObjectHandle | 725 * nssCKFWInstance_ReassignObjectHandle |
| 760 * | 726 * |
| 761 */ | 727 */ |
| 762 NSS_IMPLEMENT CK_RV | 728 NSS_IMPLEMENT CK_RV |
| 763 nssCKFWInstance_ReassignObjectHandle | 729 nssCKFWInstance_ReassignObjectHandle( |
| 764 ( | 730 NSSCKFWInstance *fwInstance, |
| 765 NSSCKFWInstance *fwInstance, | 731 CK_OBJECT_HANDLE hObject, |
| 766 CK_OBJECT_HANDLE hObject, | 732 NSSCKFWObject *fwObject) |
| 767 NSSCKFWObject *fwObject | |
| 768 ) | |
| 769 { | 733 { |
| 770 CK_RV error = CKR_OK; | 734 CK_RV error = CKR_OK; |
| 771 NSSCKFWObject *oldObject; | 735 NSSCKFWObject *oldObject; |
| 772 | 736 |
| 773 #ifdef NSSDEBUG | 737 #ifdef NSSDEBUG |
| 774 error = nssCKFWInstance_verifyPointer(fwInstance); | 738 error = nssCKFWInstance_verifyPointer(fwInstance); |
| 775 if( CKR_OK != error ) { | 739 if (CKR_OK != error) { |
| 776 return error; | 740 return error; |
| 777 } | 741 } |
| 778 #endif /* NSSDEBUG */ | 742 #endif /* NSSDEBUG */ |
| 779 | 743 |
| 780 error = nssCKFWMutex_Lock(fwInstance->mutex); | 744 error = nssCKFWMutex_Lock(fwInstance->mutex); |
| 781 if( CKR_OK != error ) { | 745 if (CKR_OK != error) { |
| 746 return error; |
| 747 } |
| 748 |
| 749 oldObject = (NSSCKFWObject *)nssCKFWHash_Lookup( |
| 750 fwInstance->objectHandleHash, (const void *)hObject); |
| 751 if (oldObject) { |
| 752 /* Assert(hObject == nssCKFWObject_GetHandle(oldObject) */ |
| 753 (void)nssCKFWObject_SetHandle(oldObject, (CK_SESSION_HANDLE)0); |
| 754 nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject); |
| 755 } |
| 756 |
| 757 error = nssCKFWObject_SetHandle(fwObject, hObject); |
| 758 if (CKR_OK != error) { |
| 759 goto done; |
| 760 } |
| 761 error = nssCKFWHash_Add(fwInstance->objectHandleHash, |
| 762 (const void *)hObject, (const void *)fwObject); |
| 763 |
| 764 done: |
| 765 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 782 return error; | 766 return error; |
| 783 } | |
| 784 | |
| 785 oldObject = (NSSCKFWObject *)nssCKFWHash_Lookup( | |
| 786 fwInstance->objectHandleHash, (const void *)hObject); | |
| 787 if(oldObject) { | |
| 788 /* Assert(hObject == nssCKFWObject_GetHandle(oldObject) */ | |
| 789 (void)nssCKFWObject_SetHandle(oldObject, (CK_SESSION_HANDLE)0); | |
| 790 nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject); | |
| 791 } | |
| 792 | |
| 793 error = nssCKFWObject_SetHandle(fwObject, hObject); | |
| 794 if( CKR_OK != error ) { | |
| 795 goto done; | |
| 796 } | |
| 797 error = nssCKFWHash_Add(fwInstance->objectHandleHash, | |
| 798 (const void *)hObject, (const void *)fwObject); | |
| 799 | |
| 800 done: | |
| 801 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | |
| 802 return error; | |
| 803 } | 767 } |
| 804 | 768 |
| 805 /* | 769 /* |
| 806 * nssCKFWInstance_DestroyObjectHandle | 770 * nssCKFWInstance_DestroyObjectHandle |
| 807 * | 771 * |
| 808 */ | 772 */ |
| 809 NSS_IMPLEMENT void | 773 NSS_IMPLEMENT void |
| 810 nssCKFWInstance_DestroyObjectHandle | 774 nssCKFWInstance_DestroyObjectHandle( |
| 811 ( | 775 NSSCKFWInstance *fwInstance, |
| 812 NSSCKFWInstance *fwInstance, | 776 CK_OBJECT_HANDLE hObject) |
| 813 CK_OBJECT_HANDLE hObject | |
| 814 ) | |
| 815 { | 777 { |
| 816 NSSCKFWObject *fwObject; | 778 NSSCKFWObject *fwObject; |
| 817 | 779 |
| 818 #ifdef NSSDEBUG | 780 #ifdef NSSDEBUG |
| 819 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 781 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 820 return; | 782 return; |
| 821 } | 783 } |
| 822 #endif /* NSSDEBUG */ | 784 #endif /* NSSDEBUG */ |
| 823 | 785 |
| 824 if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { | 786 if (CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex)) { |
| 787 return; |
| 788 } |
| 789 |
| 790 fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup( |
| 791 fwInstance->objectHandleHash, (const void *)hObject); |
| 792 if (fwObject) { |
| 793 /* Assert(hObject = nssCKFWObject_GetHandle(fwObject)) */ |
| 794 nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject); |
| 795 (void)nssCKFWObject_SetHandle(fwObject, (CK_SESSION_HANDLE)0); |
| 796 } |
| 797 |
| 798 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 825 return; | 799 return; |
| 826 } | |
| 827 | |
| 828 fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup( | |
| 829 fwInstance->objectHandleHash, (const void *)hObject); | |
| 830 if (fwObject) { | |
| 831 /* Assert(hObject = nssCKFWObject_GetHandle(fwObject)) */ | |
| 832 nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject); | |
| 833 (void)nssCKFWObject_SetHandle(fwObject, (CK_SESSION_HANDLE)0); | |
| 834 } | |
| 835 | |
| 836 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | |
| 837 return; | |
| 838 } | 800 } |
| 839 | 801 |
| 840 /* | 802 /* |
| 841 * nssCKFWInstance_FindObjectHandle | 803 * nssCKFWInstance_FindObjectHandle |
| 842 * | 804 * |
| 843 */ | 805 */ |
| 844 NSS_IMPLEMENT CK_OBJECT_HANDLE | 806 NSS_IMPLEMENT CK_OBJECT_HANDLE |
| 845 nssCKFWInstance_FindObjectHandle | 807 nssCKFWInstance_FindObjectHandle( |
| 846 ( | 808 NSSCKFWInstance *fwInstance, |
| 847 NSSCKFWInstance *fwInstance, | 809 NSSCKFWObject *fwObject) |
| 848 NSSCKFWObject *fwObject | |
| 849 ) | |
| 850 { | 810 { |
| 851 #ifdef NSSDEBUG | 811 #ifdef NSSDEBUG |
| 852 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 812 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 853 return (CK_OBJECT_HANDLE)0; | 813 return (CK_OBJECT_HANDLE)0; |
| 854 } | 814 } |
| 855 | 815 |
| 856 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { | 816 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) { |
| 857 return (CK_OBJECT_HANDLE)0; | 817 return (CK_OBJECT_HANDLE)0; |
| 858 } | 818 } |
| 859 #endif /* NSSDEBUG */ | 819 #endif /* NSSDEBUG */ |
| 860 | 820 |
| 861 return nssCKFWObject_GetHandle(fwObject); | 821 return nssCKFWObject_GetHandle(fwObject); |
| 862 } | 822 } |
| 863 | 823 |
| 864 /* | 824 /* |
| 865 * nssCKFWInstance_GetNSlots | 825 * nssCKFWInstance_GetNSlots |
| 866 * | 826 * |
| 867 */ | 827 */ |
| 868 NSS_IMPLEMENT CK_ULONG | 828 NSS_IMPLEMENT CK_ULONG |
| 869 nssCKFWInstance_GetNSlots | 829 nssCKFWInstance_GetNSlots( |
| 870 ( | 830 NSSCKFWInstance *fwInstance, |
| 871 NSSCKFWInstance *fwInstance, | 831 CK_RV *pError) |
| 872 CK_RV *pError | |
| 873 ) | |
| 874 { | 832 { |
| 875 #ifdef NSSDEBUG | 833 #ifdef NSSDEBUG |
| 876 if (!pError) { | 834 if (!pError) { |
| 877 return (CK_ULONG)0; | 835 return (CK_ULONG)0; |
| 878 } | 836 } |
| 879 | 837 |
| 880 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 838 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 881 if( CKR_OK != *pError ) { | 839 if (CKR_OK != *pError) { |
| 882 return (CK_ULONG)0; | 840 return (CK_ULONG)0; |
| 883 } | 841 } |
| 884 #endif /* NSSDEBUG */ | 842 #endif /* NSSDEBUG */ |
| 885 | 843 |
| 886 *pError = CKR_OK; | 844 *pError = CKR_OK; |
| 887 return fwInstance->nSlots; | 845 return fwInstance->nSlots; |
| 888 } | 846 } |
| 889 | 847 |
| 890 /* | 848 /* |
| 891 * nssCKFWInstance_GetCryptokiVersion | 849 * nssCKFWInstance_GetCryptokiVersion |
| 892 * | 850 * |
| 893 */ | 851 */ |
| 894 NSS_IMPLEMENT CK_VERSION | 852 NSS_IMPLEMENT CK_VERSION |
| 895 nssCKFWInstance_GetCryptokiVersion | 853 nssCKFWInstance_GetCryptokiVersion( |
| 896 ( | 854 NSSCKFWInstance *fwInstance) |
| 897 NSSCKFWInstance *fwInstance | |
| 898 ) | |
| 899 { | 855 { |
| 900 CK_VERSION rv; | 856 CK_VERSION rv; |
| 901 | 857 |
| 902 #ifdef NSSDEBUG | 858 #ifdef NSSDEBUG |
| 903 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 859 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 904 rv.major = rv.minor = 0; | 860 rv.major = rv.minor = 0; |
| 905 return rv; | 861 return rv; |
| 906 } | 862 } |
| 907 #endif /* NSSDEBUG */ | 863 #endif /* NSSDEBUG */ |
| 908 | 864 |
| 909 if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { | 865 if (CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex)) { |
| 910 rv.major = rv.minor = 0; | 866 rv.major = rv.minor = 0; |
| 867 return rv; |
| 868 } |
| 869 |
| 870 if ((0 != fwInstance->cryptokiVersion.major) || |
| 871 (0 != fwInstance->cryptokiVersion.minor)) { |
| 872 rv = fwInstance->cryptokiVersion; |
| 873 goto done; |
| 874 } |
| 875 |
| 876 if (fwInstance->mdInstance->GetCryptokiVersion) { |
| 877 fwInstance->cryptokiVersion = fwInstance->mdInstance->GetCryptokiVersion
( |
| 878 fwInstance->mdInstance, fwInstance); |
| 879 } else { |
| 880 fwInstance->cryptokiVersion.major = 2; |
| 881 fwInstance->cryptokiVersion.minor = 1; |
| 882 } |
| 883 |
| 884 rv = fwInstance->cryptokiVersion; |
| 885 |
| 886 done: |
| 887 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 911 return rv; | 888 return rv; |
| 912 } | |
| 913 | |
| 914 if( (0 != fwInstance->cryptokiVersion.major) || | |
| 915 (0 != fwInstance->cryptokiVersion.minor) ) { | |
| 916 rv = fwInstance->cryptokiVersion; | |
| 917 goto done; | |
| 918 } | |
| 919 | |
| 920 if (fwInstance->mdInstance->GetCryptokiVersion) { | |
| 921 fwInstance->cryptokiVersion = fwInstance->mdInstance->GetCryptokiVersion( | |
| 922 fwInstance->mdInstance, fwInstance); | |
| 923 } else { | |
| 924 fwInstance->cryptokiVersion.major = 2; | |
| 925 fwInstance->cryptokiVersion.minor = 1; | |
| 926 } | |
| 927 | |
| 928 rv = fwInstance->cryptokiVersion; | |
| 929 | |
| 930 done: | |
| 931 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | |
| 932 return rv; | |
| 933 } | 889 } |
| 934 | 890 |
| 935 /* | 891 /* |
| 936 * nssCKFWInstance_GetManufacturerID | 892 * nssCKFWInstance_GetManufacturerID |
| 937 * | 893 * |
| 938 */ | 894 */ |
| 939 NSS_IMPLEMENT CK_RV | 895 NSS_IMPLEMENT CK_RV |
| 940 nssCKFWInstance_GetManufacturerID | 896 nssCKFWInstance_GetManufacturerID( |
| 941 ( | 897 NSSCKFWInstance *fwInstance, |
| 942 NSSCKFWInstance *fwInstance, | 898 CK_CHAR manufacturerID[32]) |
| 943 CK_CHAR manufacturerID[32] | |
| 944 ) | |
| 945 { | 899 { |
| 946 CK_RV error = CKR_OK; | 900 CK_RV error = CKR_OK; |
| 947 | 901 |
| 948 #ifdef NSSDEBUG | 902 #ifdef NSSDEBUG |
| 949 if( (CK_CHAR_PTR)NULL == manufacturerID ) { | 903 if ((CK_CHAR_PTR)NULL == manufacturerID) { |
| 950 return CKR_ARGUMENTS_BAD; | 904 return CKR_ARGUMENTS_BAD; |
| 951 } | 905 } |
| 952 | 906 |
| 953 error = nssCKFWInstance_verifyPointer(fwInstance); | 907 error = nssCKFWInstance_verifyPointer(fwInstance); |
| 954 if( CKR_OK != error ) { | 908 if (CKR_OK != error) { |
| 955 return error; | 909 return error; |
| 956 } | 910 } |
| 957 #endif /* NSSDEBUG */ | 911 #endif /* NSSDEBUG */ |
| 958 | 912 |
| 959 error = nssCKFWMutex_Lock(fwInstance->mutex); | 913 error = nssCKFWMutex_Lock(fwInstance->mutex); |
| 960 if( CKR_OK != error ) { | 914 if (CKR_OK != error) { |
| 915 return error; |
| 916 } |
| 917 |
| 918 if (!fwInstance->manufacturerID) { |
| 919 if (fwInstance->mdInstance->GetManufacturerID) { |
| 920 fwInstance->manufacturerID = fwInstance->mdInstance->GetManufacturer
ID( |
| 921 fwInstance->mdInstance, fwInstance, &error); |
| 922 if ((!fwInstance->manufacturerID) && (CKR_OK != error)) { |
| 923 goto done; |
| 924 } |
| 925 } else { |
| 926 fwInstance->manufacturerID = (NSSUTF8 *)""; |
| 927 } |
| 928 } |
| 929 |
| 930 (void)nssUTF8_CopyIntoFixedBuffer(fwInstance->manufacturerID, (char *)manufa
cturerID, 32, ' '); |
| 931 error = CKR_OK; |
| 932 |
| 933 done: |
| 934 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 961 return error; | 935 return error; |
| 962 } | |
| 963 | |
| 964 if (!fwInstance->manufacturerID) { | |
| 965 if (fwInstance->mdInstance->GetManufacturerID) { | |
| 966 fwInstance->manufacturerID = fwInstance->mdInstance->GetManufacturerID( | |
| 967 fwInstance->mdInstance, fwInstance, &error); | |
| 968 if ((!fwInstance->manufacturerID) && (CKR_OK != error)) { | |
| 969 goto done; | |
| 970 } | |
| 971 } else { | |
| 972 fwInstance->manufacturerID = (NSSUTF8 *) ""; | |
| 973 } | |
| 974 } | |
| 975 | |
| 976 (void)nssUTF8_CopyIntoFixedBuffer(fwInstance->manufacturerID, (char *)manufact
urerID, 32, ' '); | |
| 977 error = CKR_OK; | |
| 978 | |
| 979 done: | |
| 980 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | |
| 981 return error; | |
| 982 } | 936 } |
| 983 | 937 |
| 984 /* | 938 /* |
| 985 * nssCKFWInstance_GetFlags | 939 * nssCKFWInstance_GetFlags |
| 986 * | 940 * |
| 987 */ | 941 */ |
| 988 NSS_IMPLEMENT CK_ULONG | 942 NSS_IMPLEMENT CK_ULONG |
| 989 nssCKFWInstance_GetFlags | 943 nssCKFWInstance_GetFlags( |
| 990 ( | 944 NSSCKFWInstance *fwInstance) |
| 991 NSSCKFWInstance *fwInstance | |
| 992 ) | |
| 993 { | 945 { |
| 994 #ifdef NSSDEBUG | 946 #ifdef NSSDEBUG |
| 995 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 947 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 996 return (CK_ULONG)0; | 948 return (CK_ULONG)0; |
| 997 } | 949 } |
| 998 #endif /* NSSDEBUG */ | 950 #endif /* NSSDEBUG */ |
| 999 | 951 |
| 1000 /* No "instance flags" are yet defined by Cryptoki. */ | 952 /* No "instance flags" are yet defined by Cryptoki. */ |
| 1001 return (CK_ULONG)0; | 953 return (CK_ULONG)0; |
| 1002 } | 954 } |
| 1003 | 955 |
| 1004 /* | 956 /* |
| 1005 * nssCKFWInstance_GetLibraryDescription | 957 * nssCKFWInstance_GetLibraryDescription |
| 1006 * | 958 * |
| 1007 */ | 959 */ |
| 1008 NSS_IMPLEMENT CK_RV | 960 NSS_IMPLEMENT CK_RV |
| 1009 nssCKFWInstance_GetLibraryDescription | 961 nssCKFWInstance_GetLibraryDescription( |
| 1010 ( | 962 NSSCKFWInstance *fwInstance, |
| 1011 NSSCKFWInstance *fwInstance, | 963 CK_CHAR libraryDescription[32]) |
| 1012 CK_CHAR libraryDescription[32] | |
| 1013 ) | |
| 1014 { | 964 { |
| 1015 CK_RV error = CKR_OK; | 965 CK_RV error = CKR_OK; |
| 1016 | 966 |
| 1017 #ifdef NSSDEBUG | 967 #ifdef NSSDEBUG |
| 1018 if( (CK_CHAR_PTR)NULL == libraryDescription ) { | 968 if ((CK_CHAR_PTR)NULL == libraryDescription) { |
| 1019 return CKR_ARGUMENTS_BAD; | 969 return CKR_ARGUMENTS_BAD; |
| 1020 } | 970 } |
| 1021 | 971 |
| 1022 error = nssCKFWInstance_verifyPointer(fwInstance); | 972 error = nssCKFWInstance_verifyPointer(fwInstance); |
| 1023 if( CKR_OK != error ) { | 973 if (CKR_OK != error) { |
| 1024 return error; | 974 return error; |
| 1025 } | 975 } |
| 1026 #endif /* NSSDEBUG */ | 976 #endif /* NSSDEBUG */ |
| 1027 | 977 |
| 1028 error = nssCKFWMutex_Lock(fwInstance->mutex); | 978 error = nssCKFWMutex_Lock(fwInstance->mutex); |
| 1029 if( CKR_OK != error ) { | 979 if (CKR_OK != error) { |
| 980 return error; |
| 981 } |
| 982 |
| 983 if (!fwInstance->libraryDescription) { |
| 984 if (fwInstance->mdInstance->GetLibraryDescription) { |
| 985 fwInstance->libraryDescription = fwInstance->mdInstance->GetLibraryD
escription( |
| 986 fwInstance->mdInstance, fwInstance, &error); |
| 987 if ((!fwInstance->libraryDescription) && (CKR_OK != error)) { |
| 988 goto done; |
| 989 } |
| 990 } else { |
| 991 fwInstance->libraryDescription = (NSSUTF8 *)""; |
| 992 } |
| 993 } |
| 994 |
| 995 (void)nssUTF8_CopyIntoFixedBuffer(fwInstance->libraryDescription, (char *)li
braryDescription, 32, ' '); |
| 996 error = CKR_OK; |
| 997 |
| 998 done: |
| 999 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 1030 return error; | 1000 return error; |
| 1031 } | |
| 1032 | |
| 1033 if (!fwInstance->libraryDescription) { | |
| 1034 if (fwInstance->mdInstance->GetLibraryDescription) { | |
| 1035 fwInstance->libraryDescription = fwInstance->mdInstance->GetLibraryDescrip
tion( | |
| 1036 fwInstance->mdInstance, fwInstance, &error); | |
| 1037 if ((!fwInstance->libraryDescription) && (CKR_OK != error)) { | |
| 1038 goto done; | |
| 1039 } | |
| 1040 } else { | |
| 1041 fwInstance->libraryDescription = (NSSUTF8 *) ""; | |
| 1042 } | |
| 1043 } | |
| 1044 | |
| 1045 (void)nssUTF8_CopyIntoFixedBuffer(fwInstance->libraryDescription, (char *)libr
aryDescription, 32, ' '); | |
| 1046 error = CKR_OK; | |
| 1047 | |
| 1048 done: | |
| 1049 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | |
| 1050 return error; | |
| 1051 } | 1001 } |
| 1052 | 1002 |
| 1053 /* | 1003 /* |
| 1054 * nssCKFWInstance_GetLibraryVersion | 1004 * nssCKFWInstance_GetLibraryVersion |
| 1055 * | 1005 * |
| 1056 */ | 1006 */ |
| 1057 NSS_IMPLEMENT CK_VERSION | 1007 NSS_IMPLEMENT CK_VERSION |
| 1058 nssCKFWInstance_GetLibraryVersion | 1008 nssCKFWInstance_GetLibraryVersion( |
| 1059 ( | 1009 NSSCKFWInstance *fwInstance) |
| 1060 NSSCKFWInstance *fwInstance | |
| 1061 ) | |
| 1062 { | 1010 { |
| 1063 CK_VERSION rv; | 1011 CK_VERSION rv; |
| 1064 | 1012 |
| 1065 #ifdef NSSDEBUG | 1013 #ifdef NSSDEBUG |
| 1066 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 1014 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 1067 rv.major = rv.minor = 0; | 1015 rv.major = rv.minor = 0; |
| 1068 return rv; | 1016 return rv; |
| 1069 } | 1017 } |
| 1070 #endif /* NSSDEBUG */ | 1018 #endif /* NSSDEBUG */ |
| 1071 | 1019 |
| 1072 if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) { | 1020 if (CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex)) { |
| 1073 rv.major = rv.minor = 0; | 1021 rv.major = rv.minor = 0; |
| 1022 return rv; |
| 1023 } |
| 1024 |
| 1025 if ((0 != fwInstance->libraryVersion.major) || |
| 1026 (0 != fwInstance->libraryVersion.minor)) { |
| 1027 rv = fwInstance->libraryVersion; |
| 1028 goto done; |
| 1029 } |
| 1030 |
| 1031 if (fwInstance->mdInstance->GetLibraryVersion) { |
| 1032 fwInstance->libraryVersion = fwInstance->mdInstance->GetLibraryVersion( |
| 1033 fwInstance->mdInstance, fwInstance); |
| 1034 } else { |
| 1035 fwInstance->libraryVersion.major = 0; |
| 1036 fwInstance->libraryVersion.minor = 3; |
| 1037 } |
| 1038 |
| 1039 rv = fwInstance->libraryVersion; |
| 1040 done: |
| 1041 (void)nssCKFWMutex_Unlock(fwInstance->mutex); |
| 1074 return rv; | 1042 return rv; |
| 1075 } | |
| 1076 | |
| 1077 if( (0 != fwInstance->libraryVersion.major) || | |
| 1078 (0 != fwInstance->libraryVersion.minor) ) { | |
| 1079 rv = fwInstance->libraryVersion; | |
| 1080 goto done; | |
| 1081 } | |
| 1082 | |
| 1083 if (fwInstance->mdInstance->GetLibraryVersion) { | |
| 1084 fwInstance->libraryVersion = fwInstance->mdInstance->GetLibraryVersion( | |
| 1085 fwInstance->mdInstance, fwInstance); | |
| 1086 } else { | |
| 1087 fwInstance->libraryVersion.major = 0; | |
| 1088 fwInstance->libraryVersion.minor = 3; | |
| 1089 } | |
| 1090 | |
| 1091 rv = fwInstance->libraryVersion; | |
| 1092 done: | |
| 1093 (void)nssCKFWMutex_Unlock(fwInstance->mutex); | |
| 1094 return rv; | |
| 1095 } | 1043 } |
| 1096 | 1044 |
| 1097 /* | 1045 /* |
| 1098 * nssCKFWInstance_GetModuleHandlesSessionObjects | 1046 * nssCKFWInstance_GetModuleHandlesSessionObjects |
| 1099 * | 1047 * |
| 1100 */ | 1048 */ |
| 1101 NSS_IMPLEMENT CK_BBOOL | 1049 NSS_IMPLEMENT CK_BBOOL |
| 1102 nssCKFWInstance_GetModuleHandlesSessionObjects | 1050 nssCKFWInstance_GetModuleHandlesSessionObjects( |
| 1103 ( | 1051 NSSCKFWInstance *fwInstance) |
| 1104 NSSCKFWInstance *fwInstance | |
| 1105 ) | |
| 1106 { | 1052 { |
| 1107 #ifdef NSSDEBUG | 1053 #ifdef NSSDEBUG |
| 1108 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 1054 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 1109 return CK_FALSE; | 1055 return CK_FALSE; |
| 1110 } | 1056 } |
| 1111 #endif /* NSSDEBUG */ | 1057 #endif /* NSSDEBUG */ |
| 1112 | 1058 |
| 1113 return fwInstance->moduleHandlesSessionObjects; | 1059 return fwInstance->moduleHandlesSessionObjects; |
| 1114 } | 1060 } |
| 1115 | 1061 |
| 1116 /* | 1062 /* |
| 1117 * nssCKFWInstance_GetSlots | 1063 * nssCKFWInstance_GetSlots |
| 1118 * | 1064 * |
| 1119 */ | 1065 */ |
| 1120 NSS_IMPLEMENT NSSCKFWSlot ** | 1066 NSS_IMPLEMENT NSSCKFWSlot ** |
| 1121 nssCKFWInstance_GetSlots | 1067 nssCKFWInstance_GetSlots( |
| 1122 ( | 1068 NSSCKFWInstance *fwInstance, |
| 1123 NSSCKFWInstance *fwInstance, | 1069 CK_RV *pError) |
| 1124 CK_RV *pError | |
| 1125 ) | |
| 1126 { | 1070 { |
| 1127 #ifdef NSSDEBUG | 1071 #ifdef NSSDEBUG |
| 1128 if (!pError) { | 1072 if (!pError) { |
| 1129 return (NSSCKFWSlot **)NULL; | 1073 return (NSSCKFWSlot **)NULL; |
| 1130 } | 1074 } |
| 1131 | 1075 |
| 1132 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 1076 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 1133 if( CKR_OK != *pError ) { | 1077 if (CKR_OK != *pError) { |
| 1134 return (NSSCKFWSlot **)NULL; | 1078 return (NSSCKFWSlot **)NULL; |
| 1135 } | 1079 } |
| 1136 #endif /* NSSDEBUG */ | 1080 #endif /* NSSDEBUG */ |
| 1137 | 1081 |
| 1138 return fwInstance->fwSlotList; | 1082 return fwInstance->fwSlotList; |
| 1139 } | 1083 } |
| 1140 | 1084 |
| 1141 /* | 1085 /* |
| 1142 * nssCKFWInstance_WaitForSlotEvent | 1086 * nssCKFWInstance_WaitForSlotEvent |
| 1143 * | 1087 * |
| 1144 */ | 1088 */ |
| 1145 NSS_IMPLEMENT NSSCKFWSlot * | 1089 NSS_IMPLEMENT NSSCKFWSlot * |
| 1146 nssCKFWInstance_WaitForSlotEvent | 1090 nssCKFWInstance_WaitForSlotEvent( |
| 1147 ( | 1091 NSSCKFWInstance *fwInstance, |
| 1148 NSSCKFWInstance *fwInstance, | 1092 CK_BBOOL block, |
| 1149 CK_BBOOL block, | 1093 CK_RV *pError) |
| 1150 CK_RV *pError | |
| 1151 ) | |
| 1152 { | 1094 { |
| 1153 NSSCKFWSlot *fwSlot = (NSSCKFWSlot *)NULL; | 1095 NSSCKFWSlot *fwSlot = (NSSCKFWSlot *)NULL; |
| 1154 NSSCKMDSlot *mdSlot; | 1096 NSSCKMDSlot *mdSlot; |
| 1155 CK_ULONG i, n; | 1097 CK_ULONG i, n; |
| 1156 | 1098 |
| 1157 #ifdef NSSDEBUG | 1099 #ifdef NSSDEBUG |
| 1158 if (!pError) { | 1100 if (!pError) { |
| 1159 return (NSSCKFWSlot *)NULL; | 1101 return (NSSCKFWSlot *)NULL; |
| 1160 } | 1102 } |
| 1161 | 1103 |
| 1162 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 1104 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 1163 if( CKR_OK != *pError ) { | 1105 if (CKR_OK != *pError) { |
| 1164 return (NSSCKFWSlot *)NULL; | 1106 return (NSSCKFWSlot *)NULL; |
| 1165 } | 1107 } |
| 1166 | 1108 |
| 1167 switch( block ) { | 1109 switch (block) { |
| 1168 case CK_TRUE: | 1110 case CK_TRUE: |
| 1169 case CK_FALSE: | 1111 case CK_FALSE: |
| 1170 break; | 1112 break; |
| 1171 default: | 1113 default: |
| 1172 *pError = CKR_ARGUMENTS_BAD; | 1114 *pError = CKR_ARGUMENTS_BAD; |
| 1173 return (NSSCKFWSlot *)NULL; | 1115 return (NSSCKFWSlot *)NULL; |
| 1174 } | 1116 } |
| 1175 #endif /* NSSDEBUG */ | 1117 #endif /* NSSDEBUG */ |
| 1176 | 1118 |
| 1177 if (!fwInstance->mdInstance->WaitForSlotEvent) { | 1119 if (!fwInstance->mdInstance->WaitForSlotEvent) { |
| 1178 *pError = CKR_NO_EVENT; | 1120 *pError = CKR_NO_EVENT; |
| 1179 return (NSSCKFWSlot *)NULL; | 1121 return (NSSCKFWSlot *)NULL; |
| 1180 } | 1122 } |
| 1181 | 1123 |
| 1182 mdSlot = fwInstance->mdInstance->WaitForSlotEvent( | 1124 mdSlot = fwInstance->mdInstance->WaitForSlotEvent( |
| 1183 fwInstance->mdInstance, | 1125 fwInstance->mdInstance, |
| 1184 fwInstance, | 1126 fwInstance, |
| 1185 block, | 1127 block, |
| 1186 pError | 1128 pError); |
| 1187 ); | |
| 1188 | 1129 |
| 1189 if (!mdSlot) { | 1130 if (!mdSlot) { |
| 1190 return (NSSCKFWSlot *)NULL; | 1131 return (NSSCKFWSlot *)NULL; |
| 1191 } | 1132 } |
| 1192 | 1133 |
| 1193 n = nssCKFWInstance_GetNSlots(fwInstance, pError); | 1134 n = nssCKFWInstance_GetNSlots(fwInstance, pError); |
| 1194 if( ((CK_ULONG)0 == n) && (CKR_OK != *pError) ) { | 1135 if (((CK_ULONG)0 == n) && (CKR_OK != *pError)) { |
| 1195 return (NSSCKFWSlot *)NULL; | 1136 return (NSSCKFWSlot *)NULL; |
| 1196 } | 1137 } |
| 1197 | 1138 |
| 1198 for( i = 0; i < n; i++ ) { | 1139 for (i = 0; i < n; i++) { |
| 1199 if( fwInstance->mdSlotList[i] == mdSlot ) { | 1140 if (fwInstance->mdSlotList[i] == mdSlot) { |
| 1200 fwSlot = fwInstance->fwSlotList[i]; | 1141 fwSlot = fwInstance->fwSlotList[i]; |
| 1201 break; | 1142 break; |
| 1143 } |
| 1202 } | 1144 } |
| 1203 } | |
| 1204 | 1145 |
| 1205 if (!fwSlot) { | 1146 if (!fwSlot) { |
| 1206 /* Internal error */ | 1147 /* Internal error */ |
| 1207 *pError = CKR_GENERAL_ERROR; | 1148 *pError = CKR_GENERAL_ERROR; |
| 1208 return (NSSCKFWSlot *)NULL; | 1149 return (NSSCKFWSlot *)NULL; |
| 1209 } | 1150 } |
| 1210 | 1151 |
| 1211 return fwSlot; | 1152 return fwSlot; |
| 1212 } | 1153 } |
| 1213 | 1154 |
| 1214 /* | 1155 /* |
| 1215 * NSSCKFWInstance_GetMDInstance | 1156 * NSSCKFWInstance_GetMDInstance |
| 1216 * | 1157 * |
| 1217 */ | 1158 */ |
| 1218 NSS_IMPLEMENT NSSCKMDInstance * | 1159 NSS_IMPLEMENT NSSCKMDInstance * |
| 1219 NSSCKFWInstance_GetMDInstance | 1160 NSSCKFWInstance_GetMDInstance( |
| 1220 ( | 1161 NSSCKFWInstance *fwInstance) |
| 1221 NSSCKFWInstance *fwInstance | |
| 1222 ) | |
| 1223 { | 1162 { |
| 1224 #ifdef DEBUG | 1163 #ifdef DEBUG |
| 1225 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 1164 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 1226 return (NSSCKMDInstance *)NULL; | 1165 return (NSSCKMDInstance *)NULL; |
| 1227 } | 1166 } |
| 1228 #endif /* DEBUG */ | 1167 #endif /* DEBUG */ |
| 1229 | 1168 |
| 1230 return nssCKFWInstance_GetMDInstance(fwInstance); | 1169 return nssCKFWInstance_GetMDInstance(fwInstance); |
| 1231 } | 1170 } |
| 1232 | 1171 |
| 1233 /* | 1172 /* |
| 1234 * NSSCKFWInstance_GetArena | 1173 * NSSCKFWInstance_GetArena |
| 1235 * | 1174 * |
| 1236 */ | 1175 */ |
| 1237 NSS_IMPLEMENT NSSArena * | 1176 NSS_IMPLEMENT NSSArena * |
| 1238 NSSCKFWInstance_GetArena | 1177 NSSCKFWInstance_GetArena( |
| 1239 ( | 1178 NSSCKFWInstance *fwInstance, |
| 1240 NSSCKFWInstance *fwInstance, | 1179 CK_RV *pError) |
| 1241 CK_RV *pError | |
| 1242 ) | |
| 1243 { | 1180 { |
| 1244 #ifdef DEBUG | 1181 #ifdef DEBUG |
| 1245 if (!pError) { | 1182 if (!pError) { |
| 1246 return (NSSArena *)NULL; | 1183 return (NSSArena *)NULL; |
| 1247 } | 1184 } |
| 1248 | 1185 |
| 1249 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 1186 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 1250 if( CKR_OK != *pError ) { | 1187 if (CKR_OK != *pError) { |
| 1251 return (NSSArena *)NULL; | 1188 return (NSSArena *)NULL; |
| 1252 } | 1189 } |
| 1253 #endif /* DEBUG */ | 1190 #endif /* DEBUG */ |
| 1254 | 1191 |
| 1255 return nssCKFWInstance_GetArena(fwInstance, pError); | 1192 return nssCKFWInstance_GetArena(fwInstance, pError); |
| 1256 } | 1193 } |
| 1257 | 1194 |
| 1258 /* | 1195 /* |
| 1259 * NSSCKFWInstance_MayCreatePthreads | 1196 * NSSCKFWInstance_MayCreatePthreads |
| 1260 * | 1197 * |
| 1261 */ | 1198 */ |
| 1262 NSS_IMPLEMENT CK_BBOOL | 1199 NSS_IMPLEMENT CK_BBOOL |
| 1263 NSSCKFWInstance_MayCreatePthreads | 1200 NSSCKFWInstance_MayCreatePthreads( |
| 1264 ( | 1201 NSSCKFWInstance *fwInstance) |
| 1265 NSSCKFWInstance *fwInstance | |
| 1266 ) | |
| 1267 { | 1202 { |
| 1268 #ifdef DEBUG | 1203 #ifdef DEBUG |
| 1269 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 1204 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 1270 return CK_FALSE; | 1205 return CK_FALSE; |
| 1271 } | 1206 } |
| 1272 #endif /* DEBUG */ | 1207 #endif /* DEBUG */ |
| 1273 | 1208 |
| 1274 return nssCKFWInstance_MayCreatePthreads(fwInstance); | 1209 return nssCKFWInstance_MayCreatePthreads(fwInstance); |
| 1275 } | 1210 } |
| 1276 | 1211 |
| 1277 /* | 1212 /* |
| 1278 * NSSCKFWInstance_CreateMutex | 1213 * NSSCKFWInstance_CreateMutex |
| 1279 * | 1214 * |
| 1280 */ | 1215 */ |
| 1281 NSS_IMPLEMENT NSSCKFWMutex * | 1216 NSS_IMPLEMENT NSSCKFWMutex * |
| 1282 NSSCKFWInstance_CreateMutex | 1217 NSSCKFWInstance_CreateMutex( |
| 1283 ( | 1218 NSSCKFWInstance *fwInstance, |
| 1284 NSSCKFWInstance *fwInstance, | 1219 NSSArena *arena, |
| 1285 NSSArena *arena, | 1220 CK_RV *pError) |
| 1286 CK_RV *pError | |
| 1287 ) | |
| 1288 { | 1221 { |
| 1289 #ifdef DEBUG | 1222 #ifdef DEBUG |
| 1290 if (!pError) { | 1223 if (!pError) { |
| 1291 return (NSSCKFWMutex *)NULL; | 1224 return (NSSCKFWMutex *)NULL; |
| 1292 } | 1225 } |
| 1293 | 1226 |
| 1294 *pError = nssCKFWInstance_verifyPointer(fwInstance); | 1227 *pError = nssCKFWInstance_verifyPointer(fwInstance); |
| 1295 if( CKR_OK != *pError ) { | 1228 if (CKR_OK != *pError) { |
| 1296 return (NSSCKFWMutex *)NULL; | 1229 return (NSSCKFWMutex *)NULL; |
| 1297 } | 1230 } |
| 1298 #endif /* DEBUG */ | 1231 #endif /* DEBUG */ |
| 1299 | 1232 |
| 1300 return nssCKFWInstance_CreateMutex(fwInstance, arena, pError); | 1233 return nssCKFWInstance_CreateMutex(fwInstance, arena, pError); |
| 1301 } | 1234 } |
| 1302 | 1235 |
| 1303 /* | 1236 /* |
| 1304 * NSSCKFWInstance_GetConfigurationData | 1237 * NSSCKFWInstance_GetConfigurationData |
| 1305 * | 1238 * |
| 1306 */ | 1239 */ |
| 1307 NSS_IMPLEMENT NSSUTF8 * | 1240 NSS_IMPLEMENT NSSUTF8 * |
| 1308 NSSCKFWInstance_GetConfigurationData | 1241 NSSCKFWInstance_GetConfigurationData( |
| 1309 ( | 1242 NSSCKFWInstance *fwInstance) |
| 1310 NSSCKFWInstance *fwInstance | |
| 1311 ) | |
| 1312 { | 1243 { |
| 1313 #ifdef DEBUG | 1244 #ifdef DEBUG |
| 1314 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 1245 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 1315 return (NSSUTF8 *)NULL; | 1246 return (NSSUTF8 *)NULL; |
| 1316 } | 1247 } |
| 1317 #endif /* DEBUG */ | 1248 #endif /* DEBUG */ |
| 1318 | 1249 |
| 1319 return nssCKFWInstance_GetConfigurationData(fwInstance); | 1250 return nssCKFWInstance_GetConfigurationData(fwInstance); |
| 1320 } | 1251 } |
| 1321 | 1252 |
| 1322 /* | 1253 /* |
| 1323 * NSSCKFWInstance_GetInitArgs | 1254 * NSSCKFWInstance_GetInitArgs |
| 1324 * | 1255 * |
| 1325 */ | 1256 */ |
| 1326 NSS_IMPLEMENT CK_C_INITIALIZE_ARGS_PTR | 1257 NSS_IMPLEMENT CK_C_INITIALIZE_ARGS_PTR |
| 1327 NSSCKFWInstance_GetInitArgs | 1258 NSSCKFWInstance_GetInitArgs( |
| 1328 ( | 1259 NSSCKFWInstance *fwInstance) |
| 1329 NSSCKFWInstance *fwInstance | |
| 1330 ) | |
| 1331 { | 1260 { |
| 1332 #ifdef DEBUG | 1261 #ifdef DEBUG |
| 1333 if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) { | 1262 if (CKR_OK != nssCKFWInstance_verifyPointer(fwInstance)) { |
| 1334 return (CK_C_INITIALIZE_ARGS_PTR)NULL; | 1263 return (CK_C_INITIALIZE_ARGS_PTR)NULL; |
| 1335 } | 1264 } |
| 1336 #endif /* DEBUG */ | 1265 #endif /* DEBUG */ |
| 1337 | 1266 |
| 1338 return nssCKFWInstance_GetInitArgs(fwInstance); | 1267 return nssCKFWInstance_GetInitArgs(fwInstance); |
| 1339 } | 1268 } |
| 1340 | |
| OLD | NEW |