|
|
researchv10 Norman
#include <stdio.h>
#include <string.h>
char *xs();
unsigned long xsum();
char *
xs(key,body,n)
char *key, *body;
{
unsigned long t;
unsigned int x[2];
static char s[17];
char key2[8];
int i;
strncpy(key2,key,8);
sprintf(s, "%d", n);
xinit();
xstring(s, strlen(s));
xstring("$$$",3);
xstring(key2,8);
xstring(body,n);
xstring("$$$",3);
xstring(body,n);
xstring(key2,8);
xstring("omega",5);
t = xsum();
x[0] = t & 0xffff;
x[1] = (t>>16) & 0xffff;
sprintf(s, "%4x%4x", x[0], x[1]);
xstring("digamma",7);
t = xsum();
x[0] ^= t & 0xffff;
x[1] ^= (t>>16) & 0xffff;
sprintf(s+8, "%4x%4x", x[0], x[1]);
for(i=0; i<16; i++) if(s[i]==' ') s[i] = '0';
return s;
}
#define SRLEN 5
static unsigned long sr[SRLEN], *sa, *sb;
xinit()
{
int i;
for(i=0; i<SRLEN; i++) sr[i] = 0;
sa = &sr[0];
sb = &sr[1];
}
unsigned long xsum() {
return *sa ^ *sb;
}
xstring(s,n)
register char *s;
{
while(n-->0)
xcrank(*s++);
}
unsigned long
phi(x)
register unsigned long x;
{
do {
x += 14921776 + x*(17761492 + x);
x ^= 0x5827066;
x += 0x2c357 + x*(10661688 ^ x);
x ^= x>>16;
} while((x&0x80000002) == 2);
return x;
}
xcrank(x)
register x;
{
*sb++ += phi((x&0xff) + *sa++);
if(sa >= &sr[SRLEN]) sa = &sr[0];
if(sb >= &sr[SRLEN]) sb = &sr[0];
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.