Use the full buffer when computing md5/sha256 sums

No wonder these were slower than expected. We were only reading 4
(32-bit) or 8 (64-bit) bytes at a time and feeding it to the hash
functions. Define a buffer size constant and use it correctly so we feed
8K at a time into the hashing algorithm.

This cut one larger `-Sw --noconfirm` operation, with nothing to
actually download so only timing integrity, from 3.3s to 1.7s.

This has been broken since the original commit eba521913d introducing
OpenSSL usage for crypto hash functions. Boy do I feel stupid.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2011-09-28 04:06:43 -05:00
parent f66f9f11cd
commit 98e0371ae3
1 changed files with 6 additions and 4 deletions

View File

@ -741,6 +741,8 @@ int _alpm_lstat(const char *path, struct stat *buf)
}
#ifdef HAVE_LIBSSL
#define BUFFER_SIZE 8192
static int md5_file(const char *path, unsigned char output[16])
{
FILE *f;
@ -748,7 +750,7 @@ static int md5_file(const char *path, unsigned char output[16])
MD5_CTX ctx;
unsigned char *buf;
CALLOC(buf, 8192, sizeof(unsigned char), return 1);
CALLOC(buf, BUFFER_SIZE, sizeof(unsigned char), return 1);
if((f = fopen(path, "rb")) == NULL) {
free(buf);
@ -757,7 +759,7 @@ static int md5_file(const char *path, unsigned char output[16])
MD5_Init(&ctx);
while((n = fread(buf, 1, sizeof(buf), f)) > 0) {
while((n = fread(buf, 1, BUFFER_SIZE, f)) > 0) {
MD5_Update(&ctx, buf, n);
}
@ -783,7 +785,7 @@ static int sha2_file(const char *path, unsigned char output[32], int is224)
SHA256_CTX ctx;
unsigned char *buf;
CALLOC(buf, 8192, sizeof(unsigned char), return 1);
CALLOC(buf, BUFFER_SIZE, sizeof(unsigned char), return 1);
if((f = fopen(path, "rb")) == NULL) {
free(buf);
@ -796,7 +798,7 @@ static int sha2_file(const char *path, unsigned char output[32], int is224)
SHA256_Init(&ctx);
}
while((n = fread(buf, 1, sizeof(buf), f)) > 0) {
while((n = fread(buf, 1, BUFFER_SIZE, f)) > 0) {
if(is224) {
SHA224_Update(&ctx, buf, n);
} else {