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

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

Issue 10919163: Add GCM, CTR, and CTS modes to AES. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/
Patch Set: Fix comments as rsleevi suggested, fix a 32-bit bug and miscellaneous issues Created 8 years, 3 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 * ***** BEGIN LICENSE BLOCK ***** 2 * ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * 4 *
5 * The contents of this file are subject to the Mozilla Public License Version 5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with 6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at 7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/ 8 * http://www.mozilla.org/MPL/
9 * 9 *
10 * Software distributed under the License is distributed on an "AS IS" basis, 10 * Software distributed under the License is distributed on an "AS IS" basis,
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 352
353 /* The algorithm does the reduction in place in r, 353 /* The algorithm does the reduction in place in r,
354 * if a != r, copy a into r first so reduction can be done in r 354 * if a != r, copy a into r first so reduction can be done in r
355 */ 355 */
356 if (a != r) { 356 if (a != r) {
357 MP_CHECKOK( mp_copy(a, r) ); 357 MP_CHECKOK( mp_copy(a, r) );
358 } 358 }
359 z = MP_DIGITS(r); 359 z = MP_DIGITS(r);
360 360
361 /* start reduction */ 361 /* start reduction */
362 dN = p[0] / MP_DIGIT_BITS; 362 /*dN = p[0] / MP_DIGIT_BITS; */
363 dN = p[0] >> MP_DIGIT_BITS_LOG_2;
363 used = MP_USED(r); 364 used = MP_USED(r);
364 365
365 for (j = used - 1; j > dN;) { 366 for (j = used - 1; j > dN;) {
366 367
367 zz = z[j]; 368 zz = z[j];
368 if (zz == 0) { 369 if (zz == 0) {
369 j--; continue; 370 j--; continue;
370 } 371 }
371 z[j] = 0; 372 z[j] = 0;
372 373
373 for (k = 1; p[k] > 0; k++) { 374 for (k = 1; p[k] > 0; k++) {
374 /* reducing component t^p[k] */ 375 /* reducing component t^p[k] */
375 n = p[0] - p[k]; 376 n = p[0] - p[k];
376 d0 = n % MP_DIGIT_BITS; 377 /*d0 = n % MP_DIGIT_BITS; */
378 d0 = n & MP_DIGIT_BITS_MASK;
377 d1 = MP_DIGIT_BITS - d0; 379 d1 = MP_DIGIT_BITS - d0;
378 n /= MP_DIGIT_BITS; 380 /*n /= MP_DIGIT_BITS; */
381 n >>= MP_DIGIT_BITS_LOG_2;
379 z[j-n] ^= (zz>>d0); 382 z[j-n] ^= (zz>>d0);
380 if (d0) 383 if (d0)
381 z[j-n-1] ^= (zz<<d1); 384 z[j-n-1] ^= (zz<<d1);
382 } 385 }
383 386
384 /* reducing component t^0 */ 387 /* reducing component t^0 */
385 n = dN; 388 n = dN;
386 d0 = p[0] % MP_DIGIT_BITS; 389 /*d0 = p[0] % MP_DIGIT_BITS;*/
390 d0 = p[0] & MP_DIGIT_BITS_MASK;
387 d1 = MP_DIGIT_BITS - d0; 391 d1 = MP_DIGIT_BITS - d0;
388 z[j-n] ^= (zz >> d0); 392 z[j-n] ^= (zz >> d0);
389 if (d0) 393 if (d0)
390 z[j-n-1] ^= (zz << d1); 394 z[j-n-1] ^= (zz << d1);
391 395
392 } 396 }
393 397
394 /* final round of reduction */ 398 /* final round of reduction */
395 while (j == dN) { 399 while (j == dN) {
396 400
397 d0 = p[0] % MP_DIGIT_BITS; 401 /* d0 = p[0] % MP_DIGIT_BITS; */
402 d0 = p[0] & MP_DIGIT_BITS_MASK;
398 zz = z[dN] >> d0; 403 zz = z[dN] >> d0;
399 if (zz == 0) break; 404 if (zz == 0) break;
400 d1 = MP_DIGIT_BITS - d0; 405 d1 = MP_DIGIT_BITS - d0;
401 406
402 /* clear up the top d1 bits */ 407 /* clear up the top d1 bits */
403 if (d0) z[dN] = (z[dN] << d1) >> d1; 408 if (d0) {
409 » z[dN] = (z[dN] << d1) >> d1;
410 » } else {
411 » z[dN] = 0;
412 » }
404 *z ^= zz; /* reduction t^0 component */ 413 *z ^= zz; /* reduction t^0 component */
405 414
406 for (k = 1; p[k] > 0; k++) { 415 for (k = 1; p[k] > 0; k++) {
407 /* reducing component t^p[k]*/ 416 /* reducing component t^p[k]*/
408 n = p[k] / MP_DIGIT_BITS; 417 /* n = p[k] / MP_DIGIT_BITS; */
409 d0 = p[k] % MP_DIGIT_BITS; 418 n = p[k] >> MP_DIGIT_BITS_LOG_2;
419 /* d0 = p[k] % MP_DIGIT_BITS; */
420 d0 = p[k] & MP_DIGIT_BITS_MASK;
410 d1 = MP_DIGIT_BITS - d0; 421 d1 = MP_DIGIT_BITS - d0;
411 z[n] ^= (zz << d0); 422 z[n] ^= (zz << d0);
412 tmp = zz >> d1; 423 tmp = zz >> d1;
413 if (d0 && tmp) 424 if (d0 && tmp)
414 z[n+1] ^= tmp; 425 z[n+1] ^= tmp;
415 } 426 }
416 } 427 }
417 428
418 s_mp_clamp(r); 429 s_mp_clamp(r);
419 CLEANUP: 430 CLEANUP:
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 605
595 mp_zero(a); 606 mp_zero(a);
596 for (i = 0; p[i] > 0; i++) { 607 for (i = 0; p[i] > 0; i++) {
597 MP_CHECKOK( mpl_set_bit(a, p[i], 1) ); 608 MP_CHECKOK( mpl_set_bit(a, p[i], 1) );
598 } 609 }
599 MP_CHECKOK( mpl_set_bit(a, 0, 1) ); 610 MP_CHECKOK( mpl_set_bit(a, 0, 1) );
600 611
601 CLEANUP: 612 CLEANUP:
602 return res; 613 return res;
603 } 614 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698