summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/cast
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/cast')
-rw-r--r--src/lib/libcrypto/cast/Makefile.ssl109
-rw-r--r--src/lib/libcrypto/cast/Makefile.uni123
-rw-r--r--src/lib/libcrypto/cast/asm/c-win32.asm940
-rw-r--r--src/lib/libcrypto/cast/asm/cx86unix.cpp1010
4 files changed, 2182 insertions, 0 deletions
diff --git a/src/lib/libcrypto/cast/Makefile.ssl b/src/lib/libcrypto/cast/Makefile.ssl
new file mode 100644
index 0000000000..0143827ae5
--- /dev/null
+++ b/src/lib/libcrypto/cast/Makefile.ssl
@@ -0,0 +1,109 @@
1#
2# SSLeay/crypto/cast/Makefile
3#
4
5DIR= cast
6TOP= ../..
7CC= cc
8CPP= $(CC) -E
9INCLUDES=
10CFLAG=-g
11INSTALLTOP=/usr/local/ssl
12MAKE= make -f Makefile.ssl
13MAKEDEPEND= makedepend -f Makefile.ssl
14MAKEFILE= Makefile.ssl
15AR= ar r
16
17CAST_ENC=c_enc.o
18# or use
19#CAST_ENC=asm/cx86-elf.o
20#CAST_ENC=asm/cx86-out.o
21#CAST_ENC=asm/cx86-sol.o
22#CAST_ENC=asm/cx86bdsi.o
23
24CFLAGS= $(INCLUDES) $(CFLAG)
25
26GENERAL=Makefile
27TEST=casttest.c
28APPS=
29
30LIB=$(TOP)/libcrypto.a
31LIBSRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
32LIBOBJ=c_skey.o c_ecb.o $(CAST_ENC) c_cfb64.o c_ofb64.o
33
34SRC= $(LIBSRC)
35
36EXHEADER= cast.h
37HEADER= cast_s.h cast_lcl.h $(EXHEADER)
38
39ALL= $(GENERAL) $(SRC) $(HEADER)
40
41top:
42 (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
43
44all: lib
45
46lib: $(LIBOBJ)
47 $(AR) $(LIB) $(LIBOBJ)
48 sh $(TOP)/util/ranlib.sh $(LIB)
49 @touch lib
50
51# elf
52asm/cx86-elf.o: asm/cx86unix.cpp
53 $(CPP) -DELF asm/cx86unix.cpp | as -o asm/cx86-elf.o
54
55# solaris
56asm/cx86-sol.o: asm/cx86unix.cpp
57 $(CC) -E -DSOL asm/cx86unix.cpp | sed 's/^#.*//' > asm/cx86-sol.s
58 as -o asm/cx86-sol.o asm/cx86-sol.s
59 rm -f asm/cx86-sol.s
60
61# a.out
62asm/cx86-out.o: asm/cx86unix.cpp
63 $(CPP) -DOUT asm/cx86unix.cpp | as -o asm/cx86-out.o
64
65# bsdi
66asm/cx86bsdi.o: asm/cx86unix.cpp
67 $(CPP) -DBSDI asm/cx86unix.cpp | as -o asm/cx86bsdi.o
68
69asm/cx86unix.cpp:
70 (cd asm; perl cast-586.pl cpp >cx86unix.cpp)
71
72files:
73 perl $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
74
75links:
76 /bin/rm -f Makefile
77 $(TOP)/util/point.sh Makefile.ssl Makefile ;
78 $(TOP)/util/mklink.sh ../../include $(EXHEADER)
79 $(TOP)/util/mklink.sh ../../test $(TEST)
80 $(TOP)/util/mklink.sh ../../apps $(APPS)
81
82install:
83 @for i in $(EXHEADER) ; \
84 do \
85 (cp $$i $(INSTALLTOP)/include/$$i; \
86 chmod 644 $(INSTALLTOP)/include/$$i ); \
87 done;
88
89tags:
90 ctags $(SRC)
91
92tests:
93
94lint:
95 lint -DLINT $(INCLUDES) $(SRC)>fluff
96
97depend:
98 $(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
99
100dclean:
101 perl -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
102 mv -f Makefile.new $(MAKEFILE)
103
104clean:
105 /bin/rm -f *.o asm/*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
106
107errors:
108
109# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/src/lib/libcrypto/cast/Makefile.uni b/src/lib/libcrypto/cast/Makefile.uni
new file mode 100644
index 0000000000..780073e75b
--- /dev/null
+++ b/src/lib/libcrypto/cast/Makefile.uni
@@ -0,0 +1,123 @@
1# Targets
2# make - twidle the options yourself :-)
3# make cc - standard cc options
4# make gcc - standard gcc options
5# make x86-elf - linux-elf etc
6# make x86-out - linux-a.out, FreeBSD etc
7# make x86-solaris
8# make x86-bdsi
9
10# There are 3 possible performance options, experiment :-)
11#OPTS= -DBF_PTR
12#OPTS= -DBF_PTR2
13OPTS=
14
15DIR= cast
16TOP= .
17CC= gcc
18CFLAG= -O3 -fomit-frame-pointer
19
20CPP= $(CC) -E
21INCLUDES=
22INSTALLTOP=/usr/local/lib
23MAKE= make
24MAKEDEPEND= makedepend
25MAKEFILE= Makefile.uni
26AR= ar r
27
28CAST_ENC=c_enc.o
29# or use
30#CAST_ENC=asm/cx86-elf.o
31#CAST_ENC=asm/cx86-out.o
32#CAST_ENC=asm/cx86-sol.o
33#CAST_ENC=asm/cx86bdsi.o
34
35CFLAGS= $(OPTS) $(INCLUDES) $(CFLAG) -DFULL_TEST
36
37GENERAL=Makefile
38TEST=casttest
39APP1=cast_spd
40APP2=castopts
41APPS=$(APP1) $(APP2)
42
43LIB=libcast.a
44LIBSRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
45LIBOBJ=c_skey.o c_ecb.o $(CAST_ENC) c_cfb64.o c_ofb64.o
46
47SRC= $(LIBSRC)
48
49EXHEADER= cast.h
50HEADER= cast_lcl.h $(EXHEADER)
51
52ALL= $(GENERAL) $(SRC) $(HEADER)
53
54all: $(LIB) $(TEST) $(APPS)
55
56$(LIB): $(LIBOBJ)
57 $(AR) $(LIB) $(LIBOBJ)
58 sh $(TOP)/ranlib.sh $(LIB)
59# elf
60asm/cx86-elf.o: asm/cx86unix.cpp
61 $(CPP) -DELF asm/cx86unix.cpp | as -o asm/cx86-elf.o
62
63# solaris
64asm/cx86-sol.o: asm/cx86unix.cpp
65 $(CC) -E -DSOL asm/cx86unix.cpp | sed 's/^#.*//' > asm/cx86-sol.s
66 as -o asm/cx86-sol.o asm/cx86-sol.s
67 rm -f asm/cx86-sol.s
68
69# a.out
70asm/cx86-out.o: asm/cx86unix.cpp
71 $(CPP) -DOUT asm/cx86unix.cpp | as -o asm/cx86-out.o
72
73# bsdi
74asm/cx86bsdi.o: asm/cx86unix.cpp
75 $(CPP) -DBSDI asm/cx86unix.cpp | as -o asm/cx86bsdi.o
76
77asm/cx86unix.cpp:
78 (cd asm; perl cast-586.pl cpp >cx86unix.cpp)
79
80test: $(TEST)
81 ./$(TEST)
82
83$(TEST): $(TEST).c $(LIB)
84 $(CC) -o $(TEST) $(CFLAGS) $(TEST).c $(LIB)
85
86$(APP1): $(APP1).c $(LIB)
87 $(CC) -o $(APP1) $(CFLAGS) $(APP1).c $(LIB)
88
89$(APP2): $(APP2).c $(LIB)
90 $(CC) -o $(APP2) $(CFLAGS) $(APP2).c $(LIB)
91
92lint:
93 lint -DLINT $(INCLUDES) $(SRC)>fluff
94
95depend:
96 $(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
97
98dclean:
99 perl -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
100 mv -f Makefile.new $(MAKEFILE)
101
102clean:
103 /bin/rm -f $(LIB) $(TEST) $(APPS) *.o asm/*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
104
105cc:
106 $(MAKE) CC="cc" CFLAG="-O" all
107
108gcc:
109 $(MAKE) CC="gcc" CFLAGS="-O3 -fomit-frame-pointer" all
110
111x86-elf:
112 $(MAKE) CAST_ENC="asm/cx86-elf.o" CFLAG="-DELF $(CFLAGS)" all
113
114x86-out:
115 $(MAKE) CAST_ENC="asm/cx86-out.o" CFLAG="-DOUT $(CFLAGS)" all
116
117x86-solaris:
118 $(MAKE) CAST_ENC="asm/cx86-sol.o" CFLAG="-DSOL $(CFLAGS)" all
119
120x86-bdsi:
121 $(MAKE) CAST_ENC="asm/cx86-bdsi.o" CFLAG="-DBDSI $(CFLAGS)" all
122
123# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/src/lib/libcrypto/cast/asm/c-win32.asm b/src/lib/libcrypto/cast/asm/c-win32.asm
new file mode 100644
index 0000000000..a1d8a2671a
--- /dev/null
+++ b/src/lib/libcrypto/cast/asm/c-win32.asm
@@ -0,0 +1,940 @@
1 ; Don't even think of reading this code
2 ; It was automatically generated by cast-586.pl
3 ; Which is a perl program used to generate the x86 assember for
4 ; any of elf, a.out, BSDI,Win32, or Solaris
5 ; eric <eay@cryptsoft.com>
6 ;
7 TITLE cast-586.asm
8 .486
9.model FLAT
10_TEXT SEGMENT
11PUBLIC _CAST_encrypt
12EXTERN _CAST_S_table0:DWORD
13EXTERN _CAST_S_table1:DWORD
14EXTERN _CAST_S_table2:DWORD
15EXTERN _CAST_S_table3:DWORD
16
17_CAST_encrypt PROC NEAR
18 ;
19 push ebp
20 push ebx
21 mov ebx, DWORD PTR 12[esp]
22 mov ebp, DWORD PTR 16[esp]
23 push esi
24 push edi
25 ; Load the 2 words
26 mov edi, DWORD PTR [ebx]
27 mov esi, DWORD PTR 4[ebx]
28 xor eax, eax
29 ; round 0
30 mov edx, DWORD PTR [ebp]
31 mov ecx, DWORD PTR 4[ebp]
32 add edx, esi
33 rol edx, cl
34 mov ebx, edx
35 xor ecx, ecx
36 mov cl, dh
37 and ebx, 255
38 shr edx, 16
39 xor eax, eax
40 mov al, dh
41 and edx, 255
42 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
43 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
44 xor ecx, ebx
45 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
46 sub ecx, ebx
47 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
48 add ecx, ebx
49 xor edi, ecx
50 ; round 1
51 mov edx, DWORD PTR 8[ebp]
52 mov ecx, DWORD PTR 12[ebp]
53 xor edx, edi
54 rol edx, cl
55 mov ebx, edx
56 xor ecx, ecx
57 mov cl, dh
58 and ebx, 255
59 shr edx, 16
60 xor eax, eax
61 mov al, dh
62 and edx, 255
63 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
64 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
65 sub ecx, ebx
66 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
67 add ecx, ebx
68 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
69 xor ecx, ebx
70 xor esi, ecx
71 ; round 2
72 mov edx, DWORD PTR 16[ebp]
73 mov ecx, DWORD PTR 20[ebp]
74 sub edx, esi
75 rol edx, cl
76 mov ebx, edx
77 xor ecx, ecx
78 mov cl, dh
79 and ebx, 255
80 shr edx, 16
81 xor eax, eax
82 mov al, dh
83 and edx, 255
84 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
85 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
86 add ecx, ebx
87 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
88 xor ecx, ebx
89 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
90 sub ecx, ebx
91 xor edi, ecx
92 ; round 3
93 mov edx, DWORD PTR 24[ebp]
94 mov ecx, DWORD PTR 28[ebp]
95 add edx, edi
96 rol edx, cl
97 mov ebx, edx
98 xor ecx, ecx
99 mov cl, dh
100 and ebx, 255
101 shr edx, 16
102 xor eax, eax
103 mov al, dh
104 and edx, 255
105 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
106 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
107 xor ecx, ebx
108 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
109 sub ecx, ebx
110 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
111 add ecx, ebx
112 xor esi, ecx
113 ; round 4
114 mov edx, DWORD PTR 32[ebp]
115 mov ecx, DWORD PTR 36[ebp]
116 xor edx, esi
117 rol edx, cl
118 mov ebx, edx
119 xor ecx, ecx
120 mov cl, dh
121 and ebx, 255
122 shr edx, 16
123 xor eax, eax
124 mov al, dh
125 and edx, 255
126 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
127 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
128 sub ecx, ebx
129 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
130 add ecx, ebx
131 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
132 xor ecx, ebx
133 xor edi, ecx
134 ; round 5
135 mov edx, DWORD PTR 40[ebp]
136 mov ecx, DWORD PTR 44[ebp]
137 sub edx, edi
138 rol edx, cl
139 mov ebx, edx
140 xor ecx, ecx
141 mov cl, dh
142 and ebx, 255
143 shr edx, 16
144 xor eax, eax
145 mov al, dh
146 and edx, 255
147 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
148 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
149 add ecx, ebx
150 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
151 xor ecx, ebx
152 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
153 sub ecx, ebx
154 xor esi, ecx
155 ; round 6
156 mov edx, DWORD PTR 48[ebp]
157 mov ecx, DWORD PTR 52[ebp]
158 add edx, esi
159 rol edx, cl
160 mov ebx, edx
161 xor ecx, ecx
162 mov cl, dh
163 and ebx, 255
164 shr edx, 16
165 xor eax, eax
166 mov al, dh
167 and edx, 255
168 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
169 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
170 xor ecx, ebx
171 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
172 sub ecx, ebx
173 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
174 add ecx, ebx
175 xor edi, ecx
176 ; round 7
177 mov edx, DWORD PTR 56[ebp]
178 mov ecx, DWORD PTR 60[ebp]
179 xor edx, edi
180 rol edx, cl
181 mov ebx, edx
182 xor ecx, ecx
183 mov cl, dh
184 and ebx, 255
185 shr edx, 16
186 xor eax, eax
187 mov al, dh
188 and edx, 255
189 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
190 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
191 sub ecx, ebx
192 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
193 add ecx, ebx
194 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
195 xor ecx, ebx
196 xor esi, ecx
197 ; round 8
198 mov edx, DWORD PTR 64[ebp]
199 mov ecx, DWORD PTR 68[ebp]
200 sub edx, esi
201 rol edx, cl
202 mov ebx, edx
203 xor ecx, ecx
204 mov cl, dh
205 and ebx, 255
206 shr edx, 16
207 xor eax, eax
208 mov al, dh
209 and edx, 255
210 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
211 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
212 add ecx, ebx
213 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
214 xor ecx, ebx
215 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
216 sub ecx, ebx
217 xor edi, ecx
218 ; round 9
219 mov edx, DWORD PTR 72[ebp]
220 mov ecx, DWORD PTR 76[ebp]
221 add edx, edi
222 rol edx, cl
223 mov ebx, edx
224 xor ecx, ecx
225 mov cl, dh
226 and ebx, 255
227 shr edx, 16
228 xor eax, eax
229 mov al, dh
230 and edx, 255
231 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
232 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
233 xor ecx, ebx
234 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
235 sub ecx, ebx
236 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
237 add ecx, ebx
238 xor esi, ecx
239 ; round 10
240 mov edx, DWORD PTR 80[ebp]
241 mov ecx, DWORD PTR 84[ebp]
242 xor edx, esi
243 rol edx, cl
244 mov ebx, edx
245 xor ecx, ecx
246 mov cl, dh
247 and ebx, 255
248 shr edx, 16
249 xor eax, eax
250 mov al, dh
251 and edx, 255
252 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
253 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
254 sub ecx, ebx
255 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
256 add ecx, ebx
257 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
258 xor ecx, ebx
259 xor edi, ecx
260 ; round 11
261 mov edx, DWORD PTR 88[ebp]
262 mov ecx, DWORD PTR 92[ebp]
263 sub edx, edi
264 rol edx, cl
265 mov ebx, edx
266 xor ecx, ecx
267 mov cl, dh
268 and ebx, 255
269 shr edx, 16
270 xor eax, eax
271 mov al, dh
272 and edx, 255
273 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
274 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
275 add ecx, ebx
276 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
277 xor ecx, ebx
278 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
279 sub ecx, ebx
280 xor esi, ecx
281 ; round 12
282 mov edx, DWORD PTR 96[ebp]
283 mov ecx, DWORD PTR 100[ebp]
284 add edx, esi
285 rol edx, cl
286 mov ebx, edx
287 xor ecx, ecx
288 mov cl, dh
289 and ebx, 255
290 shr edx, 16
291 xor eax, eax
292 mov al, dh
293 and edx, 255
294 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
295 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
296 xor ecx, ebx
297 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
298 sub ecx, ebx
299 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
300 add ecx, ebx
301 xor edi, ecx
302 ; round 13
303 mov edx, DWORD PTR 104[ebp]
304 mov ecx, DWORD PTR 108[ebp]
305 xor edx, edi
306 rol edx, cl
307 mov ebx, edx
308 xor ecx, ecx
309 mov cl, dh
310 and ebx, 255
311 shr edx, 16
312 xor eax, eax
313 mov al, dh
314 and edx, 255
315 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
316 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
317 sub ecx, ebx
318 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
319 add ecx, ebx
320 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
321 xor ecx, ebx
322 xor esi, ecx
323 ; round 14
324 mov edx, DWORD PTR 112[ebp]
325 mov ecx, DWORD PTR 116[ebp]
326 sub edx, esi
327 rol edx, cl
328 mov ebx, edx
329 xor ecx, ecx
330 mov cl, dh
331 and ebx, 255
332 shr edx, 16
333 xor eax, eax
334 mov al, dh
335 and edx, 255
336 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
337 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
338 add ecx, ebx
339 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
340 xor ecx, ebx
341 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
342 sub ecx, ebx
343 xor edi, ecx
344 ; round 15
345 mov edx, DWORD PTR 120[ebp]
346 mov ecx, DWORD PTR 124[ebp]
347 add edx, edi
348 rol edx, cl
349 mov ebx, edx
350 xor ecx, ecx
351 mov cl, dh
352 and ebx, 255
353 shr edx, 16
354 xor eax, eax
355 mov al, dh
356 and edx, 255
357 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
358 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
359 xor ecx, ebx
360 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
361 sub ecx, ebx
362 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
363 add ecx, ebx
364 mov eax, DWORD PTR 20[esp]
365 xor esi, ecx
366 nop
367 mov DWORD PTR 4[eax],edi
368 mov DWORD PTR [eax],esi
369 pop edi
370 pop esi
371 pop ebx
372 pop ebp
373 ret
374_CAST_encrypt ENDP
375_TEXT ENDS
376_TEXT SEGMENT
377PUBLIC _CAST_decrypt
378EXTERN _CAST_S_table0:DWORD
379EXTERN _CAST_S_table1:DWORD
380EXTERN _CAST_S_table2:DWORD
381EXTERN _CAST_S_table3:DWORD
382
383_CAST_decrypt PROC NEAR
384 ;
385 push ebp
386 push ebx
387 mov ebx, DWORD PTR 12[esp]
388 mov ebp, DWORD PTR 16[esp]
389 push esi
390 push edi
391 ; Load the 2 words
392 mov edi, DWORD PTR [ebx]
393 mov esi, DWORD PTR 4[ebx]
394 xor eax, eax
395 ; round 15
396 mov edx, DWORD PTR 120[ebp]
397 mov ecx, DWORD PTR 124[ebp]
398 add edx, esi
399 rol edx, cl
400 mov ebx, edx
401 xor ecx, ecx
402 mov cl, dh
403 and ebx, 255
404 shr edx, 16
405 xor eax, eax
406 mov al, dh
407 and edx, 255
408 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
409 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
410 xor ecx, ebx
411 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
412 sub ecx, ebx
413 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
414 add ecx, ebx
415 xor edi, ecx
416 ; round 14
417 mov edx, DWORD PTR 112[ebp]
418 mov ecx, DWORD PTR 116[ebp]
419 sub edx, edi
420 rol edx, cl
421 mov ebx, edx
422 xor ecx, ecx
423 mov cl, dh
424 and ebx, 255
425 shr edx, 16
426 xor eax, eax
427 mov al, dh
428 and edx, 255
429 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
430 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
431 add ecx, ebx
432 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
433 xor ecx, ebx
434 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
435 sub ecx, ebx
436 xor esi, ecx
437 ; round 13
438 mov edx, DWORD PTR 104[ebp]
439 mov ecx, DWORD PTR 108[ebp]
440 xor edx, esi
441 rol edx, cl
442 mov ebx, edx
443 xor ecx, ecx
444 mov cl, dh
445 and ebx, 255
446 shr edx, 16
447 xor eax, eax
448 mov al, dh
449 and edx, 255
450 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
451 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
452 sub ecx, ebx
453 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
454 add ecx, ebx
455 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
456 xor ecx, ebx
457 xor edi, ecx
458 ; round 12
459 mov edx, DWORD PTR 96[ebp]
460 mov ecx, DWORD PTR 100[ebp]
461 add edx, edi
462 rol edx, cl
463 mov ebx, edx
464 xor ecx, ecx
465 mov cl, dh
466 and ebx, 255
467 shr edx, 16
468 xor eax, eax
469 mov al, dh
470 and edx, 255
471 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
472 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
473 xor ecx, ebx
474 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
475 sub ecx, ebx
476 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
477 add ecx, ebx
478 xor esi, ecx
479 ; round 11
480 mov edx, DWORD PTR 88[ebp]
481 mov ecx, DWORD PTR 92[ebp]
482 sub edx, esi
483 rol edx, cl
484 mov ebx, edx
485 xor ecx, ecx
486 mov cl, dh
487 and ebx, 255
488 shr edx, 16
489 xor eax, eax
490 mov al, dh
491 and edx, 255
492 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
493 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
494 add ecx, ebx
495 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
496 xor ecx, ebx
497 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
498 sub ecx, ebx
499 xor edi, ecx
500 ; round 10
501 mov edx, DWORD PTR 80[ebp]
502 mov ecx, DWORD PTR 84[ebp]
503 xor edx, edi
504 rol edx, cl
505 mov ebx, edx
506 xor ecx, ecx
507 mov cl, dh
508 and ebx, 255
509 shr edx, 16
510 xor eax, eax
511 mov al, dh
512 and edx, 255
513 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
514 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
515 sub ecx, ebx
516 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
517 add ecx, ebx
518 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
519 xor ecx, ebx
520 xor esi, ecx
521 ; round 9
522 mov edx, DWORD PTR 72[ebp]
523 mov ecx, DWORD PTR 76[ebp]
524 add edx, esi
525 rol edx, cl
526 mov ebx, edx
527 xor ecx, ecx
528 mov cl, dh
529 and ebx, 255
530 shr edx, 16
531 xor eax, eax
532 mov al, dh
533 and edx, 255
534 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
535 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
536 xor ecx, ebx
537 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
538 sub ecx, ebx
539 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
540 add ecx, ebx
541 xor edi, ecx
542 ; round 8
543 mov edx, DWORD PTR 64[ebp]
544 mov ecx, DWORD PTR 68[ebp]
545 sub edx, edi
546 rol edx, cl
547 mov ebx, edx
548 xor ecx, ecx
549 mov cl, dh
550 and ebx, 255
551 shr edx, 16
552 xor eax, eax
553 mov al, dh
554 and edx, 255
555 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
556 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
557 add ecx, ebx
558 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
559 xor ecx, ebx
560 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
561 sub ecx, ebx
562 xor esi, ecx
563 ; round 7
564 mov edx, DWORD PTR 56[ebp]
565 mov ecx, DWORD PTR 60[ebp]
566 xor edx, esi
567 rol edx, cl
568 mov ebx, edx
569 xor ecx, ecx
570 mov cl, dh
571 and ebx, 255
572 shr edx, 16
573 xor eax, eax
574 mov al, dh
575 and edx, 255
576 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
577 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
578 sub ecx, ebx
579 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
580 add ecx, ebx
581 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
582 xor ecx, ebx
583 xor edi, ecx
584 ; round 6
585 mov edx, DWORD PTR 48[ebp]
586 mov ecx, DWORD PTR 52[ebp]
587 add edx, edi
588 rol edx, cl
589 mov ebx, edx
590 xor ecx, ecx
591 mov cl, dh
592 and ebx, 255
593 shr edx, 16
594 xor eax, eax
595 mov al, dh
596 and edx, 255
597 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
598 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
599 xor ecx, ebx
600 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
601 sub ecx, ebx
602 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
603 add ecx, ebx
604 xor esi, ecx
605 ; round 5
606 mov edx, DWORD PTR 40[ebp]
607 mov ecx, DWORD PTR 44[ebp]
608 sub edx, esi
609 rol edx, cl
610 mov ebx, edx
611 xor ecx, ecx
612 mov cl, dh
613 and ebx, 255
614 shr edx, 16
615 xor eax, eax
616 mov al, dh
617 and edx, 255
618 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
619 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
620 add ecx, ebx
621 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
622 xor ecx, ebx
623 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
624 sub ecx, ebx
625 xor edi, ecx
626 ; round 4
627 mov edx, DWORD PTR 32[ebp]
628 mov ecx, DWORD PTR 36[ebp]
629 xor edx, edi
630 rol edx, cl
631 mov ebx, edx
632 xor ecx, ecx
633 mov cl, dh
634 and ebx, 255
635 shr edx, 16
636 xor eax, eax
637 mov al, dh
638 and edx, 255
639 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
640 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
641 sub ecx, ebx
642 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
643 add ecx, ebx
644 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
645 xor ecx, ebx
646 xor esi, ecx
647 ; round 3
648 mov edx, DWORD PTR 24[ebp]
649 mov ecx, DWORD PTR 28[ebp]
650 add edx, esi
651 rol edx, cl
652 mov ebx, edx
653 xor ecx, ecx
654 mov cl, dh
655 and ebx, 255
656 shr edx, 16
657 xor eax, eax
658 mov al, dh
659 and edx, 255
660 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
661 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
662 xor ecx, ebx
663 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
664 sub ecx, ebx
665 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
666 add ecx, ebx
667 xor edi, ecx
668 ; round 2
669 mov edx, DWORD PTR 16[ebp]
670 mov ecx, DWORD PTR 20[ebp]
671 sub edx, edi
672 rol edx, cl
673 mov ebx, edx
674 xor ecx, ecx
675 mov cl, dh
676 and ebx, 255
677 shr edx, 16
678 xor eax, eax
679 mov al, dh
680 and edx, 255
681 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
682 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
683 add ecx, ebx
684 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
685 xor ecx, ebx
686 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
687 sub ecx, ebx
688 xor esi, ecx
689 ; round 1
690 mov edx, DWORD PTR 8[ebp]
691 mov ecx, DWORD PTR 12[ebp]
692 xor edx, esi
693 rol edx, cl
694 mov ebx, edx
695 xor ecx, ecx
696 mov cl, dh
697 and ebx, 255
698 shr edx, 16
699 xor eax, eax
700 mov al, dh
701 and edx, 255
702 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
703 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
704 sub ecx, ebx
705 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
706 add ecx, ebx
707 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
708 xor ecx, ebx
709 xor edi, ecx
710 ; round 0
711 mov edx, DWORD PTR [ebp]
712 mov ecx, DWORD PTR 4[ebp]
713 add edx, edi
714 rol edx, cl
715 mov ebx, edx
716 xor ecx, ecx
717 mov cl, dh
718 and ebx, 255
719 shr edx, 16
720 xor eax, eax
721 mov al, dh
722 and edx, 255
723 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
724 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
725 xor ecx, ebx
726 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
727 sub ecx, ebx
728 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
729 add ecx, ebx
730 mov eax, DWORD PTR 20[esp]
731 xor esi, ecx
732 nop
733 mov DWORD PTR 4[eax],edi
734 mov DWORD PTR [eax],esi
735 pop edi
736 pop esi
737 pop ebx
738 pop ebp
739 ret
740_CAST_decrypt ENDP
741_TEXT ENDS
742_TEXT SEGMENT
743PUBLIC _CAST_cbc_encrypt
744
745_CAST_cbc_encrypt PROC NEAR
746 ;
747 push ebp
748 push ebx
749 push esi
750 push edi
751 mov ebp, DWORD PTR 28[esp]
752 ; getting iv ptr from parameter 4
753 mov ebx, DWORD PTR 36[esp]
754 mov esi, DWORD PTR [ebx]
755 mov edi, DWORD PTR 4[ebx]
756 push edi
757 push esi
758 push edi
759 push esi
760 mov ebx, esp
761 mov esi, DWORD PTR 36[esp]
762 mov edi, DWORD PTR 40[esp]
763 ; getting encrypt flag from parameter 5
764 mov ecx, DWORD PTR 56[esp]
765 ; get and push parameter 3
766 mov eax, DWORD PTR 48[esp]
767 push eax
768 push ebx
769 cmp ecx, 0
770 jz $L000decrypt
771 and ebp, 4294967288
772 mov eax, DWORD PTR 8[esp]
773 mov ebx, DWORD PTR 12[esp]
774 jz $L001encrypt_finish
775L002encrypt_loop:
776 mov ecx, DWORD PTR [esi]
777 mov edx, DWORD PTR 4[esi]
778 xor eax, ecx
779 xor ebx, edx
780 bswap eax
781 bswap ebx
782 mov DWORD PTR 8[esp],eax
783 mov DWORD PTR 12[esp],ebx
784 call _CAST_encrypt
785 mov eax, DWORD PTR 8[esp]
786 mov ebx, DWORD PTR 12[esp]
787 bswap eax
788 bswap ebx
789 mov DWORD PTR [edi],eax
790 mov DWORD PTR 4[edi],ebx
791 add esi, 8
792 add edi, 8
793 sub ebp, 8
794 jnz L002encrypt_loop
795$L001encrypt_finish:
796 mov ebp, DWORD PTR 52[esp]
797 and ebp, 7
798 jz $L003finish
799 xor ecx, ecx
800 xor edx, edx
801 mov ebp, DWORD PTR $L004cbc_enc_jmp_table[ebp*4]
802 jmp ebp
803L005ej7:
804 xor edx, edx
805 mov dh, BYTE PTR 6[esi]
806 shl edx, 8
807L006ej6:
808 mov dh, BYTE PTR 5[esi]
809L007ej5:
810 mov dl, BYTE PTR 4[esi]
811L008ej4:
812 mov ecx, DWORD PTR [esi]
813 jmp $L009ejend
814L010ej3:
815 mov ch, BYTE PTR 2[esi]
816 xor ecx, ecx
817 shl ecx, 8
818L011ej2:
819 mov ch, BYTE PTR 1[esi]
820L012ej1:
821 mov cl, BYTE PTR [esi]
822$L009ejend:
823 xor eax, ecx
824 xor ebx, edx
825 bswap eax
826 bswap ebx
827 mov DWORD PTR 8[esp],eax
828 mov DWORD PTR 12[esp],ebx
829 call _CAST_encrypt
830 mov eax, DWORD PTR 8[esp]
831 mov ebx, DWORD PTR 12[esp]
832 bswap eax
833 bswap ebx
834 mov DWORD PTR [edi],eax
835 mov DWORD PTR 4[edi],ebx
836 jmp $L003finish
837$L000decrypt:
838 and ebp, 4294967288
839 mov eax, DWORD PTR 16[esp]
840 mov ebx, DWORD PTR 20[esp]
841 jz $L013decrypt_finish
842L014decrypt_loop:
843 mov eax, DWORD PTR [esi]
844 mov ebx, DWORD PTR 4[esi]
845 bswap eax
846 bswap ebx
847 mov DWORD PTR 8[esp],eax
848 mov DWORD PTR 12[esp],ebx
849 call _CAST_decrypt
850 mov eax, DWORD PTR 8[esp]
851 mov ebx, DWORD PTR 12[esp]
852 bswap eax
853 bswap ebx
854 mov ecx, DWORD PTR 16[esp]
855 mov edx, DWORD PTR 20[esp]
856 xor ecx, eax
857 xor edx, ebx
858 mov eax, DWORD PTR [esi]
859 mov ebx, DWORD PTR 4[esi]
860 mov DWORD PTR [edi],ecx
861 mov DWORD PTR 4[edi],edx
862 mov DWORD PTR 16[esp],eax
863 mov DWORD PTR 20[esp],ebx
864 add esi, 8
865 add edi, 8
866 sub ebp, 8
867 jnz L014decrypt_loop
868$L013decrypt_finish:
869 mov ebp, DWORD PTR 52[esp]
870 and ebp, 7
871 jz $L003finish
872 mov eax, DWORD PTR [esi]
873 mov ebx, DWORD PTR 4[esi]
874 bswap eax
875 bswap ebx
876 mov DWORD PTR 8[esp],eax
877 mov DWORD PTR 12[esp],ebx
878 call _CAST_decrypt
879 mov eax, DWORD PTR 8[esp]
880 mov ebx, DWORD PTR 12[esp]
881 bswap eax
882 bswap ebx
883 mov ecx, DWORD PTR 16[esp]
884 mov edx, DWORD PTR 20[esp]
885 xor ecx, eax
886 xor edx, ebx
887 mov eax, DWORD PTR [esi]
888 mov ebx, DWORD PTR 4[esi]
889L015dj7:
890 ror edx, 16
891 mov BYTE PTR 6[edi],dl
892 shr edx, 16
893L016dj6:
894 mov BYTE PTR 5[edi],dh
895L017dj5:
896 mov BYTE PTR 4[edi],dl
897L018dj4:
898 mov DWORD PTR [edi],ecx
899 jmp $L019djend
900L020dj3:
901 ror ecx, 16
902 mov BYTE PTR 2[edi],cl
903 shl ecx, 16
904L021dj2:
905 mov BYTE PTR 1[esi],ch
906L022dj1:
907 mov BYTE PTR [esi], cl
908$L019djend:
909 jmp $L003finish
910$L003finish:
911 mov ecx, DWORD PTR 60[esp]
912 add esp, 24
913 mov DWORD PTR [ecx],eax
914 mov DWORD PTR 4[ecx],ebx
915 pop edi
916 pop esi
917 pop ebx
918 pop ebp
919 ret
920$L004cbc_enc_jmp_table:
921 DD 0
922 DD L012ej1
923 DD L011ej2
924 DD L010ej3
925 DD L008ej4
926 DD L007ej5
927 DD L006ej6
928 DD L005ej7
929L023cbc_dec_jmp_table:
930 DD 0
931 DD L022dj1
932 DD L021dj2
933 DD L020dj3
934 DD L018dj4
935 DD L017dj5
936 DD L016dj6
937 DD L015dj7
938_CAST_cbc_encrypt ENDP
939_TEXT ENDS
940END
diff --git a/src/lib/libcrypto/cast/asm/cx86unix.cpp b/src/lib/libcrypto/cast/asm/cx86unix.cpp
new file mode 100644
index 0000000000..035692a5af
--- /dev/null
+++ b/src/lib/libcrypto/cast/asm/cx86unix.cpp
@@ -0,0 +1,1010 @@
1/* Run the C pre-processor over this file with one of the following defined
2 * ELF - elf object files,
3 * OUT - a.out object files,
4 * BSDI - BSDI style a.out object files
5 * SOL - Solaris style elf
6 */
7
8#define TYPE(a,b) .type a,b
9#define SIZE(a,b) .size a,b
10
11#if defined(OUT) || defined(BSDI)
12#define CAST_S_table0 _CAST_S_table0
13#define CAST_S_table1 _CAST_S_table1
14#define CAST_S_table2 _CAST_S_table2
15#define CAST_S_table3 _CAST_S_table3
16#define CAST_encrypt _CAST_encrypt
17#define CAST_S_table0 _CAST_S_table0
18#define CAST_S_table1 _CAST_S_table1
19#define CAST_S_table2 _CAST_S_table2
20#define CAST_S_table3 _CAST_S_table3
21#define CAST_decrypt _CAST_decrypt
22#define CAST_cbc_encrypt _CAST_cbc_encrypt
23
24#endif
25
26#ifdef OUT
27#define OK 1
28#define ALIGN 4
29#endif
30
31#ifdef BSDI
32#define OK 1
33#define ALIGN 4
34#undef SIZE
35#undef TYPE
36#define SIZE(a,b)
37#define TYPE(a,b)
38#endif
39
40#if defined(ELF) || defined(SOL)
41#define OK 1
42#define ALIGN 16
43#endif
44
45#ifndef OK
46You need to define one of
47ELF - elf systems - linux-elf, NetBSD and DG-UX
48OUT - a.out systems - linux-a.out and FreeBSD
49SOL - solaris systems, which are elf with strange comment lines
50BSDI - a.out with a very primative version of as.
51#endif
52
53/* Let the Assembler begin :-) */
54 /* Don't even think of reading this code */
55 /* It was automatically generated by cast-586.pl */
56 /* Which is a perl program used to generate the x86 assember for */
57 /* any of elf, a.out, BSDI,Win32, or Solaris */
58 /* eric <eay@cryptsoft.com> */
59
60 .file "cast-586.s"
61 .version "01.01"
62gcc2_compiled.:
63.text
64 .align ALIGN
65.globl CAST_encrypt
66 TYPE(CAST_encrypt,@function)
67CAST_encrypt:
68
69 pushl %ebp
70 pushl %ebx
71 movl 12(%esp), %ebx
72 movl 16(%esp), %ebp
73 pushl %esi
74 pushl %edi
75 /* Load the 2 words */
76 movl (%ebx), %edi
77 movl 4(%ebx), %esi
78 xorl %eax, %eax
79 /* round 0 */
80 movl (%ebp), %edx
81 movl 4(%ebp), %ecx
82 addl %esi, %edx
83 roll %cl, %edx
84 movl %edx, %ebx
85 xorl %ecx, %ecx
86 movb %dh, %cl
87 andl $255, %ebx
88 shrl $16, %edx
89 xorl %eax, %eax
90 movb %dh, %al
91 andl $255, %edx
92 movl CAST_S_table0(,%ecx,4),%ecx
93 movl CAST_S_table1(,%ebx,4),%ebx
94 xorl %ebx, %ecx
95 movl CAST_S_table2(,%eax,4),%ebx
96 subl %ebx, %ecx
97 movl CAST_S_table3(,%edx,4),%ebx
98 addl %ebx, %ecx
99 xorl %ecx, %edi
100 /* round 1 */
101 movl 8(%ebp), %edx
102 movl 12(%ebp), %ecx
103 xorl %edi, %edx
104 roll %cl, %edx
105 movl %edx, %ebx
106 xorl %ecx, %ecx
107 movb %dh, %cl
108 andl $255, %ebx
109 shrl $16, %edx
110 xorl %eax, %eax
111 movb %dh, %al
112 andl $255, %edx
113 movl CAST_S_table0(,%ecx,4),%ecx
114 movl CAST_S_table1(,%ebx,4),%ebx
115 subl %ebx, %ecx
116 movl CAST_S_table2(,%eax,4),%ebx
117 addl %ebx, %ecx
118 movl CAST_S_table3(,%edx,4),%ebx
119 xorl %ebx, %ecx
120 xorl %ecx, %esi
121 /* round 2 */
122 movl 16(%ebp), %edx
123 movl 20(%ebp), %ecx
124 subl %esi, %edx
125 roll %cl, %edx
126 movl %edx, %ebx
127 xorl %ecx, %ecx
128 movb %dh, %cl
129 andl $255, %ebx
130 shrl $16, %edx
131 xorl %eax, %eax
132 movb %dh, %al
133 andl $255, %edx
134 movl CAST_S_table0(,%ecx,4),%ecx
135 movl CAST_S_table1(,%ebx,4),%ebx
136 addl %ebx, %ecx
137 movl CAST_S_table2(,%eax,4),%ebx
138 xorl %ebx, %ecx
139 movl CAST_S_table3(,%edx,4),%ebx
140 subl %ebx, %ecx
141 xorl %ecx, %edi
142 /* round 3 */
143 movl 24(%ebp), %edx
144 movl 28(%ebp), %ecx
145 addl %edi, %edx
146 roll %cl, %edx
147 movl %edx, %ebx
148 xorl %ecx, %ecx
149 movb %dh, %cl
150 andl $255, %ebx
151 shrl $16, %edx
152 xorl %eax, %eax
153 movb %dh, %al
154 andl $255, %edx
155 movl CAST_S_table0(,%ecx,4),%ecx
156 movl CAST_S_table1(,%ebx,4),%ebx
157 xorl %ebx, %ecx
158 movl CAST_S_table2(,%eax,4),%ebx
159 subl %ebx, %ecx
160 movl CAST_S_table3(,%edx,4),%ebx
161 addl %ebx, %ecx
162 xorl %ecx, %esi
163 /* round 4 */
164 movl 32(%ebp), %edx
165 movl 36(%ebp), %ecx
166 xorl %esi, %edx
167 roll %cl, %edx
168 movl %edx, %ebx
169 xorl %ecx, %ecx
170 movb %dh, %cl
171 andl $255, %ebx
172 shrl $16, %edx
173 xorl %eax, %eax
174 movb %dh, %al
175 andl $255, %edx
176 movl CAST_S_table0(,%ecx,4),%ecx
177 movl CAST_S_table1(,%ebx,4),%ebx
178 subl %ebx, %ecx
179 movl CAST_S_table2(,%eax,4),%ebx
180 addl %ebx, %ecx
181 movl CAST_S_table3(,%edx,4),%ebx
182 xorl %ebx, %ecx
183 xorl %ecx, %edi
184 /* round 5 */
185 movl 40(%ebp), %edx
186 movl 44(%ebp), %ecx
187 subl %edi, %edx
188 roll %cl, %edx
189 movl %edx, %ebx
190 xorl %ecx, %ecx
191 movb %dh, %cl
192 andl $255, %ebx
193 shrl $16, %edx
194 xorl %eax, %eax
195 movb %dh, %al
196 andl $255, %edx
197 movl CAST_S_table0(,%ecx,4),%ecx
198 movl CAST_S_table1(,%ebx,4),%ebx
199 addl %ebx, %ecx
200 movl CAST_S_table2(,%eax,4),%ebx
201 xorl %ebx, %ecx
202 movl CAST_S_table3(,%edx,4),%ebx
203 subl %ebx, %ecx
204 xorl %ecx, %esi
205 /* round 6 */
206 movl 48(%ebp), %edx
207 movl 52(%ebp), %ecx
208 addl %esi, %edx
209 roll %cl, %edx
210 movl %edx, %ebx
211 xorl %ecx, %ecx
212 movb %dh, %cl
213 andl $255, %ebx
214 shrl $16, %edx
215 xorl %eax, %eax
216 movb %dh, %al
217 andl $255, %edx
218 movl CAST_S_table0(,%ecx,4),%ecx
219 movl CAST_S_table1(,%ebx,4),%ebx
220 xorl %ebx, %ecx
221 movl CAST_S_table2(,%eax,4),%ebx
222 subl %ebx, %ecx
223 movl CAST_S_table3(,%edx,4),%ebx
224 addl %ebx, %ecx
225 xorl %ecx, %edi
226 /* round 7 */
227 movl 56(%ebp), %edx
228 movl 60(%ebp), %ecx
229 xorl %edi, %edx
230 roll %cl, %edx
231 movl %edx, %ebx
232 xorl %ecx, %ecx
233 movb %dh, %cl
234 andl $255, %ebx
235 shrl $16, %edx
236 xorl %eax, %eax
237 movb %dh, %al
238 andl $255, %edx
239 movl CAST_S_table0(,%ecx,4),%ecx
240 movl CAST_S_table1(,%ebx,4),%ebx
241 subl %ebx, %ecx
242 movl CAST_S_table2(,%eax,4),%ebx
243 addl %ebx, %ecx
244 movl CAST_S_table3(,%edx,4),%ebx
245 xorl %ebx, %ecx
246 xorl %ecx, %esi
247 /* round 8 */
248 movl 64(%ebp), %edx
249 movl 68(%ebp), %ecx
250 subl %esi, %edx
251 roll %cl, %edx
252 movl %edx, %ebx
253 xorl %ecx, %ecx
254 movb %dh, %cl
255 andl $255, %ebx
256 shrl $16, %edx
257 xorl %eax, %eax
258 movb %dh, %al
259 andl $255, %edx
260 movl CAST_S_table0(,%ecx,4),%ecx
261 movl CAST_S_table1(,%ebx,4),%ebx
262 addl %ebx, %ecx
263 movl CAST_S_table2(,%eax,4),%ebx
264 xorl %ebx, %ecx
265 movl CAST_S_table3(,%edx,4),%ebx
266 subl %ebx, %ecx
267 xorl %ecx, %edi
268 /* round 9 */
269 movl 72(%ebp), %edx
270 movl 76(%ebp), %ecx
271 addl %edi, %edx
272 roll %cl, %edx
273 movl %edx, %ebx
274 xorl %ecx, %ecx
275 movb %dh, %cl
276 andl $255, %ebx
277 shrl $16, %edx
278 xorl %eax, %eax
279 movb %dh, %al
280 andl $255, %edx
281 movl CAST_S_table0(,%ecx,4),%ecx
282 movl CAST_S_table1(,%ebx,4),%ebx
283 xorl %ebx, %ecx
284 movl CAST_S_table2(,%eax,4),%ebx
285 subl %ebx, %ecx
286 movl CAST_S_table3(,%edx,4),%ebx
287 addl %ebx, %ecx
288 xorl %ecx, %esi
289 /* round 10 */
290 movl 80(%ebp), %edx
291 movl 84(%ebp), %ecx
292 xorl %esi, %edx
293 roll %cl, %edx
294 movl %edx, %ebx
295 xorl %ecx, %ecx
296 movb %dh, %cl
297 andl $255, %ebx
298 shrl $16, %edx
299 xorl %eax, %eax
300 movb %dh, %al
301 andl $255, %edx
302 movl CAST_S_table0(,%ecx,4),%ecx
303 movl CAST_S_table1(,%ebx,4),%ebx
304 subl %ebx, %ecx
305 movl CAST_S_table2(,%eax,4),%ebx
306 addl %ebx, %ecx
307 movl CAST_S_table3(,%edx,4),%ebx
308 xorl %ebx, %ecx
309 xorl %ecx, %edi
310 /* round 11 */
311 movl 88(%ebp), %edx
312 movl 92(%ebp), %ecx
313 subl %edi, %edx
314 roll %cl, %edx
315 movl %edx, %ebx
316 xorl %ecx, %ecx
317 movb %dh, %cl
318 andl $255, %ebx
319 shrl $16, %edx
320 xorl %eax, %eax
321 movb %dh, %al
322 andl $255, %edx
323 movl CAST_S_table0(,%ecx,4),%ecx
324 movl CAST_S_table1(,%ebx,4),%ebx
325 addl %ebx, %ecx
326 movl CAST_S_table2(,%eax,4),%ebx
327 xorl %ebx, %ecx
328 movl CAST_S_table3(,%edx,4),%ebx
329 subl %ebx, %ecx
330 xorl %ecx, %esi
331 /* round 12 */
332 movl 96(%ebp), %edx
333 movl 100(%ebp), %ecx
334 addl %esi, %edx
335 roll %cl, %edx
336 movl %edx, %ebx
337 xorl %ecx, %ecx
338 movb %dh, %cl
339 andl $255, %ebx
340 shrl $16, %edx
341 xorl %eax, %eax
342 movb %dh, %al
343 andl $255, %edx
344 movl CAST_S_table0(,%ecx,4),%ecx
345 movl CAST_S_table1(,%ebx,4),%ebx
346 xorl %ebx, %ecx
347 movl CAST_S_table2(,%eax,4),%ebx
348 subl %ebx, %ecx
349 movl CAST_S_table3(,%edx,4),%ebx
350 addl %ebx, %ecx
351 xorl %ecx, %edi
352 /* round 13 */
353 movl 104(%ebp), %edx
354 movl 108(%ebp), %ecx
355 xorl %edi, %edx
356 roll %cl, %edx
357 movl %edx, %ebx
358 xorl %ecx, %ecx
359 movb %dh, %cl
360 andl $255, %ebx
361 shrl $16, %edx
362 xorl %eax, %eax
363 movb %dh, %al
364 andl $255, %edx
365 movl CAST_S_table0(,%ecx,4),%ecx
366 movl CAST_S_table1(,%ebx,4),%ebx
367 subl %ebx, %ecx
368 movl CAST_S_table2(,%eax,4),%ebx
369 addl %ebx, %ecx
370 movl CAST_S_table3(,%edx,4),%ebx
371 xorl %ebx, %ecx
372 xorl %ecx, %esi
373 /* round 14 */
374 movl 112(%ebp), %edx
375 movl 116(%ebp), %ecx
376 subl %esi, %edx
377 roll %cl, %edx
378 movl %edx, %ebx
379 xorl %ecx, %ecx
380 movb %dh, %cl
381 andl $255, %ebx
382 shrl $16, %edx
383 xorl %eax, %eax
384 movb %dh, %al
385 andl $255, %edx
386 movl CAST_S_table0(,%ecx,4),%ecx
387 movl CAST_S_table1(,%ebx,4),%ebx
388 addl %ebx, %ecx
389 movl CAST_S_table2(,%eax,4),%ebx
390 xorl %ebx, %ecx
391 movl CAST_S_table3(,%edx,4),%ebx
392 subl %ebx, %ecx
393 xorl %ecx, %edi
394 /* round 15 */
395 movl 120(%ebp), %edx
396 movl 124(%ebp), %ecx
397 addl %edi, %edx
398 roll %cl, %edx
399 movl %edx, %ebx
400 xorl %ecx, %ecx
401 movb %dh, %cl
402 andl $255, %ebx
403 shrl $16, %edx
404 xorl %eax, %eax
405 movb %dh, %al
406 andl $255, %edx
407 movl CAST_S_table0(,%ecx,4),%ecx
408 movl CAST_S_table1(,%ebx,4),%ebx
409 xorl %ebx, %ecx
410 movl CAST_S_table2(,%eax,4),%ebx
411 subl %ebx, %ecx
412 movl CAST_S_table3(,%edx,4),%ebx
413 addl %ebx, %ecx
414 movl 20(%esp), %eax
415 xorl %ecx, %esi
416 nop
417 movl %edi, 4(%eax)
418 movl %esi, (%eax)
419 popl %edi
420 popl %esi
421 popl %ebx
422 popl %ebp
423 ret
424.CAST_encrypt_end:
425 SIZE(CAST_encrypt,.CAST_encrypt_end-CAST_encrypt)
426.ident "CAST_encrypt"
427.text
428 .align ALIGN
429.globl CAST_decrypt
430 TYPE(CAST_decrypt,@function)
431CAST_decrypt:
432
433 pushl %ebp
434 pushl %ebx
435 movl 12(%esp), %ebx
436 movl 16(%esp), %ebp
437 pushl %esi
438 pushl %edi
439 /* Load the 2 words */
440 movl (%ebx), %edi
441 movl 4(%ebx), %esi
442 xorl %eax, %eax
443 /* round 15 */
444 movl 120(%ebp), %edx
445 movl 124(%ebp), %ecx
446 addl %esi, %edx
447 roll %cl, %edx
448 movl %edx, %ebx
449 xorl %ecx, %ecx
450 movb %dh, %cl
451 andl $255, %ebx
452 shrl $16, %edx
453 xorl %eax, %eax
454 movb %dh, %al
455 andl $255, %edx
456 movl CAST_S_table0(,%ecx,4),%ecx
457 movl CAST_S_table1(,%ebx,4),%ebx
458 xorl %ebx, %ecx
459 movl CAST_S_table2(,%eax,4),%ebx
460 subl %ebx, %ecx
461 movl CAST_S_table3(,%edx,4),%ebx
462 addl %ebx, %ecx
463 xorl %ecx, %edi
464 /* round 14 */
465 movl 112(%ebp), %edx
466 movl 116(%ebp), %ecx
467 subl %edi, %edx
468 roll %cl, %edx
469 movl %edx, %ebx
470 xorl %ecx, %ecx
471 movb %dh, %cl
472 andl $255, %ebx
473 shrl $16, %edx
474 xorl %eax, %eax
475 movb %dh, %al
476 andl $255, %edx
477 movl CAST_S_table0(,%ecx,4),%ecx
478 movl CAST_S_table1(,%ebx,4),%ebx
479 addl %ebx, %ecx
480 movl CAST_S_table2(,%eax,4),%ebx
481 xorl %ebx, %ecx
482 movl CAST_S_table3(,%edx,4),%ebx
483 subl %ebx, %ecx
484 xorl %ecx, %esi
485 /* round 13 */
486 movl 104(%ebp), %edx
487 movl 108(%ebp), %ecx
488 xorl %esi, %edx
489 roll %cl, %edx
490 movl %edx, %ebx
491 xorl %ecx, %ecx
492 movb %dh, %cl
493 andl $255, %ebx
494 shrl $16, %edx
495 xorl %eax, %eax
496 movb %dh, %al
497 andl $255, %edx
498 movl CAST_S_table0(,%ecx,4),%ecx
499 movl CAST_S_table1(,%ebx,4),%ebx
500 subl %ebx, %ecx
501 movl CAST_S_table2(,%eax,4),%ebx
502 addl %ebx, %ecx
503 movl CAST_S_table3(,%edx,4),%ebx
504 xorl %ebx, %ecx
505 xorl %ecx, %edi
506 /* round 12 */
507 movl 96(%ebp), %edx
508 movl 100(%ebp), %ecx
509 addl %edi, %edx
510 roll %cl, %edx
511 movl %edx, %ebx
512 xorl %ecx, %ecx
513 movb %dh, %cl
514 andl $255, %ebx
515 shrl $16, %edx
516 xorl %eax, %eax
517 movb %dh, %al
518 andl $255, %edx
519 movl CAST_S_table0(,%ecx,4),%ecx
520 movl CAST_S_table1(,%ebx,4),%ebx
521 xorl %ebx, %ecx
522 movl CAST_S_table2(,%eax,4),%ebx
523 subl %ebx, %ecx
524 movl CAST_S_table3(,%edx,4),%ebx
525 addl %ebx, %ecx
526 xorl %ecx, %esi
527 /* round 11 */
528 movl 88(%ebp), %edx
529 movl 92(%ebp), %ecx
530 subl %esi, %edx
531 roll %cl, %edx
532 movl %edx, %ebx
533 xorl %ecx, %ecx
534 movb %dh, %cl
535 andl $255, %ebx
536 shrl $16, %edx
537 xorl %eax, %eax
538 movb %dh, %al
539 andl $255, %edx
540 movl CAST_S_table0(,%ecx,4),%ecx
541 movl CAST_S_table1(,%ebx,4),%ebx
542 addl %ebx, %ecx
543 movl CAST_S_table2(,%eax,4),%ebx
544 xorl %ebx, %ecx
545 movl CAST_S_table3(,%edx,4),%ebx
546 subl %ebx, %ecx
547 xorl %ecx, %edi
548 /* round 10 */
549 movl 80(%ebp), %edx
550 movl 84(%ebp), %ecx
551 xorl %edi, %edx
552 roll %cl, %edx
553 movl %edx, %ebx
554 xorl %ecx, %ecx
555 movb %dh, %cl
556 andl $255, %ebx
557 shrl $16, %edx
558 xorl %eax, %eax
559 movb %dh, %al
560 andl $255, %edx
561 movl CAST_S_table0(,%ecx,4),%ecx
562 movl CAST_S_table1(,%ebx,4),%ebx
563 subl %ebx, %ecx
564 movl CAST_S_table2(,%eax,4),%ebx
565 addl %ebx, %ecx
566 movl CAST_S_table3(,%edx,4),%ebx
567 xorl %ebx, %ecx
568 xorl %ecx, %esi
569 /* round 9 */
570 movl 72(%ebp), %edx
571 movl 76(%ebp), %ecx
572 addl %esi, %edx
573 roll %cl, %edx
574 movl %edx, %ebx
575 xorl %ecx, %ecx
576 movb %dh, %cl
577 andl $255, %ebx
578 shrl $16, %edx
579 xorl %eax, %eax
580 movb %dh, %al
581 andl $255, %edx
582 movl CAST_S_table0(,%ecx,4),%ecx
583 movl CAST_S_table1(,%ebx,4),%ebx
584 xorl %ebx, %ecx
585 movl CAST_S_table2(,%eax,4),%ebx
586 subl %ebx, %ecx
587 movl CAST_S_table3(,%edx,4),%ebx
588 addl %ebx, %ecx
589 xorl %ecx, %edi
590 /* round 8 */
591 movl 64(%ebp), %edx
592 movl 68(%ebp), %ecx
593 subl %edi, %edx
594 roll %cl, %edx
595 movl %edx, %ebx
596 xorl %ecx, %ecx
597 movb %dh, %cl
598 andl $255, %ebx
599 shrl $16, %edx
600 xorl %eax, %eax
601 movb %dh, %al
602 andl $255, %edx
603 movl CAST_S_table0(,%ecx,4),%ecx
604 movl CAST_S_table1(,%ebx,4),%ebx
605 addl %ebx, %ecx
606 movl CAST_S_table2(,%eax,4),%ebx
607 xorl %ebx, %ecx
608 movl CAST_S_table3(,%edx,4),%ebx
609 subl %ebx, %ecx
610 xorl %ecx, %esi
611 /* round 7 */
612 movl 56(%ebp), %edx
613 movl 60(%ebp), %ecx
614 xorl %esi, %edx
615 roll %cl, %edx
616 movl %edx, %ebx
617 xorl %ecx, %ecx
618 movb %dh, %cl
619 andl $255, %ebx
620 shrl $16, %edx
621 xorl %eax, %eax
622 movb %dh, %al
623 andl $255, %edx
624 movl CAST_S_table0(,%ecx,4),%ecx
625 movl CAST_S_table1(,%ebx,4),%ebx
626 subl %ebx, %ecx
627 movl CAST_S_table2(,%eax,4),%ebx
628 addl %ebx, %ecx
629 movl CAST_S_table3(,%edx,4),%ebx
630 xorl %ebx, %ecx
631 xorl %ecx, %edi
632 /* round 6 */
633 movl 48(%ebp), %edx
634 movl 52(%ebp), %ecx
635 addl %edi, %edx
636 roll %cl, %edx
637 movl %edx, %ebx
638 xorl %ecx, %ecx
639 movb %dh, %cl
640 andl $255, %ebx
641 shrl $16, %edx
642 xorl %eax, %eax
643 movb %dh, %al
644 andl $255, %edx
645 movl CAST_S_table0(,%ecx,4),%ecx
646 movl CAST_S_table1(,%ebx,4),%ebx
647 xorl %ebx, %ecx
648 movl CAST_S_table2(,%eax,4),%ebx
649 subl %ebx, %ecx
650 movl CAST_S_table3(,%edx,4),%ebx
651 addl %ebx, %ecx
652 xorl %ecx, %esi
653 /* round 5 */
654 movl 40(%ebp), %edx
655 movl 44(%ebp), %ecx
656 subl %esi, %edx
657 roll %cl, %edx
658 movl %edx, %ebx
659 xorl %ecx, %ecx
660 movb %dh, %cl
661 andl $255, %ebx
662 shrl $16, %edx
663 xorl %eax, %eax
664 movb %dh, %al
665 andl $255, %edx
666 movl CAST_S_table0(,%ecx,4),%ecx
667 movl CAST_S_table1(,%ebx,4),%ebx
668 addl %ebx, %ecx
669 movl CAST_S_table2(,%eax,4),%ebx
670 xorl %ebx, %ecx
671 movl CAST_S_table3(,%edx,4),%ebx
672 subl %ebx, %ecx
673 xorl %ecx, %edi
674 /* round 4 */
675 movl 32(%ebp), %edx
676 movl 36(%ebp), %ecx
677 xorl %edi, %edx
678 roll %cl, %edx
679 movl %edx, %ebx
680 xorl %ecx, %ecx
681 movb %dh, %cl
682 andl $255, %ebx
683 shrl $16, %edx
684 xorl %eax, %eax
685 movb %dh, %al
686 andl $255, %edx
687 movl CAST_S_table0(,%ecx,4),%ecx
688 movl CAST_S_table1(,%ebx,4),%ebx
689 subl %ebx, %ecx
690 movl CAST_S_table2(,%eax,4),%ebx
691 addl %ebx, %ecx
692 movl CAST_S_table3(,%edx,4),%ebx
693 xorl %ebx, %ecx
694 xorl %ecx, %esi
695 /* round 3 */
696 movl 24(%ebp), %edx
697 movl 28(%ebp), %ecx
698 addl %esi, %edx
699 roll %cl, %edx
700 movl %edx, %ebx
701 xorl %ecx, %ecx
702 movb %dh, %cl
703 andl $255, %ebx
704 shrl $16, %edx
705 xorl %eax, %eax
706 movb %dh, %al
707 andl $255, %edx
708 movl CAST_S_table0(,%ecx,4),%ecx
709 movl CAST_S_table1(,%ebx,4),%ebx
710 xorl %ebx, %ecx
711 movl CAST_S_table2(,%eax,4),%ebx
712 subl %ebx, %ecx
713 movl CAST_S_table3(,%edx,4),%ebx
714 addl %ebx, %ecx
715 xorl %ecx, %edi
716 /* round 2 */
717 movl 16(%ebp), %edx
718 movl 20(%ebp), %ecx
719 subl %edi, %edx
720 roll %cl, %edx
721 movl %edx, %ebx
722 xorl %ecx, %ecx
723 movb %dh, %cl
724 andl $255, %ebx
725 shrl $16, %edx
726 xorl %eax, %eax
727 movb %dh, %al
728 andl $255, %edx
729 movl CAST_S_table0(,%ecx,4),%ecx
730 movl CAST_S_table1(,%ebx,4),%ebx
731 addl %ebx, %ecx
732 movl CAST_S_table2(,%eax,4),%ebx
733 xorl %ebx, %ecx
734 movl CAST_S_table3(,%edx,4),%ebx
735 subl %ebx, %ecx
736 xorl %ecx, %esi
737 /* round 1 */
738 movl 8(%ebp), %edx
739 movl 12(%ebp), %ecx
740 xorl %esi, %edx
741 roll %cl, %edx
742 movl %edx, %ebx
743 xorl %ecx, %ecx
744 movb %dh, %cl
745 andl $255, %ebx
746 shrl $16, %edx
747 xorl %eax, %eax
748 movb %dh, %al
749 andl $255, %edx
750 movl CAST_S_table0(,%ecx,4),%ecx
751 movl CAST_S_table1(,%ebx,4),%ebx
752 subl %ebx, %ecx
753 movl CAST_S_table2(,%eax,4),%ebx
754 addl %ebx, %ecx
755 movl CAST_S_table3(,%edx,4),%ebx
756 xorl %ebx, %ecx
757 xorl %ecx, %edi
758 /* round 0 */
759 movl (%ebp), %edx
760 movl 4(%ebp), %ecx
761 addl %edi, %edx
762 roll %cl, %edx
763 movl %edx, %ebx
764 xorl %ecx, %ecx
765 movb %dh, %cl
766 andl $255, %ebx
767 shrl $16, %edx
768 xorl %eax, %eax
769 movb %dh, %al
770 andl $255, %edx
771 movl CAST_S_table0(,%ecx,4),%ecx
772 movl CAST_S_table1(,%ebx,4),%ebx
773 xorl %ebx, %ecx
774 movl CAST_S_table2(,%eax,4),%ebx
775 subl %ebx, %ecx
776 movl CAST_S_table3(,%edx,4),%ebx
777 addl %ebx, %ecx
778 movl 20(%esp), %eax
779 xorl %ecx, %esi
780 nop
781 movl %edi, 4(%eax)
782 movl %esi, (%eax)
783 popl %edi
784 popl %esi
785 popl %ebx
786 popl %ebp
787 ret
788.CAST_decrypt_end:
789 SIZE(CAST_decrypt,.CAST_decrypt_end-CAST_decrypt)
790.ident "CAST_decrypt"
791.text
792 .align ALIGN
793.globl CAST_cbc_encrypt
794 TYPE(CAST_cbc_encrypt,@function)
795CAST_cbc_encrypt:
796
797 pushl %ebp
798 pushl %ebx
799 pushl %esi
800 pushl %edi
801 movl 28(%esp), %ebp
802 /* getting iv ptr from parameter 4 */
803 movl 36(%esp), %ebx
804 movl (%ebx), %esi
805 movl 4(%ebx), %edi
806 pushl %edi
807 pushl %esi
808 pushl %edi
809 pushl %esi
810 movl %esp, %ebx
811 movl 36(%esp), %esi
812 movl 40(%esp), %edi
813 /* getting encrypt flag from parameter 5 */
814 movl 56(%esp), %ecx
815 /* get and push parameter 3 */
816 movl 48(%esp), %eax
817 pushl %eax
818 pushl %ebx
819 cmpl $0, %ecx
820 jz .L000decrypt
821 andl $4294967288, %ebp
822 movl 8(%esp), %eax
823 movl 12(%esp), %ebx
824 jz .L001encrypt_finish
825.L002encrypt_loop:
826 movl (%esi), %ecx
827 movl 4(%esi), %edx
828 xorl %ecx, %eax
829 xorl %edx, %ebx
830.byte 15
831.byte 200 /* bswapl %eax */
832.byte 15
833.byte 203 /* bswapl %ebx */
834 movl %eax, 8(%esp)
835 movl %ebx, 12(%esp)
836 call CAST_encrypt
837 movl 8(%esp), %eax
838 movl 12(%esp), %ebx
839.byte 15
840.byte 200 /* bswapl %eax */
841.byte 15
842.byte 203 /* bswapl %ebx */
843 movl %eax, (%edi)
844 movl %ebx, 4(%edi)
845 addl $8, %esi
846 addl $8, %edi
847 subl $8, %ebp
848 jnz .L002encrypt_loop
849.L001encrypt_finish:
850 movl 52(%esp), %ebp
851 andl $7, %ebp
852 jz .L003finish
853 xorl %ecx, %ecx
854 xorl %edx, %edx
855 movl .L004cbc_enc_jmp_table(,%ebp,4),%ebp
856 jmp *%ebp
857.L005ej7:
858 xorl %edx, %edx
859 movb 6(%esi), %dh
860 sall $8, %edx
861.L006ej6:
862 movb 5(%esi), %dh
863.L007ej5:
864 movb 4(%esi), %dl
865.L008ej4:
866 movl (%esi), %ecx
867 jmp .L009ejend
868.L010ej3:
869 movb 2(%esi), %ch
870 xorl %ecx, %ecx
871 sall $8, %ecx
872.L011ej2:
873 movb 1(%esi), %ch
874.L012ej1:
875 movb (%esi), %cl
876.L009ejend:
877 xorl %ecx, %eax
878 xorl %edx, %ebx
879.byte 15
880.byte 200 /* bswapl %eax */
881.byte 15
882.byte 203 /* bswapl %ebx */
883 movl %eax, 8(%esp)
884 movl %ebx, 12(%esp)
885 call CAST_encrypt
886 movl 8(%esp), %eax
887 movl 12(%esp), %ebx
888.byte 15
889.byte 200 /* bswapl %eax */
890.byte 15
891.byte 203 /* bswapl %ebx */
892 movl %eax, (%edi)
893 movl %ebx, 4(%edi)
894 jmp .L003finish
895.align ALIGN
896.L000decrypt:
897 andl $4294967288, %ebp
898 movl 16(%esp), %eax
899 movl 20(%esp), %ebx
900 jz .L013decrypt_finish
901.L014decrypt_loop:
902 movl (%esi), %eax
903 movl 4(%esi), %ebx
904.byte 15
905.byte 200 /* bswapl %eax */
906.byte 15
907.byte 203 /* bswapl %ebx */
908 movl %eax, 8(%esp)
909 movl %ebx, 12(%esp)
910 call CAST_decrypt
911 movl 8(%esp), %eax
912 movl 12(%esp), %ebx
913.byte 15
914.byte 200 /* bswapl %eax */
915.byte 15
916.byte 203 /* bswapl %ebx */
917 movl 16(%esp), %ecx
918 movl 20(%esp), %edx
919 xorl %eax, %ecx
920 xorl %ebx, %edx
921 movl (%esi), %eax
922 movl 4(%esi), %ebx
923 movl %ecx, (%edi)
924 movl %edx, 4(%edi)
925 movl %eax, 16(%esp)
926 movl %ebx, 20(%esp)
927 addl $8, %esi
928 addl $8, %edi
929 subl $8, %ebp
930 jnz .L014decrypt_loop
931.L013decrypt_finish:
932 movl 52(%esp), %ebp
933 andl $7, %ebp
934 jz .L003finish
935 movl (%esi), %eax
936 movl 4(%esi), %ebx
937.byte 15
938.byte 200 /* bswapl %eax */
939.byte 15
940.byte 203 /* bswapl %ebx */
941 movl %eax, 8(%esp)
942 movl %ebx, 12(%esp)
943 call CAST_decrypt
944 movl 8(%esp), %eax
945 movl 12(%esp), %ebx
946.byte 15
947.byte 200 /* bswapl %eax */
948.byte 15
949.byte 203 /* bswapl %ebx */
950 movl 16(%esp), %ecx
951 movl 20(%esp), %edx
952 xorl %eax, %ecx
953 xorl %ebx, %edx
954 movl (%esi), %eax
955 movl 4(%esi), %ebx
956.L015dj7:
957 rorl $16, %edx
958 movb %dl, 6(%edi)
959 shrl $16, %edx
960.L016dj6:
961 movb %dh, 5(%edi)
962.L017dj5:
963 movb %dl, 4(%edi)
964.L018dj4:
965 movl %ecx, (%edi)
966 jmp .L019djend
967.L020dj3:
968 rorl $16, %ecx
969 movb %cl, 2(%edi)
970 sall $16, %ecx
971.L021dj2:
972 movb %ch, 1(%esi)
973.L022dj1:
974 movb %cl, (%esi)
975.L019djend:
976 jmp .L003finish
977.align ALIGN
978.L003finish:
979 movl 60(%esp), %ecx
980 addl $24, %esp
981 movl %eax, (%ecx)
982 movl %ebx, 4(%ecx)
983 popl %edi
984 popl %esi
985 popl %ebx
986 popl %ebp
987 ret
988.align ALIGN
989.L004cbc_enc_jmp_table:
990 .long 0
991 .long .L012ej1
992 .long .L011ej2
993 .long .L010ej3
994 .long .L008ej4
995 .long .L007ej5
996 .long .L006ej6
997 .long .L005ej7
998.align ALIGN
999.L023cbc_dec_jmp_table:
1000 .long 0
1001 .long .L022dj1
1002 .long .L021dj2
1003 .long .L020dj3
1004 .long .L018dj4
1005 .long .L017dj5
1006 .long .L016dj6
1007 .long .L015dj7
1008.CAST_cbc_encrypt_end:
1009 SIZE(CAST_cbc_encrypt,.CAST_cbc_encrypt_end-CAST_cbc_encrypt)
1010.ident "desasm.pl"