1typedef unsigned char uchar;
2typedef unsigned short ushort;
3typedef unsigned int uint;
4typedef unsigned long ulong;
5
6static unsigned long S[1][1]={0x00820200};
7
8static int body(out0,out1,ks,Eswap0,Eswap1)
9ulong *out0,*out1;
10int *ks;
11ulong Eswap0,Eswap1;
12{
13  register unsigned long l,r,t,u,v;
14  register unsigned long *s;
15  register int i,j;
16  register unsigned long E0,E1;
17
18  l=0;
19  r=0;
20
21  s=(ulong *)ks;
22  E0=Eswap0;
23  E1=Eswap1;
24
25  for (i=0; i<(16 *2); i+=4)
26    {
27      v=(r^(r>>16));
28      u=(v&E0);
29      v=(v&E1);
30      u=(u^(u<<16))^r^s[  i  ];
31      t=(v^(v<<16))^r^s[  i+1];
32      t=(t>>4)|(t<<28);
33      l^=S[1][(t)&0x3f]| S[3][(t>> 8)&0x3f]| S[5][(t>>16)&0x3f]| S[7][(t>>24)&0x3f]| S[0][(u)&0x3f]| S[2][(u>> 8)&0x3f]| S[4][(u>>16)&0x3f]| S[6][(u>>24)&0x3f];
34      v=(l^(l>>16));
35      u=(v&E0);
36      v=(v&E1);
37      u=(u^(u<<16))^l^s[  i+2  ];
38      t=(v^(v<<16))^l^s[  i+2+1];
39      t=(t>>4)|(t<<28);
40      r^=	S[1][(t    )&0x3f];
41    }
42  t=l;
43  l=r;
44  r=t;
45
46  t=r;
47  r=(l>>1)|(l<<31);
48  l=(t>>1)|(t<<31);
49
50  *out0=l;
51  *out1=r;
52  return(0);
53}
54