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

Side by Side Diff: firmware/lib/cryptolib/sha2.c

Issue 6750016: Make SHA256_update and SHA512_update if the passed in length is greater than UINT32_MAX (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vboot_reference.git@master
Patch Set: Created 9 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* SHA-256 and SHA-512 implementation based on code by Oliver Gay 1 /* SHA-256 and SHA-512 implementation based on code by Oliver Gay
2 * <olivier.gay@a3.epfl.ch> under a BSD-style license. See below. 2 * <olivier.gay@a3.epfl.ch> under a BSD-style license. See below.
3 */ 3 */
4 4
5 /* 5 /*
6 * FIPS 180-2 SHA-224/256/384/512 implementation 6 * FIPS 180-2 SHA-224/256/384/512 implementation
7 * Last update: 02/02/2007 7 * Last update: 02/02/2007
8 * Issue date: 04/30/2005 8 * Issue date: 04/30/2005
9 * 9 *
10 * Copyright (C) 2005, 2007 Olivier Gay <olivier.gay@a3.epfl.ch> 10 * Copyright (C) 2005, 2007 Olivier Gay <olivier.gay@a3.epfl.ch>
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 } 330 }
331 } 331 }
332 332
333 333
334 334
335 void SHA256_update(SHA256_CTX* ctx, const uint8_t* data, uint64_t len) { 335 void SHA256_update(SHA256_CTX* ctx, const uint8_t* data, uint64_t len) {
336 unsigned int block_nb; 336 unsigned int block_nb;
337 unsigned int new_len, rem_len, tmp_len; 337 unsigned int new_len, rem_len, tmp_len;
338 const uint8_t *shifted_data; 338 const uint8_t *shifted_data;
339 339
340 if (len > UINT32_MAX)
341 return;
342
340 tmp_len = SHA256_BLOCK_SIZE - ctx->len; 343 tmp_len = SHA256_BLOCK_SIZE - ctx->len;
341 rem_len = len < tmp_len ? (unsigned int)len : tmp_len; 344 rem_len = len < tmp_len ? (unsigned int)len : tmp_len;
342 345
343 Memcpy(&ctx->block[ctx->len], data, rem_len); 346 Memcpy(&ctx->block[ctx->len], data, rem_len);
344 347
345 if (ctx->len + len < SHA256_BLOCK_SIZE) { 348 if (ctx->len + len < SHA256_BLOCK_SIZE) {
346 ctx->len += (uint32_t)len; 349 ctx->len += (uint32_t)len;
347 return; 350 return;
348 } 351 }
349 352
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 } 521 }
519 } 522 }
520 523
521 524
522 void SHA512_update(SHA512_CTX* ctx, const uint8_t* data, 525 void SHA512_update(SHA512_CTX* ctx, const uint8_t* data,
523 uint64_t len) { 526 uint64_t len) {
524 unsigned int block_nb; 527 unsigned int block_nb;
525 unsigned int new_len, rem_len, tmp_len; 528 unsigned int new_len, rem_len, tmp_len;
526 const uint8_t* shifted_data; 529 const uint8_t* shifted_data;
527 530
531 if (len > UINT32_MAX)
532 return;
533
528 tmp_len = SHA512_BLOCK_SIZE - ctx->len; 534 tmp_len = SHA512_BLOCK_SIZE - ctx->len;
529 rem_len = len < tmp_len ? (unsigned int)len : tmp_len; 535 rem_len = len < tmp_len ? (unsigned int)len : tmp_len;
530 536
531 Memcpy(&ctx->block[ctx->len], data, rem_len); 537 Memcpy(&ctx->block[ctx->len], data, rem_len);
532 538
533 if (ctx->len + len < SHA512_BLOCK_SIZE) { 539 if (ctx->len + len < SHA512_BLOCK_SIZE) {
534 ctx->len += (uint32_t)len; 540 ctx->len += (uint32_t)len;
535 return; 541 return;
536 } 542 }
537 543
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 } 599 }
594 600
595 601
596 602
597 /* Convenient functions. */ 603 /* Convenient functions. */
598 uint8_t* SHA256(const uint8_t* data, uint64_t len, uint8_t* digest) { 604 uint8_t* SHA256(const uint8_t* data, uint64_t len, uint8_t* digest) {
599 const uint8_t* p; 605 const uint8_t* p;
600 int i; 606 int i;
601 SHA256_CTX ctx; 607 SHA256_CTX ctx;
602 SHA256_init(&ctx); 608 SHA256_init(&ctx);
603 SHA256_update(&ctx, data, len); 609 SHA256_update(&ctx, data, len);
Randall Spangler 2011/03/26 02:02:46 Is SHA256_update() used anywhere else? If not, we
gauravsh 2011/03/26 23:21:41 Well, I figured that we will pretty much never try
604 p = SHA256_final(&ctx); 610 p = SHA256_final(&ctx);
605 for (i = 0; i < SHA256_DIGEST_SIZE; ++i) { 611 for (i = 0; i < SHA256_DIGEST_SIZE; ++i) {
606 digest[i] = *p++; 612 digest[i] = *p++;
607 } 613 }
608 return digest; 614 return digest;
609 } 615 }
610 616
611 617
612 uint8_t* SHA512(const uint8_t* data, uint64_t len, uint8_t* digest) { 618 uint8_t* SHA512(const uint8_t* data, uint64_t len, uint8_t* digest) {
613 const uint8_t* p; 619 const uint8_t* p;
614 int i; 620 int i;
615 SHA512_CTX ctx; 621 SHA512_CTX ctx;
616 SHA512_init(&ctx); 622 SHA512_init(&ctx);
617 SHA512_update(&ctx, data, len); 623 SHA512_update(&ctx, data, len);
618 p = SHA512_final(&ctx); 624 p = SHA512_final(&ctx);
619 for (i = 0; i < SHA512_DIGEST_SIZE; ++i) { 625 for (i = 0; i < SHA512_DIGEST_SIZE; ++i) {
620 digest[i] = *p++; 626 digest[i] = *p++;
621 } 627 }
622 return digest; 628 return digest;
623 } 629 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698