Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!uakari.primate.wisc.edu!brutus.cs.uiuc.edu!jarthur!polyslo!cambler From: cambler@polyslo.CalPoly.EDU (Fubar) Newsgroups: comp.mail.uucp Subject: checksums Message-ID: <1989Dec28.054145.20909@polyslo.CalPoly.EDU> Date: 28 Dec 89 05:41:45 GMT Reply-To: cambler@polyslo.CalPoly.EDU (Fubar) Organization: Dr. Ho's secret laboratory and day care centre. Lines: 67 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 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.