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

Side by Side Diff: nss/lib/ckfw/slot.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 * slot.c 6 * slot.c
7 * 7 *
8 * This file implements the NSSCKFWSlot type and methods. 8 * This file implements the NSSCKFWSlot type and methods.
9 */ 9 */
10 10
(...skipping 28 matching lines...) Expand all
39 * nssCKFWSlot_GetTokenPresent 39 * nssCKFWSlot_GetTokenPresent
40 * nssCKFWSlot_GetRemovableDevice 40 * nssCKFWSlot_GetRemovableDevice
41 * nssCKFWSlot_GetHardwareSlot 41 * nssCKFWSlot_GetHardwareSlot
42 * nssCKFWSlot_GetHardwareVersion 42 * nssCKFWSlot_GetHardwareVersion
43 * nssCKFWSlot_GetFirmwareVersion 43 * nssCKFWSlot_GetFirmwareVersion
44 * nssCKFWSlot_InitToken 44 * nssCKFWSlot_InitToken
45 * nssCKFWSlot_GetToken 45 * nssCKFWSlot_GetToken
46 */ 46 */
47 47
48 struct NSSCKFWSlotStr { 48 struct NSSCKFWSlotStr {
49 NSSCKFWMutex *mutex; 49 NSSCKFWMutex *mutex;
50 NSSCKMDSlot *mdSlot; 50 NSSCKMDSlot *mdSlot;
51 NSSCKFWInstance *fwInstance; 51 NSSCKFWInstance *fwInstance;
52 NSSCKMDInstance *mdInstance; 52 NSSCKMDInstance *mdInstance;
53 CK_SLOT_ID slotID; 53 CK_SLOT_ID slotID;
54 54
55 /* 55 /*
56 * Everything above is set at creation time, and then not modified. 56 * Everything above is set at creation time, and then not modified.
57 * The invariants the mutex protects are: 57 * The invariants the mutex protects are:
58 * 58 *
59 * 1) Each of the cached descriptions (versions, etc.) are in an 59 * 1) Each of the cached descriptions (versions, etc.) are in an
60 * internally consistant state. 60 * internally consistant state.
61 * 61 *
62 * 2) The fwToken points to the token currently in the slot, and 62 * 2) The fwToken points to the token currently in the slot, and
63 * it is in a consistant state. 63 * it is in a consistant state.
64 * 64 *
65 * Note that the calls accessing the cached descriptions will 65 * Note that the calls accessing the cached descriptions will
66 * call the NSSCKMDSlot methods with the mutex locked. Those 66 * call the NSSCKMDSlot methods with the mutex locked. Those
67 * methods may then call the public NSSCKFWSlot routines. Those 67 * methods may then call the public NSSCKFWSlot routines. Those
68 * public routines only access the constant data above, so there's 68 * public routines only access the constant data above, so there's
69 * no problem. But be careful if you add to this object; mutexes 69 * no problem. But be careful if you add to this object; mutexes
70 * are in general not reentrant, so don't create deadlock situations. 70 * are in general not reentrant, so don't create deadlock situations.
71 */ 71 */
72 72
73 NSSUTF8 *slotDescription; 73 NSSUTF8 *slotDescription;
74 NSSUTF8 *manufacturerID; 74 NSSUTF8 *manufacturerID;
75 CK_VERSION hardwareVersion; 75 CK_VERSION hardwareVersion;
76 CK_VERSION firmwareVersion; 76 CK_VERSION firmwareVersion;
77 NSSCKFWToken *fwToken; 77 NSSCKFWToken *fwToken;
78 }; 78 };
79 79
80 #ifdef DEBUG 80 #ifdef DEBUG
81 /* 81 /*
82 * But first, the pointer-tracking stuff. 82 * But first, the pointer-tracking stuff.
83 * 83 *
84 * NOTE: the pointer-tracking support in NSS/base currently relies 84 * NOTE: the pointer-tracking support in NSS/base currently relies
85 * upon NSPR's CallOnce support. That, however, relies upon NSPR's 85 * upon NSPR's CallOnce support. That, however, relies upon NSPR's
86 * locking, which is tied into the runtime. We need a pointer-tracker 86 * locking, which is tied into the runtime. We need a pointer-tracker
87 * implementation that uses the locks supplied through C_Initialize. 87 * implementation that uses the locks supplied through C_Initialize.
88 * That support, however, can be filled in later. So for now, I'll 88 * That support, however, can be filled in later. So for now, I'll
89 * just do this routines as no-ops. 89 * just do this routines as no-ops.
90 */ 90 */
91 91
92 static CK_RV 92 static CK_RV
93 slot_add_pointer 93 slot_add_pointer(
94 ( 94 const NSSCKFWSlot *fwSlot)
95 const NSSCKFWSlot *fwSlot
96 )
97 { 95 {
98 return CKR_OK; 96 return CKR_OK;
99 } 97 }
100 98
101 static CK_RV 99 static CK_RV
102 slot_remove_pointer 100 slot_remove_pointer(
103 ( 101 const NSSCKFWSlot *fwSlot)
104 const NSSCKFWSlot *fwSlot
105 )
106 { 102 {
107 return CKR_OK; 103 return CKR_OK;
108 } 104 }
109 105
110 NSS_IMPLEMENT CK_RV 106 NSS_IMPLEMENT CK_RV
111 nssCKFWSlot_verifyPointer 107 nssCKFWSlot_verifyPointer(
112 ( 108 const NSSCKFWSlot *fwSlot)
113 const NSSCKFWSlot *fwSlot
114 )
115 { 109 {
116 return CKR_OK; 110 return CKR_OK;
117 } 111 }
118 112
119 #endif /* DEBUG */ 113 #endif /* DEBUG */
120 114
121 /* 115 /*
122 * nssCKFWSlot_Create 116 * nssCKFWSlot_Create
123 * 117 *
124 */ 118 */
125 NSS_IMPLEMENT NSSCKFWSlot * 119 NSS_IMPLEMENT NSSCKFWSlot *
126 nssCKFWSlot_Create 120 nssCKFWSlot_Create(
127 ( 121 NSSCKFWInstance *fwInstance,
128 NSSCKFWInstance *fwInstance, 122 NSSCKMDSlot *mdSlot,
129 NSSCKMDSlot *mdSlot, 123 CK_SLOT_ID slotID,
130 CK_SLOT_ID slotID, 124 CK_RV *pError)
131 CK_RV *pError
132 )
133 { 125 {
134 NSSCKFWSlot *fwSlot; 126 NSSCKFWSlot *fwSlot;
135 NSSCKMDInstance *mdInstance; 127 NSSCKMDInstance *mdInstance;
136 NSSArena *arena; 128 NSSArena *arena;
137 129
138 #ifdef NSSDEBUG 130 #ifdef NSSDEBUG
139 if (!pError) { 131 if (!pError) {
140 return (NSSCKFWSlot *)NULL; 132 return (NSSCKFWSlot *)NULL;
141 } 133 }
142 134
143 *pError = nssCKFWInstance_verifyPointer(fwInstance); 135 *pError = nssCKFWInstance_verifyPointer(fwInstance);
144 if( CKR_OK != *pError ) { 136 if (CKR_OK != *pError) {
145 return (NSSCKFWSlot *)NULL; 137 return (NSSCKFWSlot *)NULL;
146 } 138 }
147 #endif /* NSSDEBUG */ 139 #endif /* NSSDEBUG */
148 140
149 mdInstance = nssCKFWInstance_GetMDInstance(fwInstance); 141 mdInstance = nssCKFWInstance_GetMDInstance(fwInstance);
150 if (!mdInstance) { 142 if (!mdInstance) {
151 *pError = CKR_GENERAL_ERROR; 143 *pError = CKR_GENERAL_ERROR;
152 return (NSSCKFWSlot *)NULL; 144 return (NSSCKFWSlot *)NULL;
153 } 145 }
154 146
155 arena = nssCKFWInstance_GetArena(fwInstance, pError); 147 arena = nssCKFWInstance_GetArena(fwInstance, pError);
156 if (!arena) { 148 if (!arena) {
157 if( CKR_OK == *pError ) { 149 if (CKR_OK == *pError) {
158 *pError = CKR_GENERAL_ERROR; 150 *pError = CKR_GENERAL_ERROR;
151 }
159 } 152 }
160 }
161 153
162 fwSlot = nss_ZNEW(arena, NSSCKFWSlot); 154 fwSlot = nss_ZNEW(arena, NSSCKFWSlot);
163 if (!fwSlot) { 155 if (!fwSlot) {
164 *pError = CKR_HOST_MEMORY; 156 *pError = CKR_HOST_MEMORY;
165 return (NSSCKFWSlot *)NULL; 157 return (NSSCKFWSlot *)NULL;
166 } 158 }
167 159
168 fwSlot->mdSlot = mdSlot; 160 fwSlot->mdSlot = mdSlot;
169 fwSlot->fwInstance = fwInstance; 161 fwSlot->fwInstance = fwInstance;
170 fwSlot->mdInstance = mdInstance; 162 fwSlot->mdInstance = mdInstance;
171 fwSlot->slotID = slotID; 163 fwSlot->slotID = slotID;
172 164
173 fwSlot->mutex = nssCKFWInstance_CreateMutex(fwInstance, arena, pError); 165 fwSlot->mutex = nssCKFWInstance_CreateMutex(fwInstance, arena, pError);
174 if (!fwSlot->mutex) { 166 if (!fwSlot->mutex) {
175 if( CKR_OK == *pError ) { 167 if (CKR_OK == *pError) {
176 *pError = CKR_GENERAL_ERROR; 168 *pError = CKR_GENERAL_ERROR;
169 }
170 (void)nss_ZFreeIf(fwSlot);
171 return (NSSCKFWSlot *)NULL;
177 } 172 }
178 (void)nss_ZFreeIf(fwSlot);
179 return (NSSCKFWSlot *)NULL;
180 }
181 173
182 if (mdSlot->Initialize) { 174 if (mdSlot->Initialize) {
183 *pError = CKR_OK; 175 *pError = CKR_OK;
184 *pError = mdSlot->Initialize(mdSlot, fwSlot, mdInstance, fwInstance); 176 *pError = mdSlot->Initialize(mdSlot, fwSlot, mdInstance, fwInstance);
185 if( CKR_OK != *pError ) { 177 if (CKR_OK != *pError) {
186 (void)nssCKFWMutex_Destroy(fwSlot->mutex); 178 (void)nssCKFWMutex_Destroy(fwSlot->mutex);
187 (void)nss_ZFreeIf(fwSlot); 179 (void)nss_ZFreeIf(fwSlot);
188 return (NSSCKFWSlot *)NULL; 180 return (NSSCKFWSlot *)NULL;
181 }
189 } 182 }
190 }
191 183
192 #ifdef DEBUG 184 #ifdef DEBUG
193 *pError = slot_add_pointer(fwSlot); 185 *pError = slot_add_pointer(fwSlot);
194 if( CKR_OK != *pError ) { 186 if (CKR_OK != *pError) {
195 if (mdSlot->Destroy) { 187 if (mdSlot->Destroy) {
196 mdSlot->Destroy(mdSlot, fwSlot, mdInstance, fwInstance); 188 mdSlot->Destroy(mdSlot, fwSlot, mdInstance, fwInstance);
189 }
190
191 (void)nssCKFWMutex_Destroy(fwSlot->mutex);
192 (void)nss_ZFreeIf(fwSlot);
193 return (NSSCKFWSlot *)NULL;
197 } 194 }
198
199 (void)nssCKFWMutex_Destroy(fwSlot->mutex);
200 (void)nss_ZFreeIf(fwSlot);
201 return (NSSCKFWSlot *)NULL;
202 }
203 #endif /* DEBUG */ 195 #endif /* DEBUG */
204 196
205 return fwSlot; 197 return fwSlot;
206 } 198 }
207 199
208 /* 200 /*
209 * nssCKFWSlot_Destroy 201 * nssCKFWSlot_Destroy
210 * 202 *
211 */ 203 */
212 NSS_IMPLEMENT CK_RV 204 NSS_IMPLEMENT CK_RV
213 nssCKFWSlot_Destroy 205 nssCKFWSlot_Destroy(
214 ( 206 NSSCKFWSlot *fwSlot)
215 NSSCKFWSlot *fwSlot
216 )
217 { 207 {
218 CK_RV error = CKR_OK; 208 CK_RV error = CKR_OK;
219 209
220 #ifdef NSSDEBUG 210 #ifdef NSSDEBUG
221 error = nssCKFWSlot_verifyPointer(fwSlot); 211 error = nssCKFWSlot_verifyPointer(fwSlot);
222 if( CKR_OK != error ) { 212 if (CKR_OK != error) {
223 return error; 213 return error;
224 } 214 }
225 #endif /* NSSDEBUG */ 215 #endif /* NSSDEBUG */
226 if (fwSlot->fwToken) { 216 if (fwSlot->fwToken) {
227 nssCKFWToken_Destroy(fwSlot->fwToken); 217 nssCKFWToken_Destroy(fwSlot->fwToken);
228 } 218 }
229 219
230 (void)nssCKFWMutex_Destroy(fwSlot->mutex); 220 (void)nssCKFWMutex_Destroy(fwSlot->mutex);
231 221
232 if (fwSlot->mdSlot->Destroy) { 222 if (fwSlot->mdSlot->Destroy) {
233 fwSlot->mdSlot->Destroy(fwSlot->mdSlot, fwSlot, 223 fwSlot->mdSlot->Destroy(fwSlot->mdSlot, fwSlot,
234 fwSlot->mdInstance, fwSlot->fwInstance); 224 fwSlot->mdInstance, fwSlot->fwInstance);
235 } 225 }
236 226
237 #ifdef DEBUG 227 #ifdef DEBUG
238 error = slot_remove_pointer(fwSlot); 228 error = slot_remove_pointer(fwSlot);
239 #endif /* DEBUG */ 229 #endif /* DEBUG */
240 (void)nss_ZFreeIf(fwSlot); 230 (void)nss_ZFreeIf(fwSlot);
241 return error; 231 return error;
242 } 232 }
243 233
244 /* 234 /*
245 * nssCKFWSlot_GetMDSlot 235 * nssCKFWSlot_GetMDSlot
246 * 236 *
247 */ 237 */
248 NSS_IMPLEMENT NSSCKMDSlot * 238 NSS_IMPLEMENT NSSCKMDSlot *
249 nssCKFWSlot_GetMDSlot 239 nssCKFWSlot_GetMDSlot(
250 ( 240 NSSCKFWSlot *fwSlot)
251 NSSCKFWSlot *fwSlot
252 )
253 { 241 {
254 #ifdef NSSDEBUG 242 #ifdef NSSDEBUG
255 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 243 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
256 return (NSSCKMDSlot *)NULL; 244 return (NSSCKMDSlot *)NULL;
257 } 245 }
258 #endif /* NSSDEBUG */ 246 #endif /* NSSDEBUG */
259 247
260 return fwSlot->mdSlot; 248 return fwSlot->mdSlot;
261 } 249 }
262 250
263 /* 251 /*
264 * nssCKFWSlot_GetFWInstance 252 * nssCKFWSlot_GetFWInstance
265 * 253 *
266 */ 254 */
267 255
268 NSS_IMPLEMENT NSSCKFWInstance * 256 NSS_IMPLEMENT NSSCKFWInstance *
269 nssCKFWSlot_GetFWInstance 257 nssCKFWSlot_GetFWInstance(
270 ( 258 NSSCKFWSlot *fwSlot)
271 NSSCKFWSlot *fwSlot
272 )
273 { 259 {
274 #ifdef NSSDEBUG 260 #ifdef NSSDEBUG
275 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 261 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
276 return (NSSCKFWInstance *)NULL; 262 return (NSSCKFWInstance *)NULL;
277 } 263 }
278 #endif /* NSSDEBUG */ 264 #endif /* NSSDEBUG */
279 265
280 return fwSlot->fwInstance; 266 return fwSlot->fwInstance;
281 } 267 }
282 268
283 /* 269 /*
284 * nssCKFWSlot_GetMDInstance 270 * nssCKFWSlot_GetMDInstance
285 * 271 *
286 */ 272 */
287 273
288 NSS_IMPLEMENT NSSCKMDInstance * 274 NSS_IMPLEMENT NSSCKMDInstance *
289 nssCKFWSlot_GetMDInstance 275 nssCKFWSlot_GetMDInstance(
290 ( 276 NSSCKFWSlot *fwSlot)
291 NSSCKFWSlot *fwSlot
292 )
293 { 277 {
294 #ifdef NSSDEBUG 278 #ifdef NSSDEBUG
295 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 279 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
296 return (NSSCKMDInstance *)NULL; 280 return (NSSCKMDInstance *)NULL;
297 } 281 }
298 #endif /* NSSDEBUG */ 282 #endif /* NSSDEBUG */
299 283
300 return fwSlot->mdInstance; 284 return fwSlot->mdInstance;
301 } 285 }
302 286
303 /* 287 /*
304 * nssCKFWSlot_GetSlotID 288 * nssCKFWSlot_GetSlotID
305 * 289 *
306 */ 290 */
307 NSS_IMPLEMENT CK_SLOT_ID 291 NSS_IMPLEMENT CK_SLOT_ID
308 nssCKFWSlot_GetSlotID 292 nssCKFWSlot_GetSlotID(
309 ( 293 NSSCKFWSlot *fwSlot)
310 NSSCKFWSlot *fwSlot
311 )
312 { 294 {
313 #ifdef NSSDEBUG 295 #ifdef NSSDEBUG
314 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 296 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
315 return (CK_SLOT_ID)0; 297 return (CK_SLOT_ID)0;
316 } 298 }
317 #endif /* NSSDEBUG */ 299 #endif /* NSSDEBUG */
318 300
319 return fwSlot->slotID; 301 return fwSlot->slotID;
320 } 302 }
321 303
322 /* 304 /*
323 * nssCKFWSlot_GetSlotDescription 305 * nssCKFWSlot_GetSlotDescription
324 * 306 *
325 */ 307 */
326 NSS_IMPLEMENT CK_RV 308 NSS_IMPLEMENT CK_RV
327 nssCKFWSlot_GetSlotDescription 309 nssCKFWSlot_GetSlotDescription(
328 ( 310 NSSCKFWSlot *fwSlot,
329 NSSCKFWSlot *fwSlot, 311 CK_CHAR slotDescription[64])
330 CK_CHAR slotDescription[64]
331 )
332 { 312 {
333 CK_RV error = CKR_OK; 313 CK_RV error = CKR_OK;
334 314
335 #ifdef NSSDEBUG 315 #ifdef NSSDEBUG
336 if( (CK_CHAR_PTR)NULL == slotDescription ) { 316 if ((CK_CHAR_PTR)NULL == slotDescription) {
337 return CKR_ARGUMENTS_BAD; 317 return CKR_ARGUMENTS_BAD;
338 } 318 }
339 319
340 error = nssCKFWSlot_verifyPointer(fwSlot); 320 error = nssCKFWSlot_verifyPointer(fwSlot);
341 if( CKR_OK != error ) { 321 if (CKR_OK != error) {
342 return error; 322 return error;
343 } 323 }
344 #endif /* NSSDEBUG */ 324 #endif /* NSSDEBUG */
345 325
346 error = nssCKFWMutex_Lock(fwSlot->mutex); 326 error = nssCKFWMutex_Lock(fwSlot->mutex);
347 if( CKR_OK != error ) { 327 if (CKR_OK != error) {
328 return error;
329 }
330
331 if (!fwSlot->slotDescription) {
332 if (fwSlot->mdSlot->GetSlotDescription) {
333 fwSlot->slotDescription = fwSlot->mdSlot->GetSlotDescription(
334 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance,
335 fwSlot->fwInstance, &error);
336 if ((!fwSlot->slotDescription) && (CKR_OK != error)) {
337 goto done;
338 }
339 } else {
340 fwSlot->slotDescription = (NSSUTF8 *)"";
341 }
342 }
343
344 (void)nssUTF8_CopyIntoFixedBuffer(fwSlot->slotDescription, (char *)slotDescr iption, 64, ' ');
345 error = CKR_OK;
346
347 done:
348 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
348 return error; 349 return error;
349 }
350
351 if (!fwSlot->slotDescription) {
352 if (fwSlot->mdSlot->GetSlotDescription) {
353 fwSlot->slotDescription = fwSlot->mdSlot->GetSlotDescription(
354 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance,
355 fwSlot->fwInstance, &error);
356 if ((!fwSlot->slotDescription) && (CKR_OK != error)) {
357 goto done;
358 }
359 } else {
360 fwSlot->slotDescription = (NSSUTF8 *) "";
361 }
362 }
363
364 (void)nssUTF8_CopyIntoFixedBuffer(fwSlot->slotDescription, (char *)slotDescrip tion, 64, ' ');
365 error = CKR_OK;
366
367 done:
368 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
369 return error;
370 } 350 }
371 351
372 /* 352 /*
373 * nssCKFWSlot_GetManufacturerID 353 * nssCKFWSlot_GetManufacturerID
374 * 354 *
375 */ 355 */
376 NSS_IMPLEMENT CK_RV 356 NSS_IMPLEMENT CK_RV
377 nssCKFWSlot_GetManufacturerID 357 nssCKFWSlot_GetManufacturerID(
378 ( 358 NSSCKFWSlot *fwSlot,
379 NSSCKFWSlot *fwSlot, 359 CK_CHAR manufacturerID[32])
380 CK_CHAR manufacturerID[32]
381 )
382 { 360 {
383 CK_RV error = CKR_OK; 361 CK_RV error = CKR_OK;
384 362
385 #ifdef NSSDEBUG 363 #ifdef NSSDEBUG
386 if( (CK_CHAR_PTR)NULL == manufacturerID ) { 364 if ((CK_CHAR_PTR)NULL == manufacturerID) {
387 return CKR_ARGUMENTS_BAD; 365 return CKR_ARGUMENTS_BAD;
388 } 366 }
389 367
390 error = nssCKFWSlot_verifyPointer(fwSlot); 368 error = nssCKFWSlot_verifyPointer(fwSlot);
391 if( CKR_OK != error ) { 369 if (CKR_OK != error) {
392 return error; 370 return error;
393 } 371 }
394 #endif /* NSSDEBUG */ 372 #endif /* NSSDEBUG */
395 373
396 error = nssCKFWMutex_Lock(fwSlot->mutex); 374 error = nssCKFWMutex_Lock(fwSlot->mutex);
397 if( CKR_OK != error ) { 375 if (CKR_OK != error) {
376 return error;
377 }
378
379 if (!fwSlot->manufacturerID) {
380 if (fwSlot->mdSlot->GetManufacturerID) {
381 fwSlot->manufacturerID = fwSlot->mdSlot->GetManufacturerID(
382 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance,
383 fwSlot->fwInstance, &error);
384 if ((!fwSlot->manufacturerID) && (CKR_OK != error)) {
385 goto done;
386 }
387 } else {
388 fwSlot->manufacturerID = (NSSUTF8 *)"";
389 }
390 }
391
392 (void)nssUTF8_CopyIntoFixedBuffer(fwSlot->manufacturerID, (char *)manufactur erID, 32, ' ');
393 error = CKR_OK;
394
395 done:
396 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
398 return error; 397 return error;
399 }
400
401 if (!fwSlot->manufacturerID) {
402 if (fwSlot->mdSlot->GetManufacturerID) {
403 fwSlot->manufacturerID = fwSlot->mdSlot->GetManufacturerID(
404 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance,
405 fwSlot->fwInstance, &error);
406 if ((!fwSlot->manufacturerID) && (CKR_OK != error)) {
407 goto done;
408 }
409 } else {
410 fwSlot->manufacturerID = (NSSUTF8 *) "";
411 }
412 }
413
414 (void)nssUTF8_CopyIntoFixedBuffer(fwSlot->manufacturerID, (char *)manufacturer ID, 32, ' ');
415 error = CKR_OK;
416
417 done:
418 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
419 return error;
420 } 398 }
421 399
422 /* 400 /*
423 * nssCKFWSlot_GetTokenPresent 401 * nssCKFWSlot_GetTokenPresent
424 * 402 *
425 */ 403 */
426 NSS_IMPLEMENT CK_BBOOL 404 NSS_IMPLEMENT CK_BBOOL
427 nssCKFWSlot_GetTokenPresent 405 nssCKFWSlot_GetTokenPresent(
428 ( 406 NSSCKFWSlot *fwSlot)
429 NSSCKFWSlot *fwSlot
430 )
431 { 407 {
432 #ifdef NSSDEBUG 408 #ifdef NSSDEBUG
433 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 409 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
434 return CK_FALSE; 410 return CK_FALSE;
435 } 411 }
436 #endif /* NSSDEBUG */ 412 #endif /* NSSDEBUG */
437 413
438 if (!fwSlot->mdSlot->GetTokenPresent) { 414 if (!fwSlot->mdSlot->GetTokenPresent) {
439 return CK_TRUE; 415 return CK_TRUE;
440 } 416 }
441 417
442 return fwSlot->mdSlot->GetTokenPresent(fwSlot->mdSlot, fwSlot, 418 return fwSlot->mdSlot->GetTokenPresent(fwSlot->mdSlot, fwSlot,
443 fwSlot->mdInstance, fwSlot->fwInstance); 419 fwSlot->mdInstance, fwSlot->fwInstanc e);
444 } 420 }
445 421
446 /* 422 /*
447 * nssCKFWSlot_GetRemovableDevice 423 * nssCKFWSlot_GetRemovableDevice
448 * 424 *
449 */ 425 */
450 NSS_IMPLEMENT CK_BBOOL 426 NSS_IMPLEMENT CK_BBOOL
451 nssCKFWSlot_GetRemovableDevice 427 nssCKFWSlot_GetRemovableDevice(
452 ( 428 NSSCKFWSlot *fwSlot)
453 NSSCKFWSlot *fwSlot
454 )
455 { 429 {
456 #ifdef NSSDEBUG 430 #ifdef NSSDEBUG
457 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 431 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
458 return CK_FALSE; 432 return CK_FALSE;
459 } 433 }
460 #endif /* NSSDEBUG */ 434 #endif /* NSSDEBUG */
461 435
462 if (!fwSlot->mdSlot->GetRemovableDevice) { 436 if (!fwSlot->mdSlot->GetRemovableDevice) {
463 return CK_FALSE; 437 return CK_FALSE;
464 } 438 }
465 439
466 return fwSlot->mdSlot->GetRemovableDevice(fwSlot->mdSlot, fwSlot, 440 return fwSlot->mdSlot->GetRemovableDevice(fwSlot->mdSlot, fwSlot,
467 fwSlot->mdInstance, fwSlot->fwInstance); 441 fwSlot->mdInstance, fwSlot->fwInst ance);
468 } 442 }
469 443
470 /* 444 /*
471 * nssCKFWSlot_GetHardwareSlot 445 * nssCKFWSlot_GetHardwareSlot
472 * 446 *
473 */ 447 */
474 NSS_IMPLEMENT CK_BBOOL 448 NSS_IMPLEMENT CK_BBOOL
475 nssCKFWSlot_GetHardwareSlot 449 nssCKFWSlot_GetHardwareSlot(
476 ( 450 NSSCKFWSlot *fwSlot)
477 NSSCKFWSlot *fwSlot
478 )
479 { 451 {
480 #ifdef NSSDEBUG 452 #ifdef NSSDEBUG
481 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 453 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
482 return CK_FALSE; 454 return CK_FALSE;
483 } 455 }
484 #endif /* NSSDEBUG */ 456 #endif /* NSSDEBUG */
485 457
486 if (!fwSlot->mdSlot->GetHardwareSlot) { 458 if (!fwSlot->mdSlot->GetHardwareSlot) {
487 return CK_FALSE; 459 return CK_FALSE;
488 } 460 }
489 461
490 return fwSlot->mdSlot->GetHardwareSlot(fwSlot->mdSlot, fwSlot, 462 return fwSlot->mdSlot->GetHardwareSlot(fwSlot->mdSlot, fwSlot,
491 fwSlot->mdInstance, fwSlot->fwInstance); 463 fwSlot->mdInstance, fwSlot->fwInstanc e);
492 } 464 }
493 465
494 /* 466 /*
495 * nssCKFWSlot_GetHardwareVersion 467 * nssCKFWSlot_GetHardwareVersion
496 * 468 *
497 */ 469 */
498 NSS_IMPLEMENT CK_VERSION 470 NSS_IMPLEMENT CK_VERSION
499 nssCKFWSlot_GetHardwareVersion 471 nssCKFWSlot_GetHardwareVersion(
500 ( 472 NSSCKFWSlot *fwSlot)
501 NSSCKFWSlot *fwSlot
502 )
503 { 473 {
504 CK_VERSION rv; 474 CK_VERSION rv;
505 475
506 #ifdef NSSDEBUG 476 #ifdef NSSDEBUG
507 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 477 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
508 rv.major = rv.minor = 0; 478 rv.major = rv.minor = 0;
509 return rv; 479 return rv;
510 } 480 }
511 #endif /* NSSDEBUG */ 481 #endif /* NSSDEBUG */
512 482
513 if( CKR_OK != nssCKFWMutex_Lock(fwSlot->mutex) ) { 483 if (CKR_OK != nssCKFWMutex_Lock(fwSlot->mutex)) {
514 rv.major = rv.minor = 0; 484 rv.major = rv.minor = 0;
485 return rv;
486 }
487
488 if ((0 != fwSlot->hardwareVersion.major) ||
489 (0 != fwSlot->hardwareVersion.minor)) {
490 rv = fwSlot->hardwareVersion;
491 goto done;
492 }
493
494 if (fwSlot->mdSlot->GetHardwareVersion) {
495 fwSlot->hardwareVersion = fwSlot->mdSlot->GetHardwareVersion(
496 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance, fwSlot->fwInstance);
497 } else {
498 fwSlot->hardwareVersion.major = 0;
499 fwSlot->hardwareVersion.minor = 1;
500 }
501
502 rv = fwSlot->hardwareVersion;
503 done:
504 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
515 return rv; 505 return rv;
516 }
517
518 if( (0 != fwSlot->hardwareVersion.major) ||
519 (0 != fwSlot->hardwareVersion.minor) ) {
520 rv = fwSlot->hardwareVersion;
521 goto done;
522 }
523
524 if (fwSlot->mdSlot->GetHardwareVersion) {
525 fwSlot->hardwareVersion = fwSlot->mdSlot->GetHardwareVersion(
526 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance, fwSlot->fwInstance);
527 } else {
528 fwSlot->hardwareVersion.major = 0;
529 fwSlot->hardwareVersion.minor = 1;
530 }
531
532 rv = fwSlot->hardwareVersion;
533 done:
534 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
535 return rv;
536 } 506 }
537 507
538 /* 508 /*
539 * nssCKFWSlot_GetFirmwareVersion 509 * nssCKFWSlot_GetFirmwareVersion
540 * 510 *
541 */ 511 */
542 NSS_IMPLEMENT CK_VERSION 512 NSS_IMPLEMENT CK_VERSION
543 nssCKFWSlot_GetFirmwareVersion 513 nssCKFWSlot_GetFirmwareVersion(
544 ( 514 NSSCKFWSlot *fwSlot)
545 NSSCKFWSlot *fwSlot
546 )
547 { 515 {
548 CK_VERSION rv; 516 CK_VERSION rv;
549 517
550 #ifdef NSSDEBUG 518 #ifdef NSSDEBUG
551 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 519 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
552 rv.major = rv.minor = 0; 520 rv.major = rv.minor = 0;
553 return rv; 521 return rv;
554 } 522 }
555 #endif /* NSSDEBUG */ 523 #endif /* NSSDEBUG */
556 524
557 if( CKR_OK != nssCKFWMutex_Lock(fwSlot->mutex) ) { 525 if (CKR_OK != nssCKFWMutex_Lock(fwSlot->mutex)) {
558 rv.major = rv.minor = 0; 526 rv.major = rv.minor = 0;
527 return rv;
528 }
529
530 if ((0 != fwSlot->firmwareVersion.major) ||
531 (0 != fwSlot->firmwareVersion.minor)) {
532 rv = fwSlot->firmwareVersion;
533 goto done;
534 }
535
536 if (fwSlot->mdSlot->GetFirmwareVersion) {
537 fwSlot->firmwareVersion = fwSlot->mdSlot->GetFirmwareVersion(
538 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance, fwSlot->fwInstance);
539 } else {
540 fwSlot->firmwareVersion.major = 0;
541 fwSlot->firmwareVersion.minor = 1;
542 }
543
544 rv = fwSlot->firmwareVersion;
545 done:
546 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
559 return rv; 547 return rv;
560 }
561
562 if( (0 != fwSlot->firmwareVersion.major) ||
563 (0 != fwSlot->firmwareVersion.minor) ) {
564 rv = fwSlot->firmwareVersion;
565 goto done;
566 }
567
568 if (fwSlot->mdSlot->GetFirmwareVersion) {
569 fwSlot->firmwareVersion = fwSlot->mdSlot->GetFirmwareVersion(
570 fwSlot->mdSlot, fwSlot, fwSlot->mdInstance, fwSlot->fwInstance);
571 } else {
572 fwSlot->firmwareVersion.major = 0;
573 fwSlot->firmwareVersion.minor = 1;
574 }
575
576 rv = fwSlot->firmwareVersion;
577 done:
578 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
579 return rv;
580 } 548 }
581 549
582 /* 550 /*
583 * nssCKFWSlot_GetToken 551 * nssCKFWSlot_GetToken
584 * 552 *
585 */ 553 */
586 NSS_IMPLEMENT NSSCKFWToken * 554 NSS_IMPLEMENT NSSCKFWToken *
587 nssCKFWSlot_GetToken 555 nssCKFWSlot_GetToken(
588 ( 556 NSSCKFWSlot *fwSlot,
589 NSSCKFWSlot *fwSlot, 557 CK_RV *pError)
590 CK_RV *pError
591 )
592 { 558 {
593 NSSCKMDToken *mdToken; 559 NSSCKMDToken *mdToken;
594 NSSCKFWToken *fwToken; 560 NSSCKFWToken *fwToken;
595 561
596 #ifdef NSSDEBUG 562 #ifdef NSSDEBUG
597 if (!pError) { 563 if (!pError) {
598 return (NSSCKFWToken *)NULL; 564 return (NSSCKFWToken *)NULL;
599 } 565 }
600 566
601 *pError = nssCKFWSlot_verifyPointer(fwSlot); 567 *pError = nssCKFWSlot_verifyPointer(fwSlot);
602 if( CKR_OK != *pError ) { 568 if (CKR_OK != *pError) {
603 return (NSSCKFWToken *)NULL; 569 return (NSSCKFWToken *)NULL;
604 } 570 }
605 #endif /* NSSDEBUG */ 571 #endif /* NSSDEBUG */
606 572
607 *pError = nssCKFWMutex_Lock(fwSlot->mutex); 573 *pError = nssCKFWMutex_Lock(fwSlot->mutex);
608 if( CKR_OK != *pError ) { 574 if (CKR_OK != *pError) {
609 return (NSSCKFWToken *)NULL; 575 return (NSSCKFWToken *)NULL;
610 }
611
612 if (!fwSlot->fwToken) {
613 if (!fwSlot->mdSlot->GetToken) {
614 *pError = CKR_GENERAL_ERROR;
615 fwToken = (NSSCKFWToken *)NULL;
616 goto done;
617 } 576 }
618 577
619 mdToken = fwSlot->mdSlot->GetToken(fwSlot->mdSlot, fwSlot, 578 if (!fwSlot->fwToken) {
620 fwSlot->mdInstance, fwSlot->fwInstance, pError); 579 if (!fwSlot->mdSlot->GetToken) {
621 if (!mdToken) { 580 *pError = CKR_GENERAL_ERROR;
622 if( CKR_OK == *pError ) { 581 fwToken = (NSSCKFWToken *)NULL;
623 *pError = CKR_GENERAL_ERROR; 582 goto done;
624 } 583 }
625 return (NSSCKFWToken *)NULL; 584
585 mdToken = fwSlot->mdSlot->GetToken(fwSlot->mdSlot, fwSlot,
586 fwSlot->mdInstance, fwSlot->fwInstanc e, pError);
587 if (!mdToken) {
588 if (CKR_OK == *pError) {
589 *pError = CKR_GENERAL_ERROR;
590 }
591 return (NSSCKFWToken *)NULL;
592 }
593
594 fwToken = nssCKFWToken_Create(fwSlot, mdToken, pError);
595 fwSlot->fwToken = fwToken;
596 } else {
597 fwToken = fwSlot->fwToken;
626 } 598 }
627 599
628 fwToken = nssCKFWToken_Create(fwSlot, mdToken, pError); 600 done:
629 fwSlot->fwToken = fwToken; 601 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
630 } else { 602 return fwToken;
631 fwToken = fwSlot->fwToken;
632 }
633
634 done:
635 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
636 return fwToken;
637 } 603 }
638 604
639 /* 605 /*
640 * nssCKFWSlot_ClearToken 606 * nssCKFWSlot_ClearToken
641 * 607 *
642 */ 608 */
643 NSS_IMPLEMENT void 609 NSS_IMPLEMENT void
644 nssCKFWSlot_ClearToken 610 nssCKFWSlot_ClearToken(
645 ( 611 NSSCKFWSlot *fwSlot)
646 NSSCKFWSlot *fwSlot
647 )
648 { 612 {
649 #ifdef NSSDEBUG 613 #ifdef NSSDEBUG
650 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 614 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
651 return; 615 return;
652 } 616 }
653 #endif /* NSSDEBUG */ 617 #endif /* NSSDEBUG */
654 618
655 if( CKR_OK != nssCKFWMutex_Lock(fwSlot->mutex) ) { 619 if (CKR_OK != nssCKFWMutex_Lock(fwSlot->mutex)) {
656 /* Now what? */ 620 /* Now what? */
621 return;
622 }
623
624 fwSlot->fwToken = (NSSCKFWToken *)NULL;
625 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
657 return; 626 return;
658 }
659
660 fwSlot->fwToken = (NSSCKFWToken *)NULL;
661 (void)nssCKFWMutex_Unlock(fwSlot->mutex);
662 return;
663 } 627 }
664 628
665 /* 629 /*
666 * NSSCKFWSlot_GetMDSlot 630 * NSSCKFWSlot_GetMDSlot
667 * 631 *
668 */ 632 */
669 633
670 NSS_IMPLEMENT NSSCKMDSlot * 634 NSS_IMPLEMENT NSSCKMDSlot *
671 NSSCKFWSlot_GetMDSlot 635 NSSCKFWSlot_GetMDSlot(
672 ( 636 NSSCKFWSlot *fwSlot)
673 NSSCKFWSlot *fwSlot
674 )
675 { 637 {
676 #ifdef DEBUG 638 #ifdef DEBUG
677 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 639 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
678 return (NSSCKMDSlot *)NULL; 640 return (NSSCKMDSlot *)NULL;
679 } 641 }
680 #endif /* DEBUG */ 642 #endif /* DEBUG */
681 643
682 return nssCKFWSlot_GetMDSlot(fwSlot); 644 return nssCKFWSlot_GetMDSlot(fwSlot);
683 } 645 }
684 646
685 /* 647 /*
686 * NSSCKFWSlot_GetFWInstance 648 * NSSCKFWSlot_GetFWInstance
687 * 649 *
688 */ 650 */
689 651
690 NSS_IMPLEMENT NSSCKFWInstance * 652 NSS_IMPLEMENT NSSCKFWInstance *
691 NSSCKFWSlot_GetFWInstance 653 NSSCKFWSlot_GetFWInstance(
692 ( 654 NSSCKFWSlot *fwSlot)
693 NSSCKFWSlot *fwSlot
694 )
695 { 655 {
696 #ifdef DEBUG 656 #ifdef DEBUG
697 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 657 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
698 return (NSSCKFWInstance *)NULL; 658 return (NSSCKFWInstance *)NULL;
699 } 659 }
700 #endif /* DEBUG */ 660 #endif /* DEBUG */
701 661
702 return nssCKFWSlot_GetFWInstance(fwSlot); 662 return nssCKFWSlot_GetFWInstance(fwSlot);
703 } 663 }
704 664
705 /* 665 /*
706 * NSSCKFWSlot_GetMDInstance 666 * NSSCKFWSlot_GetMDInstance
707 * 667 *
708 */ 668 */
709 669
710 NSS_IMPLEMENT NSSCKMDInstance * 670 NSS_IMPLEMENT NSSCKMDInstance *
711 NSSCKFWSlot_GetMDInstance 671 NSSCKFWSlot_GetMDInstance(
712 ( 672 NSSCKFWSlot *fwSlot)
713 NSSCKFWSlot *fwSlot
714 )
715 { 673 {
716 #ifdef DEBUG 674 #ifdef DEBUG
717 if( CKR_OK != nssCKFWSlot_verifyPointer(fwSlot) ) { 675 if (CKR_OK != nssCKFWSlot_verifyPointer(fwSlot)) {
718 return (NSSCKMDInstance *)NULL; 676 return (NSSCKMDInstance *)NULL;
719 } 677 }
720 #endif /* DEBUG */ 678 #endif /* DEBUG */
721 679
722 return nssCKFWSlot_GetMDInstance(fwSlot); 680 return nssCKFWSlot_GetMDInstance(fwSlot);
723 } 681 }
OLDNEW
« no previous file with comments | « nss/lib/ckfw/sessobj.c ('k') | nss/lib/ckfw/token.c » ('j') | nss/lib/util/secoid.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698