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 * mechanism.c | 6 * mechanism.c |
7 * | 7 * |
8 * This file implements the NSSCKFWMechanism type and methods. | 8 * This file implements the NSSCKFWMechanism type and methods. |
9 */ | 9 */ |
10 | 10 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 * nssCKFWMechanism_SignRecoverInit | 48 * nssCKFWMechanism_SignRecoverInit |
49 * nssCKFWMechanism_VerifyRecoverInit | 49 * nssCKFWMechanism_VerifyRecoverInit |
50 * nssCKFWMechanism_GenerateKey | 50 * nssCKFWMechanism_GenerateKey |
51 * nssCKFWMechanism_GenerateKeyPair | 51 * nssCKFWMechanism_GenerateKeyPair |
52 * nssCKFWMechanism_GetWrapKeyLength | 52 * nssCKFWMechanism_GetWrapKeyLength |
53 * nssCKFWMechanism_WrapKey | 53 * nssCKFWMechanism_WrapKey |
54 * nssCKFWMechanism_UnwrapKey | 54 * nssCKFWMechanism_UnwrapKey |
55 * nssCKFWMechanism_DeriveKey | 55 * nssCKFWMechanism_DeriveKey |
56 */ | 56 */ |
57 | 57 |
58 | |
59 struct NSSCKFWMechanismStr { | 58 struct NSSCKFWMechanismStr { |
60 NSSCKMDMechanism *mdMechanism; | 59 NSSCKMDMechanism *mdMechanism; |
61 NSSCKMDToken *mdToken; | 60 NSSCKMDToken *mdToken; |
62 NSSCKFWToken *fwToken; | 61 NSSCKFWToken *fwToken; |
63 NSSCKMDInstance *mdInstance; | 62 NSSCKMDInstance *mdInstance; |
64 NSSCKFWInstance *fwInstance; | 63 NSSCKFWInstance *fwInstance; |
65 }; | 64 }; |
66 | 65 |
67 /* | 66 /* |
68 * nssCKFWMechanism_Create | 67 * nssCKFWMechanism_Create |
69 * | 68 * |
70 */ | 69 */ |
71 NSS_IMPLEMENT NSSCKFWMechanism * | 70 NSS_IMPLEMENT NSSCKFWMechanism * |
72 nssCKFWMechanism_Create | 71 nssCKFWMechanism_Create( |
73 ( | 72 NSSCKMDMechanism *mdMechanism, |
74 NSSCKMDMechanism *mdMechanism, | 73 NSSCKMDToken *mdToken, |
75 NSSCKMDToken *mdToken, | 74 NSSCKFWToken *fwToken, |
76 NSSCKFWToken *fwToken, | 75 NSSCKMDInstance *mdInstance, |
77 NSSCKMDInstance *mdInstance, | 76 NSSCKFWInstance *fwInstance) |
78 NSSCKFWInstance *fwInstance | |
79 ) | |
80 { | 77 { |
81 NSSCKFWMechanism *fwMechanism; | 78 NSSCKFWMechanism *fwMechanism; |
82 | 79 |
83 | 80 fwMechanism = nss_ZNEW(NULL, NSSCKFWMechanism); |
84 fwMechanism = nss_ZNEW(NULL, NSSCKFWMechanism); | 81 if (!fwMechanism) { |
85 if (!fwMechanism) { | 82 return (NSSCKFWMechanism *)NULL; |
86 return (NSSCKFWMechanism *)NULL; | 83 } |
87 } | 84 fwMechanism->mdMechanism = mdMechanism; |
88 fwMechanism->mdMechanism = mdMechanism; | 85 fwMechanism->mdToken = mdToken; |
89 fwMechanism->mdToken = mdToken; | 86 fwMechanism->fwToken = fwToken; |
90 fwMechanism->fwToken = fwToken; | 87 fwMechanism->mdInstance = mdInstance; |
91 fwMechanism->mdInstance = mdInstance; | 88 fwMechanism->fwInstance = fwInstance; |
92 fwMechanism->fwInstance = fwInstance; | 89 return fwMechanism; |
93 return fwMechanism; | |
94 } | 90 } |
95 | 91 |
96 /* | 92 /* |
97 * nssCKFWMechanism_Destroy | 93 * nssCKFWMechanism_Destroy |
98 * | 94 * |
99 */ | 95 */ |
100 NSS_IMPLEMENT void | 96 NSS_IMPLEMENT void |
101 nssCKFWMechanism_Destroy | 97 nssCKFWMechanism_Destroy( |
102 ( | 98 NSSCKFWMechanism *fwMechanism) |
103 NSSCKFWMechanism *fwMechanism | |
104 ) | |
105 { | 99 { |
106 /* destroy any fw resources held by nssCKFWMechanism (currently none) */ | 100 /* destroy any fw resources held by nssCKFWMechanism (currently none) */ |
107 | 101 |
108 if (!fwMechanism->mdMechanism->Destroy) { | 102 if (!fwMechanism->mdMechanism->Destroy) { |
109 /* destroys it's parent as well */ | 103 /* destroys it's parent as well */ |
110 fwMechanism->mdMechanism->Destroy( | 104 fwMechanism->mdMechanism->Destroy( |
111 fwMechanism->mdMechanism, | 105 fwMechanism->mdMechanism, |
112 fwMechanism, | 106 fwMechanism, |
113 fwMechanism->mdInstance, | 107 fwMechanism->mdInstance, |
114 fwMechanism->fwInstance); | 108 fwMechanism->fwInstance); |
115 } | 109 } |
116 /* if the Destroy function wasn't supplied, then the mechanism is 'static', | 110 /* if the Destroy function wasn't supplied, then the mechanism is 'static', |
117 * and there is nothing to destroy */ | 111 * and there is nothing to destroy */ |
118 return; | 112 return; |
119 } | 113 } |
120 | 114 |
121 /* | 115 /* |
122 * nssCKFWMechanism_GetMDMechanism | 116 * nssCKFWMechanism_GetMDMechanism |
123 * | 117 * |
124 */ | 118 */ |
125 NSS_IMPLEMENT NSSCKMDMechanism * | 119 NSS_IMPLEMENT NSSCKMDMechanism * |
126 nssCKFWMechanism_GetMDMechanism | 120 nssCKFWMechanism_GetMDMechanism( |
127 ( | 121 NSSCKFWMechanism *fwMechanism) |
128 NSSCKFWMechanism *fwMechanism | |
129 ) | |
130 { | 122 { |
131 return fwMechanism->mdMechanism; | 123 return fwMechanism->mdMechanism; |
132 } | 124 } |
133 | 125 |
134 /* | 126 /* |
135 * nssCKFWMechanism_GetMinKeySize | 127 * nssCKFWMechanism_GetMinKeySize |
136 * | 128 * |
137 */ | 129 */ |
138 NSS_IMPLEMENT CK_ULONG | 130 NSS_IMPLEMENT CK_ULONG |
139 nssCKFWMechanism_GetMinKeySize | 131 nssCKFWMechanism_GetMinKeySize( |
140 ( | 132 NSSCKFWMechanism *fwMechanism, |
141 NSSCKFWMechanism *fwMechanism, | 133 CK_RV *pError) |
142 CK_RV *pError | |
143 ) | |
144 { | 134 { |
145 if (!fwMechanism->mdMechanism->GetMinKeySize) { | 135 if (!fwMechanism->mdMechanism->GetMinKeySize) { |
146 return 0; | 136 return 0; |
147 } | 137 } |
148 | 138 |
149 return fwMechanism->mdMechanism->GetMinKeySize(fwMechanism->mdMechanism, | 139 return fwMechanism->mdMechanism->GetMinKeySize(fwMechanism->mdMechanism, |
150 fwMechanism, fwMechanism->mdToken, fwMechanism->fwToken, | 140 fwMechanism, fwMechanism->mdT
oken, fwMechanism->fwToken, |
151 fwMechanism->mdInstance, fwMechanism->fwInstance, pError); | 141 fwMechanism->mdInstance, fwMe
chanism->fwInstance, pError); |
152 } | 142 } |
153 | 143 |
154 /* | 144 /* |
155 * nssCKFWMechanism_GetMaxKeySize | 145 * nssCKFWMechanism_GetMaxKeySize |
156 * | 146 * |
157 */ | 147 */ |
158 NSS_IMPLEMENT CK_ULONG | 148 NSS_IMPLEMENT CK_ULONG |
159 nssCKFWMechanism_GetMaxKeySize | 149 nssCKFWMechanism_GetMaxKeySize( |
160 ( | 150 NSSCKFWMechanism *fwMechanism, |
161 NSSCKFWMechanism *fwMechanism, | 151 CK_RV *pError) |
162 CK_RV *pError | |
163 ) | |
164 { | 152 { |
165 if (!fwMechanism->mdMechanism->GetMaxKeySize) { | 153 if (!fwMechanism->mdMechanism->GetMaxKeySize) { |
166 return 0; | 154 return 0; |
167 } | 155 } |
168 | 156 |
169 return fwMechanism->mdMechanism->GetMaxKeySize(fwMechanism->mdMechanism, | 157 return fwMechanism->mdMechanism->GetMaxKeySize(fwMechanism->mdMechanism, |
170 fwMechanism, fwMechanism->mdToken, fwMechanism->fwToken, | 158 fwMechanism, fwMechanism->mdT
oken, fwMechanism->fwToken, |
171 fwMechanism->mdInstance, fwMechanism->fwInstance, pError); | 159 fwMechanism->mdInstance, fwMe
chanism->fwInstance, pError); |
172 } | 160 } |
173 | 161 |
174 /* | 162 /* |
175 * nssCKFWMechanism_GetInHardware | 163 * nssCKFWMechanism_GetInHardware |
176 * | 164 * |
177 */ | 165 */ |
178 NSS_IMPLEMENT CK_BBOOL | 166 NSS_IMPLEMENT CK_BBOOL |
179 nssCKFWMechanism_GetInHardware | 167 nssCKFWMechanism_GetInHardware( |
180 ( | 168 NSSCKFWMechanism *fwMechanism, |
181 NSSCKFWMechanism *fwMechanism, | 169 CK_RV *pError) |
182 CK_RV *pError | |
183 ) | |
184 { | 170 { |
185 if (!fwMechanism->mdMechanism->GetInHardware) { | 171 if (!fwMechanism->mdMechanism->GetInHardware) { |
186 return CK_FALSE; | 172 return CK_FALSE; |
187 } | 173 } |
188 | 174 |
189 return fwMechanism->mdMechanism->GetInHardware(fwMechanism->mdMechanism, | 175 return fwMechanism->mdMechanism->GetInHardware(fwMechanism->mdMechanism, |
190 fwMechanism, fwMechanism->mdToken, fwMechanism->fwToken, | 176 fwMechanism, fwMechanism->mdT
oken, fwMechanism->fwToken, |
191 fwMechanism->mdInstance, fwMechanism->fwInstance, pError); | 177 fwMechanism->mdInstance, fwMe
chanism->fwInstance, pError); |
192 } | 178 } |
193 | 179 |
194 | |
195 /* | 180 /* |
196 * the following are determined automatically by which of the cryptographic | 181 * the following are determined automatically by which of the cryptographic |
197 * functions are defined for this mechanism. | 182 * functions are defined for this mechanism. |
198 */ | 183 */ |
199 /* | 184 /* |
200 * nssCKFWMechanism_GetCanEncrypt | 185 * nssCKFWMechanism_GetCanEncrypt |
201 * | 186 * |
202 */ | 187 */ |
203 NSS_EXTERN CK_BBOOL | 188 NSS_EXTERN CK_BBOOL |
204 nssCKFWMechanism_GetCanEncrypt | 189 nssCKFWMechanism_GetCanEncrypt( |
205 ( | 190 NSSCKFWMechanism *fwMechanism, |
206 NSSCKFWMechanism *fwMechanism, | 191 CK_RV *pError) |
207 CK_RV *pError | |
208 ) | |
209 { | 192 { |
210 if (!fwMechanism->mdMechanism->EncryptInit) { | 193 if (!fwMechanism->mdMechanism->EncryptInit) { |
211 return CK_FALSE; | 194 return CK_FALSE; |
212 } | 195 } |
213 return CK_TRUE; | 196 return CK_TRUE; |
214 } | 197 } |
215 | 198 |
216 /* | 199 /* |
217 * nssCKFWMechanism_GetCanDecrypt | 200 * nssCKFWMechanism_GetCanDecrypt |
218 * | 201 * |
219 */ | 202 */ |
220 NSS_EXTERN CK_BBOOL | 203 NSS_EXTERN CK_BBOOL |
221 nssCKFWMechanism_GetCanDecrypt | 204 nssCKFWMechanism_GetCanDecrypt( |
222 ( | 205 NSSCKFWMechanism *fwMechanism, |
223 NSSCKFWMechanism *fwMechanism, | 206 CK_RV *pError) |
224 CK_RV *pError | |
225 ) | |
226 { | 207 { |
227 if (!fwMechanism->mdMechanism->DecryptInit) { | 208 if (!fwMechanism->mdMechanism->DecryptInit) { |
228 return CK_FALSE; | 209 return CK_FALSE; |
229 } | 210 } |
230 return CK_TRUE; | 211 return CK_TRUE; |
231 } | 212 } |
232 | 213 |
233 /* | 214 /* |
234 * nssCKFWMechanism_GetCanDigest | 215 * nssCKFWMechanism_GetCanDigest |
235 * | 216 * |
236 */ | 217 */ |
237 NSS_EXTERN CK_BBOOL | 218 NSS_EXTERN CK_BBOOL |
238 nssCKFWMechanism_GetCanDigest | 219 nssCKFWMechanism_GetCanDigest( |
239 ( | 220 NSSCKFWMechanism *fwMechanism, |
240 NSSCKFWMechanism *fwMechanism, | 221 CK_RV *pError) |
241 CK_RV *pError | |
242 ) | |
243 { | 222 { |
244 if (!fwMechanism->mdMechanism->DigestInit) { | 223 if (!fwMechanism->mdMechanism->DigestInit) { |
245 return CK_FALSE; | 224 return CK_FALSE; |
246 } | 225 } |
247 return CK_TRUE; | 226 return CK_TRUE; |
248 } | 227 } |
249 | 228 |
250 /* | 229 /* |
251 * nssCKFWMechanism_GetCanSign | 230 * nssCKFWMechanism_GetCanSign |
252 * | 231 * |
253 */ | 232 */ |
254 NSS_EXTERN CK_BBOOL | 233 NSS_EXTERN CK_BBOOL |
255 nssCKFWMechanism_GetCanSign | 234 nssCKFWMechanism_GetCanSign( |
256 ( | 235 NSSCKFWMechanism *fwMechanism, |
257 NSSCKFWMechanism *fwMechanism, | 236 CK_RV *pError) |
258 CK_RV *pError | |
259 ) | |
260 { | 237 { |
261 if (!fwMechanism->mdMechanism->SignInit) { | 238 if (!fwMechanism->mdMechanism->SignInit) { |
262 return CK_FALSE; | 239 return CK_FALSE; |
263 } | 240 } |
264 return CK_TRUE; | 241 return CK_TRUE; |
265 } | 242 } |
266 | 243 |
267 /* | 244 /* |
268 * nssCKFWMechanism_GetCanSignRecover | 245 * nssCKFWMechanism_GetCanSignRecover |
269 * | 246 * |
270 */ | 247 */ |
271 NSS_EXTERN CK_BBOOL | 248 NSS_EXTERN CK_BBOOL |
272 nssCKFWMechanism_GetCanSignRecover | 249 nssCKFWMechanism_GetCanSignRecover( |
273 ( | 250 NSSCKFWMechanism *fwMechanism, |
274 NSSCKFWMechanism *fwMechanism, | 251 CK_RV *pError) |
275 CK_RV *pError | |
276 ) | |
277 { | 252 { |
278 if (!fwMechanism->mdMechanism->SignRecoverInit) { | 253 if (!fwMechanism->mdMechanism->SignRecoverInit) { |
279 return CK_FALSE; | 254 return CK_FALSE; |
280 } | 255 } |
281 return CK_TRUE; | 256 return CK_TRUE; |
282 } | 257 } |
283 | 258 |
284 /* | 259 /* |
285 * nssCKFWMechanism_GetCanVerify | 260 * nssCKFWMechanism_GetCanVerify |
286 * | 261 * |
287 */ | 262 */ |
288 NSS_EXTERN CK_BBOOL | 263 NSS_EXTERN CK_BBOOL |
289 nssCKFWMechanism_GetCanVerify | 264 nssCKFWMechanism_GetCanVerify( |
290 ( | 265 NSSCKFWMechanism *fwMechanism, |
291 NSSCKFWMechanism *fwMechanism, | 266 CK_RV *pError) |
292 CK_RV *pError | |
293 ) | |
294 { | 267 { |
295 if (!fwMechanism->mdMechanism->VerifyInit) { | 268 if (!fwMechanism->mdMechanism->VerifyInit) { |
296 return CK_FALSE; | 269 return CK_FALSE; |
297 } | 270 } |
298 return CK_TRUE; | 271 return CK_TRUE; |
299 } | 272 } |
300 | 273 |
301 /* | 274 /* |
302 * nssCKFWMechanism_GetCanVerifyRecover | 275 * nssCKFWMechanism_GetCanVerifyRecover |
303 * | 276 * |
304 */ | 277 */ |
305 NSS_EXTERN CK_BBOOL | 278 NSS_EXTERN CK_BBOOL |
306 nssCKFWMechanism_GetCanVerifyRecover | 279 nssCKFWMechanism_GetCanVerifyRecover( |
307 ( | 280 NSSCKFWMechanism *fwMechanism, |
308 NSSCKFWMechanism *fwMechanism, | 281 CK_RV *pError) |
309 CK_RV *pError | |
310 ) | |
311 { | 282 { |
312 if (!fwMechanism->mdMechanism->VerifyRecoverInit) { | 283 if (!fwMechanism->mdMechanism->VerifyRecoverInit) { |
313 return CK_FALSE; | 284 return CK_FALSE; |
314 } | 285 } |
315 return CK_TRUE; | 286 return CK_TRUE; |
316 } | 287 } |
317 | 288 |
318 /* | 289 /* |
319 * nssCKFWMechanism_GetCanGenerate | 290 * nssCKFWMechanism_GetCanGenerate |
320 * | 291 * |
321 */ | 292 */ |
322 NSS_EXTERN CK_BBOOL | 293 NSS_EXTERN CK_BBOOL |
323 nssCKFWMechanism_GetCanGenerate | 294 nssCKFWMechanism_GetCanGenerate( |
324 ( | 295 NSSCKFWMechanism *fwMechanism, |
325 NSSCKFWMechanism *fwMechanism, | 296 CK_RV *pError) |
326 CK_RV *pError | |
327 ) | |
328 { | 297 { |
329 if (!fwMechanism->mdMechanism->GenerateKey) { | 298 if (!fwMechanism->mdMechanism->GenerateKey) { |
330 return CK_FALSE; | 299 return CK_FALSE; |
331 } | 300 } |
332 return CK_TRUE; | 301 return CK_TRUE; |
333 } | 302 } |
334 | 303 |
335 /* | 304 /* |
336 * nssCKFWMechanism_GetCanGenerateKeyPair | 305 * nssCKFWMechanism_GetCanGenerateKeyPair |
337 * | 306 * |
338 */ | 307 */ |
339 NSS_EXTERN CK_BBOOL | 308 NSS_EXTERN CK_BBOOL |
340 nssCKFWMechanism_GetCanGenerateKeyPair | 309 nssCKFWMechanism_GetCanGenerateKeyPair( |
341 ( | 310 NSSCKFWMechanism *fwMechanism, |
342 NSSCKFWMechanism *fwMechanism, | 311 CK_RV *pError) |
343 CK_RV *pError | |
344 ) | |
345 { | 312 { |
346 if (!fwMechanism->mdMechanism->GenerateKeyPair) { | 313 if (!fwMechanism->mdMechanism->GenerateKeyPair) { |
347 return CK_FALSE; | 314 return CK_FALSE; |
348 } | 315 } |
349 return CK_TRUE; | 316 return CK_TRUE; |
350 } | 317 } |
351 | 318 |
352 /* | 319 /* |
353 * nssCKFWMechanism_GetCanUnwrap | 320 * nssCKFWMechanism_GetCanUnwrap |
354 * | 321 * |
355 */ | 322 */ |
356 NSS_EXTERN CK_BBOOL | 323 NSS_EXTERN CK_BBOOL |
357 nssCKFWMechanism_GetCanUnwrap | 324 nssCKFWMechanism_GetCanUnwrap( |
358 ( | 325 NSSCKFWMechanism *fwMechanism, |
359 NSSCKFWMechanism *fwMechanism, | 326 CK_RV *pError) |
360 CK_RV *pError | |
361 ) | |
362 { | 327 { |
363 if (!fwMechanism->mdMechanism->UnwrapKey) { | 328 if (!fwMechanism->mdMechanism->UnwrapKey) { |
364 return CK_FALSE; | 329 return CK_FALSE; |
365 } | 330 } |
366 return CK_TRUE; | 331 return CK_TRUE; |
367 } | 332 } |
368 | 333 |
369 /* | 334 /* |
370 * nssCKFWMechanism_GetCanWrap | 335 * nssCKFWMechanism_GetCanWrap |
371 * | 336 * |
372 */ | 337 */ |
373 NSS_EXTERN CK_BBOOL | 338 NSS_EXTERN CK_BBOOL |
374 nssCKFWMechanism_GetCanWrap | 339 nssCKFWMechanism_GetCanWrap( |
375 ( | 340 NSSCKFWMechanism *fwMechanism, |
376 NSSCKFWMechanism *fwMechanism, | 341 CK_RV *pError) |
377 CK_RV *pError | |
378 ) | |
379 { | 342 { |
380 if (!fwMechanism->mdMechanism->WrapKey) { | 343 if (!fwMechanism->mdMechanism->WrapKey) { |
381 return CK_FALSE; | 344 return CK_FALSE; |
382 } | 345 } |
383 return CK_TRUE; | 346 return CK_TRUE; |
384 } | 347 } |
385 | 348 |
386 /* | 349 /* |
387 * nssCKFWMechanism_GetCanDerive | 350 * nssCKFWMechanism_GetCanDerive |
388 * | 351 * |
389 */ | 352 */ |
390 NSS_EXTERN CK_BBOOL | 353 NSS_EXTERN CK_BBOOL |
391 nssCKFWMechanism_GetCanDerive | 354 nssCKFWMechanism_GetCanDerive( |
392 ( | 355 NSSCKFWMechanism *fwMechanism, |
393 NSSCKFWMechanism *fwMechanism, | 356 CK_RV *pError) |
394 CK_RV *pError | |
395 ) | |
396 { | 357 { |
397 if (!fwMechanism->mdMechanism->DeriveKey) { | 358 if (!fwMechanism->mdMechanism->DeriveKey) { |
398 return CK_FALSE; | 359 return CK_FALSE; |
399 } | 360 } |
400 return CK_TRUE; | 361 return CK_TRUE; |
401 } | 362 } |
402 | 363 |
403 /* | 364 /* |
404 * These are the actual crypto operations | 365 * These are the actual crypto operations |
405 */ | 366 */ |
406 | 367 |
407 /* | 368 /* |
408 * nssCKFWMechanism_EncryptInit | 369 * nssCKFWMechanism_EncryptInit |
409 * Start an encryption session. | 370 * Start an encryption session. |
410 */ | 371 */ |
411 NSS_EXTERN CK_RV | 372 NSS_EXTERN CK_RV |
412 nssCKFWMechanism_EncryptInit | 373 nssCKFWMechanism_EncryptInit( |
413 ( | 374 NSSCKFWMechanism *fwMechanism, |
414 NSSCKFWMechanism *fwMechanism, | 375 CK_MECHANISM *pMechanism, |
415 CK_MECHANISM *pMechanism, | 376 NSSCKFWSession *fwSession, |
416 NSSCKFWSession *fwSession, | 377 NSSCKFWObject *fwObject) |
417 NSSCKFWObject *fwObject | |
418 ) | |
419 { | 378 { |
420 NSSCKFWCryptoOperation *fwOperation; | 379 NSSCKFWCryptoOperation *fwOperation; |
421 NSSCKMDCryptoOperation *mdOperation; | 380 NSSCKMDCryptoOperation *mdOperation; |
422 NSSCKMDSession *mdSession; | 381 NSSCKMDSession *mdSession; |
423 NSSCKMDObject *mdObject; | 382 NSSCKMDObject *mdObject; |
424 CK_RV error = CKR_OK; | 383 CK_RV error = CKR_OK; |
425 | 384 |
| 385 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, |
| 386 NSSCKFWCryptoOperatio
nState_EncryptDecrypt); |
| 387 if (fwOperation) { |
| 388 return CKR_OPERATION_ACTIVE; |
| 389 } |
426 | 390 |
427 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, | 391 if (!fwMechanism->mdMechanism->EncryptInit) { |
428 NSSCKFWCryptoOperationState_EncryptDecrypt); | 392 return CKR_FUNCTION_FAILED; |
429 if (fwOperation) { | 393 } |
430 return CKR_OPERATION_ACTIVE; | |
431 } | |
432 | 394 |
433 if (!fwMechanism->mdMechanism->EncryptInit) { | 395 mdSession = nssCKFWSession_GetMDSession(fwSession); |
434 return CKR_FUNCTION_FAILED; | 396 mdObject = nssCKFWObject_GetMDObject(fwObject); |
435 } | 397 mdOperation = fwMechanism->mdMechanism->EncryptInit( |
436 | |
437 mdSession = nssCKFWSession_GetMDSession(fwSession); | |
438 mdObject = nssCKFWObject_GetMDObject(fwObject); | |
439 mdOperation = fwMechanism->mdMechanism->EncryptInit( | |
440 fwMechanism->mdMechanism, | 398 fwMechanism->mdMechanism, |
441 fwMechanism, | 399 fwMechanism, |
442 pMechanism, | 400 pMechanism, |
443 mdSession, | 401 mdSession, |
444 fwSession, | 402 fwSession, |
445 fwMechanism->mdToken, | 403 fwMechanism->mdToken, |
446 fwMechanism->fwToken, | 404 fwMechanism->fwToken, |
447 fwMechanism->mdInstance, | 405 fwMechanism->mdInstance, |
448 fwMechanism->fwInstance, | 406 fwMechanism->fwInstance, |
449 mdObject, | 407 mdObject, |
450 fwObject, | 408 fwObject, |
451 &error | 409 &error); |
452 ); | 410 if (!mdOperation) { |
453 if (!mdOperation) { | 411 goto loser; |
454 goto loser; | 412 } |
455 } | |
456 | 413 |
457 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, | 414 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, |
458 mdSession, fwSession, fwMechanism->mdToken, fwMechanism->fwToken, | 415 mdSession, fwSession, fwMechanis
m->mdToken, fwMechanism->fwToken, |
459 fwMechanism->mdInstance, fwMechanism->fwInstance, | 416 fwMechanism->mdInstance, fwMecha
nism->fwInstance, |
460 NSSCKFWCryptoOperationType_Encrypt, &error); | 417 NSSCKFWCryptoOperationType_Encry
pt, &error); |
461 if (fwOperation) { | 418 if (fwOperation) { |
462 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, | 419 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, |
463 NSSCKFWCryptoOperationState_EncryptDecrypt); | 420 NSSCKFWCryptoOperationState_Enc
ryptDecrypt); |
464 } | 421 } |
465 | 422 |
466 loser: | 423 loser: |
467 return error; | 424 return error; |
468 } | 425 } |
469 | 426 |
470 /* | 427 /* |
471 * nssCKFWMechanism_DecryptInit | 428 * nssCKFWMechanism_DecryptInit |
472 * Start an encryption session. | 429 * Start an encryption session. |
473 */ | 430 */ |
474 NSS_EXTERN CK_RV | 431 NSS_EXTERN CK_RV |
475 nssCKFWMechanism_DecryptInit | 432 nssCKFWMechanism_DecryptInit( |
476 ( | 433 NSSCKFWMechanism *fwMechanism, |
477 NSSCKFWMechanism *fwMechanism, | 434 CK_MECHANISM *pMechanism, |
478 CK_MECHANISM *pMechanism, | 435 NSSCKFWSession *fwSession, |
479 NSSCKFWSession *fwSession, | 436 NSSCKFWObject *fwObject) |
480 NSSCKFWObject *fwObject | |
481 ) | |
482 { | 437 { |
483 NSSCKFWCryptoOperation *fwOperation; | 438 NSSCKFWCryptoOperation *fwOperation; |
484 NSSCKMDCryptoOperation *mdOperation; | 439 NSSCKMDCryptoOperation *mdOperation; |
485 NSSCKMDSession *mdSession; | 440 NSSCKMDSession *mdSession; |
486 NSSCKMDObject *mdObject; | 441 NSSCKMDObject *mdObject; |
487 CK_RV error = CKR_OK; | 442 CK_RV error = CKR_OK; |
488 | 443 |
| 444 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, |
| 445 NSSCKFWCryptoOperatio
nState_EncryptDecrypt); |
| 446 if (fwOperation) { |
| 447 return CKR_OPERATION_ACTIVE; |
| 448 } |
489 | 449 |
490 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, | 450 if (!fwMechanism->mdMechanism->DecryptInit) { |
491 NSSCKFWCryptoOperationState_EncryptDecrypt); | 451 return CKR_FUNCTION_FAILED; |
492 if (fwOperation) { | 452 } |
493 return CKR_OPERATION_ACTIVE; | |
494 } | |
495 | 453 |
496 if (!fwMechanism->mdMechanism->DecryptInit) { | 454 mdSession = nssCKFWSession_GetMDSession(fwSession); |
497 return CKR_FUNCTION_FAILED; | 455 mdObject = nssCKFWObject_GetMDObject(fwObject); |
498 } | 456 mdOperation = fwMechanism->mdMechanism->DecryptInit( |
499 | |
500 mdSession = nssCKFWSession_GetMDSession(fwSession); | |
501 mdObject = nssCKFWObject_GetMDObject(fwObject); | |
502 mdOperation = fwMechanism->mdMechanism->DecryptInit( | |
503 fwMechanism->mdMechanism, | 457 fwMechanism->mdMechanism, |
504 fwMechanism, | 458 fwMechanism, |
505 pMechanism, | 459 pMechanism, |
506 mdSession, | 460 mdSession, |
507 fwSession, | 461 fwSession, |
508 fwMechanism->mdToken, | 462 fwMechanism->mdToken, |
509 fwMechanism->fwToken, | 463 fwMechanism->fwToken, |
510 fwMechanism->mdInstance, | 464 fwMechanism->mdInstance, |
511 fwMechanism->fwInstance, | 465 fwMechanism->fwInstance, |
512 mdObject, | 466 mdObject, |
513 fwObject, | 467 fwObject, |
514 &error | 468 &error); |
515 ); | 469 if (!mdOperation) { |
516 if (!mdOperation) { | 470 goto loser; |
517 goto loser; | 471 } |
518 } | |
519 | 472 |
520 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, | 473 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, |
521 mdSession, fwSession, fwMechanism->mdToken, fwMechanism->fwToken, | 474 mdSession, fwSession, fwMechanis
m->mdToken, fwMechanism->fwToken, |
522 fwMechanism->mdInstance, fwMechanism->fwInstance, | 475 fwMechanism->mdInstance, fwMecha
nism->fwInstance, |
523 NSSCKFWCryptoOperationType_Decrypt, &error); | 476 NSSCKFWCryptoOperationType_Decry
pt, &error); |
524 if (fwOperation) { | 477 if (fwOperation) { |
525 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, | 478 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, |
526 NSSCKFWCryptoOperationState_EncryptDecrypt); | 479 NSSCKFWCryptoOperationState_Enc
ryptDecrypt); |
527 } | 480 } |
528 | 481 |
529 loser: | 482 loser: |
530 return error; | 483 return error; |
531 } | 484 } |
532 | 485 |
533 /* | 486 /* |
534 * nssCKFWMechanism_DigestInit | 487 * nssCKFWMechanism_DigestInit |
535 * Start an encryption session. | 488 * Start an encryption session. |
536 */ | 489 */ |
537 NSS_EXTERN CK_RV | 490 NSS_EXTERN CK_RV |
538 nssCKFWMechanism_DigestInit | 491 nssCKFWMechanism_DigestInit( |
539 ( | 492 NSSCKFWMechanism *fwMechanism, |
540 NSSCKFWMechanism *fwMechanism, | 493 CK_MECHANISM *pMechanism, |
541 CK_MECHANISM *pMechanism, | 494 NSSCKFWSession *fwSession) |
542 NSSCKFWSession *fwSession | |
543 ) | |
544 { | 495 { |
545 NSSCKFWCryptoOperation *fwOperation; | 496 NSSCKFWCryptoOperation *fwOperation; |
546 NSSCKMDCryptoOperation *mdOperation; | 497 NSSCKMDCryptoOperation *mdOperation; |
547 NSSCKMDSession *mdSession; | 498 NSSCKMDSession *mdSession; |
548 CK_RV error = CKR_OK; | 499 CK_RV error = CKR_OK; |
549 | 500 |
| 501 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, |
| 502 NSSCKFWCryptoOperatio
nState_Digest); |
| 503 if (fwOperation) { |
| 504 return CKR_OPERATION_ACTIVE; |
| 505 } |
550 | 506 |
551 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, | 507 if (!fwMechanism->mdMechanism->DigestInit) { |
552 NSSCKFWCryptoOperationState_Digest); | 508 return CKR_FUNCTION_FAILED; |
553 if (fwOperation) { | 509 } |
554 return CKR_OPERATION_ACTIVE; | |
555 } | |
556 | 510 |
557 if (!fwMechanism->mdMechanism->DigestInit) { | 511 mdSession = nssCKFWSession_GetMDSession(fwSession); |
558 return CKR_FUNCTION_FAILED; | 512 mdOperation = fwMechanism->mdMechanism->DigestInit( |
559 } | |
560 | |
561 mdSession = nssCKFWSession_GetMDSession(fwSession); | |
562 mdOperation = fwMechanism->mdMechanism->DigestInit( | |
563 fwMechanism->mdMechanism, | 513 fwMechanism->mdMechanism, |
564 fwMechanism, | 514 fwMechanism, |
565 pMechanism, | 515 pMechanism, |
566 mdSession, | 516 mdSession, |
567 fwSession, | 517 fwSession, |
568 fwMechanism->mdToken, | 518 fwMechanism->mdToken, |
569 fwMechanism->fwToken, | 519 fwMechanism->fwToken, |
570 fwMechanism->mdInstance, | 520 fwMechanism->mdInstance, |
571 fwMechanism->fwInstance, | 521 fwMechanism->fwInstance, |
572 &error | 522 &error); |
573 ); | 523 if (!mdOperation) { |
574 if (!mdOperation) { | 524 goto loser; |
575 goto loser; | 525 } |
576 } | |
577 | 526 |
578 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, | 527 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, |
579 mdSession, fwSession, fwMechanism->mdToken, fwMechanism->fwToken, | 528 mdSession, fwSession, fwMechanis
m->mdToken, fwMechanism->fwToken, |
580 fwMechanism->mdInstance, fwMechanism->fwInstance, | 529 fwMechanism->mdInstance, fwMecha
nism->fwInstance, |
581 NSSCKFWCryptoOperationType_Digest, &error); | 530 NSSCKFWCryptoOperationType_Diges
t, &error); |
582 if (fwOperation) { | 531 if (fwOperation) { |
583 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, | 532 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, |
584 NSSCKFWCryptoOperationState_Digest); | 533 NSSCKFWCryptoOperationState_Dig
est); |
585 } | 534 } |
586 | 535 |
587 loser: | 536 loser: |
588 return error; | 537 return error; |
589 } | 538 } |
590 | 539 |
591 /* | 540 /* |
592 * nssCKFWMechanism_SignInit | 541 * nssCKFWMechanism_SignInit |
593 * Start an encryption session. | 542 * Start an encryption session. |
594 */ | 543 */ |
595 NSS_EXTERN CK_RV | 544 NSS_EXTERN CK_RV |
596 nssCKFWMechanism_SignInit | 545 nssCKFWMechanism_SignInit( |
597 ( | 546 NSSCKFWMechanism *fwMechanism, |
598 NSSCKFWMechanism *fwMechanism, | 547 CK_MECHANISM *pMechanism, |
599 CK_MECHANISM *pMechanism, | 548 NSSCKFWSession *fwSession, |
600 NSSCKFWSession *fwSession, | 549 NSSCKFWObject *fwObject) |
601 NSSCKFWObject *fwObject | |
602 ) | |
603 { | 550 { |
604 NSSCKFWCryptoOperation *fwOperation; | 551 NSSCKFWCryptoOperation *fwOperation; |
605 NSSCKMDCryptoOperation *mdOperation; | 552 NSSCKMDCryptoOperation *mdOperation; |
606 NSSCKMDSession *mdSession; | 553 NSSCKMDSession *mdSession; |
607 NSSCKMDObject *mdObject; | 554 NSSCKMDObject *mdObject; |
608 CK_RV error = CKR_OK; | 555 CK_RV error = CKR_OK; |
609 | 556 |
| 557 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, |
| 558 NSSCKFWCryptoOperatio
nState_SignVerify); |
| 559 if (fwOperation) { |
| 560 return CKR_OPERATION_ACTIVE; |
| 561 } |
610 | 562 |
611 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, | 563 if (!fwMechanism->mdMechanism->SignInit) { |
612 NSSCKFWCryptoOperationState_SignVerify); | 564 return CKR_FUNCTION_FAILED; |
613 if (fwOperation) { | 565 } |
614 return CKR_OPERATION_ACTIVE; | |
615 } | |
616 | 566 |
617 if (!fwMechanism->mdMechanism->SignInit) { | 567 mdSession = nssCKFWSession_GetMDSession(fwSession); |
618 return CKR_FUNCTION_FAILED; | 568 mdObject = nssCKFWObject_GetMDObject(fwObject); |
619 } | 569 mdOperation = fwMechanism->mdMechanism->SignInit( |
620 | |
621 mdSession = nssCKFWSession_GetMDSession(fwSession); | |
622 mdObject = nssCKFWObject_GetMDObject(fwObject); | |
623 mdOperation = fwMechanism->mdMechanism->SignInit( | |
624 fwMechanism->mdMechanism, | 570 fwMechanism->mdMechanism, |
625 fwMechanism, | 571 fwMechanism, |
626 pMechanism, | 572 pMechanism, |
627 mdSession, | 573 mdSession, |
628 fwSession, | 574 fwSession, |
629 fwMechanism->mdToken, | 575 fwMechanism->mdToken, |
630 fwMechanism->fwToken, | 576 fwMechanism->fwToken, |
631 fwMechanism->mdInstance, | 577 fwMechanism->mdInstance, |
632 fwMechanism->fwInstance, | 578 fwMechanism->fwInstance, |
633 mdObject, | 579 mdObject, |
634 fwObject, | 580 fwObject, |
635 &error | 581 &error); |
636 ); | 582 if (!mdOperation) { |
637 if (!mdOperation) { | 583 goto loser; |
638 goto loser; | 584 } |
639 } | |
640 | 585 |
641 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, | 586 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, |
642 mdSession, fwSession, fwMechanism->mdToken, fwMechanism->fwToken, | 587 mdSession, fwSession, fwMechanis
m->mdToken, fwMechanism->fwToken, |
643 fwMechanism->mdInstance, fwMechanism->fwInstance, | 588 fwMechanism->mdInstance, fwMecha
nism->fwInstance, |
644 NSSCKFWCryptoOperationType_Sign, &error); | 589 NSSCKFWCryptoOperationType_Sign,
&error); |
645 if (fwOperation) { | 590 if (fwOperation) { |
646 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, | 591 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, |
647 NSSCKFWCryptoOperationState_SignVerify); | 592 NSSCKFWCryptoOperationState_Sig
nVerify); |
648 } | 593 } |
649 | 594 |
650 loser: | 595 loser: |
651 return error; | 596 return error; |
652 } | 597 } |
653 | 598 |
654 /* | 599 /* |
655 * nssCKFWMechanism_VerifyInit | 600 * nssCKFWMechanism_VerifyInit |
656 * Start an encryption session. | 601 * Start an encryption session. |
657 */ | 602 */ |
658 NSS_EXTERN CK_RV | 603 NSS_EXTERN CK_RV |
659 nssCKFWMechanism_VerifyInit | 604 nssCKFWMechanism_VerifyInit( |
660 ( | 605 NSSCKFWMechanism *fwMechanism, |
661 NSSCKFWMechanism *fwMechanism, | 606 CK_MECHANISM *pMechanism, |
662 CK_MECHANISM *pMechanism, | 607 NSSCKFWSession *fwSession, |
663 NSSCKFWSession *fwSession, | 608 NSSCKFWObject *fwObject) |
664 NSSCKFWObject *fwObject | |
665 ) | |
666 { | 609 { |
667 NSSCKFWCryptoOperation *fwOperation; | 610 NSSCKFWCryptoOperation *fwOperation; |
668 NSSCKMDCryptoOperation *mdOperation; | 611 NSSCKMDCryptoOperation *mdOperation; |
669 NSSCKMDSession *mdSession; | 612 NSSCKMDSession *mdSession; |
670 NSSCKMDObject *mdObject; | 613 NSSCKMDObject *mdObject; |
671 CK_RV error = CKR_OK; | 614 CK_RV error = CKR_OK; |
672 | 615 |
| 616 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, |
| 617 NSSCKFWCryptoOperatio
nState_SignVerify); |
| 618 if (fwOperation) { |
| 619 return CKR_OPERATION_ACTIVE; |
| 620 } |
673 | 621 |
674 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, | 622 if (!fwMechanism->mdMechanism->VerifyInit) { |
675 NSSCKFWCryptoOperationState_SignVerify); | 623 return CKR_FUNCTION_FAILED; |
676 if (fwOperation) { | 624 } |
677 return CKR_OPERATION_ACTIVE; | |
678 } | |
679 | 625 |
680 if (!fwMechanism->mdMechanism->VerifyInit) { | 626 mdSession = nssCKFWSession_GetMDSession(fwSession); |
681 return CKR_FUNCTION_FAILED; | 627 mdObject = nssCKFWObject_GetMDObject(fwObject); |
682 } | 628 mdOperation = fwMechanism->mdMechanism->VerifyInit( |
683 | |
684 mdSession = nssCKFWSession_GetMDSession(fwSession); | |
685 mdObject = nssCKFWObject_GetMDObject(fwObject); | |
686 mdOperation = fwMechanism->mdMechanism->VerifyInit( | |
687 fwMechanism->mdMechanism, | 629 fwMechanism->mdMechanism, |
688 fwMechanism, | 630 fwMechanism, |
689 pMechanism, | 631 pMechanism, |
690 mdSession, | 632 mdSession, |
691 fwSession, | 633 fwSession, |
692 fwMechanism->mdToken, | 634 fwMechanism->mdToken, |
693 fwMechanism->fwToken, | 635 fwMechanism->fwToken, |
694 fwMechanism->mdInstance, | 636 fwMechanism->mdInstance, |
695 fwMechanism->fwInstance, | 637 fwMechanism->fwInstance, |
696 mdObject, | 638 mdObject, |
697 fwObject, | 639 fwObject, |
698 &error | 640 &error); |
699 ); | 641 if (!mdOperation) { |
700 if (!mdOperation) { | 642 goto loser; |
701 goto loser; | 643 } |
702 } | |
703 | 644 |
704 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, | 645 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, |
705 mdSession, fwSession, fwMechanism->mdToken, fwMechanism->fwToken, | 646 mdSession, fwSession, fwMechanis
m->mdToken, fwMechanism->fwToken, |
706 fwMechanism->mdInstance, fwMechanism->fwInstance, | 647 fwMechanism->mdInstance, fwMecha
nism->fwInstance, |
707 NSSCKFWCryptoOperationType_Verify, &error); | 648 NSSCKFWCryptoOperationType_Verif
y, &error); |
708 if (fwOperation) { | 649 if (fwOperation) { |
709 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, | 650 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, |
710 NSSCKFWCryptoOperationState_SignVerify); | 651 NSSCKFWCryptoOperationState_Sig
nVerify); |
711 } | 652 } |
712 | 653 |
713 loser: | 654 loser: |
714 return error; | 655 return error; |
715 } | 656 } |
716 | 657 |
717 /* | 658 /* |
718 * nssCKFWMechanism_SignRecoverInit | 659 * nssCKFWMechanism_SignRecoverInit |
719 * Start an encryption session. | 660 * Start an encryption session. |
720 */ | 661 */ |
721 NSS_EXTERN CK_RV | 662 NSS_EXTERN CK_RV |
722 nssCKFWMechanism_SignRecoverInit | 663 nssCKFWMechanism_SignRecoverInit( |
723 ( | 664 NSSCKFWMechanism *fwMechanism, |
724 NSSCKFWMechanism *fwMechanism, | 665 CK_MECHANISM *pMechanism, |
725 CK_MECHANISM *pMechanism, | 666 NSSCKFWSession *fwSession, |
726 NSSCKFWSession *fwSession, | 667 NSSCKFWObject *fwObject) |
727 NSSCKFWObject *fwObject | |
728 ) | |
729 { | 668 { |
730 NSSCKFWCryptoOperation *fwOperation; | 669 NSSCKFWCryptoOperation *fwOperation; |
731 NSSCKMDCryptoOperation *mdOperation; | 670 NSSCKMDCryptoOperation *mdOperation; |
732 NSSCKMDSession *mdSession; | 671 NSSCKMDSession *mdSession; |
733 NSSCKMDObject *mdObject; | 672 NSSCKMDObject *mdObject; |
734 CK_RV error = CKR_OK; | 673 CK_RV error = CKR_OK; |
735 | 674 |
| 675 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, |
| 676 NSSCKFWCryptoOperatio
nState_SignVerify); |
| 677 if (fwOperation) { |
| 678 return CKR_OPERATION_ACTIVE; |
| 679 } |
736 | 680 |
737 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, | 681 if (!fwMechanism->mdMechanism->SignRecoverInit) { |
738 NSSCKFWCryptoOperationState_SignVerify); | 682 return CKR_FUNCTION_FAILED; |
739 if (fwOperation) { | 683 } |
740 return CKR_OPERATION_ACTIVE; | |
741 } | |
742 | 684 |
743 if (!fwMechanism->mdMechanism->SignRecoverInit) { | 685 mdSession = nssCKFWSession_GetMDSession(fwSession); |
744 return CKR_FUNCTION_FAILED; | 686 mdObject = nssCKFWObject_GetMDObject(fwObject); |
745 } | 687 mdOperation = fwMechanism->mdMechanism->SignRecoverInit( |
746 | |
747 mdSession = nssCKFWSession_GetMDSession(fwSession); | |
748 mdObject = nssCKFWObject_GetMDObject(fwObject); | |
749 mdOperation = fwMechanism->mdMechanism->SignRecoverInit( | |
750 fwMechanism->mdMechanism, | 688 fwMechanism->mdMechanism, |
751 fwMechanism, | 689 fwMechanism, |
752 pMechanism, | 690 pMechanism, |
753 mdSession, | 691 mdSession, |
754 fwSession, | 692 fwSession, |
755 fwMechanism->mdToken, | 693 fwMechanism->mdToken, |
756 fwMechanism->fwToken, | 694 fwMechanism->fwToken, |
757 fwMechanism->mdInstance, | 695 fwMechanism->mdInstance, |
758 fwMechanism->fwInstance, | 696 fwMechanism->fwInstance, |
759 mdObject, | 697 mdObject, |
760 fwObject, | 698 fwObject, |
761 &error | 699 &error); |
762 ); | 700 if (!mdOperation) { |
763 if (!mdOperation) { | 701 goto loser; |
764 goto loser; | 702 } |
765 } | |
766 | 703 |
767 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, | 704 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, |
768 mdSession, fwSession, fwMechanism->mdToken, fwMechanism->fwToken, | 705 mdSession, fwSession, fwMechanis
m->mdToken, fwMechanism->fwToken, |
769 fwMechanism->mdInstance, fwMechanism->fwInstance, | 706 fwMechanism->mdInstance, fwMecha
nism->fwInstance, |
770 NSSCKFWCryptoOperationType_SignRecover, &error); | 707 NSSCKFWCryptoOperationType_SignR
ecover, &error); |
771 if (fwOperation) { | 708 if (fwOperation) { |
772 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, | 709 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, |
773 NSSCKFWCryptoOperationState_SignVerify); | 710 NSSCKFWCryptoOperationState_Sig
nVerify); |
774 } | 711 } |
775 | 712 |
776 loser: | 713 loser: |
777 return error; | 714 return error; |
778 } | 715 } |
779 | 716 |
780 /* | 717 /* |
781 * nssCKFWMechanism_VerifyRecoverInit | 718 * nssCKFWMechanism_VerifyRecoverInit |
782 * Start an encryption session. | 719 * Start an encryption session. |
783 */ | 720 */ |
784 NSS_EXTERN CK_RV | 721 NSS_EXTERN CK_RV |
785 nssCKFWMechanism_VerifyRecoverInit | 722 nssCKFWMechanism_VerifyRecoverInit( |
786 ( | 723 NSSCKFWMechanism *fwMechanism, |
787 NSSCKFWMechanism *fwMechanism, | 724 CK_MECHANISM *pMechanism, |
788 CK_MECHANISM *pMechanism, | 725 NSSCKFWSession *fwSession, |
789 NSSCKFWSession *fwSession, | 726 NSSCKFWObject *fwObject) |
790 NSSCKFWObject *fwObject | |
791 ) | |
792 { | 727 { |
793 NSSCKFWCryptoOperation *fwOperation; | 728 NSSCKFWCryptoOperation *fwOperation; |
794 NSSCKMDCryptoOperation *mdOperation; | 729 NSSCKMDCryptoOperation *mdOperation; |
795 NSSCKMDSession *mdSession; | 730 NSSCKMDSession *mdSession; |
796 NSSCKMDObject *mdObject; | 731 NSSCKMDObject *mdObject; |
797 CK_RV error = CKR_OK; | 732 CK_RV error = CKR_OK; |
798 | 733 |
| 734 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, |
| 735 NSSCKFWCryptoOperatio
nState_SignVerify); |
| 736 if (fwOperation) { |
| 737 return CKR_OPERATION_ACTIVE; |
| 738 } |
799 | 739 |
800 fwOperation = nssCKFWSession_GetCurrentCryptoOperation(fwSession, | 740 if (!fwMechanism->mdMechanism->VerifyRecoverInit) { |
801 NSSCKFWCryptoOperationState_SignVerify); | 741 return CKR_FUNCTION_FAILED; |
802 if (fwOperation) { | 742 } |
803 return CKR_OPERATION_ACTIVE; | |
804 } | |
805 | 743 |
806 if (!fwMechanism->mdMechanism->VerifyRecoverInit) { | 744 mdSession = nssCKFWSession_GetMDSession(fwSession); |
807 return CKR_FUNCTION_FAILED; | 745 mdObject = nssCKFWObject_GetMDObject(fwObject); |
808 } | 746 mdOperation = fwMechanism->mdMechanism->VerifyRecoverInit( |
809 | |
810 mdSession = nssCKFWSession_GetMDSession(fwSession); | |
811 mdObject = nssCKFWObject_GetMDObject(fwObject); | |
812 mdOperation = fwMechanism->mdMechanism->VerifyRecoverInit( | |
813 fwMechanism->mdMechanism, | 747 fwMechanism->mdMechanism, |
814 fwMechanism, | 748 fwMechanism, |
815 pMechanism, | 749 pMechanism, |
816 mdSession, | 750 mdSession, |
817 fwSession, | 751 fwSession, |
818 fwMechanism->mdToken, | 752 fwMechanism->mdToken, |
819 fwMechanism->fwToken, | 753 fwMechanism->fwToken, |
820 fwMechanism->mdInstance, | 754 fwMechanism->mdInstance, |
821 fwMechanism->fwInstance, | 755 fwMechanism->fwInstance, |
822 mdObject, | 756 mdObject, |
823 fwObject, | 757 fwObject, |
824 &error | 758 &error); |
825 ); | 759 if (!mdOperation) { |
826 if (!mdOperation) { | 760 goto loser; |
827 goto loser; | 761 } |
828 } | |
829 | 762 |
830 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, | 763 fwOperation = nssCKFWCryptoOperation_Create(mdOperation, |
831 mdSession, fwSession, fwMechanism->mdToken, fwMechanism->fwToken, | 764 mdSession, fwSession, fwMechanis
m->mdToken, fwMechanism->fwToken, |
832 fwMechanism->mdInstance, fwMechanism->fwInstance, | 765 fwMechanism->mdInstance, fwMecha
nism->fwInstance, |
833 NSSCKFWCryptoOperationType_VerifyRecover, &error); | 766 NSSCKFWCryptoOperationType_Verif
yRecover, &error); |
834 if (fwOperation) { | 767 if (fwOperation) { |
835 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, | 768 nssCKFWSession_SetCurrentCryptoOperation(fwSession, fwOperation, |
836 NSSCKFWCryptoOperationState_SignVerify); | 769 NSSCKFWCryptoOperationState_Sig
nVerify); |
837 } | 770 } |
838 | 771 |
839 loser: | 772 loser: |
840 return error; | 773 return error; |
841 } | 774 } |
842 | 775 |
843 /* | 776 /* |
844 * nssCKFWMechanism_GenerateKey | 777 * nssCKFWMechanism_GenerateKey |
845 */ | 778 */ |
846 NSS_EXTERN NSSCKFWObject * | 779 NSS_EXTERN NSSCKFWObject * |
847 nssCKFWMechanism_GenerateKey | 780 nssCKFWMechanism_GenerateKey( |
848 ( | 781 NSSCKFWMechanism *fwMechanism, |
849 NSSCKFWMechanism *fwMechanism, | 782 CK_MECHANISM_PTR pMechanism, |
850 CK_MECHANISM_PTR pMechanism, | 783 NSSCKFWSession *fwSession, |
851 NSSCKFWSession *fwSession, | 784 CK_ATTRIBUTE_PTR pTemplate, |
852 CK_ATTRIBUTE_PTR pTemplate, | 785 CK_ULONG ulAttributeCount, |
853 CK_ULONG ulAttributeCount, | 786 CK_RV *pError) |
854 CK_RV *pError | |
855 ) | |
856 { | 787 { |
857 NSSCKMDSession *mdSession; | 788 NSSCKMDSession *mdSession; |
858 NSSCKMDObject *mdObject; | 789 NSSCKMDObject *mdObject; |
859 NSSCKFWObject *fwObject = NULL; | 790 NSSCKFWObject *fwObject = NULL; |
860 NSSArena *arena; | 791 NSSArena *arena; |
861 | 792 |
862 if (!fwMechanism->mdMechanism->GenerateKey) { | 793 if (!fwMechanism->mdMechanism->GenerateKey) { |
863 *pError = CKR_FUNCTION_FAILED; | 794 *pError = CKR_FUNCTION_FAILED; |
864 return (NSSCKFWObject *)NULL; | 795 return (NSSCKFWObject *)NULL; |
865 } | 796 } |
866 | 797 |
867 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, pError); | 798 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, pError); |
868 if (!arena) { | 799 if (!arena) { |
869 if (CKR_OK == *pError) { | 800 if (CKR_OK == *pError) { |
870 *pError = CKR_GENERAL_ERROR; | 801 *pError = CKR_GENERAL_ERROR; |
| 802 } |
| 803 return (NSSCKFWObject *)NULL; |
871 } | 804 } |
872 return (NSSCKFWObject *)NULL; | |
873 } | |
874 | 805 |
875 mdSession = nssCKFWSession_GetMDSession(fwSession); | 806 mdSession = nssCKFWSession_GetMDSession(fwSession); |
876 mdObject = fwMechanism->mdMechanism->GenerateKey( | 807 mdObject = fwMechanism->mdMechanism->GenerateKey( |
877 fwMechanism->mdMechanism, | 808 fwMechanism->mdMechanism, |
878 fwMechanism, | 809 fwMechanism, |
879 pMechanism, | 810 pMechanism, |
880 mdSession, | 811 mdSession, |
881 fwSession, | 812 fwSession, |
882 fwMechanism->mdToken, | 813 fwMechanism->mdToken, |
883 fwMechanism->fwToken, | 814 fwMechanism->fwToken, |
884 fwMechanism->mdInstance, | 815 fwMechanism->mdInstance, |
885 fwMechanism->fwInstance, | 816 fwMechanism->fwInstance, |
886 pTemplate, | 817 pTemplate, |
887 ulAttributeCount, | 818 ulAttributeCount, |
888 pError); | 819 pError); |
889 | 820 |
890 if (!mdObject) { | 821 if (!mdObject) { |
891 return (NSSCKFWObject *)NULL; | 822 return (NSSCKFWObject *)NULL; |
892 } | 823 } |
893 | 824 |
894 fwObject = nssCKFWObject_Create(arena, mdObject, | 825 fwObject = nssCKFWObject_Create(arena, mdObject, |
895 fwSession, fwMechanism->fwToken, fwMechanism->fwInstance, pError); | 826 fwSession, fwMechanism->fwToken, fwMechanism
->fwInstance, pError); |
896 | 827 |
897 return fwObject; | 828 return fwObject; |
898 } | 829 } |
899 | 830 |
900 /* | 831 /* |
901 * nssCKFWMechanism_GenerateKeyPair | 832 * nssCKFWMechanism_GenerateKeyPair |
902 */ | 833 */ |
903 NSS_EXTERN CK_RV | 834 NSS_EXTERN CK_RV |
904 nssCKFWMechanism_GenerateKeyPair | 835 nssCKFWMechanism_GenerateKeyPair( |
905 ( | 836 NSSCKFWMechanism *fwMechanism, |
906 NSSCKFWMechanism *fwMechanism, | 837 CK_MECHANISM_PTR pMechanism, |
907 CK_MECHANISM_PTR pMechanism, | 838 NSSCKFWSession *fwSession, |
908 NSSCKFWSession *fwSession, | 839 CK_ATTRIBUTE_PTR pPublicKeyTemplate, |
909 CK_ATTRIBUTE_PTR pPublicKeyTemplate, | 840 CK_ULONG ulPublicKeyAttributeCount, |
910 CK_ULONG ulPublicKeyAttributeCount, | 841 CK_ATTRIBUTE_PTR pPrivateKeyTemplate, |
911 CK_ATTRIBUTE_PTR pPrivateKeyTemplate, | 842 CK_ULONG ulPrivateKeyAttributeCount, |
912 CK_ULONG ulPrivateKeyAttributeCount, | 843 NSSCKFWObject **fwPublicKeyObject, |
913 NSSCKFWObject **fwPublicKeyObject, | 844 NSSCKFWObject **fwPrivateKeyObject) |
914 NSSCKFWObject **fwPrivateKeyObject | |
915 ) | |
916 { | 845 { |
917 NSSCKMDSession *mdSession; | 846 NSSCKMDSession *mdSession; |
918 NSSCKMDObject *mdPublicKeyObject; | 847 NSSCKMDObject *mdPublicKeyObject; |
919 NSSCKMDObject *mdPrivateKeyObject; | 848 NSSCKMDObject *mdPrivateKeyObject; |
920 NSSArena *arena; | 849 NSSArena *arena; |
921 CK_RV error = CKR_OK; | 850 CK_RV error = CKR_OK; |
922 | 851 |
923 if (!fwMechanism->mdMechanism->GenerateKeyPair) { | 852 if (!fwMechanism->mdMechanism->GenerateKeyPair) { |
924 return CKR_FUNCTION_FAILED; | 853 return CKR_FUNCTION_FAILED; |
925 } | 854 } |
926 | 855 |
927 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, &error); | 856 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, &error); |
928 if (!arena) { | 857 if (!arena) { |
929 if (CKR_OK == error) { | 858 if (CKR_OK == error) { |
930 error = CKR_GENERAL_ERROR; | 859 error = CKR_GENERAL_ERROR; |
| 860 } |
| 861 return error; |
931 } | 862 } |
932 return error; | |
933 } | |
934 | 863 |
935 mdSession = nssCKFWSession_GetMDSession(fwSession); | 864 mdSession = nssCKFWSession_GetMDSession(fwSession); |
936 error = fwMechanism->mdMechanism->GenerateKeyPair( | 865 error = fwMechanism->mdMechanism->GenerateKeyPair( |
937 fwMechanism->mdMechanism, | 866 fwMechanism->mdMechanism, |
938 fwMechanism, | 867 fwMechanism, |
939 pMechanism, | 868 pMechanism, |
940 mdSession, | 869 mdSession, |
941 fwSession, | 870 fwSession, |
942 fwMechanism->mdToken, | 871 fwMechanism->mdToken, |
943 fwMechanism->fwToken, | 872 fwMechanism->fwToken, |
944 fwMechanism->mdInstance, | 873 fwMechanism->mdInstance, |
945 fwMechanism->fwInstance, | 874 fwMechanism->fwInstance, |
946 pPublicKeyTemplate, | 875 pPublicKeyTemplate, |
947 ulPublicKeyAttributeCount, | 876 ulPublicKeyAttributeCount, |
948 pPrivateKeyTemplate, | 877 pPrivateKeyTemplate, |
949 ulPrivateKeyAttributeCount, | 878 ulPrivateKeyAttributeCount, |
950 &mdPublicKeyObject, | 879 &mdPublicKeyObject, |
951 &mdPrivateKeyObject); | 880 &mdPrivateKeyObject); |
952 | 881 |
953 if (CKR_OK != error) { | 882 if (CKR_OK != error) { |
| 883 return error; |
| 884 } |
| 885 |
| 886 *fwPublicKeyObject = nssCKFWObject_Create(arena, mdPublicKeyObject, |
| 887 fwSession, fwMechanism->fwToken, f
wMechanism->fwInstance, &error); |
| 888 if (!*fwPublicKeyObject) { |
| 889 return error; |
| 890 } |
| 891 *fwPrivateKeyObject = nssCKFWObject_Create(arena, mdPrivateKeyObject, |
| 892 fwSession, fwMechanism->fwToken,
fwMechanism->fwInstance, &error); |
| 893 |
954 return error; | 894 return error; |
955 } | |
956 | |
957 *fwPublicKeyObject = nssCKFWObject_Create(arena, mdPublicKeyObject, | |
958 fwSession, fwMechanism->fwToken, fwMechanism->fwInstance, &error); | |
959 if (!*fwPublicKeyObject) { | |
960 return error; | |
961 } | |
962 *fwPrivateKeyObject = nssCKFWObject_Create(arena, mdPrivateKeyObject, | |
963 fwSession, fwMechanism->fwToken, fwMechanism->fwInstance, &error); | |
964 | |
965 return error; | |
966 } | 895 } |
967 | 896 |
968 /* | 897 /* |
969 * nssCKFWMechanism_GetWrapKeyLength | 898 * nssCKFWMechanism_GetWrapKeyLength |
970 */ | 899 */ |
971 NSS_EXTERN CK_ULONG | 900 NSS_EXTERN CK_ULONG |
972 nssCKFWMechanism_GetWrapKeyLength | 901 nssCKFWMechanism_GetWrapKeyLength( |
973 ( | 902 NSSCKFWMechanism *fwMechanism, |
974 NSSCKFWMechanism *fwMechanism, | 903 CK_MECHANISM_PTR pMechanism, |
975 CK_MECHANISM_PTR pMechanism, | 904 NSSCKFWSession *fwSession, |
976 NSSCKFWSession *fwSession, | 905 NSSCKFWObject *fwWrappingKeyObject, |
977 NSSCKFWObject *fwWrappingKeyObject, | 906 NSSCKFWObject *fwKeyObject, |
978 NSSCKFWObject *fwKeyObject, | 907 CK_RV *pError) |
979 CK_RV *pError | |
980 ) | |
981 { | 908 { |
982 NSSCKMDSession *mdSession; | 909 NSSCKMDSession *mdSession; |
983 NSSCKMDObject *mdWrappingKeyObject; | 910 NSSCKMDObject *mdWrappingKeyObject; |
984 NSSCKMDObject *mdKeyObject; | 911 NSSCKMDObject *mdKeyObject; |
985 | 912 |
986 if (!fwMechanism->mdMechanism->WrapKey) { | 913 if (!fwMechanism->mdMechanism->WrapKey) { |
987 *pError = CKR_FUNCTION_FAILED; | 914 *pError = CKR_FUNCTION_FAILED; |
988 return (CK_ULONG) 0; | 915 return (CK_ULONG)0; |
989 } | 916 } |
990 | 917 |
991 mdSession = nssCKFWSession_GetMDSession(fwSession); | 918 mdSession = nssCKFWSession_GetMDSession(fwSession); |
992 mdWrappingKeyObject = nssCKFWObject_GetMDObject(fwWrappingKeyObject); | 919 mdWrappingKeyObject = nssCKFWObject_GetMDObject(fwWrappingKeyObject); |
993 mdKeyObject = nssCKFWObject_GetMDObject(fwKeyObject); | 920 mdKeyObject = nssCKFWObject_GetMDObject(fwKeyObject); |
994 return fwMechanism->mdMechanism->GetWrapKeyLength( | 921 return fwMechanism->mdMechanism->GetWrapKeyLength( |
995 fwMechanism->mdMechanism, | 922 fwMechanism->mdMechanism, |
996 fwMechanism, | 923 fwMechanism, |
997 pMechanism, | 924 pMechanism, |
998 mdSession, | 925 mdSession, |
999 fwSession, | 926 fwSession, |
1000 fwMechanism->mdToken, | 927 fwMechanism->mdToken, |
1001 fwMechanism->fwToken, | 928 fwMechanism->fwToken, |
1002 fwMechanism->mdInstance, | 929 fwMechanism->mdInstance, |
1003 fwMechanism->fwInstance, | 930 fwMechanism->fwInstance, |
1004 mdWrappingKeyObject, | 931 mdWrappingKeyObject, |
1005 fwWrappingKeyObject, | 932 fwWrappingKeyObject, |
1006 mdKeyObject, | 933 mdKeyObject, |
1007 fwKeyObject, | 934 fwKeyObject, |
1008 pError); | 935 pError); |
1009 } | 936 } |
1010 | 937 |
1011 /* | 938 /* |
1012 * nssCKFWMechanism_WrapKey | 939 * nssCKFWMechanism_WrapKey |
1013 */ | 940 */ |
1014 NSS_EXTERN CK_RV | 941 NSS_EXTERN CK_RV |
1015 nssCKFWMechanism_WrapKey | 942 nssCKFWMechanism_WrapKey( |
1016 ( | 943 NSSCKFWMechanism *fwMechanism, |
1017 NSSCKFWMechanism *fwMechanism, | 944 CK_MECHANISM_PTR pMechanism, |
1018 CK_MECHANISM_PTR pMechanism, | 945 NSSCKFWSession *fwSession, |
1019 NSSCKFWSession *fwSession, | 946 NSSCKFWObject *fwWrappingKeyObject, |
1020 NSSCKFWObject *fwWrappingKeyObject, | 947 NSSCKFWObject *fwKeyObject, |
1021 NSSCKFWObject *fwKeyObject, | 948 NSSItem *wrappedKey) |
1022 NSSItem *wrappedKey | |
1023 ) | |
1024 { | 949 { |
1025 NSSCKMDSession *mdSession; | 950 NSSCKMDSession *mdSession; |
1026 NSSCKMDObject *mdWrappingKeyObject; | 951 NSSCKMDObject *mdWrappingKeyObject; |
1027 NSSCKMDObject *mdKeyObject; | 952 NSSCKMDObject *mdKeyObject; |
1028 | 953 |
1029 if (!fwMechanism->mdMechanism->WrapKey) { | 954 if (!fwMechanism->mdMechanism->WrapKey) { |
1030 return CKR_FUNCTION_FAILED; | 955 return CKR_FUNCTION_FAILED; |
1031 } | 956 } |
1032 | 957 |
1033 mdSession = nssCKFWSession_GetMDSession(fwSession); | 958 mdSession = nssCKFWSession_GetMDSession(fwSession); |
1034 mdWrappingKeyObject = nssCKFWObject_GetMDObject(fwWrappingKeyObject); | 959 mdWrappingKeyObject = nssCKFWObject_GetMDObject(fwWrappingKeyObject); |
1035 mdKeyObject = nssCKFWObject_GetMDObject(fwKeyObject); | 960 mdKeyObject = nssCKFWObject_GetMDObject(fwKeyObject); |
1036 return fwMechanism->mdMechanism->WrapKey( | 961 return fwMechanism->mdMechanism->WrapKey( |
1037 fwMechanism->mdMechanism, | 962 fwMechanism->mdMechanism, |
1038 fwMechanism, | 963 fwMechanism, |
1039 pMechanism, | 964 pMechanism, |
1040 mdSession, | 965 mdSession, |
1041 fwSession, | 966 fwSession, |
1042 fwMechanism->mdToken, | 967 fwMechanism->mdToken, |
1043 fwMechanism->fwToken, | 968 fwMechanism->fwToken, |
1044 fwMechanism->mdInstance, | 969 fwMechanism->mdInstance, |
1045 fwMechanism->fwInstance, | 970 fwMechanism->fwInstance, |
1046 mdWrappingKeyObject, | 971 mdWrappingKeyObject, |
1047 fwWrappingKeyObject, | 972 fwWrappingKeyObject, |
1048 mdKeyObject, | 973 mdKeyObject, |
1049 fwKeyObject, | 974 fwKeyObject, |
1050 wrappedKey); | 975 wrappedKey); |
1051 } | 976 } |
1052 | 977 |
1053 /* | 978 /* |
1054 * nssCKFWMechanism_UnwrapKey | 979 * nssCKFWMechanism_UnwrapKey |
1055 */ | 980 */ |
1056 NSS_EXTERN NSSCKFWObject * | 981 NSS_EXTERN NSSCKFWObject * |
1057 nssCKFWMechanism_UnwrapKey | 982 nssCKFWMechanism_UnwrapKey( |
1058 ( | 983 NSSCKFWMechanism *fwMechanism, |
1059 NSSCKFWMechanism *fwMechanism, | 984 CK_MECHANISM_PTR pMechanism, |
1060 CK_MECHANISM_PTR pMechanism, | 985 NSSCKFWSession *fwSession, |
1061 NSSCKFWSession *fwSession, | 986 NSSCKFWObject *fwWrappingKeyObject, |
1062 NSSCKFWObject *fwWrappingKeyObject, | 987 NSSItem *wrappedKey, |
1063 NSSItem *wrappedKey, | 988 CK_ATTRIBUTE_PTR pTemplate, |
1064 CK_ATTRIBUTE_PTR pTemplate, | 989 CK_ULONG ulAttributeCount, |
1065 CK_ULONG ulAttributeCount, | 990 CK_RV *pError) |
1066 CK_RV *pError | |
1067 ) | |
1068 { | 991 { |
1069 NSSCKMDSession *mdSession; | 992 NSSCKMDSession *mdSession; |
1070 NSSCKMDObject *mdObject; | 993 NSSCKMDObject *mdObject; |
1071 NSSCKMDObject *mdWrappingKeyObject; | 994 NSSCKMDObject *mdWrappingKeyObject; |
1072 NSSCKFWObject *fwObject = NULL; | 995 NSSCKFWObject *fwObject = NULL; |
1073 NSSArena *arena; | 996 NSSArena *arena; |
1074 | 997 |
1075 if (!fwMechanism->mdMechanism->UnwrapKey) { | 998 if (!fwMechanism->mdMechanism->UnwrapKey) { |
1076 /* we could simulate UnwrapKey using Decrypt and Create object, but | 999 /* we could simulate UnwrapKey using Decrypt and Create object, but |
1077 * 1) it's not clear that would work well, and 2) the low level token | 1000 * 1) it's not clear that would work well, and 2) the low level token |
1078 * may want to restrict unwrap key for a reason, so just fail it it | 1001 * may want to restrict unwrap key for a reason, so just fail it it |
1079 * can't be done */ | 1002 * can't be done */ |
1080 *pError = CKR_FUNCTION_FAILED; | 1003 *pError = CKR_FUNCTION_FAILED; |
1081 return (NSSCKFWObject *)NULL; | 1004 return (NSSCKFWObject *)NULL; |
1082 } | 1005 } |
1083 | 1006 |
1084 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, pError); | 1007 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, pError); |
1085 if (!arena) { | 1008 if (!arena) { |
1086 if (CKR_OK == *pError) { | 1009 if (CKR_OK == *pError) { |
1087 *pError = CKR_GENERAL_ERROR; | 1010 *pError = CKR_GENERAL_ERROR; |
| 1011 } |
| 1012 return (NSSCKFWObject *)NULL; |
1088 } | 1013 } |
1089 return (NSSCKFWObject *)NULL; | |
1090 } | |
1091 | 1014 |
1092 mdSession = nssCKFWSession_GetMDSession(fwSession); | 1015 mdSession = nssCKFWSession_GetMDSession(fwSession); |
1093 mdWrappingKeyObject = nssCKFWObject_GetMDObject(fwWrappingKeyObject); | 1016 mdWrappingKeyObject = nssCKFWObject_GetMDObject(fwWrappingKeyObject); |
1094 mdObject = fwMechanism->mdMechanism->UnwrapKey( | 1017 mdObject = fwMechanism->mdMechanism->UnwrapKey( |
1095 fwMechanism->mdMechanism, | 1018 fwMechanism->mdMechanism, |
1096 fwMechanism, | 1019 fwMechanism, |
1097 pMechanism, | 1020 pMechanism, |
1098 mdSession, | 1021 mdSession, |
1099 fwSession, | 1022 fwSession, |
1100 fwMechanism->mdToken, | 1023 fwMechanism->mdToken, |
1101 fwMechanism->fwToken, | 1024 fwMechanism->fwToken, |
1102 fwMechanism->mdInstance, | 1025 fwMechanism->mdInstance, |
1103 fwMechanism->fwInstance, | 1026 fwMechanism->fwInstance, |
1104 mdWrappingKeyObject, | 1027 mdWrappingKeyObject, |
1105 fwWrappingKeyObject, | 1028 fwWrappingKeyObject, |
1106 wrappedKey, | 1029 wrappedKey, |
1107 pTemplate, | 1030 pTemplate, |
1108 ulAttributeCount, | 1031 ulAttributeCount, |
1109 pError); | 1032 pError); |
1110 | 1033 |
1111 if (!mdObject) { | 1034 if (!mdObject) { |
1112 return (NSSCKFWObject *)NULL; | 1035 return (NSSCKFWObject *)NULL; |
1113 } | 1036 } |
1114 | 1037 |
1115 fwObject = nssCKFWObject_Create(arena, mdObject, | 1038 fwObject = nssCKFWObject_Create(arena, mdObject, |
1116 fwSession, fwMechanism->fwToken, fwMechanism->fwInstance, pError); | 1039 fwSession, fwMechanism->fwToken, fwMechanism
->fwInstance, pError); |
1117 | 1040 |
1118 return fwObject; | 1041 return fwObject; |
1119 } | 1042 } |
1120 | 1043 |
1121 /* | 1044 /* |
1122 * nssCKFWMechanism_DeriveKey | 1045 * nssCKFWMechanism_DeriveKey |
1123 */ | 1046 */ |
1124 NSS_EXTERN NSSCKFWObject * | 1047 NSS_EXTERN NSSCKFWObject * |
1125 nssCKFWMechanism_DeriveKey | 1048 nssCKFWMechanism_DeriveKey( |
1126 ( | 1049 NSSCKFWMechanism *fwMechanism, |
1127 NSSCKFWMechanism *fwMechanism, | 1050 CK_MECHANISM_PTR pMechanism, |
1128 CK_MECHANISM_PTR pMechanism, | 1051 NSSCKFWSession *fwSession, |
1129 NSSCKFWSession *fwSession, | 1052 NSSCKFWObject *fwBaseKeyObject, |
1130 NSSCKFWObject *fwBaseKeyObject, | 1053 CK_ATTRIBUTE_PTR pTemplate, |
1131 CK_ATTRIBUTE_PTR pTemplate, | 1054 CK_ULONG ulAttributeCount, |
1132 CK_ULONG ulAttributeCount, | 1055 CK_RV *pError) |
1133 CK_RV *pError | |
1134 ) | |
1135 { | 1056 { |
1136 NSSCKMDSession *mdSession; | 1057 NSSCKMDSession *mdSession; |
1137 NSSCKMDObject *mdObject; | 1058 NSSCKMDObject *mdObject; |
1138 NSSCKMDObject *mdBaseKeyObject; | 1059 NSSCKMDObject *mdBaseKeyObject; |
1139 NSSCKFWObject *fwObject = NULL; | 1060 NSSCKFWObject *fwObject = NULL; |
1140 NSSArena *arena; | 1061 NSSArena *arena; |
1141 | 1062 |
1142 if (!fwMechanism->mdMechanism->DeriveKey) { | 1063 if (!fwMechanism->mdMechanism->DeriveKey) { |
1143 *pError = CKR_FUNCTION_FAILED; | 1064 *pError = CKR_FUNCTION_FAILED; |
1144 return (NSSCKFWObject *)NULL; | 1065 return (NSSCKFWObject *)NULL; |
1145 } | 1066 } |
1146 | 1067 |
1147 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, pError); | 1068 arena = nssCKFWToken_GetArena(fwMechanism->fwToken, pError); |
1148 if (!arena) { | 1069 if (!arena) { |
1149 if (CKR_OK == *pError) { | 1070 if (CKR_OK == *pError) { |
1150 *pError = CKR_GENERAL_ERROR; | 1071 *pError = CKR_GENERAL_ERROR; |
| 1072 } |
| 1073 return (NSSCKFWObject *)NULL; |
1151 } | 1074 } |
1152 return (NSSCKFWObject *)NULL; | |
1153 } | |
1154 | 1075 |
1155 mdSession = nssCKFWSession_GetMDSession(fwSession); | 1076 mdSession = nssCKFWSession_GetMDSession(fwSession); |
1156 mdBaseKeyObject = nssCKFWObject_GetMDObject(fwBaseKeyObject); | 1077 mdBaseKeyObject = nssCKFWObject_GetMDObject(fwBaseKeyObject); |
1157 mdObject = fwMechanism->mdMechanism->DeriveKey( | 1078 mdObject = fwMechanism->mdMechanism->DeriveKey( |
1158 fwMechanism->mdMechanism, | 1079 fwMechanism->mdMechanism, |
1159 fwMechanism, | 1080 fwMechanism, |
1160 pMechanism, | 1081 pMechanism, |
1161 mdSession, | 1082 mdSession, |
1162 fwSession, | 1083 fwSession, |
1163 fwMechanism->mdToken, | 1084 fwMechanism->mdToken, |
1164 fwMechanism->fwToken, | 1085 fwMechanism->fwToken, |
1165 fwMechanism->mdInstance, | 1086 fwMechanism->mdInstance, |
1166 fwMechanism->fwInstance, | 1087 fwMechanism->fwInstance, |
1167 mdBaseKeyObject, | 1088 mdBaseKeyObject, |
1168 fwBaseKeyObject, | 1089 fwBaseKeyObject, |
1169 pTemplate, | 1090 pTemplate, |
1170 ulAttributeCount, | 1091 ulAttributeCount, |
1171 pError); | 1092 pError); |
1172 | 1093 |
1173 if (!mdObject) { | 1094 if (!mdObject) { |
1174 return (NSSCKFWObject *)NULL; | 1095 return (NSSCKFWObject *)NULL; |
1175 } | 1096 } |
1176 | 1097 |
1177 fwObject = nssCKFWObject_Create(arena, mdObject, | 1098 fwObject = nssCKFWObject_Create(arena, mdObject, |
1178 fwSession, fwMechanism->fwToken, fwMechanism->fwInstance, pError); | 1099 fwSession, fwMechanism->fwToken, fwMechanism
->fwInstance, pError); |
1179 | 1100 |
1180 return fwObject; | 1101 return fwObject; |
1181 } | 1102 } |
1182 | |
OLD | NEW |