Skip to content

Commit

Permalink
crypto: sha-mb - Fix total_len for correct hash when larger than 512MB
Browse files Browse the repository at this point in the history
Current multi-buffer hash implementations have a restriction on the total
length of a hash job to 512MB. Hashing larger buffers will result in an
incorrect hash. This extends the limit to 2^62 - 1.

Signed-off-by: Greg Tucker <[email protected]>
Acked-by: Tim Chen <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
gbtucker authored and herbertx committed Nov 17, 2016
1 parent 75aa0a7 commit 7a0b86b
Show file tree
Hide file tree
Showing 6 changed files with 6 additions and 6 deletions.
2 changes: 1 addition & 1 deletion arch/x86/crypto/sha1-mb/sha1_mb.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ static inline void sha1_init_digest(uint32_t *digest)
}

static inline uint32_t sha1_pad(uint8_t padblock[SHA1_BLOCK_SIZE * 2],
uint32_t total_len)
uint64_t total_len)
{
uint32_t i = total_len & (SHA1_BLOCK_SIZE - 1);

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/crypto/sha1-mb/sha1_mb_ctx.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ struct sha1_hash_ctx {
/* error flag */
int error;

uint32_t total_length;
uint64_t total_length;
const void *incoming_buffer;
uint32_t incoming_buffer_length;
uint8_t partial_block_buffer[SHA1_BLOCK_SIZE * 2];
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/crypto/sha256-mb/sha256_mb.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ inline void sha256_init_digest(uint32_t *digest)
}

inline uint32_t sha256_pad(uint8_t padblock[SHA256_BLOCK_SIZE * 2],
uint32_t total_len)
uint64_t total_len)
{
uint32_t i = total_len & (SHA256_BLOCK_SIZE - 1);

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/crypto/sha256-mb/sha256_mb_ctx.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ struct sha256_hash_ctx {
/* error flag */
int error;

uint32_t total_length;
uint64_t total_length;
const void *incoming_buffer;
uint32_t incoming_buffer_length;
uint8_t partial_block_buffer[SHA256_BLOCK_SIZE * 2];
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/crypto/sha512-mb/sha512_mb.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ inline void sha512_init_digest(uint64_t *digest)
}

inline uint32_t sha512_pad(uint8_t padblock[SHA512_BLOCK_SIZE * 2],
uint32_t total_len)
uint64_t total_len)
{
uint32_t i = total_len & (SHA512_BLOCK_SIZE - 1);

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/crypto/sha512-mb/sha512_mb_ctx.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ struct sha512_hash_ctx {
/* error flag */
int error;

uint32_t total_length;
uint64_t total_length;
const void *incoming_buffer;
uint32_t incoming_buffer_length;
uint8_t partial_block_buffer[SHA512_BLOCK_SIZE * 2];
Expand Down

0 comments on commit 7a0b86b

Please sign in to comment.