[comp.mail.uucp] checksums

cambler@polyslo.CalPoly.EDU (Fubar) (12/28/89)

Well, i seem to have found my problem. The remote system's checksum and
mine don't agree. Here is something i hacked up to test it. For me, this
returns 210A. For the remote system, after sending the same data, it
computer E5AB. Run here on the pyramid, i get 0040. Wahhhh!!!

--- cut here ---

#define MAGIC 0xAAAA
 
#include <stdio.h>
 
unsigned int checksum(data, len)
unsigned char *data; int len;
{
 unsigned int i, j, tmp, a, b;
 
 a = 0xffff;
 b = 0;
 j = len;
 for (i = 0; i < len; i++) {
   if(a & 0x8000) {
     a <<= 1;
     a++;
   } else
     a <<= 1;
   tmp = a;
 
   a += (data[i] & 0xff);
   b += a ^ j;
   if ((a & 0xffff) <= (tmp & 0xffff))
     a ^= b;
   j--;
 }
 return (a & 0xffff);
}
 
void main(void)
{
 unsigned char ctrl;
 unsigned sum;
 int tt, xxx, yyy, size;
 char data[64];
 
 tt = 2;
 xxx = 1;
 yyy = 0;
 size = 64;
 
   strncpy(data, "S D.simpactA0619 D.simpactA0619 chris - D.simpactA0619 0666", 64);
 
   ctrl = ((tt & 3) << 6) | ((xxx & 7) << 3) | (yyy & 7);
 
   sum = MAGIC - (checksum(data, size) ^ ctrl);
 
   printf("%i: %x\n", size, sum);
}

--- cut here ---

Any ideas?

 
-- 
     Sig: ++Christopher();            | Fubar Systems BBS
Internet: cambler@polyslo.calpoly.edu | (805) 544-9234 3/12/24 8-N-1         
    Also: chris@fubarsys.slo.ca.us    | San Luis Obispo, California
     Bix: cambler                     | "G Protocol Sucks" -- Me.