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

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

Issue 2078763002: Delete bundled copy of NSS and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss@master
Patch Set: Delete bundled copy of NSS and replace with README. Created 4 years, 6 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
« no previous file with comments | « nss/lib/ckfw/crypto.c ('k') | nss/lib/ckfw/hash.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 /*
6 * find.c
7 *
8 * This file implements the nssCKFWFindObjects type and methods.
9 */
10
11 #ifndef CK_H
12 #include "ck.h"
13 #endif /* CK_H */
14
15 /*
16 * NSSCKFWFindObjects
17 *
18 * -- create/destroy --
19 * nssCKFWFindObjects_Create
20 * nssCKFWFindObjects_Destroy
21 *
22 * -- public accessors --
23 * NSSCKFWFindObjects_GetMDFindObjects
24 *
25 * -- implement public accessors --
26 * nssCKFWFindObjects_GetMDFindObjects
27 *
28 * -- private accessors --
29 *
30 * -- module fronts --
31 * nssCKFWFindObjects_Next
32 */
33
34 struct NSSCKFWFindObjectsStr {
35 NSSCKFWMutex *mutex; /* merely to serialise the MDObject calls */
36 NSSCKMDFindObjects *mdfo1;
37 NSSCKMDFindObjects *mdfo2;
38 NSSCKFWSession *fwSession;
39 NSSCKMDSession *mdSession;
40 NSSCKFWToken *fwToken;
41 NSSCKMDToken *mdToken;
42 NSSCKFWInstance *fwInstance;
43 NSSCKMDInstance *mdInstance;
44
45 NSSCKMDFindObjects *mdFindObjects; /* varies */
46 };
47
48 #ifdef DEBUG
49 /*
50 * But first, the pointer-tracking stuff.
51 *
52 * NOTE: the pointer-tracking support in NSS/base currently relies
53 * upon NSPR's CallOnce support. That, however, relies upon NSPR's
54 * locking, which is tied into the runtime. We need a pointer-tracker
55 * implementation that uses the locks supplied through C_Initialize.
56 * That support, however, can be filled in later. So for now, I'll
57 * just do these routines as no-ops.
58 */
59
60 static CK_RV
61 findObjects_add_pointer(
62 const NSSCKFWFindObjects *fwFindObjects)
63 {
64 return CKR_OK;
65 }
66
67 static CK_RV
68 findObjects_remove_pointer(
69 const NSSCKFWFindObjects *fwFindObjects)
70 {
71 return CKR_OK;
72 }
73
74 NSS_IMPLEMENT CK_RV
75 nssCKFWFindObjects_verifyPointer(
76 const NSSCKFWFindObjects *fwFindObjects)
77 {
78 return CKR_OK;
79 }
80
81 #endif /* DEBUG */
82
83 /*
84 * nssCKFWFindObjects_Create
85 *
86 */
87 NSS_EXTERN NSSCKFWFindObjects *
88 nssCKFWFindObjects_Create(
89 NSSCKFWSession *fwSession,
90 NSSCKFWToken *fwToken,
91 NSSCKFWInstance *fwInstance,
92 NSSCKMDFindObjects *mdFindObjects1,
93 NSSCKMDFindObjects *mdFindObjects2,
94 CK_RV *pError)
95 {
96 NSSCKFWFindObjects *fwFindObjects = NULL;
97 NSSCKMDSession *mdSession;
98 NSSCKMDToken *mdToken;
99 NSSCKMDInstance *mdInstance;
100
101 mdSession = nssCKFWSession_GetMDSession(fwSession);
102 mdToken = nssCKFWToken_GetMDToken(fwToken);
103 mdInstance = nssCKFWInstance_GetMDInstance(fwInstance);
104
105 fwFindObjects = nss_ZNEW(NULL, NSSCKFWFindObjects);
106 if (!fwFindObjects) {
107 *pError = CKR_HOST_MEMORY;
108 goto loser;
109 }
110
111 fwFindObjects->mdfo1 = mdFindObjects1;
112 fwFindObjects->mdfo2 = mdFindObjects2;
113 fwFindObjects->fwSession = fwSession;
114 fwFindObjects->mdSession = mdSession;
115 fwFindObjects->fwToken = fwToken;
116 fwFindObjects->mdToken = mdToken;
117 fwFindObjects->fwInstance = fwInstance;
118 fwFindObjects->mdInstance = mdInstance;
119
120 fwFindObjects->mutex = nssCKFWInstance_CreateMutex(fwInstance, NULL, pError) ;
121 if (!fwFindObjects->mutex) {
122 goto loser;
123 }
124
125 #ifdef DEBUG
126 *pError = findObjects_add_pointer(fwFindObjects);
127 if (CKR_OK != *pError) {
128 goto loser;
129 }
130 #endif /* DEBUG */
131
132 return fwFindObjects;
133
134 loser:
135 if (fwFindObjects) {
136 if (NULL != mdFindObjects1) {
137 if (NULL != mdFindObjects1->Final) {
138 fwFindObjects->mdFindObjects = mdFindObjects1;
139 mdFindObjects1->Final(mdFindObjects1, fwFindObjects, mdSession,
140 fwSession, mdToken, fwToken, mdInstance, f wInstance);
141 }
142 }
143
144 if (NULL != mdFindObjects2) {
145 if (NULL != mdFindObjects2->Final) {
146 fwFindObjects->mdFindObjects = mdFindObjects2;
147 mdFindObjects2->Final(mdFindObjects2, fwFindObjects, mdSession,
148 fwSession, mdToken, fwToken, mdInstance, f wInstance);
149 }
150 }
151
152 nss_ZFreeIf(fwFindObjects);
153 }
154
155 if (CKR_OK == *pError) {
156 *pError = CKR_GENERAL_ERROR;
157 }
158
159 return (NSSCKFWFindObjects *)NULL;
160 }
161
162 /*
163 * nssCKFWFindObjects_Destroy
164 *
165 */
166 NSS_EXTERN void
167 nssCKFWFindObjects_Destroy(
168 NSSCKFWFindObjects *fwFindObjects)
169 {
170 #ifdef NSSDEBUG
171 if (CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects)) {
172 return;
173 }
174 #endif /* NSSDEBUG */
175
176 (void)nssCKFWMutex_Destroy(fwFindObjects->mutex);
177
178 if (fwFindObjects->mdfo1) {
179 if (fwFindObjects->mdfo1->Final) {
180 fwFindObjects->mdFindObjects = fwFindObjects->mdfo1;
181 fwFindObjects->mdfo1->Final(fwFindObjects->mdfo1, fwFindObjects,
182 fwFindObjects->mdSession, fwFindObjects- >fwSession,
183 fwFindObjects->mdToken, fwFindObjects->f wToken,
184 fwFindObjects->mdInstance, fwFindObjects ->fwInstance);
185 }
186 }
187
188 if (fwFindObjects->mdfo2) {
189 if (fwFindObjects->mdfo2->Final) {
190 fwFindObjects->mdFindObjects = fwFindObjects->mdfo2;
191 fwFindObjects->mdfo2->Final(fwFindObjects->mdfo2, fwFindObjects,
192 fwFindObjects->mdSession, fwFindObjects- >fwSession,
193 fwFindObjects->mdToken, fwFindObjects->f wToken,
194 fwFindObjects->mdInstance, fwFindObjects ->fwInstance);
195 }
196 }
197
198 nss_ZFreeIf(fwFindObjects);
199
200 #ifdef DEBUG
201 (void)findObjects_remove_pointer(fwFindObjects);
202 #endif /* DEBUG */
203
204 return;
205 }
206
207 /*
208 * nssCKFWFindObjects_GetMDFindObjects
209 *
210 */
211 NSS_EXTERN NSSCKMDFindObjects *
212 nssCKFWFindObjects_GetMDFindObjects(
213 NSSCKFWFindObjects *fwFindObjects)
214 {
215 #ifdef NSSDEBUG
216 if (CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects)) {
217 return (NSSCKMDFindObjects *)NULL;
218 }
219 #endif /* NSSDEBUG */
220
221 return fwFindObjects->mdFindObjects;
222 }
223
224 /*
225 * nssCKFWFindObjects_Next
226 *
227 */
228 NSS_EXTERN NSSCKFWObject *
229 nssCKFWFindObjects_Next(
230 NSSCKFWFindObjects *fwFindObjects,
231 NSSArena *arenaOpt,
232 CK_RV *pError)
233 {
234 NSSCKMDObject *mdObject;
235 NSSCKFWObject *fwObject = (NSSCKFWObject *)NULL;
236 NSSArena *objArena;
237
238 #ifdef NSSDEBUG
239 if (!pError) {
240 return (NSSCKFWObject *)NULL;
241 }
242
243 *pError = nssCKFWFindObjects_verifyPointer(fwFindObjects);
244 if (CKR_OK != *pError) {
245 return (NSSCKFWObject *)NULL;
246 }
247 #endif /* NSSDEBUG */
248
249 *pError = nssCKFWMutex_Lock(fwFindObjects->mutex);
250 if (CKR_OK != *pError) {
251 return (NSSCKFWObject *)NULL;
252 }
253
254 if (fwFindObjects->mdfo1) {
255 if (fwFindObjects->mdfo1->Next) {
256 fwFindObjects->mdFindObjects = fwFindObjects->mdfo1;
257 mdObject = fwFindObjects->mdfo1->Next(fwFindObjects->mdfo1,
258 fwFindObjects, fwFindObjects-> mdSession, fwFindObjects->fwSession,
259 fwFindObjects->mdToken, fwFind Objects->fwToken,
260 fwFindObjects->mdInstance, fwF indObjects->fwInstance,
261 arenaOpt, pError);
262 if (!mdObject) {
263 if (CKR_OK != *pError) {
264 goto done;
265 }
266
267 /* All done. */
268 fwFindObjects->mdfo1->Final(fwFindObjects->mdfo1, fwFindObjects,
269 fwFindObjects->mdSession, fwFindObje cts->fwSession,
270 fwFindObjects->mdToken, fwFindObject s->fwToken,
271 fwFindObjects->mdInstance, fwFindObj ects->fwInstance);
272 fwFindObjects->mdfo1 = (NSSCKMDFindObjects *)NULL;
273 } else {
274 goto wrap;
275 }
276 }
277 }
278
279 if (fwFindObjects->mdfo2) {
280 if (fwFindObjects->mdfo2->Next) {
281 fwFindObjects->mdFindObjects = fwFindObjects->mdfo2;
282 mdObject = fwFindObjects->mdfo2->Next(fwFindObjects->mdfo2,
283 fwFindObjects, fwFindObjects-> mdSession, fwFindObjects->fwSession,
284 fwFindObjects->mdToken, fwFind Objects->fwToken,
285 fwFindObjects->mdInstance, fwF indObjects->fwInstance,
286 arenaOpt, pError);
287 if (!mdObject) {
288 if (CKR_OK != *pError) {
289 goto done;
290 }
291
292 /* All done. */
293 fwFindObjects->mdfo2->Final(fwFindObjects->mdfo2, fwFindObjects,
294 fwFindObjects->mdSession, fwFindObje cts->fwSession,
295 fwFindObjects->mdToken, fwFindObject s->fwToken,
296 fwFindObjects->mdInstance, fwFindObj ects->fwInstance);
297 fwFindObjects->mdfo2 = (NSSCKMDFindObjects *)NULL;
298 } else {
299 goto wrap;
300 }
301 }
302 }
303
304 /* No more objects */
305 *pError = CKR_OK;
306 goto done;
307
308 wrap:
309 /*
310 * This seems is less than ideal-- we should determine if it's a token
311 * object or a session object, and use the appropriate arena.
312 * But that duplicates logic in nssCKFWObject_IsTokenObject.
313 * Also we should lookup the real session the object was created on
314 * if the object was a session object... however this code is actually
315 * correct because nssCKFWObject_Create will return a cached version of
316 * the object from it's hash. This is necessary because 1) we don't want
317 * to create an arena style leak (where our arena grows with every search),
318 * and 2) we want the same object to always have the same ID. This means
319 * the only case the nssCKFWObject_Create() will need the objArena and the
320 * Session is in the case of token objects (session objects should already
321 * exist in the cache from their initial creation). So this code is correct,
322 * but it depends on nssCKFWObject_Create caching all objects.
323 */
324 objArena = nssCKFWToken_GetArena(fwFindObjects->fwToken, pError);
325 if (!objArena) {
326 if (CKR_OK == *pError) {
327 *pError = CKR_HOST_MEMORY;
328 }
329 goto done;
330 }
331
332 fwObject = nssCKFWObject_Create(objArena, mdObject,
333 NULL, fwFindObjects->fwToken,
334 fwFindObjects->fwInstance, pError);
335 if (!fwObject) {
336 if (CKR_OK == *pError) {
337 *pError = CKR_GENERAL_ERROR;
338 }
339 }
340
341 done:
342 (void)nssCKFWMutex_Unlock(fwFindObjects->mutex);
343 return fwObject;
344 }
345
346 /*
347 * NSSCKFWFindObjects_GetMDFindObjects
348 *
349 */
350
351 NSS_EXTERN NSSCKMDFindObjects *
352 NSSCKFWFindObjects_GetMDFindObjects(
353 NSSCKFWFindObjects *fwFindObjects)
354 {
355 #ifdef DEBUG
356 if (CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects)) {
357 return (NSSCKMDFindObjects *)NULL;
358 }
359 #endif /* DEBUG */
360
361 return nssCKFWFindObjects_GetMDFindObjects(fwFindObjects);
362 }
OLDNEW
« no previous file with comments | « nss/lib/ckfw/crypto.c ('k') | nss/lib/ckfw/hash.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698