summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/crypto/builtin/hash_provider/hash_crc32.c8
-rw-r--r--src/lib/crypto/crypto_tests/t_crc.c4
-rw-r--r--src/lib/crypto/krb/crc32/crc-32.h1
-rw-r--r--src/lib/crypto/krb/crc32/crc32.c4
-rw-r--r--src/lib/crypto/openssl/hash_provider/hash_crc32.c8
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);