63 RC2_KEY *ks,
unsigned char *iv,
int encrypt)
65 register unsigned long tin0,tin1;
66 register unsigned long tout0,tout1,xor0,xor1;
75 for (l-=8; l>=0; l-=8)
84 tout0=tin[0];
l2c(tout0,out);
85 tout1=tin[1];
l2c(tout1,out);
89 c2ln(in,tin0,tin1,l+8);
95 tout0=tin[0];
l2c(tout0,out);
96 tout1=tin[1];
l2c(tout1,out);
106 for (l-=8; l>=0; l-=8)
108 c2l(in,tin0); tin[0]=tin0;
109 c2l(in,tin1); tin[1]=tin1;
120 c2l(in,tin0); tin[0]=tin0;
121 c2l(in,tin1); tin[1]=tin1;
125 l2cn(tout0,tout1,out,l+8);
132 tin0=tin1=tout0=tout1=xor0=xor1=0;
139 register RC2_INT *p0,*p1;
140 register RC2_INT x0,x1,x2,x3,
t;
144 x0=(RC2_INT)l&0xffff;
145 x1=(RC2_INT)(l>>16L);
147 x2=(RC2_INT)l&0xffff;
148 x3=(RC2_INT)(l>>16L);
153 p0=p1= &(key->
data[0]);
156 t=(x0+(x1& ~x3)+(x2&x3)+ *(p0++))&0xffff;
158 t=(x1+(x2& ~x0)+(x3&x0)+ *(p0++))&0xffff;
160 t=(x2+(x3& ~x1)+(x0&x1)+ *(p0++))&0xffff;
162 t=(x3+(x0& ~x2)+(x1&x2)+ *(p0++))&0xffff;
177 d[0]=(
unsigned long)(x0&0xffff)|((
unsigned long)(x1&0xffff)<<16L);
178 d[1]=(
unsigned long)(x2&0xffff)|((
unsigned long)(x3&0xffff)<<16L);
184 register RC2_INT *p0,*p1;
185 register RC2_INT x0,x1,x2,x3,
t;
189 x0=(RC2_INT)l&0xffff;
190 x1=(RC2_INT)(l>>16L);
192 x2=(RC2_INT)l&0xffff;
193 x3=(RC2_INT)(l>>16L);
198 p0= &(key->
data[63]);
202 t=((x3<<11)|(x3>>5))&0xffff;
203 x3=(t-(x0& ~x2)-(x1&x2)- *(p0--))&0xffff;
204 t=((x2<<13)|(x2>>3))&0xffff;
205 x2=(t-(x3& ~x1)-(x0&x1)- *(p0--))&0xffff;
206 t=((x1<<14)|(x1>>2))&0xffff;
207 x1=(t-(x2& ~x0)-(x3&x0)- *(p0--))&0xffff;
208 t=((x0<<15)|(x0>>1))&0xffff;
209 x0=(t-(x1& ~x3)-(x2&x3)- *(p0--))&0xffff;
216 x3=(x3-p1[x2&0x3f])&0xffff;
217 x2=(x2-p1[x1&0x3f])&0xffff;
218 x1=(x1-p1[x0&0x3f])&0xffff;
219 x0=(x0-p1[x3&0x3f])&0xffff;
223 d[0]=(
unsigned long)(x0&0xffff)|((
unsigned long)(x1&0xffff)<<16L);
224 d[1]=(
unsigned long)(x2&0xffff)|((
unsigned long)(x3&0xffff)<<16L);