64 #define CAST_exp(l,A,a,n) \
67 a[n+2]=(l>> 8)&0xff; \
68 a[n+1]=(l>>16)&0xff; \
71 #define S4 CAST_S_table4
72 #define S5 CAST_S_table5
73 #define S6 CAST_S_table6
74 #define S7 CAST_S_table7
79 private_CAST_set_key(key, len, data);
81 void private_CAST_set_key(
CAST_KEY *key,
int len,
const unsigned char *data)
91 for (i=0; i<16; i++) x[i]=0;
101 X[0]=((x[ 0]<<24)|(x[ 1]<<16)|(x[ 2]<<8)|x[ 3])&0xffffffffL;
102 X[1]=((x[ 4]<<24)|(x[ 5]<<16)|(x[ 6]<<8)|x[ 7])&0xffffffffL;
103 X[2]=((x[ 8]<<24)|(x[ 9]<<16)|(x[10]<<8)|x[11])&0xffffffffL;
104 X[3]=((x[12]<<24)|(x[13]<<16)|(x[14]<<8)|x[15])&0xffffffffL;
108 l=X[0]^
S4[x[13]]^
S5[x[15]]^
S6[x[12]]^
S7[x[14]]^
S6[x[ 8]];
110 l=X[2]^
S4[z[ 0]]^
S5[z[ 2]]^
S6[z[ 1]]^
S7[z[ 3]]^
S7[x[10]];
112 l=X[3]^
S4[z[ 7]]^
S5[z[ 6]]^
S6[z[ 5]]^
S7[z[ 4]]^
S4[x[ 9]];
114 l=X[1]^
S4[z[10]]^
S5[z[ 9]]^
S6[z[11]]^
S7[z[ 8]]^
S5[x[11]];
117 K[ 0]=
S4[z[ 8]]^
S5[z[ 9]]^
S6[z[ 7]]^
S7[z[ 6]]^
S4[z[ 2]];
118 K[ 1]=
S4[z[10]]^
S5[z[11]]^
S6[z[ 5]]^
S7[z[ 4]]^
S5[z[ 6]];
119 K[ 2]=
S4[z[12]]^
S5[z[13]]^
S6[z[ 3]]^
S7[z[ 2]]^
S6[z[ 9]];
120 K[ 3]=
S4[z[14]]^
S5[z[15]]^
S6[z[ 1]]^
S7[z[ 0]]^
S7[z[12]];
122 l=Z[2]^
S4[z[ 5]]^
S5[z[ 7]]^
S6[z[ 4]]^
S7[z[ 6]]^
S6[z[ 0]];
124 l=Z[0]^
S4[x[ 0]]^
S5[x[ 2]]^
S6[x[ 1]]^
S7[x[ 3]]^
S7[z[ 2]];
126 l=Z[1]^
S4[x[ 7]]^
S5[x[ 6]]^
S6[x[ 5]]^
S7[x[ 4]]^
S4[z[ 1]];
128 l=Z[3]^
S4[x[10]]^
S5[x[ 9]]^
S6[x[11]]^
S7[x[ 8]]^
S5[z[ 3]];
131 K[ 4]=
S4[x[ 3]]^
S5[x[ 2]]^
S6[x[12]]^
S7[x[13]]^
S4[x[ 8]];
132 K[ 5]=
S4[x[ 1]]^
S5[x[ 0]]^
S6[x[14]]^
S7[x[15]]^
S5[x[13]];
133 K[ 6]=
S4[x[ 7]]^
S5[x[ 6]]^
S6[x[ 8]]^
S7[x[ 9]]^
S6[x[ 3]];
134 K[ 7]=
S4[x[ 5]]^
S5[x[ 4]]^
S6[x[10]]^
S7[x[11]]^
S7[x[ 7]];
136 l=X[0]^
S4[x[13]]^
S5[x[15]]^
S6[x[12]]^
S7[x[14]]^
S6[x[ 8]];
138 l=X[2]^
S4[z[ 0]]^
S5[z[ 2]]^
S6[z[ 1]]^
S7[z[ 3]]^
S7[x[10]];
140 l=X[3]^
S4[z[ 7]]^
S5[z[ 6]]^
S6[z[ 5]]^
S7[z[ 4]]^
S4[x[ 9]];
142 l=X[1]^
S4[z[10]]^
S5[z[ 9]]^
S6[z[11]]^
S7[z[ 8]]^
S5[x[11]];
145 K[ 8]=
S4[z[ 3]]^
S5[z[ 2]]^
S6[z[12]]^
S7[z[13]]^
S4[z[ 9]];
146 K[ 9]=
S4[z[ 1]]^
S5[z[ 0]]^
S6[z[14]]^
S7[z[15]]^
S5[z[12]];
147 K[10]=
S4[z[ 7]]^
S5[z[ 6]]^
S6[z[ 8]]^
S7[z[ 9]]^
S6[z[ 2]];
148 K[11]=
S4[z[ 5]]^
S5[z[ 4]]^
S6[z[10]]^
S7[z[11]]^
S7[z[ 6]];
150 l=Z[2]^
S4[z[ 5]]^
S5[z[ 7]]^
S6[z[ 4]]^
S7[z[ 6]]^
S6[z[ 0]];
152 l=Z[0]^
S4[x[ 0]]^
S5[x[ 2]]^
S6[x[ 1]]^
S7[x[ 3]]^
S7[z[ 2]];
154 l=Z[1]^
S4[x[ 7]]^
S5[x[ 6]]^
S6[x[ 5]]^
S7[x[ 4]]^
S4[z[ 1]];
156 l=Z[3]^
S4[x[10]]^
S5[x[ 9]]^
S6[x[11]]^
S7[x[ 8]]^
S5[z[ 3]];
159 K[12]=
S4[x[ 8]]^
S5[x[ 9]]^
S6[x[ 7]]^
S7[x[ 6]]^
S4[x[ 3]];
160 K[13]=
S4[x[10]]^
S5[x[11]]^
S6[x[ 5]]^
S7[x[ 4]]^
S5[x[ 7]];
161 K[14]=
S4[x[12]]^
S5[x[13]]^
S6[x[ 3]]^
S7[x[ 2]]^
S6[x[ 8]];
162 K[15]=
S4[x[14]]^
S5[x[15]]^
S6[x[ 1]]^
S7[x[ 0]]^
S7[x[13]];
170 key->
data[i*2+1]=((k[i+16])+16)&0x1f;