Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(984)

Side by Side Diff: nss/lib/ckfw/object.c

Issue 1843333003: Update NSPR to 4.12 and NSS to 3.23 on iOS (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 * object.c 6 * object.c
7 * 7 *
8 * This file implements the NSSCKFWObject type and methods. 8 * This file implements the NSSCKFWObject type and methods.
9 */ 9 */
10 10
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 * nssCKFWObject_IsTokenObject 43 * nssCKFWObject_IsTokenObject
44 * nssCKFWObject_GetAttributeCount 44 * nssCKFWObject_GetAttributeCount
45 * nssCKFWObject_GetAttributeTypes 45 * nssCKFWObject_GetAttributeTypes
46 * nssCKFWObject_GetAttributeSize 46 * nssCKFWObject_GetAttributeSize
47 * nssCKFWObject_GetAttribute 47 * nssCKFWObject_GetAttribute
48 * nssCKFWObject_SetAttribute 48 * nssCKFWObject_SetAttribute
49 * nssCKFWObject_GetObjectSize 49 * nssCKFWObject_GetObjectSize
50 */ 50 */
51 51
52 struct NSSCKFWObjectStr { 52 struct NSSCKFWObjectStr {
53 NSSCKFWMutex *mutex; /* merely to serialise the MDObject calls */ 53 NSSCKFWMutex *mutex; /* merely to serialise the MDObject calls */
54 NSSArena *arena; 54 NSSArena *arena;
55 NSSCKMDObject *mdObject; 55 NSSCKMDObject *mdObject;
56 NSSCKMDSession *mdSession; 56 NSSCKMDSession *mdSession;
57 NSSCKFWSession *fwSession; 57 NSSCKFWSession *fwSession;
58 NSSCKMDToken *mdToken; 58 NSSCKMDToken *mdToken;
59 NSSCKFWToken *fwToken; 59 NSSCKFWToken *fwToken;
60 NSSCKMDInstance *mdInstance; 60 NSSCKMDInstance *mdInstance;
61 NSSCKFWInstance *fwInstance; 61 NSSCKFWInstance *fwInstance;
62 CK_OBJECT_HANDLE hObject; 62 CK_OBJECT_HANDLE hObject;
63 }; 63 };
64 64
65 #ifdef DEBUG 65 #ifdef DEBUG
66 /* 66 /*
67 * But first, the pointer-tracking stuff. 67 * But first, the pointer-tracking stuff.
68 * 68 *
69 * NOTE: the pointer-tracking support in NSS/base currently relies 69 * NOTE: the pointer-tracking support in NSS/base currently relies
70 * upon NSPR's CallOnce support. That, however, relies upon NSPR's 70 * upon NSPR's CallOnce support. That, however, relies upon NSPR's
71 * locking, which is tied into the runtime. We need a pointer-tracker 71 * locking, which is tied into the runtime. We need a pointer-tracker
72 * implementation that uses the locks supplied through C_Initialize. 72 * implementation that uses the locks supplied through C_Initialize.
73 * That support, however, can be filled in later. So for now, I'll 73 * That support, however, can be filled in later. So for now, I'll
74 * just do this routines as no-ops. 74 * just do this routines as no-ops.
75 */ 75 */
76 76
77 static CK_RV 77 static CK_RV
78 object_add_pointer 78 object_add_pointer(
79 ( 79 const NSSCKFWObject *fwObject)
80 const NSSCKFWObject *fwObject
81 )
82 { 80 {
83 return CKR_OK; 81 return CKR_OK;
84 } 82 }
85 83
86 static CK_RV 84 static CK_RV
87 object_remove_pointer 85 object_remove_pointer(
88 ( 86 const NSSCKFWObject *fwObject)
89 const NSSCKFWObject *fwObject
90 )
91 { 87 {
92 return CKR_OK; 88 return CKR_OK;
93 } 89 }
94 90
95 NSS_IMPLEMENT CK_RV 91 NSS_IMPLEMENT CK_RV
96 nssCKFWObject_verifyPointer 92 nssCKFWObject_verifyPointer(
97 ( 93 const NSSCKFWObject *fwObject)
98 const NSSCKFWObject *fwObject
99 )
100 { 94 {
101 return CKR_OK; 95 return CKR_OK;
102 } 96 }
103 97
104 #endif /* DEBUG */ 98 #endif /* DEBUG */
105 99
106
107 /* 100 /*
108 * nssCKFWObject_Create 101 * nssCKFWObject_Create
109 * 102 *
110 */ 103 */
111 NSS_IMPLEMENT NSSCKFWObject * 104 NSS_IMPLEMENT NSSCKFWObject *
112 nssCKFWObject_Create 105 nssCKFWObject_Create(
113 ( 106 NSSArena *arena,
114 NSSArena *arena, 107 NSSCKMDObject *mdObject,
115 NSSCKMDObject *mdObject, 108 NSSCKFWSession *fwSession,
116 NSSCKFWSession *fwSession, 109 NSSCKFWToken *fwToken,
117 NSSCKFWToken *fwToken, 110 NSSCKFWInstance *fwInstance,
118 NSSCKFWInstance *fwInstance, 111 CK_RV *pError)
119 CK_RV *pError
120 )
121 { 112 {
122 NSSCKFWObject *fwObject; 113 NSSCKFWObject *fwObject;
123 nssCKFWHash *mdObjectHash; 114 nssCKFWHash *mdObjectHash;
124 115
125 #ifdef NSSDEBUG 116 #ifdef NSSDEBUG
126 if (!pError) { 117 if (!pError) {
127 return (NSSCKFWObject *)NULL; 118 return (NSSCKFWObject *)NULL;
128 } 119 }
129 120
130 if( PR_SUCCESS != nssArena_verifyPointer(arena) ) { 121 if (PR_SUCCESS != nssArena_verifyPointer(arena)) {
131 *pError = CKR_ARGUMENTS_BAD; 122 *pError = CKR_ARGUMENTS_BAD;
132 return (NSSCKFWObject *)NULL; 123 return (NSSCKFWObject *)NULL;
133 } 124 }
134 #endif /* NSSDEBUG */ 125 #endif /* NSSDEBUG */
135 126
136 if (!fwToken) { 127 if (!fwToken) {
137 *pError = CKR_ARGUMENTS_BAD; 128 *pError = CKR_ARGUMENTS_BAD;
138 return (NSSCKFWObject *)NULL; 129 return (NSSCKFWObject *)NULL;
139 } 130 }
140 mdObjectHash = nssCKFWToken_GetMDObjectHash(fwToken); 131 mdObjectHash = nssCKFWToken_GetMDObjectHash(fwToken);
141 if (!mdObjectHash) { 132 if (!mdObjectHash) {
142 *pError = CKR_GENERAL_ERROR; 133 *pError = CKR_GENERAL_ERROR;
143 return (NSSCKFWObject *)NULL; 134 return (NSSCKFWObject *)NULL;
144 } 135 }
145 136
146 if( nssCKFWHash_Exists(mdObjectHash, mdObject) ) { 137 if (nssCKFWHash_Exists(mdObjectHash, mdObject)) {
147 fwObject = nssCKFWHash_Lookup(mdObjectHash, mdObject); 138 fwObject = nssCKFWHash_Lookup(mdObjectHash, mdObject);
148 return fwObject; 139 return fwObject;
149 } 140 }
150 141
151 fwObject = nss_ZNEW(arena, NSSCKFWObject); 142 fwObject = nss_ZNEW(arena, NSSCKFWObject);
152 if (!fwObject) { 143 if (!fwObject) {
153 *pError = CKR_HOST_MEMORY; 144 *pError = CKR_HOST_MEMORY;
154 return (NSSCKFWObject *)NULL; 145 return (NSSCKFWObject *)NULL;
155 } 146 }
156 147
157 fwObject->arena = arena; 148 fwObject->arena = arena;
158 fwObject->mdObject = mdObject; 149 fwObject->mdObject = mdObject;
159 fwObject->fwSession = fwSession; 150 fwObject->fwSession = fwSession;
160 151
161 if (fwSession) { 152 if (fwSession) {
162 fwObject->mdSession = nssCKFWSession_GetMDSession(fwSession); 153 fwObject->mdSession = nssCKFWSession_GetMDSession(fwSession);
163 } 154 }
164 155
165 fwObject->fwToken = fwToken; 156 fwObject->fwToken = fwToken;
166 fwObject->mdToken = nssCKFWToken_GetMDToken(fwToken); 157 fwObject->mdToken = nssCKFWToken_GetMDToken(fwToken);
167 fwObject->fwInstance = fwInstance; 158 fwObject->fwInstance = fwInstance;
168 fwObject->mdInstance = nssCKFWInstance_GetMDInstance(fwInstance); 159 fwObject->mdInstance = nssCKFWInstance_GetMDInstance(fwInstance);
169 fwObject->mutex = nssCKFWInstance_CreateMutex(fwInstance, arena, pError); 160 fwObject->mutex = nssCKFWInstance_CreateMutex(fwInstance, arena, pError);
170 if (!fwObject->mutex) { 161 if (!fwObject->mutex) {
171 if( CKR_OK == *pError ) { 162 if (CKR_OK == *pError) {
172 *pError = CKR_GENERAL_ERROR; 163 *pError = CKR_GENERAL_ERROR;
164 }
165 nss_ZFreeIf(fwObject);
166 return (NSSCKFWObject *)NULL;
173 } 167 }
174 nss_ZFreeIf(fwObject);
175 return (NSSCKFWObject *)NULL;
176 }
177 168
178 *pError = nssCKFWHash_Add(mdObjectHash, mdObject, fwObject); 169 *pError = nssCKFWHash_Add(mdObjectHash, mdObject, fwObject);
179 if( CKR_OK != *pError ) { 170 if (CKR_OK != *pError) {
180 nss_ZFreeIf(fwObject); 171 nss_ZFreeIf(fwObject);
181 return (NSSCKFWObject *)NULL; 172 return (NSSCKFWObject *)NULL;
182 } 173 }
183 174
184 #ifdef DEBUG 175 #ifdef DEBUG
185 *pError = object_add_pointer(fwObject); 176 *pError = object_add_pointer(fwObject);
186 if( CKR_OK != *pError ) { 177 if (CKR_OK != *pError) {
187 nssCKFWHash_Remove(mdObjectHash, mdObject); 178 nssCKFWHash_Remove(mdObjectHash, mdObject);
188 nss_ZFreeIf(fwObject); 179 nss_ZFreeIf(fwObject);
189 return (NSSCKFWObject *)NULL; 180 return (NSSCKFWObject *)NULL;
190 } 181 }
191 #endif /* DEBUG */ 182 #endif /* DEBUG */
192 183
193 *pError = CKR_OK; 184 *pError = CKR_OK;
194 return fwObject; 185 return fwObject;
195 } 186 }
196 187
197 /* 188 /*
198 * nssCKFWObject_Finalize 189 * nssCKFWObject_Finalize
199 * 190 *
200 */ 191 */
201 NSS_IMPLEMENT void 192 NSS_IMPLEMENT void
202 nssCKFWObject_Finalize 193 nssCKFWObject_Finalize(
203 ( 194 NSSCKFWObject *fwObject,
204 NSSCKFWObject *fwObject, 195 PRBool removeFromHash)
205 PRBool removeFromHash
206 )
207 { 196 {
208 nssCKFWHash *mdObjectHash; 197 nssCKFWHash *mdObjectHash;
209 198
210 #ifdef NSSDEBUG 199 #ifdef NSSDEBUG
211 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { 200 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) {
212 return; 201 return;
213 } 202 }
214 #endif /* NSSDEBUG */ 203 #endif /* NSSDEBUG */
215 204
216 (void)nssCKFWMutex_Destroy(fwObject->mutex); 205 (void)nssCKFWMutex_Destroy(fwObject->mutex);
217 206
218 if (fwObject->mdObject->Finalize) { 207 if (fwObject->mdObject->Finalize) {
219 fwObject->mdObject->Finalize(fwObject->mdObject, fwObject, 208 fwObject->mdObject->Finalize(fwObject->mdObject, fwObject,
220 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken, 209 fwObject->mdSession, fwObject->fwSession, f wObject->mdToken,
221 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance); 210 fwObject->fwToken, fwObject->mdInstance, fw Object->fwInstance);
222 } 211 }
223 212
224 if (removeFromHash) { 213 if (removeFromHash) {
225 mdObjectHash = nssCKFWToken_GetMDObjectHash(fwObject->fwToken); 214 mdObjectHash = nssCKFWToken_GetMDObjectHash(fwObject->fwToken);
226 if (mdObjectHash) { 215 if (mdObjectHash) {
227 nssCKFWHash_Remove(mdObjectHash, fwObject->mdObject); 216 nssCKFWHash_Remove(mdObjectHash, fwObject->mdObject);
217 }
228 } 218 }
229 }
230 219
231 if (fwObject->fwSession) { 220 if (fwObject->fwSession) {
232 nssCKFWSession_DeregisterSessionObject(fwObject->fwSession, fwObject); 221 nssCKFWSession_DeregisterSessionObject(fwObject->fwSession, fwObject);
233 } 222 }
234 nss_ZFreeIf(fwObject); 223 nss_ZFreeIf(fwObject);
235 224
236 #ifdef DEBUG 225 #ifdef DEBUG
237 (void)object_remove_pointer(fwObject); 226 (void)object_remove_pointer(fwObject);
238 #endif /* DEBUG */ 227 #endif /* DEBUG */
239 228
240 return; 229 return;
241 } 230 }
242 231
243 /* 232 /*
244 * nssCKFWObject_Destroy 233 * nssCKFWObject_Destroy
245 * 234 *
246 */ 235 */
247 NSS_IMPLEMENT void 236 NSS_IMPLEMENT void
248 nssCKFWObject_Destroy 237 nssCKFWObject_Destroy(
249 ( 238 NSSCKFWObject *fwObject)
250 NSSCKFWObject *fwObject
251 )
252 { 239 {
253 nssCKFWHash *mdObjectHash; 240 nssCKFWHash *mdObjectHash;
254 241
255 #ifdef NSSDEBUG 242 #ifdef NSSDEBUG
256 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { 243 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) {
257 return; 244 return;
258 } 245 }
259 #endif /* NSSDEBUG */ 246 #endif /* NSSDEBUG */
260 247
261 (void)nssCKFWMutex_Destroy(fwObject->mutex); 248 (void)nssCKFWMutex_Destroy(fwObject->mutex);
262 249
263 if (fwObject->mdObject->Destroy) { 250 if (fwObject->mdObject->Destroy) {
264 fwObject->mdObject->Destroy(fwObject->mdObject, fwObject, 251 fwObject->mdObject->Destroy(fwObject->mdObject, fwObject,
265 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken, 252 fwObject->mdSession, fwObject->fwSession, fw Object->mdToken,
266 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance); 253 fwObject->fwToken, fwObject->mdInstance, fwO bject->fwInstance);
267 } 254 }
268 255
269 mdObjectHash = nssCKFWToken_GetMDObjectHash(fwObject->fwToken); 256 mdObjectHash = nssCKFWToken_GetMDObjectHash(fwObject->fwToken);
270 if (mdObjectHash) { 257 if (mdObjectHash) {
271 nssCKFWHash_Remove(mdObjectHash, fwObject->mdObject); 258 nssCKFWHash_Remove(mdObjectHash, fwObject->mdObject);
272 } 259 }
273 260
274 if (fwObject->fwSession) { 261 if (fwObject->fwSession) {
275 nssCKFWSession_DeregisterSessionObject(fwObject->fwSession, fwObject); 262 nssCKFWSession_DeregisterSessionObject(fwObject->fwSession, fwObject);
276 } 263 }
277 nss_ZFreeIf(fwObject); 264 nss_ZFreeIf(fwObject);
278 265
279 #ifdef DEBUG 266 #ifdef DEBUG
280 (void)object_remove_pointer(fwObject); 267 (void)object_remove_pointer(fwObject);
281 #endif /* DEBUG */ 268 #endif /* DEBUG */
282 269
283 return; 270 return;
284 } 271 }
285 272
286 /* 273 /*
287 * nssCKFWObject_GetMDObject 274 * nssCKFWObject_GetMDObject
288 * 275 *
289 */ 276 */
290 NSS_IMPLEMENT NSSCKMDObject * 277 NSS_IMPLEMENT NSSCKMDObject *
291 nssCKFWObject_GetMDObject 278 nssCKFWObject_GetMDObject(
292 ( 279 NSSCKFWObject *fwObject)
293 NSSCKFWObject *fwObject
294 )
295 { 280 {
296 #ifdef NSSDEBUG 281 #ifdef NSSDEBUG
297 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { 282 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) {
298 return (NSSCKMDObject *)NULL; 283 return (NSSCKMDObject *)NULL;
299 } 284 }
300 #endif /* NSSDEBUG */ 285 #endif /* NSSDEBUG */
301 286
302 return fwObject->mdObject; 287 return fwObject->mdObject;
303 } 288 }
304 289
305 /* 290 /*
306 * nssCKFWObject_GetArena 291 * nssCKFWObject_GetArena
307 * 292 *
308 */ 293 */
309 NSS_IMPLEMENT NSSArena * 294 NSS_IMPLEMENT NSSArena *
310 nssCKFWObject_GetArena 295 nssCKFWObject_GetArena(
311 ( 296 NSSCKFWObject *fwObject,
312 NSSCKFWObject *fwObject, 297 CK_RV *pError)
313 CK_RV *pError
314 )
315 { 298 {
316 #ifdef NSSDEBUG 299 #ifdef NSSDEBUG
317 if (!pError) { 300 if (!pError) {
318 return (NSSArena *)NULL; 301 return (NSSArena *)NULL;
319 } 302 }
320 303
321 *pError = nssCKFWObject_verifyPointer(fwObject); 304 *pError = nssCKFWObject_verifyPointer(fwObject);
322 if( CKR_OK != *pError ) { 305 if (CKR_OK != *pError) {
323 return (NSSArena *)NULL; 306 return (NSSArena *)NULL;
324 } 307 }
325 #endif /* NSSDEBUG */ 308 #endif /* NSSDEBUG */
326 309
327 return fwObject->arena; 310 return fwObject->arena;
328 } 311 }
329 312
330 /* 313 /*
331 * nssCKFWObject_SetHandle 314 * nssCKFWObject_SetHandle
332 * 315 *
333 */ 316 */
334 NSS_IMPLEMENT CK_RV 317 NSS_IMPLEMENT CK_RV
335 nssCKFWObject_SetHandle 318 nssCKFWObject_SetHandle(
336 ( 319 NSSCKFWObject *fwObject,
337 NSSCKFWObject *fwObject, 320 CK_OBJECT_HANDLE hObject)
338 CK_OBJECT_HANDLE hObject
339 )
340 { 321 {
341 #ifdef NSSDEBUG 322 #ifdef NSSDEBUG
342 CK_RV error = CKR_OK; 323 CK_RV error = CKR_OK;
343 #endif /* NSSDEBUG */ 324 #endif /* NSSDEBUG */
344 325
345 #ifdef NSSDEBUG 326 #ifdef NSSDEBUG
346 error = nssCKFWObject_verifyPointer(fwObject); 327 error = nssCKFWObject_verifyPointer(fwObject);
347 if( CKR_OK != error ) { 328 if (CKR_OK != error) {
348 return error; 329 return error;
349 } 330 }
350 #endif /* NSSDEBUG */ 331 #endif /* NSSDEBUG */
351 332
352 if( (CK_OBJECT_HANDLE)0 != fwObject->hObject ) { 333 if ((CK_OBJECT_HANDLE)0 != fwObject->hObject) {
353 return CKR_GENERAL_ERROR; 334 return CKR_GENERAL_ERROR;
354 } 335 }
355 336
356 fwObject->hObject = hObject; 337 fwObject->hObject = hObject;
357 338
358 return CKR_OK; 339 return CKR_OK;
359 } 340 }
360 341
361 /* 342 /*
362 * nssCKFWObject_GetHandle 343 * nssCKFWObject_GetHandle
363 * 344 *
364 */ 345 */
365 NSS_IMPLEMENT CK_OBJECT_HANDLE 346 NSS_IMPLEMENT CK_OBJECT_HANDLE
366 nssCKFWObject_GetHandle 347 nssCKFWObject_GetHandle(
367 ( 348 NSSCKFWObject *fwObject)
368 NSSCKFWObject *fwObject
369 )
370 { 349 {
371 #ifdef NSSDEBUG 350 #ifdef NSSDEBUG
372 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { 351 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) {
373 return (CK_OBJECT_HANDLE)0; 352 return (CK_OBJECT_HANDLE)0;
374 } 353 }
375 #endif /* NSSDEBUG */ 354 #endif /* NSSDEBUG */
376 355
377 return fwObject->hObject; 356 return fwObject->hObject;
378 } 357 }
379 358
380 /* 359 /*
381 * nssCKFWObject_IsTokenObject 360 * nssCKFWObject_IsTokenObject
382 * 361 *
383 */ 362 */
384 NSS_IMPLEMENT CK_BBOOL 363 NSS_IMPLEMENT CK_BBOOL
385 nssCKFWObject_IsTokenObject 364 nssCKFWObject_IsTokenObject(
386 ( 365 NSSCKFWObject *fwObject)
387 NSSCKFWObject *fwObject
388 )
389 { 366 {
390 CK_BBOOL b = CK_FALSE; 367 CK_BBOOL b = CK_FALSE;
391 368
392 #ifdef NSSDEBUG 369 #ifdef NSSDEBUG
393 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { 370 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) {
394 return CK_FALSE; 371 return CK_FALSE;
395 } 372 }
396 #endif /* NSSDEBUG */ 373 #endif /* NSSDEBUG */
397 374
398 if (!fwObject->mdObject->IsTokenObject) { 375 if (!fwObject->mdObject->IsTokenObject) {
399 NSSItem item; 376 NSSItem item;
400 NSSItem *pItem; 377 NSSItem *pItem;
401 CK_RV rv = CKR_OK; 378 CK_RV rv = CKR_OK;
402 379
403 item.data = (void *)&b; 380 item.data = (void *)&b;
404 item.size = sizeof(b); 381 item.size = sizeof(b);
405 382
406 pItem = nssCKFWObject_GetAttribute(fwObject, CKA_TOKEN, &item, 383 pItem = nssCKFWObject_GetAttribute(fwObject, CKA_TOKEN, &item,
407 (NSSArena *)NULL, &rv); 384 (NSSArena *)NULL, &rv);
408 if (!pItem) { 385 if (!pItem) {
409 /* Error of some type */ 386 /* Error of some type */
410 b = CK_FALSE; 387 b = CK_FALSE;
411 goto done; 388 goto done;
389 }
390
391 goto done;
412 } 392 }
413 393
414 goto done; 394 b = fwObject->mdObject->IsTokenObject(fwObject->mdObject, fwObject,
415 } 395 fwObject->mdSession, fwObject->fwSessi on, fwObject->mdToken,
396 fwObject->fwToken, fwObject->mdInstanc e, fwObject->fwInstance);
416 397
417 b = fwObject->mdObject->IsTokenObject(fwObject->mdObject, fwObject, 398 done:
418 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken, 399 return b;
419 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance);
420
421 done:
422 return b;
423 } 400 }
424 401
425 /* 402 /*
426 * nssCKFWObject_GetAttributeCount 403 * nssCKFWObject_GetAttributeCount
427 * 404 *
428 */ 405 */
429 NSS_IMPLEMENT CK_ULONG 406 NSS_IMPLEMENT CK_ULONG
430 nssCKFWObject_GetAttributeCount 407 nssCKFWObject_GetAttributeCount(
431 ( 408 NSSCKFWObject *fwObject,
432 NSSCKFWObject *fwObject, 409 CK_RV *pError)
433 CK_RV *pError
434 )
435 { 410 {
436 CK_ULONG rv; 411 CK_ULONG rv;
437 412
438 #ifdef NSSDEBUG 413 #ifdef NSSDEBUG
439 if (!pError) { 414 if (!pError) {
440 return (CK_ULONG)0; 415 return (CK_ULONG)0;
441 } 416 }
442 417
443 *pError = nssCKFWObject_verifyPointer(fwObject); 418 *pError = nssCKFWObject_verifyPointer(fwObject);
444 if( CKR_OK != *pError ) { 419 if (CKR_OK != *pError) {
445 return (CK_ULONG)0; 420 return (CK_ULONG)0;
446 } 421 }
447 #endif /* NSSDEBUG */ 422 #endif /* NSSDEBUG */
448 423
449 if (!fwObject->mdObject->GetAttributeCount) { 424 if (!fwObject->mdObject->GetAttributeCount) {
450 *pError = CKR_GENERAL_ERROR; 425 *pError = CKR_GENERAL_ERROR;
451 return (CK_ULONG)0; 426 return (CK_ULONG)0;
452 } 427 }
453 428
454 *pError = nssCKFWMutex_Lock(fwObject->mutex); 429 *pError = nssCKFWMutex_Lock(fwObject->mutex);
455 if( CKR_OK != *pError ) { 430 if (CKR_OK != *pError) {
456 return (CK_ULONG)0; 431 return (CK_ULONG)0;
457 } 432 }
458 433
459 rv = fwObject->mdObject->GetAttributeCount(fwObject->mdObject, fwObject, 434 rv = fwObject->mdObject->GetAttributeCount(fwObject->mdObject, fwObject,
460 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken, 435 fwObject->mdSession, fwObject->fw Session, fwObject->mdToken,
461 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance, 436 fwObject->fwToken, fwObject->mdIn stance, fwObject->fwInstance,
462 pError); 437 pError);
463 438
464 (void)nssCKFWMutex_Unlock(fwObject->mutex); 439 (void)nssCKFWMutex_Unlock(fwObject->mutex);
465 return rv; 440 return rv;
466 } 441 }
467 442
468 /* 443 /*
469 * nssCKFWObject_GetAttributeTypes 444 * nssCKFWObject_GetAttributeTypes
470 * 445 *
471 */ 446 */
472 NSS_IMPLEMENT CK_RV 447 NSS_IMPLEMENT CK_RV
473 nssCKFWObject_GetAttributeTypes 448 nssCKFWObject_GetAttributeTypes(
474 ( 449 NSSCKFWObject *fwObject,
475 NSSCKFWObject *fwObject, 450 CK_ATTRIBUTE_TYPE_PTR typeArray,
476 CK_ATTRIBUTE_TYPE_PTR typeArray, 451 CK_ULONG ulCount)
477 CK_ULONG ulCount
478 )
479 { 452 {
480 CK_RV error = CKR_OK; 453 CK_RV error = CKR_OK;
481 454
482 #ifdef NSSDEBUG 455 #ifdef NSSDEBUG
483 error = nssCKFWObject_verifyPointer(fwObject); 456 error = nssCKFWObject_verifyPointer(fwObject);
484 if( CKR_OK != error ) { 457 if (CKR_OK != error) {
485 return error; 458 return error;
486 } 459 }
487 460
488 if( (CK_ATTRIBUTE_TYPE_PTR)NULL == typeArray ) { 461 if ((CK_ATTRIBUTE_TYPE_PTR)NULL == typeArray) {
489 return CKR_ARGUMENTS_BAD; 462 return CKR_ARGUMENTS_BAD;
490 } 463 }
491 #endif /* NSSDEBUG */ 464 #endif /* NSSDEBUG */
492 465
493 if (!fwObject->mdObject->GetAttributeTypes) { 466 if (!fwObject->mdObject->GetAttributeTypes) {
494 return CKR_GENERAL_ERROR; 467 return CKR_GENERAL_ERROR;
495 } 468 }
496 469
497 error = nssCKFWMutex_Lock(fwObject->mutex); 470 error = nssCKFWMutex_Lock(fwObject->mutex);
498 if( CKR_OK != error ) { 471 if (CKR_OK != error) {
472 return error;
473 }
474
475 error = fwObject->mdObject->GetAttributeTypes(fwObject->mdObject, fwObject,
476 fwObject->mdSession, fwObject- >fwSession, fwObject->mdToken,
477 fwObject->fwToken, fwObject->m dInstance, fwObject->fwInstance,
478 typeArray, ulCount);
479
480 (void)nssCKFWMutex_Unlock(fwObject->mutex);
499 return error; 481 return error;
500 }
501
502 error = fwObject->mdObject->GetAttributeTypes(fwObject->mdObject, fwObject,
503 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken,
504 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance,
505 typeArray, ulCount);
506
507 (void)nssCKFWMutex_Unlock(fwObject->mutex);
508 return error;
509 } 482 }
510 483
511 /* 484 /*
512 * nssCKFWObject_GetAttributeSize 485 * nssCKFWObject_GetAttributeSize
513 * 486 *
514 */ 487 */
515 NSS_IMPLEMENT CK_ULONG 488 NSS_IMPLEMENT CK_ULONG
516 nssCKFWObject_GetAttributeSize 489 nssCKFWObject_GetAttributeSize(
517 ( 490 NSSCKFWObject *fwObject,
518 NSSCKFWObject *fwObject, 491 CK_ATTRIBUTE_TYPE attribute,
519 CK_ATTRIBUTE_TYPE attribute, 492 CK_RV *pError)
520 CK_RV *pError
521 )
522 { 493 {
523 CK_ULONG rv; 494 CK_ULONG rv;
524 495
525 #ifdef NSSDEBUG 496 #ifdef NSSDEBUG
526 if (!pError) { 497 if (!pError) {
527 return (CK_ULONG)0; 498 return (CK_ULONG)0;
528 } 499 }
529 500
530 *pError = nssCKFWObject_verifyPointer(fwObject); 501 *pError = nssCKFWObject_verifyPointer(fwObject);
531 if( CKR_OK != *pError ) { 502 if (CKR_OK != *pError) {
532 return (CK_ULONG)0; 503 return (CK_ULONG)0;
533 } 504 }
534 #endif /* NSSDEBUG */ 505 #endif /* NSSDEBUG */
535 506
536 if (!fwObject->mdObject->GetAttributeSize) { 507 if (!fwObject->mdObject->GetAttributeSize) {
537 *pError = CKR_GENERAL_ERROR; 508 *pError = CKR_GENERAL_ERROR;
538 return (CK_ULONG )0; 509 return (CK_ULONG)0;
539 } 510 }
540 511
541 *pError = nssCKFWMutex_Lock(fwObject->mutex); 512 *pError = nssCKFWMutex_Lock(fwObject->mutex);
542 if( CKR_OK != *pError ) { 513 if (CKR_OK != *pError) {
543 return (CK_ULONG)0; 514 return (CK_ULONG)0;
544 } 515 }
545 516
546 rv = fwObject->mdObject->GetAttributeSize(fwObject->mdObject, fwObject, 517 rv = fwObject->mdObject->GetAttributeSize(fwObject->mdObject, fwObject,
547 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken, 518 fwObject->mdSession, fwObject->fwS ession, fwObject->mdToken,
548 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance, 519 fwObject->fwToken, fwObject->mdIns tance, fwObject->fwInstance,
549 attribute, pError); 520 attribute, pError);
550 521
551 (void)nssCKFWMutex_Unlock(fwObject->mutex); 522 (void)nssCKFWMutex_Unlock(fwObject->mutex);
552 return rv; 523 return rv;
553 } 524 }
554 525
555 /* 526 /*
556 * nssCKFWObject_GetAttribute 527 * nssCKFWObject_GetAttribute
557 * 528 *
558 * Usual NSS allocation rules: 529 * Usual NSS allocation rules:
559 * If itemOpt is not NULL, it will be returned; otherwise an NSSItem 530 * If itemOpt is not NULL, it will be returned; otherwise an NSSItem
560 * will be allocated. If itemOpt is not NULL but itemOpt->data is, 531 * will be allocated. If itemOpt is not NULL but itemOpt->data is,
561 * the buffer will be allocated; otherwise, the buffer will be used. 532 * the buffer will be allocated; otherwise, the buffer will be used.
562 * Any allocations will come from the optional arena, if one is 533 * Any allocations will come from the optional arena, if one is
563 * specified. 534 * specified.
564 */ 535 */
565 NSS_IMPLEMENT NSSItem * 536 NSS_IMPLEMENT NSSItem *
566 nssCKFWObject_GetAttribute 537 nssCKFWObject_GetAttribute(
567 ( 538 NSSCKFWObject *fwObject,
568 NSSCKFWObject *fwObject, 539 CK_ATTRIBUTE_TYPE attribute,
569 CK_ATTRIBUTE_TYPE attribute, 540 NSSItem *itemOpt,
570 NSSItem *itemOpt, 541 NSSArena *arenaOpt,
571 NSSArena *arenaOpt, 542 CK_RV *pError)
572 CK_RV *pError
573 )
574 { 543 {
575 NSSItem *rv = (NSSItem *)NULL; 544 NSSItem *rv = (NSSItem *)NULL;
576 NSSCKFWItem mdItem; 545 NSSCKFWItem mdItem;
577 546
578 #ifdef NSSDEBUG 547 #ifdef NSSDEBUG
579 if (!pError) { 548 if (!pError) {
580 return (NSSItem *)NULL; 549 return (NSSItem *)NULL;
581 } 550 }
582 551
583 *pError = nssCKFWObject_verifyPointer(fwObject); 552 *pError = nssCKFWObject_verifyPointer(fwObject);
584 if( CKR_OK != *pError ) { 553 if (CKR_OK != *pError) {
585 return (NSSItem *)NULL; 554 return (NSSItem *)NULL;
586 } 555 }
587 #endif /* NSSDEBUG */ 556 #endif /* NSSDEBUG */
588 557
589 if (!fwObject->mdObject->GetAttribute) { 558 if (!fwObject->mdObject->GetAttribute) {
590 *pError = CKR_GENERAL_ERROR; 559 *pError = CKR_GENERAL_ERROR;
591 return (NSSItem *)NULL; 560 return (NSSItem *)NULL;
592 }
593
594 *pError = nssCKFWMutex_Lock(fwObject->mutex);
595 if( CKR_OK != *pError ) {
596 return (NSSItem *)NULL;
597 }
598
599 mdItem = fwObject->mdObject->GetAttribute(fwObject->mdObject, fwObject,
600 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken,
601 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance,
602 attribute, pError);
603
604 if (!mdItem.item) {
605 if( CKR_OK == *pError ) {
606 *pError = CKR_GENERAL_ERROR;
607 } 561 }
608 562
609 goto done; 563 *pError = nssCKFWMutex_Lock(fwObject->mutex);
610 } 564 if (CKR_OK != *pError) {
565 return (NSSItem *)NULL;
566 }
611 567
612 if (!itemOpt) { 568 mdItem = fwObject->mdObject->GetAttribute(fwObject->mdObject, fwObject,
613 rv = nss_ZNEW(arenaOpt, NSSItem); 569 fwObject->mdSession, fwObject->fwS ession, fwObject->mdToken,
614 if (!rv) { 570 fwObject->fwToken, fwObject->mdIns tance, fwObject->fwInstance,
615 *pError = CKR_HOST_MEMORY; 571 attribute, pError);
616 goto done; 572
573 if (!mdItem.item) {
574 if (CKR_OK == *pError) {
575 *pError = CKR_GENERAL_ERROR;
576 }
577
578 goto done;
617 } 579 }
618 } else {
619 rv = itemOpt;
620 }
621 580
622 if (!rv->data) { 581 if (!itemOpt) {
623 rv->size = mdItem.item->size; 582 rv = nss_ZNEW(arenaOpt, NSSItem);
624 rv->data = nss_ZAlloc(arenaOpt, rv->size); 583 if (!rv) {
584 *pError = CKR_HOST_MEMORY;
585 goto done;
586 }
587 } else {
588 rv = itemOpt;
589 }
590
625 if (!rv->data) { 591 if (!rv->data) {
626 *pError = CKR_HOST_MEMORY; 592 rv->size = mdItem.item->size;
627 if (!itemOpt) { 593 rv->data = nss_ZAlloc(arenaOpt, rv->size);
628 nss_ZFreeIf(rv); 594 if (!rv->data) {
629 } 595 *pError = CKR_HOST_MEMORY;
630 rv = (NSSItem *)NULL; 596 if (!itemOpt) {
631 goto done; 597 nss_ZFreeIf(rv);
598 }
599 rv = (NSSItem *)NULL;
600 goto done;
601 }
602 } else {
603 if (rv->size >= mdItem.item->size) {
604 rv->size = mdItem.item->size;
605 } else {
606 *pError = CKR_BUFFER_TOO_SMALL;
607 /* Should we set rv->size to mdItem->size? */
608 /* rv can't have been allocated */
609 rv = (NSSItem *)NULL;
610 goto done;
611 }
632 } 612 }
633 } else { 613
634 if( rv->size >= mdItem.item->size ) { 614 (void)nsslibc_memcpy(rv->data, mdItem.item->data, rv->size);
635 rv->size = mdItem.item->size; 615
636 } else { 616 if (PR_TRUE == mdItem.needsFreeing) {
637 *pError = CKR_BUFFER_TOO_SMALL; 617 PR_ASSERT(fwObject->mdObject->FreeAttribute);
638 /* Should we set rv->size to mdItem->size? */ 618 if (fwObject->mdObject->FreeAttribute) {
639 /* rv can't have been allocated */ 619 *pError = fwObject->mdObject->FreeAttribute(&mdItem);
640 rv = (NSSItem *)NULL; 620 }
641 goto done;
642 } 621 }
643 }
644 622
645 (void)nsslibc_memcpy(rv->data, mdItem.item->data, rv->size); 623 done:
646 624 (void)nssCKFWMutex_Unlock(fwObject->mutex);
647 if (PR_TRUE == mdItem.needsFreeing) { 625 return rv;
648 PR_ASSERT(fwObject->mdObject->FreeAttribute);
649 if (fwObject->mdObject->FreeAttribute) {
650 *pError = fwObject->mdObject->FreeAttribute(&mdItem);
651 }
652 }
653
654 done:
655 (void)nssCKFWMutex_Unlock(fwObject->mutex);
656 return rv;
657 } 626 }
658 627
659 /* 628 /*
660 * nssCKFWObject_SetAttribute 629 * nssCKFWObject_SetAttribute
661 * 630 *
662 */ 631 */
663 NSS_IMPLEMENT CK_RV 632 NSS_IMPLEMENT CK_RV
664 nssCKFWObject_SetAttribute 633 nssCKFWObject_SetAttribute(
665 ( 634 NSSCKFWObject *fwObject,
666 NSSCKFWObject *fwObject, 635 NSSCKFWSession *fwSession,
667 NSSCKFWSession *fwSession, 636 CK_ATTRIBUTE_TYPE attribute,
668 CK_ATTRIBUTE_TYPE attribute, 637 NSSItem *value)
669 NSSItem *value
670 )
671 { 638 {
672 CK_RV error = CKR_OK; 639 CK_RV error = CKR_OK;
673 640
674 #ifdef NSSDEBUG 641 #ifdef NSSDEBUG
675 error = nssCKFWObject_verifyPointer(fwObject); 642 error = nssCKFWObject_verifyPointer(fwObject);
676 if( CKR_OK != error ) { 643 if (CKR_OK != error) {
677 return error; 644 return error;
678 } 645 }
679 #endif /* NSSDEBUG */ 646 #endif /* NSSDEBUG */
680 647
681 if( CKA_TOKEN == attribute ) { 648 if (CKA_TOKEN == attribute) {
682 /* 649 /*
683 * We're changing from a session object to a token object or 650 * We're changing from a session object to a token object or
684 * vice-versa. 651 * vice-versa.
685 */ 652 */
686 653
687 CK_ATTRIBUTE a; 654 CK_ATTRIBUTE a;
688 NSSCKFWObject *newFwObject; 655 NSSCKFWObject *newFwObject;
689 NSSCKFWObject swab; 656 NSSCKFWObject swab;
690 657
691 a.type = CKA_TOKEN; 658 a.type = CKA_TOKEN;
692 a.pValue = value->data; 659 a.pValue = value->data;
693 a.ulValueLen = value->size; 660 a.ulValueLen = value->size;
694 661
695 newFwObject = nssCKFWSession_CopyObject(fwSession, fwObject, 662 newFwObject = nssCKFWSession_CopyObject(fwSession, fwObject,
696 &a, 1, &error); 663 &a, 1, &error);
697 if (!newFwObject) { 664 if (!newFwObject) {
698 if( CKR_OK == error ) { 665 if (CKR_OK == error) {
699 error = CKR_GENERAL_ERROR; 666 error = CKR_GENERAL_ERROR;
700 } 667 }
701 return error; 668 return error;
669 }
670
671 /*
672 * Actually, I bet the locking is worse than this.. this part of
673 * the code could probably use some scrutiny and reworking.
674 */
675 error = nssCKFWMutex_Lock(fwObject->mutex);
676 if (CKR_OK != error) {
677 nssCKFWObject_Destroy(newFwObject);
678 return error;
679 }
680
681 error = nssCKFWMutex_Lock(newFwObject->mutex);
682 if (CKR_OK != error) {
683 nssCKFWMutex_Unlock(fwObject->mutex);
684 nssCKFWObject_Destroy(newFwObject);
685 return error;
686 }
687
688 /*
689 * Now, we have our new object, but it has a new fwObject pointer,
690 * while we have to keep the existing one. So quick swap the contents.
691 */
692 swab = *fwObject;
693 *fwObject = *newFwObject;
694 *newFwObject = swab;
695
696 /* But keep the mutexes the same */
697 swab.mutex = fwObject->mutex;
698 fwObject->mutex = newFwObject->mutex;
699 newFwObject->mutex = swab.mutex;
700
701 (void)nssCKFWMutex_Unlock(newFwObject->mutex);
702 (void)nssCKFWMutex_Unlock(fwObject->mutex);
703
704 /*
705 * Either remove or add this to the list of session objects
706 */
707
708 if (CK_FALSE == *(CK_BBOOL *)value->data) {
709 /*
710 * New one is a session object, except since we "stole" the fwObject , it's
711 * not in the list. Add it.
712 */
713 nssCKFWSession_RegisterSessionObject(fwSession, fwObject);
714 } else {
715 /*
716 * New one is a token object, except since we "stole" the fwObject, it's
717 * in the list. Remove it.
718 */
719 if (fwObject->fwSession) {
720 nssCKFWSession_DeregisterSessionObject(fwObject->fwSession, fwOb ject);
721 }
722 }
723
724 /*
725 * Now delete the old object. Remember the names have changed.
726 */
727 nssCKFWObject_Destroy(newFwObject);
728
729 return CKR_OK;
730 } else {
731 /*
732 * An "ordinary" change.
733 */
734 if (!fwObject->mdObject->SetAttribute) {
735 /* We could fake it with copying, like above.. later */
736 return CKR_ATTRIBUTE_READ_ONLY;
737 }
738
739 error = nssCKFWMutex_Lock(fwObject->mutex);
740 if (CKR_OK != error) {
741 return error;
742 }
743
744 error = fwObject->mdObject->SetAttribute(fwObject->mdObject, fwObject,
745 fwObject->mdSession, fwObject-> fwSession, fwObject->mdToken,
746 fwObject->fwToken, fwObject->md Instance, fwObject->fwInstance,
747 attribute, value);
748
749 (void)nssCKFWMutex_Unlock(fwObject->mutex);
750
751 return error;
702 } 752 }
703
704 /*
705 * Actually, I bet the locking is worse than this.. this part of
706 * the code could probably use some scrutiny and reworking.
707 */
708 error = nssCKFWMutex_Lock(fwObject->mutex);
709 if( CKR_OK != error ) {
710 nssCKFWObject_Destroy(newFwObject);
711 return error;
712 }
713
714 error = nssCKFWMutex_Lock(newFwObject->mutex);
715 if( CKR_OK != error ) {
716 nssCKFWMutex_Unlock(fwObject->mutex);
717 nssCKFWObject_Destroy(newFwObject);
718 return error;
719 }
720
721 /*
722 * Now, we have our new object, but it has a new fwObject pointer,
723 * while we have to keep the existing one. So quick swap the contents.
724 */
725 swab = *fwObject;
726 *fwObject = *newFwObject;
727 *newFwObject = swab;
728
729 /* But keep the mutexes the same */
730 swab.mutex = fwObject->mutex;
731 fwObject->mutex = newFwObject->mutex;
732 newFwObject->mutex = swab.mutex;
733
734 (void)nssCKFWMutex_Unlock(newFwObject->mutex);
735 (void)nssCKFWMutex_Unlock(fwObject->mutex);
736
737 /*
738 * Either remove or add this to the list of session objects
739 */
740
741 if( CK_FALSE == *(CK_BBOOL *)value->data ) {
742 /*
743 * New one is a session object, except since we "stole" the fwObject, it's
744 * not in the list. Add it.
745 */
746 nssCKFWSession_RegisterSessionObject(fwSession, fwObject);
747 } else {
748 /*
749 * New one is a token object, except since we "stole" the fwObject, it's
750 * in the list. Remove it.
751 */
752 if (fwObject->fwSession) {
753 nssCKFWSession_DeregisterSessionObject(fwObject->fwSession, fwObject);
754 }
755 }
756
757 /*
758 * Now delete the old object. Remember the names have changed.
759 */
760 nssCKFWObject_Destroy(newFwObject);
761
762 return CKR_OK;
763 } else {
764 /*
765 * An "ordinary" change.
766 */
767 if (!fwObject->mdObject->SetAttribute) {
768 /* We could fake it with copying, like above.. later */
769 return CKR_ATTRIBUTE_READ_ONLY;
770 }
771
772 error = nssCKFWMutex_Lock(fwObject->mutex);
773 if( CKR_OK != error ) {
774 return error;
775 }
776
777 error = fwObject->mdObject->SetAttribute(fwObject->mdObject, fwObject,
778 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken,
779 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance,
780 attribute, value);
781
782 (void)nssCKFWMutex_Unlock(fwObject->mutex);
783
784 return error;
785 }
786 } 753 }
787 754
788 /* 755 /*
789 * nssCKFWObject_GetObjectSize 756 * nssCKFWObject_GetObjectSize
790 * 757 *
791 */ 758 */
792 NSS_IMPLEMENT CK_ULONG 759 NSS_IMPLEMENT CK_ULONG
793 nssCKFWObject_GetObjectSize 760 nssCKFWObject_GetObjectSize(
794 ( 761 NSSCKFWObject *fwObject,
795 NSSCKFWObject *fwObject, 762 CK_RV *pError)
796 CK_RV *pError
797 )
798 { 763 {
799 CK_ULONG rv; 764 CK_ULONG rv;
800 765
801 #ifdef NSSDEBUG 766 #ifdef NSSDEBUG
802 if (!pError) { 767 if (!pError) {
803 return (CK_ULONG)0; 768 return (CK_ULONG)0;
804 } 769 }
805 770
806 *pError = nssCKFWObject_verifyPointer(fwObject); 771 *pError = nssCKFWObject_verifyPointer(fwObject);
807 if( CKR_OK != *pError ) { 772 if (CKR_OK != *pError) {
808 return (CK_ULONG)0; 773 return (CK_ULONG)0;
809 } 774 }
810 #endif /* NSSDEBUG */ 775 #endif /* NSSDEBUG */
811 776
812 if (!fwObject->mdObject->GetObjectSize) { 777 if (!fwObject->mdObject->GetObjectSize) {
813 *pError = CKR_INFORMATION_SENSITIVE; 778 *pError = CKR_INFORMATION_SENSITIVE;
814 return (CK_ULONG)0; 779 return (CK_ULONG)0;
815 } 780 }
816 781
817 *pError = nssCKFWMutex_Lock(fwObject->mutex); 782 *pError = nssCKFWMutex_Lock(fwObject->mutex);
818 if( CKR_OK != *pError ) { 783 if (CKR_OK != *pError) {
819 return (CK_ULONG)0; 784 return (CK_ULONG)0;
820 } 785 }
821 786
822 rv = fwObject->mdObject->GetObjectSize(fwObject->mdObject, fwObject, 787 rv = fwObject->mdObject->GetObjectSize(fwObject->mdObject, fwObject,
823 fwObject->mdSession, fwObject->fwSession, fwObject->mdToken, 788 fwObject->mdSession, fwObject->fwSess ion, fwObject->mdToken,
824 fwObject->fwToken, fwObject->mdInstance, fwObject->fwInstance, 789 fwObject->fwToken, fwObject->mdInstan ce, fwObject->fwInstance,
825 pError); 790 pError);
826 791
827 (void)nssCKFWMutex_Unlock(fwObject->mutex); 792 (void)nssCKFWMutex_Unlock(fwObject->mutex);
828 return rv; 793 return rv;
829 } 794 }
830 795
831 /* 796 /*
832 * NSSCKFWObject_GetMDObject 797 * NSSCKFWObject_GetMDObject
833 * 798 *
834 */ 799 */
835 NSS_IMPLEMENT NSSCKMDObject * 800 NSS_IMPLEMENT NSSCKMDObject *
836 NSSCKFWObject_GetMDObject 801 NSSCKFWObject_GetMDObject(
837 ( 802 NSSCKFWObject *fwObject)
838 NSSCKFWObject *fwObject
839 )
840 { 803 {
841 #ifdef DEBUG 804 #ifdef DEBUG
842 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { 805 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) {
843 return (NSSCKMDObject *)NULL; 806 return (NSSCKMDObject *)NULL;
844 } 807 }
845 #endif /* DEBUG */ 808 #endif /* DEBUG */
846 809
847 return nssCKFWObject_GetMDObject(fwObject); 810 return nssCKFWObject_GetMDObject(fwObject);
848 } 811 }
849 812
850 /* 813 /*
851 * NSSCKFWObject_GetArena 814 * NSSCKFWObject_GetArena
852 * 815 *
853 */ 816 */
854 NSS_IMPLEMENT NSSArena * 817 NSS_IMPLEMENT NSSArena *
855 NSSCKFWObject_GetArena 818 NSSCKFWObject_GetArena(
856 ( 819 NSSCKFWObject *fwObject,
857 NSSCKFWObject *fwObject, 820 CK_RV *pError)
858 CK_RV *pError
859 )
860 { 821 {
861 #ifdef DEBUG 822 #ifdef DEBUG
862 if (!pError) { 823 if (!pError) {
863 return (NSSArena *)NULL; 824 return (NSSArena *)NULL;
864 } 825 }
865 826
866 *pError = nssCKFWObject_verifyPointer(fwObject); 827 *pError = nssCKFWObject_verifyPointer(fwObject);
867 if( CKR_OK != *pError ) { 828 if (CKR_OK != *pError) {
868 return (NSSArena *)NULL; 829 return (NSSArena *)NULL;
869 } 830 }
870 #endif /* DEBUG */ 831 #endif /* DEBUG */
871 832
872 return nssCKFWObject_GetArena(fwObject, pError); 833 return nssCKFWObject_GetArena(fwObject, pError);
873 } 834 }
874 835
875 /* 836 /*
876 * NSSCKFWObject_IsTokenObject 837 * NSSCKFWObject_IsTokenObject
877 * 838 *
878 */ 839 */
879 NSS_IMPLEMENT CK_BBOOL 840 NSS_IMPLEMENT CK_BBOOL
880 NSSCKFWObject_IsTokenObject 841 NSSCKFWObject_IsTokenObject(
881 ( 842 NSSCKFWObject *fwObject)
882 NSSCKFWObject *fwObject
883 )
884 { 843 {
885 #ifdef DEBUG 844 #ifdef DEBUG
886 if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) { 845 if (CKR_OK != nssCKFWObject_verifyPointer(fwObject)) {
887 return CK_FALSE; 846 return CK_FALSE;
888 } 847 }
889 #endif /* DEBUG */ 848 #endif /* DEBUG */
890 849
891 return nssCKFWObject_IsTokenObject(fwObject); 850 return nssCKFWObject_IsTokenObject(fwObject);
892 } 851 }
893 852
894 /* 853 /*
895 * NSSCKFWObject_GetAttributeCount 854 * NSSCKFWObject_GetAttributeCount
896 * 855 *
897 */ 856 */
898 NSS_IMPLEMENT CK_ULONG 857 NSS_IMPLEMENT CK_ULONG
899 NSSCKFWObject_GetAttributeCount 858 NSSCKFWObject_GetAttributeCount(
900 ( 859 NSSCKFWObject *fwObject,
901 NSSCKFWObject *fwObject, 860 CK_RV *pError)
902 CK_RV *pError
903 )
904 { 861 {
905 #ifdef DEBUG 862 #ifdef DEBUG
906 if (!pError) { 863 if (!pError) {
907 return (CK_ULONG)0; 864 return (CK_ULONG)0;
908 } 865 }
909 866
910 *pError = nssCKFWObject_verifyPointer(fwObject); 867 *pError = nssCKFWObject_verifyPointer(fwObject);
911 if( CKR_OK != *pError ) { 868 if (CKR_OK != *pError) {
912 return (CK_ULONG)0; 869 return (CK_ULONG)0;
913 } 870 }
914 #endif /* DEBUG */ 871 #endif /* DEBUG */
915 872
916 return nssCKFWObject_GetAttributeCount(fwObject, pError); 873 return nssCKFWObject_GetAttributeCount(fwObject, pError);
917 } 874 }
918 875
919 /* 876 /*
920 * NSSCKFWObject_GetAttributeTypes 877 * NSSCKFWObject_GetAttributeTypes
921 * 878 *
922 */ 879 */
923 NSS_IMPLEMENT CK_RV 880 NSS_IMPLEMENT CK_RV
924 NSSCKFWObject_GetAttributeTypes 881 NSSCKFWObject_GetAttributeTypes(
925 ( 882 NSSCKFWObject *fwObject,
926 NSSCKFWObject *fwObject, 883 CK_ATTRIBUTE_TYPE_PTR typeArray,
927 CK_ATTRIBUTE_TYPE_PTR typeArray, 884 CK_ULONG ulCount)
928 CK_ULONG ulCount
929 )
930 { 885 {
931 #ifdef DEBUG 886 #ifdef DEBUG
932 CK_RV error = CKR_OK; 887 CK_RV error = CKR_OK;
933 888
934 error = nssCKFWObject_verifyPointer(fwObject); 889 error = nssCKFWObject_verifyPointer(fwObject);
935 if( CKR_OK != error ) { 890 if (CKR_OK != error) {
936 return error; 891 return error;
937 } 892 }
938 893
939 if( (CK_ATTRIBUTE_TYPE_PTR)NULL == typeArray ) { 894 if ((CK_ATTRIBUTE_TYPE_PTR)NULL == typeArray) {
940 return CKR_ARGUMENTS_BAD; 895 return CKR_ARGUMENTS_BAD;
941 } 896 }
942 #endif /* DEBUG */ 897 #endif /* DEBUG */
943 898
944 return nssCKFWObject_GetAttributeTypes(fwObject, typeArray, ulCount); 899 return nssCKFWObject_GetAttributeTypes(fwObject, typeArray, ulCount);
945 } 900 }
946 901
947 /* 902 /*
948 * NSSCKFWObject_GetAttributeSize 903 * NSSCKFWObject_GetAttributeSize
949 * 904 *
950 */ 905 */
951 NSS_IMPLEMENT CK_ULONG 906 NSS_IMPLEMENT CK_ULONG
952 NSSCKFWObject_GetAttributeSize 907 NSSCKFWObject_GetAttributeSize(
953 ( 908 NSSCKFWObject *fwObject,
954 NSSCKFWObject *fwObject, 909 CK_ATTRIBUTE_TYPE attribute,
955 CK_ATTRIBUTE_TYPE attribute, 910 CK_RV *pError)
956 CK_RV *pError
957 )
958 { 911 {
959 #ifdef DEBUG 912 #ifdef DEBUG
960 if (!pError) { 913 if (!pError) {
961 return (CK_ULONG)0; 914 return (CK_ULONG)0;
962 } 915 }
963 916
964 *pError = nssCKFWObject_verifyPointer(fwObject); 917 *pError = nssCKFWObject_verifyPointer(fwObject);
965 if( CKR_OK != *pError ) { 918 if (CKR_OK != *pError) {
966 return (CK_ULONG)0; 919 return (CK_ULONG)0;
967 } 920 }
968 #endif /* DEBUG */ 921 #endif /* DEBUG */
969 922
970 return nssCKFWObject_GetAttributeSize(fwObject, attribute, pError); 923 return nssCKFWObject_GetAttributeSize(fwObject, attribute, pError);
971 } 924 }
972 925
973 /* 926 /*
974 * NSSCKFWObject_GetAttribute 927 * NSSCKFWObject_GetAttribute
975 * 928 *
976 */ 929 */
977 NSS_IMPLEMENT NSSItem * 930 NSS_IMPLEMENT NSSItem *
978 NSSCKFWObject_GetAttribute 931 NSSCKFWObject_GetAttribute(
979 ( 932 NSSCKFWObject *fwObject,
980 NSSCKFWObject *fwObject, 933 CK_ATTRIBUTE_TYPE attribute,
981 CK_ATTRIBUTE_TYPE attribute, 934 NSSItem *itemOpt,
982 NSSItem *itemOpt, 935 NSSArena *arenaOpt,
983 NSSArena *arenaOpt, 936 CK_RV *pError)
984 CK_RV *pError
985 )
986 { 937 {
987 #ifdef DEBUG 938 #ifdef DEBUG
988 if (!pError) { 939 if (!pError) {
989 return (NSSItem *)NULL; 940 return (NSSItem *)NULL;
990 } 941 }
991 942
992 *pError = nssCKFWObject_verifyPointer(fwObject); 943 *pError = nssCKFWObject_verifyPointer(fwObject);
993 if( CKR_OK != *pError ) { 944 if (CKR_OK != *pError) {
994 return (NSSItem *)NULL; 945 return (NSSItem *)NULL;
995 } 946 }
996 #endif /* DEBUG */ 947 #endif /* DEBUG */
997 948
998 return nssCKFWObject_GetAttribute(fwObject, attribute, itemOpt, arenaOpt, pErr or); 949 return nssCKFWObject_GetAttribute(fwObject, attribute, itemOpt, arenaOpt, pE rror);
999 } 950 }
1000 951
1001 /* 952 /*
1002 * NSSCKFWObject_GetObjectSize 953 * NSSCKFWObject_GetObjectSize
1003 * 954 *
1004 */ 955 */
1005 NSS_IMPLEMENT CK_ULONG 956 NSS_IMPLEMENT CK_ULONG
1006 NSSCKFWObject_GetObjectSize 957 NSSCKFWObject_GetObjectSize(
1007 ( 958 NSSCKFWObject *fwObject,
1008 NSSCKFWObject *fwObject, 959 CK_RV *pError)
1009 CK_RV *pError
1010 )
1011 { 960 {
1012 #ifdef DEBUG 961 #ifdef DEBUG
1013 if (!pError) { 962 if (!pError) {
1014 return (CK_ULONG)0; 963 return (CK_ULONG)0;
1015 } 964 }
1016 965
1017 *pError = nssCKFWObject_verifyPointer(fwObject); 966 *pError = nssCKFWObject_verifyPointer(fwObject);
1018 if( CKR_OK != *pError ) { 967 if (CKR_OK != *pError) {
1019 return (CK_ULONG)0; 968 return (CK_ULONG)0;
1020 } 969 }
1021 #endif /* DEBUG */ 970 #endif /* DEBUG */
1022 971
1023 return nssCKFWObject_GetObjectSize(fwObject, pError); 972 return nssCKFWObject_GetObjectSize(fwObject, pError);
1024 } 973 }
OLDNEW
« no previous file with comments | « nss/lib/ckfw/nssckt.h ('k') | nss/lib/ckfw/session.c » ('j') | nss/lib/util/secoid.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698