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

Side by Side Diff: nss/mozilla/security/nss/lib/cryptohi/secvfy.c

Issue 3135002: Update to NSS 3.12.7 and NSPR 4.8.6.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/
Patch Set: Created 10 years, 4 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
OLDNEW
1 /* 1 /*
2 * Verification stuff. 2 * Verification stuff.
3 * 3 *
4 * ***** BEGIN LICENSE BLOCK ***** 4 * ***** BEGIN LICENSE BLOCK *****
5 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 5 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6 * 6 *
7 * The contents of this file are subject to the Mozilla Public License Version 7 * The contents of this file are subject to the Mozilla Public License Version
8 * 1.1 (the "License"); you may not use this file except in compliance with 8 * 1.1 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at 9 * the License. You may obtain a copy of the License at
10 * http://www.mozilla.org/MPL/ 10 * http://www.mozilla.org/MPL/
(...skipping 19 matching lines...) Expand all
30 * in which case the provisions of the GPL or the LGPL are applicable instead 30 * in which case the provisions of the GPL or the LGPL are applicable instead
31 * of those above. If you wish to allow use of your version of this file only 31 * of those above. If you wish to allow use of your version of this file only
32 * under the terms of either the GPL or the LGPL, and not to allow others to 32 * under the terms of either the GPL or the LGPL, and not to allow others to
33 * use your version of this file under the terms of the MPL, indicate your 33 * use your version of this file under the terms of the MPL, indicate your
34 * decision by deleting the provisions above and replace them with the notice 34 * decision by deleting the provisions above and replace them with the notice
35 * and other provisions required by the GPL or the LGPL. If you do not delete 35 * and other provisions required by the GPL or the LGPL. If you do not delete
36 * the provisions above, a recipient may use your version of this file under 36 * the provisions above, a recipient may use your version of this file under
37 * the terms of any one of the MPL, the GPL or the LGPL. 37 * the terms of any one of the MPL, the GPL or the LGPL.
38 * 38 *
39 * ***** END LICENSE BLOCK ***** */ 39 * ***** END LICENSE BLOCK ***** */
40 /* $Id: secvfy.c,v 1.23 2010/02/10 00:49:43 wtc%google.com Exp $ */ 40 /* $Id: secvfy.c,v 1.24 2010/06/23 02:13:56 wtc%google.com Exp $ */
41 41
42 #include <stdio.h> 42 #include <stdio.h>
43 #include "cryptohi.h" 43 #include "cryptohi.h"
44 #include "sechash.h" 44 #include "sechash.h"
45 #include "keyhi.h" 45 #include "keyhi.h"
46 #include "secasn1.h" 46 #include "secasn1.h"
47 #include "secoid.h" 47 #include "secoid.h"
48 #include "pk11func.h" 48 #include "pk11func.h"
49 #include "secdig.h" 49 #include "secdig.h"
50 #include "secerr.h" 50 #include "secerr.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 break; 230 break;
231 case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION: 231 case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
232 *hashalg = SEC_OID_MD5; 232 *hashalg = SEC_OID_MD5;
233 break; 233 break;
234 case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION: 234 case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
235 case SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE: 235 case SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE:
236 case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE: 236 case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE:
237 *hashalg = SEC_OID_SHA1; 237 *hashalg = SEC_OID_SHA1;
238 break; 238 break;
239 case SEC_OID_PKCS1_RSA_ENCRYPTION: 239 case SEC_OID_PKCS1_RSA_ENCRYPTION:
240 case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
240 *hashalg = SEC_OID_UNKNOWN; /* get it from the RSA signature */ 241 *hashalg = SEC_OID_UNKNOWN; /* get it from the RSA signature */
241 break; 242 break;
242 243
243 case SEC_OID_ANSIX962_ECDSA_SHA256_SIGNATURE: 244 case SEC_OID_ANSIX962_ECDSA_SHA256_SIGNATURE:
244 case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION: 245 case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION:
245 *hashalg = SEC_OID_SHA256; 246 *hashalg = SEC_OID_SHA256;
246 break; 247 break;
247 case SEC_OID_ANSIX962_ECDSA_SHA384_SIGNATURE: 248 case SEC_OID_ANSIX962_ECDSA_SHA384_SIGNATURE:
248 case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION: 249 case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION:
249 *hashalg = SEC_OID_SHA384; 250 *hashalg = SEC_OID_SHA384;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 case SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION: 321 case SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION:
321 case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION: 322 case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
322 case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION: 323 case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
323 case SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE: 324 case SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE:
324 case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE: 325 case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE:
325 case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION: 326 case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION:
326 case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION: 327 case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION:
327 case SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION: 328 case SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION:
328 *encalg = SEC_OID_PKCS1_RSA_ENCRYPTION; 329 *encalg = SEC_OID_PKCS1_RSA_ENCRYPTION;
329 break; 330 break;
331 case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
332 *encalg = SEC_OID_PKCS1_RSA_PSS_SIGNATURE;
333 break;
330 334
331 /* what about normal DSA? */ 335 /* what about normal DSA? */
332 case SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST: 336 case SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST:
333 case SEC_OID_BOGUS_DSA_SIGNATURE_WITH_SHA1_DIGEST: 337 case SEC_OID_BOGUS_DSA_SIGNATURE_WITH_SHA1_DIGEST:
334 *encalg = SEC_OID_ANSIX9_DSA_SIGNATURE; 338 *encalg = SEC_OID_ANSIX9_DSA_SIGNATURE;
335 break; 339 break;
336 case SEC_OID_MISSI_DSS: 340 case SEC_OID_MISSI_DSS:
337 case SEC_OID_MISSI_KEA_DSS: 341 case SEC_OID_MISSI_KEA_DSS:
338 case SEC_OID_MISSI_KEA_DSS_OLD: 342 case SEC_OID_MISSI_KEA_DSS_OLD:
339 case SEC_OID_MISSI_DSS_OLD: 343 case SEC_OID_MISSI_DSS_OLD:
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 static VFYContext * 375 static VFYContext *
372 vfy_CreateContext(const SECKEYPublicKey *key, const SECItem *sig, 376 vfy_CreateContext(const SECKEYPublicKey *key, const SECItem *sig,
373 SECOidTag encAlg, SECOidTag hashAlg, SECOidTag *hash, void *wincx) 377 SECOidTag encAlg, SECOidTag hashAlg, SECOidTag *hash, void *wincx)
374 { 378 {
375 VFYContext *cx; 379 VFYContext *cx;
376 SECStatus rv; 380 SECStatus rv;
377 unsigned int sigLen; 381 unsigned int sigLen;
378 KeyType type; 382 KeyType type;
379 383
380 /* make sure the encryption algorithm matches the key type */ 384 /* make sure the encryption algorithm matches the key type */
385 /* RSA-PSS algorithm can be used with both rsaKey and rsaPssKey */
381 type = seckey_GetKeyType(encAlg); 386 type = seckey_GetKeyType(encAlg);
382 if (key->keyType != type) { 387 if ((key->keyType != type) &&
388 » ((key->keyType != rsaKey) || (type != rsaPssKey))) {
383 PORT_SetError(SEC_ERROR_PKCS7_KEYALG_MISMATCH); 389 PORT_SetError(SEC_ERROR_PKCS7_KEYALG_MISMATCH);
384 return NULL; 390 return NULL;
385 } 391 }
386 392
387 cx = (VFYContext*) PORT_ZAlloc(sizeof(VFYContext)); 393 cx = (VFYContext*) PORT_ZAlloc(sizeof(VFYContext));
388 if (cx == NULL) { 394 if (cx == NULL) {
389 goto loser; 395 goto loser;
390 } 396 }
391 397
392 cx->wincx = wincx; 398 cx->wincx = wincx;
393 cx->hasSignature = (sig != NULL); 399 cx->hasSignature = (sig != NULL);
394 cx->encAlg = encAlg; 400 cx->encAlg = encAlg;
395 cx->hashAlg = hashAlg; 401 cx->hashAlg = hashAlg;
396 cx->key = SECKEY_CopyPublicKey(key); 402 cx->key = SECKEY_CopyPublicKey(key);
397 rv = SECSuccess; 403 rv = SECSuccess;
398 if (sig) { 404 if (sig) {
399 » switch (key->keyType) { 405 » switch (type) {
400 case rsaKey: 406 case rsaKey:
401 rv = DecryptSigBlock(&cx->hashAlg, cx->u.buffer, &cx->rsadigestlen, 407 rv = DecryptSigBlock(&cx->hashAlg, cx->u.buffer, &cx->rsadigestlen,
402 HASH_LENGTH_MAX, cx->key, sig, (char*)wincx); 408 HASH_LENGTH_MAX, cx->key, sig, (char*)wincx);
403 if (cx->hashAlg != hashAlg && hashAlg != SEC_OID_UNKNOWN) { 409 if (cx->hashAlg != hashAlg && hashAlg != SEC_OID_UNKNOWN) {
404 PORT_SetError(SEC_ERROR_BAD_SIGNATURE); 410 PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
405 rv = SECFailure; 411 rv = SECFailure;
406 } 412 }
407 break; 413 break;
408 case dsaKey: 414 case dsaKey:
409 case ecKey: 415 case ecKey:
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 { 747 {
742 SECOidTag encAlg, hashAlg; 748 SECOidTag encAlg, hashAlg;
743 SECOidTag sigAlg = SECOID_GetAlgorithmTag((SECAlgorithmID *)sigAlgorithm); 749 SECOidTag sigAlg = SECOID_GetAlgorithmTag((SECAlgorithmID *)sigAlgorithm);
744 SECStatus rv = sec_DecodeSigAlg(key, sigAlg, 750 SECStatus rv = sec_DecodeSigAlg(key, sigAlg,
745 &sigAlgorithm->parameters, &encAlg, &hashAlg); 751 &sigAlgorithm->parameters, &encAlg, &hashAlg);
746 if (rv != SECSuccess) { 752 if (rv != SECSuccess) {
747 return rv; 753 return rv;
748 } 754 }
749 return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, hash, wincx); 755 return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, hash, wincx);
750 } 756 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698