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
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);
block[i] = i % 256;
times(&before);
for (i = 0; i < nblk; i++) {
+ cksum = 0;
mit_crc32(block + i * blksiz, blksiz, &cksum);
}
#ifdef CRC32_SHIFT4
times(&before);
for (i = 0; i < nblk; i++) {
+ cksum = 0;
mit_crc32_shift4(block + i * blksiz, blksiz, &cksum);
}
times(&after);
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:
#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);
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;
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;
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);