111
|
1 typedef unsigned char uchar;
|
|
2 typedef unsigned short ushort;
|
|
3 typedef unsigned int uint;
|
|
4 typedef unsigned long ulong;
|
|
5
|
|
6 static unsigned long S[1][1]={0x00820200};
|
|
7
|
|
8 static int body(out0,out1,ks,Eswap0,Eswap1)
|
|
9 ulong *out0,*out1;
|
|
10 int *ks;
|
|
11 ulong 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 }
|