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

Side by Side Diff: nss/lib/softoken/lowkey.c

Issue 195763027: Update NSS to NSS_3_16_RC0. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Use the RTM tag Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « nss/lib/softoken/fipstokn.c ('k') | nss/lib/softoken/lowkeyi.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "lowkeyi.h" 4 #include "lowkeyi.h"
5 #include "secoid.h" 5 #include "secoid.h"
6 #include "secitem.h" 6 #include "secitem.h"
7 #include "secder.h" 7 #include "secder.h"
8 #include "base64.h" 8 #include "base64.h"
9 #include "secasn1.h" 9 #include "secasn1.h"
10 #include "secerr.h" 10 #include "secerr.h"
11 11
12 #ifdef NSS_ENABLE_ECC 12 #ifndef NSS_DISABLE_ECC
13 #include "softoken.h" 13 #include "softoken.h"
14 #endif 14 #endif
15 15
16 SEC_ASN1_MKSUB(SEC_AnyTemplate) 16 SEC_ASN1_MKSUB(SEC_AnyTemplate)
17 SEC_ASN1_MKSUB(SEC_BitStringTemplate) 17 SEC_ASN1_MKSUB(SEC_BitStringTemplate)
18 SEC_ASN1_MKSUB(SEC_ObjectIDTemplate) 18 SEC_ASN1_MKSUB(SEC_ObjectIDTemplate)
19 SEC_ASN1_MKSUB(SECOID_AlgorithmIDTemplate) 19 SEC_ASN1_MKSUB(SECOID_AlgorithmIDTemplate)
20 20
21 const SEC_ASN1Template nsslowkey_AttributeTemplate[] = { 21 const SEC_ASN1Template nsslowkey_AttributeTemplate[] = {
22 { SEC_ASN1_SEQUENCE, 22 { SEC_ASN1_SEQUENCE,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 84
85 const SEC_ASN1Template nsslowkey_DHPrivateKeyTemplate[] = { 85 const SEC_ASN1Template nsslowkey_DHPrivateKeyTemplate[] = {
86 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, 86 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) },
87 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.publicValue) }, 87 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.publicValue) },
88 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.privateValue) }, 88 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.privateValue) },
89 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.base) }, 89 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.base) },
90 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.prime) }, 90 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.prime) },
91 { 0, } 91 { 0, }
92 }; 92 };
93 93
94 #ifdef NSS_ENABLE_ECC 94 #ifndef NSS_DISABLE_ECC
95 95
96 /* XXX This is just a placeholder for later when we support 96 /* XXX This is just a placeholder for later when we support
97 * generic curves and need full-blown support for parsing EC 97 * generic curves and need full-blown support for parsing EC
98 * parameters. For now, we only support named curves in which 98 * parameters. For now, we only support named curves in which
99 * EC params are simply encoded as an object ID and we don't 99 * EC params are simply encoded as an object ID and we don't
100 * use nsslowkey_ECParamsTemplate. 100 * use nsslowkey_ECParamsTemplate.
101 */ 101 */
102 const SEC_ASN1Template nsslowkey_ECParamsTemplate[] = { 102 const SEC_ASN1Template nsslowkey_ECParamsTemplate[] = {
103 { SEC_ASN1_CHOICE, offsetof(ECParams,type), NULL, sizeof(ECParams) }, 103 { SEC_ASN1_CHOICE, offsetof(ECParams,type), NULL, sizeof(ECParams) },
104 { SEC_ASN1_OBJECT_ID, offsetof(ECParams,curveOID), NULL, ec_params_named }, 104 { SEC_ASN1_OBJECT_ID, offsetof(ECParams,curveOID), NULL, ec_params_named },
(...skipping 28 matching lines...) Expand all
133 offsetof(NSSLOWKEYPrivateKey,u.ec.ecParams), 133 offsetof(NSSLOWKEYPrivateKey,u.ec.ecParams),
134 nsslowkey_ECParamsTemplate }, 134 nsslowkey_ECParamsTemplate },
135 #endif 135 #endif
136 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | 136 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED |
137 SEC_ASN1_EXPLICIT | SEC_ASN1_CONTEXT_SPECIFIC | 137 SEC_ASN1_EXPLICIT | SEC_ASN1_CONTEXT_SPECIFIC |
138 SEC_ASN1_XTRN | 1, 138 SEC_ASN1_XTRN | 1,
139 offsetof(NSSLOWKEYPrivateKey,u.ec.publicValue), 139 offsetof(NSSLOWKEYPrivateKey,u.ec.publicValue),
140 SEC_ASN1_SUB(SEC_BitStringTemplate) }, 140 SEC_ASN1_SUB(SEC_BitStringTemplate) },
141 { 0, } 141 { 0, }
142 }; 142 };
143 #endif /* NSS_ENABLE_ECC */ 143 #endif /* NSS_DISABLE_ECC */
144 /* 144 /*
145 * See bugzilla bug 125359 145 * See bugzilla bug 125359
146 * Since NSS (via PKCS#11) wants to handle big integers as unsigned ints, 146 * Since NSS (via PKCS#11) wants to handle big integers as unsigned ints,
147 * all of the templates above that en/decode into integers must be converted 147 * all of the templates above that en/decode into integers must be converted
148 * from ASN.1's signed integer type. This is done by marking either the 148 * from ASN.1's signed integer type. This is done by marking either the
149 * source or destination (encoding or decoding, respectively) type as 149 * source or destination (encoding or decoding, respectively) type as
150 * siUnsignedInteger. 150 * siUnsignedInteger.
151 */ 151 */
152 152
153 void 153 void
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 void 190 void
191 prepare_low_dh_priv_key_for_asn1(NSSLOWKEYPrivateKey *key) 191 prepare_low_dh_priv_key_for_asn1(NSSLOWKEYPrivateKey *key)
192 { 192 {
193 key->u.dh.prime.type = siUnsignedInteger; 193 key->u.dh.prime.type = siUnsignedInteger;
194 key->u.dh.base.type = siUnsignedInteger; 194 key->u.dh.base.type = siUnsignedInteger;
195 key->u.dh.publicValue.type = siUnsignedInteger; 195 key->u.dh.publicValue.type = siUnsignedInteger;
196 key->u.dh.privateValue.type = siUnsignedInteger; 196 key->u.dh.privateValue.type = siUnsignedInteger;
197 } 197 }
198 198
199 #ifdef NSS_ENABLE_ECC 199 #ifndef NSS_DISABLE_ECC
200 void 200 void
201 prepare_low_ecparams_for_asn1(ECParams *params) 201 prepare_low_ecparams_for_asn1(ECParams *params)
202 { 202 {
203 params->DEREncoding.type = siUnsignedInteger; 203 params->DEREncoding.type = siUnsignedInteger;
204 params->curveOID.type = siUnsignedInteger; 204 params->curveOID.type = siUnsignedInteger;
205 } 205 }
206 206
207 void 207 void
208 prepare_low_ec_priv_key_for_asn1(NSSLOWKEYPrivateKey *key) 208 prepare_low_ec_priv_key_for_asn1(NSSLOWKEYPrivateKey *key)
209 { 209 {
210 key->u.ec.version.type = siUnsignedInteger; 210 key->u.ec.version.type = siUnsignedInteger;
211 key->u.ec.ecParams.DEREncoding.type = siUnsignedInteger; 211 key->u.ec.ecParams.DEREncoding.type = siUnsignedInteger;
212 key->u.ec.ecParams.curveOID.type = siUnsignedInteger; 212 key->u.ec.ecParams.curveOID.type = siUnsignedInteger;
213 key->u.ec.privateValue.type = siUnsignedInteger; 213 key->u.ec.privateValue.type = siUnsignedInteger;
214 key->u.ec.publicValue.type = siUnsignedInteger; 214 key->u.ec.publicValue.type = siUnsignedInteger;
215 } 215 }
216 #endif /* NSS_ENABLE_ECC */ 216 #endif /* NSS_DISABLE_ECC */
217 217
218 void 218 void
219 nsslowkey_DestroyPrivateKey(NSSLOWKEYPrivateKey *privk) 219 nsslowkey_DestroyPrivateKey(NSSLOWKEYPrivateKey *privk)
220 { 220 {
221 if (privk && privk->arena) { 221 if (privk && privk->arena) {
222 PORT_FreeArena(privk->arena, PR_TRUE); 222 PORT_FreeArena(privk->arena, PR_TRUE);
223 } 223 }
224 } 224 }
225 225
226 void 226 void
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 &privk->u.dh.publicValue); 334 &privk->u.dh.publicValue);
335 if (rv != SECSuccess) break; 335 if (rv != SECSuccess) break;
336 rv = SECITEM_CopyItem(arena, &pubk->u.dh.prime, 336 rv = SECITEM_CopyItem(arena, &pubk->u.dh.prime,
337 &privk->u.dh.prime); 337 &privk->u.dh.prime);
338 if (rv != SECSuccess) break; 338 if (rv != SECSuccess) break;
339 rv = SECITEM_CopyItem(arena, &pubk->u.dh.base, 339 rv = SECITEM_CopyItem(arena, &pubk->u.dh.base,
340 &privk->u.dh.base); 340 &privk->u.dh.base);
341 if (rv == SECSuccess) return pubk; 341 if (rv == SECSuccess) return pubk;
342 } 342 }
343 break; 343 break;
344 #ifdef NSS_ENABLE_ECC 344 #ifndef NSS_DISABLE_ECC
345 case NSSLOWKEYECKey: 345 case NSSLOWKEYECKey:
346 pubk = (NSSLOWKEYPublicKey *)PORT_ArenaZAlloc(arena, 346 pubk = (NSSLOWKEYPublicKey *)PORT_ArenaZAlloc(arena,
347 sizeof(NSSLOWKEYPublicKey)); 347 sizeof(NSSLOWKEYPublicKey));
348 if (pubk != NULL) { 348 if (pubk != NULL) {
349 SECStatus rv; 349 SECStatus rv;
350 350
351 pubk->arena = arena; 351 pubk->arena = arena;
352 pubk->keyType = privk->keyType; 352 pubk->keyType = privk->keyType;
353 rv = SECITEM_CopyItem(arena, &pubk->u.ec.publicValue, 353 rv = SECITEM_CopyItem(arena, &pubk->u.ec.publicValue,
354 &privk->u.ec.publicValue); 354 &privk->u.ec.publicValue);
355 if (rv != SECSuccess) break; 355 if (rv != SECSuccess) break;
356 pubk->u.ec.ecParams.arena = arena; 356 pubk->u.ec.ecParams.arena = arena;
357 /* Copy the rest of the params */ 357 /* Copy the rest of the params */
358 rv = EC_CopyParams(arena, &(pubk->u.ec.ecParams), 358 rv = EC_CopyParams(arena, &(pubk->u.ec.ecParams),
359 &(privk->u.ec.ecParams)); 359 &(privk->u.ec.ecParams));
360 if (rv == SECSuccess) return pubk; 360 if (rv == SECSuccess) return pubk;
361 } 361 }
362 break; 362 break;
363 #endif /* NSS_ENABLE_ECC */ 363 #endif /* NSS_DISABLE_ECC */
364 /* No Fortezza in Low Key implementations (Fortezza keys aren't 364 /* No Fortezza in Low Key implementations (Fortezza keys aren't
365 * stored in our data base */ 365 * stored in our data base */
366 default: 366 default:
367 break; 367 break;
368 } 368 }
369 369
370 PORT_FreeArena (arena, PR_FALSE); 370 PORT_FreeArena (arena, PR_FALSE);
371 return NULL; 371 return NULL;
372 } 372 }
373 373
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 &(privKey->u.dh.privateValue)); 452 &(privKey->u.dh.privateValue));
453 if(rv != SECSuccess) break; 453 if(rv != SECSuccess) break;
454 returnKey->u.dsa.params.arena = poolp; 454 returnKey->u.dsa.params.arena = poolp;
455 rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.prime), 455 rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.prime),
456 &(privKey->u.dh.prime)); 456 &(privKey->u.dh.prime));
457 if(rv != SECSuccess) break; 457 if(rv != SECSuccess) break;
458 rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.base), 458 rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.base),
459 &(privKey->u.dh.base)); 459 &(privKey->u.dh.base));
460 if(rv != SECSuccess) break; 460 if(rv != SECSuccess) break;
461 break; 461 break;
462 #ifdef NSS_ENABLE_ECC 462 #ifndef NSS_DISABLE_ECC
463 case NSSLOWKEYECKey: 463 case NSSLOWKEYECKey:
464 rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.version), 464 rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.version),
465 &(privKey->u.ec.version)); 465 &(privKey->u.ec.version));
466 if(rv != SECSuccess) break; 466 if(rv != SECSuccess) break;
467 rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.publicValue), 467 rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.publicValue),
468 &(privKey->u.ec.publicValue)); 468 &(privKey->u.ec.publicValue));
469 if(rv != SECSuccess) break; 469 if(rv != SECSuccess) break;
470 rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.privateValue), 470 rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.privateValue),
471 &(privKey->u.ec.privateValue)); 471 &(privKey->u.ec.privateValue));
472 if(rv != SECSuccess) break; 472 if(rv != SECSuccess) break;
473 returnKey->u.ec.ecParams.arena = poolp; 473 returnKey->u.ec.ecParams.arena = poolp;
474 /* Copy the rest of the params */ 474 /* Copy the rest of the params */
475 rv = EC_CopyParams(poolp, &(returnKey->u.ec.ecParams), 475 rv = EC_CopyParams(poolp, &(returnKey->u.ec.ecParams),
476 &(privKey->u.ec.ecParams)); 476 &(privKey->u.ec.ecParams));
477 if (rv != SECSuccess) break; 477 if (rv != SECSuccess) break;
478 break; 478 break;
479 #endif /* NSS_ENABLE_ECC */ 479 #endif /* NSS_DISABLE_ECC */
480 default: 480 default:
481 rv = SECFailure; 481 rv = SECFailure;
482 } 482 }
483 483
484 loser: 484 loser:
485 485
486 if(rv != SECSuccess) { 486 if(rv != SECSuccess) {
487 PORT_FreeArena(poolp, PR_TRUE); 487 PORT_FreeArena(poolp, PR_TRUE);
488 returnKey = NULL; 488 returnKey = NULL;
489 } 489 }
490 490
491 return returnKey; 491 return returnKey;
492 } 492 }
OLDNEW
« no previous file with comments | « nss/lib/softoken/fipstokn.c ('k') | nss/lib/softoken/lowkeyi.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698