| typedef unsigned char uchar; |
| typedef unsigned short ushort; |
| typedef unsigned int uint; |
| typedef unsigned long ulong; |
| |
| static unsigned long S[1][1]={0x00820200}; |
| |
| static int body(out0,out1,ks,Eswap0,Eswap1) |
| ulong *out0,*out1; |
| int *ks; |
| ulong Eswap0,Eswap1; |
| { |
| register unsigned long l,r,t,u,v; |
| register unsigned long *s; |
| register int i,j; |
| register unsigned long E0,E1; |
| |
| l=0; |
| r=0; |
| |
| s=(ulong *)ks; |
| E0=Eswap0; |
| E1=Eswap1; |
| |
| for (i=0; i<(16 *2); i+=4) |
| { |
| v=(r^(r>>16)); |
| u=(v&E0); |
| v=(v&E1); |
| u=(u^(u<<16))^r^s[ i ]; |
| t=(v^(v<<16))^r^s[ i+1]; |
| t=(t>>4)|(t<<28); |
| 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]; |
| v=(l^(l>>16)); |
| u=(v&E0); |
| v=(v&E1); |
| u=(u^(u<<16))^l^s[ i+2 ]; |
| t=(v^(v<<16))^l^s[ i+2+1]; |
| t=(t>>4)|(t<<28); |
| r^= S[1][(t )&0x3f]; |
| } |
| t=l; |
| l=r; |
| r=t; |
| |
| t=r; |
| r=(l>>1)|(l<<31); |
| l=(t>>1)|(t<<31); |
| |
| *out0=l; |
| *out1=r; |
| return(0); |
| } |