diff options
author | Greg Hudson <ghudson@mit.edu> | 2009-11-30 16:12:36 +0000 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2009-11-30 16:12:36 +0000 |
commit | a8927d0c4e159601aab0d68740dfe0b53ccf9328 (patch) | |
tree | af470cc2de44ed23885d91a76f312a0a68991db0 /src/lib/crypto/krb/crc32 | |
parent | bb7801ed460acdfde84de1310494e11ea62cd06a (diff) | |
download | krb5-a8927d0c4e159601aab0d68740dfe0b53ccf9328.zip krb5-a8927d0c4e159601aab0d68740dfe0b53ccf9328.tar.gz krb5-a8927d0c4e159601aab0d68740dfe0b53ccf9328.tar.bz2 |
Make the crc32 hash provider correctly chain multiple input buffers,
so that it returns the same result if you pass it one big buffer or
many small buffers containing the same data. To do this, change the
contract of mit_crc32 so that the cksum parameter is in-out.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@23386 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/crypto/krb/crc32')
-rw-r--r-- | src/lib/crypto/krb/crc32/crc-32.h | 1 | ||||
-rw-r--r-- | src/lib/crypto/krb/crc32/crc32.c | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/lib/crypto/krb/crc32/crc-32.h b/src/lib/crypto/krb/crc32/crc-32.h index 95001f5..5c28b8b 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 4909798..ef364f3 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; |