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

Side by Side Diff: mozilla/security/nss/lib/freebl/gcm.c

Issue 12668022: Make CKM_AES_GCM usable. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Created 7 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
OLDNEW
1 /* This Source Code Form is subject to the terms of the Mozilla Public 1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 4
5 #ifdef FREEBL_NO_DEPEND 5 #ifdef FREEBL_NO_DEPEND
6 #include "stubs.h" 6 #include "stubs.h"
7 #endif 7 #endif
8 #include "blapii.h" 8 #include "blapii.h"
9 #include "blapit.h" 9 #include "blapit.h"
10 #include "gcm.h" 10 #include "gcm.h"
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 if (len != blocksize) { 223 if (len != blocksize) {
224 PORT_Memset(X,0,blocksize-len); 224 PORT_Memset(X,0,blocksize-len);
225 X += blocksize-len; 225 X += blocksize-len;
226 } 226 }
227 227
228 err = mp_to_unsigned_octets(&ghash->X, X, len); 228 err = mp_to_unsigned_octets(&ghash->X, X, len);
229 if (err < 0) { 229 if (err < 0) {
230 PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); 230 PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
231 return SECFailure; 231 return SECFailure;
232 } 232 }
233 gcm_reverse(T, X, blocksize); 233 gcm_reverse(T, tmp_buf, blocksize);
wtc 2013/03/26 18:24:46 The original code passes |X| as the second argumen
wtc 2013/03/26 18:41:56 If this bug in gcm_getX() only affects the zero-le
234 return SECSuccess; 234 return SECSuccess;
235 } 235 }
236 236
237 static SECStatus 237 static SECStatus
238 gcm_HashMult(gcmHashContext *ghash, const unsigned char *buf, 238 gcm_HashMult(gcmHashContext *ghash, const unsigned char *buf,
239 unsigned int count, unsigned int blocksize) 239 unsigned int count, unsigned int blocksize)
240 { 240 {
241 SECStatus rv = SECFailure; 241 SECStatus rv = SECFailure;
242 mp_err err = MP_OKAY; 242 mp_err err = MP_OKAY;
243 unsigned char tmp_buf[MAX_BLOCK_SIZE]; 243 unsigned char tmp_buf[MAX_BLOCK_SIZE];
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 PORT_Memset(ghash->counterBuf, 0, GCM_HASH_LEN_LEN*2); 568 PORT_Memset(ghash->counterBuf, 0, GCM_HASH_LEN_LEN*2);
569 ghash->bufLen = 0; 569 ghash->bufLen = 0;
570 gcm_zeroX(ghash); 570 gcm_zeroX(ghash);
571 571
572 /* now kick things off by hashing the Additional Authenticated Data */ 572 /* now kick things off by hashing the Additional Authenticated Data */
573 if (AADLen != 0) { 573 if (AADLen != 0) {
574 rv = gcmHash_Update(ghash, AAD, AADLen, blocksize); 574 rv = gcmHash_Update(ghash, AAD, AADLen, blocksize);
575 if (rv != SECSuccess) { 575 if (rv != SECSuccess) {
576 return SECFailure; 576 return SECFailure;
577 } 577 }
578 rv = gcmHash_Sync(ghash, blocksize);
579 if (rv != SECSuccess) {
580 return SECFailure;
581 }
582 } 578 }
579 rv = gcmHash_Sync(ghash, blocksize);
580 if (rv != SECSuccess) {
581 return SECFailure;
582 }
wtc 2013/03/26 18:24:46 This change is not necessary (because ghash->count
583 return SECSuccess; 583 return SECSuccess;
584 } 584 }
585 585
586 /************************************************************************** 586 /**************************************************************************
587 * Now implement the GCM using gcmHash and CTR * 587 * Now implement the GCM using gcmHash and CTR *
588 **************************************************************************/ 588 **************************************************************************/
589 589
590 /* state to handle the full GCM operation (hash and counter) */ 590 /* state to handle the full GCM operation (hash and counter) */
591 struct GCMContextStr { 591 struct GCMContextStr {
592 gcmHashContext ghash_context; 592 gcmHashContext ghash_context;
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 * preserve the masked off missing bits. */ 835 * preserve the masked off missing bits. */
836 if (NSS_SecureMemcmp(tag, intag, tagBytes) != 0) { 836 if (NSS_SecureMemcmp(tag, intag, tagBytes) != 0) {
837 /* force a CKR_ENCRYPTED_DATA_INVALID error at in softoken */ 837 /* force a CKR_ENCRYPTED_DATA_INVALID error at in softoken */
838 PORT_SetError(SEC_ERROR_BAD_DATA); 838 PORT_SetError(SEC_ERROR_BAD_DATA);
839 return SECFailure; 839 return SECFailure;
840 } 840 }
841 /* finish the decryption */ 841 /* finish the decryption */
842 return CTR_Update(&gcm->ctr_context, outbuf, outlen, maxout, 842 return CTR_Update(&gcm->ctr_context, outbuf, outlen, maxout,
843 inbuf, inlen, blocksize); 843 inbuf, inlen, blocksize);
844 } 844 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698