diff options
-rw-r--r-- | src/lib/crypto/builtin/hash_provider/hash_crc32.c | 8 | ||||
-rw-r--r-- | src/lib/crypto/crypto_tests/t_crc.c | 4 | ||||
-rw-r--r-- | src/lib/crypto/krb/crc32/crc-32.h | 1 | ||||
-rw-r--r-- | src/lib/crypto/krb/crc32/crc32.c | 4 | ||||
-rw-r--r-- | src/lib/crypto/openssl/hash_provider/hash_crc32.c | 8 |
5 files changed, 13 insertions, 12 deletions
diff --git a/src/lib/crypto/builtin/hash_provider/hash_crc32.c b/src/lib/crypto/builtin/hash_provider/hash_crc32.c index e748c98cf..58efffe4f 100644 --- a/src/lib/crypto/builtin/hash_provider/hash_crc32.c +++ b/src/lib/crypto/builtin/hash_provider/hash_crc32.c @@ -33,17 +33,15 @@ static krb5_error_code k5_crc32_hash(unsigned int icount, const krb5_data *input, krb5_data *output) { - unsigned long c, cn; + unsigned long c; unsigned int i; if (output->length != CRC32_CKSUM_LENGTH) return(KRB5_CRYPTO_INTERNAL); c = 0; - for (i=0; i<icount; i++) { - mit_crc32(input[i].data, input[i].length, &cn); - c ^= cn; - } + for (i=0; i<icount; i++) + mit_crc32(input[i].data, input[i].length, &c); store_32_le(c, output->data); return(0); diff --git a/src/lib/crypto/crypto_tests/t_crc.c b/src/lib/crypto/crypto_tests/t_crc.c index 6d06334dd..69a646805 100644 --- a/src/lib/crypto/crypto_tests/t_crc.c +++ b/src/lib/crypto/crypto_tests/t_crc.c @@ -121,6 +121,7 @@ timetest(unsigned int nblk, unsigned int blksiz) block[i] = i % 256; times(&before); for (i = 0; i < nblk; i++) { + cksum = 0; mit_crc32(block + i * blksiz, blksiz, &cksum); } @@ -136,6 +137,7 @@ timetest(unsigned int nblk, unsigned int blksiz) #ifdef CRC32_SHIFT4 times(&before); for (i = 0; i < nblk; i++) { + cksum = 0; mit_crc32_shift4(block + i * blksiz, blksiz, &cksum); } times(&after); @@ -185,11 +187,13 @@ verify(void) case STR: len = strlen(trial.data); typestr = "STR"; + cksum = 0; mit_crc32(trial.data, len, &cksum); break; case HEX: typestr = "HEX"; gethexstr(trial.data, &len, buf, 4); + cksum = 0; mit_crc32(buf, len, &cksum); break; default: diff --git a/src/lib/crypto/krb/crc32/crc-32.h b/src/lib/crypto/krb/crc32/crc-32.h index 95001f59d..5c28b8b79 100644 --- a/src/lib/crypto/krb/crc32/crc-32.h +++ b/src/lib/crypto/krb/crc32/crc-32.h @@ -60,6 +60,7 @@ #define CRC32_CKSUM_LENGTH 4 +/* c is in-out to allow chaining; initialize to 0. */ void mit_crc32 (krb5_pointer in, size_t in_length, unsigned long *c); diff --git a/src/lib/crypto/krb/crc32/crc32.c b/src/lib/crypto/krb/crc32/crc32.c index 490979803..ef364f3ed 100644 --- a/src/lib/crypto/krb/crc32/crc32.c +++ b/src/lib/crypto/krb/crc32/crc32.c @@ -151,7 +151,7 @@ void mit_crc32(krb5_pointer in, size_t in_length, unsigned long *cksum) { register u_char *data; - register u_long c = 0; + register u_long c = *cksum; register int idx; size_t i; @@ -178,7 +178,7 @@ void mit_crc32_shift4(krb5_pointer in, size_t in_length, unsigned long *cksum) { register unsigned char *data, b; - register unsigned long c = 0; + register unsigned long c = *cksum; size_t i; data = (u_char *)in; diff --git a/src/lib/crypto/openssl/hash_provider/hash_crc32.c b/src/lib/crypto/openssl/hash_provider/hash_crc32.c index e748c98cf..58efffe4f 100644 --- a/src/lib/crypto/openssl/hash_provider/hash_crc32.c +++ b/src/lib/crypto/openssl/hash_provider/hash_crc32.c @@ -33,17 +33,15 @@ static krb5_error_code k5_crc32_hash(unsigned int icount, const krb5_data *input, krb5_data *output) { - unsigned long c, cn; + unsigned long c; unsigned int i; if (output->length != CRC32_CKSUM_LENGTH) return(KRB5_CRYPTO_INTERNAL); c = 0; - for (i=0; i<icount; i++) { - mit_crc32(input[i].data, input[i].length, &cn); - c ^= cn; - } + for (i=0; i<icount; i++) + mit_crc32(input[i].data, input[i].length, &c); store_32_le(c, output->data); return(0); |