aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/sha
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/sha')
-rw-r--r--crypto/sha/Makefile.ssl5
-rw-r--r--crypto/sha/Makefile.uni122
-rw-r--r--crypto/sha/asm/s1-win32.asm1716
-rw-r--r--crypto/sha/asm/sha1-586.pl2
-rw-r--r--crypto/sha/sha_locl.h4
5 files changed, 1845 insertions, 4 deletions
diff --git a/crypto/sha/Makefile.ssl b/crypto/sha/Makefile.ssl
index 0e6e7b8940c..0494dca09b5 100644
--- a/crypto/sha/Makefile.ssl
+++ b/crypto/sha/Makefile.ssl
@@ -5,7 +5,6 @@
DIR= sha
TOP= ../..
CC= cc
-CPP= $(CC) -E
INCLUDES=
CFLAG=-g
INSTALL_PREFIX=
@@ -47,7 +46,7 @@ lib: $(LIBOBJ)
# elf
asm/sx86-elf.o: asm/sx86unix.cpp
- $(CPP) -DELF -x c asm/sx86unix.cpp | as -o asm/sx86-elf.o
+ $(CPP) -DELF asm/sx86unix.cpp | as -o asm/sx86-elf.o
# solaris
asm/sx86-sol.o: asm/sx86unix.cpp
@@ -63,7 +62,7 @@ asm/sx86-out.o: asm/sx86unix.cpp
asm/sx86bsdi.o: asm/sx86unix.cpp
$(CPP) -DBSDI asm/sx86unix.cpp | sed 's/ :/:/' | as -o asm/sx86bsdi.o
-asm/sx86unix.cpp: asm/sha1-586.pl ../perlasm/x86asm.pl
+asm/sx86unix.cpp:
(cd asm; $(PERL) sha1-586.pl cpp $(PROCESSOR) >sx86unix.cpp)
files:
diff --git a/crypto/sha/Makefile.uni b/crypto/sha/Makefile.uni
new file mode 100644
index 00000000000..b7ec5caa4e5
--- /dev/null
+++ b/crypto/sha/Makefile.uni
@@ -0,0 +1,122 @@
+# Targets
+# make - twidle the options yourself :-)
+# make cc - standard cc options
+# make gcc - standard gcc options
+# make x86-elf - linux-elf etc
+# make x86-out - linux-a.out, FreeBSD etc
+# make x86-solaris
+# make x86-bdsi
+
+DIR= sha
+TOP= .
+CC= gcc
+CFLAG= -O3 -fomit-frame-pointer
+
+CPP= $(CC) -E
+INCLUDES=
+INSTALLTOP=/usr/local/lib
+MAKE= make
+MAKEDEPEND= makedepend
+MAKEFILE= Makefile.uni
+AR= ar r
+
+SHA_ASM_OBJ=
+
+CFLAGS= $(INCLUDES) $(CFLAG)
+
+GENERAL=Makefile
+
+TEST1=shatest
+TEST2=sha1test
+APP1=sha
+APP2=sha1
+
+TEST=$(TEST1) $(TEST2)
+APPS=$(APP1) $(APP2)
+
+LIB=libsha.a
+LIBSRC=sha_dgst.c sha1dgst.c sha_one.c sha1_one.c
+LIBOBJ=sha_dgst.o sha1dgst.o sha_one.o sha1_one.o $(SHA_ASM_OBJ)
+
+SRC= $(LIBSRC)
+
+EXHEADER= sha.h
+HEADER= sha_locl.h $(EXHEADER)
+
+ALL= $(GENERAL) $(SRC) $(HEADER)
+
+all: $(LIB) $(TEST) $(APPS)
+
+$(LIB): $(LIBOBJ)
+ $(AR) $(LIB) $(LIBOBJ)
+ $(RANLIB) $(LIB)
+
+# elf
+asm/sx86-elf.o: asm/sx86unix.cpp
+ $(CPP) -DELF asm/sx86unix.cpp | as -o asm/sx86-elf.o
+
+# solaris
+asm/sx86-sol.o: asm/sx86unix.cpp
+ $(CC) -E -DSOL asm/sx86unix.cpp | sed 's/^#.*//' > asm/sx86-sol.s
+ as -o asm/sx86-sol.o asm/sx86-sol.s
+ rm -f asm/sx86-sol.s
+
+# a.out
+asm/sx86-out.o: asm/sx86unix.cpp
+ $(CPP) -DOUT asm/sx86unix.cpp | as -o asm/sx86-out.o
+
+# bsdi
+asm/sx86bsdi.o: asm/sx86unix.cpp
+ $(CPP) -DBSDI asm/sx86unix.cpp | as -o asm/sx86bsdi.o
+
+asm/sx86unix.cpp:
+ (cd asm; perl sha1-586.pl cpp >sx86unix.cpp)
+
+test: $(TEST)
+ ./$(TEST1)
+ ./$(TEST2)
+
+$(TEST1): $(TEST1).c $(LIB)
+ $(CC) -o $(TEST1) $(CFLAGS) $(TEST1).c $(LIB)
+
+$(TEST2): $(TEST2).c $(LIB)
+ $(CC) -o $(TEST2) $(CFLAGS) $(TEST2).c $(LIB)
+
+$(APP1): $(APP1).c $(LIB)
+ $(CC) -o $(APP1) $(CFLAGS) $(APP1).c $(LIB)
+
+$(APP2): $(APP2).c $(LIB)
+ $(CC) -o $(APP2) $(CFLAGS) $(APP2).c $(LIB)
+
+lint:
+ lint -DLINT $(INCLUDES) $(SRC)>fluff
+
+depend:
+ $(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+
+dclean:
+ perl -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
+ mv -f Makefile.new $(MAKEFILE)
+
+clean:
+ /bin/rm -f $(LIB) $(TEST) $(APPS) *.o asm/*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
+
+cc:
+ $(MAKE) SHA_ASM_OBJ="" CC="cc" CFLAG="-O" all
+
+gcc:
+ $(MAKE) SHA_ASM_OBJ="" CC="gcc" CFLAGS="-O3 -fomit-frame-pointer" all
+
+x86-elf:
+ $(MAKE) SHA_ASM_OBJ="asm/sx86-elf.o" CFLAG="-DELF -DSHA1_ASM -DL_ENDIAN $(CFLAGS)" all
+
+x86-out:
+ $(MAKE) SHA_ASM_OBJ="asm/sx86-out.o" CFLAG="-DOUT -DSHA1_ASM -DL_ENDIAN $(CFLAGS)" all
+
+x86-solaris:
+ $(MAKE) SHA_ASM_OBJ="asm/sx86-sol.o" CFLAG="-DSOL -DSHA1_ASM -DL_ENDIAN $(CFLAGS)" all
+
+x86-bdsi:
+ $(MAKE) SHA_ASM_OBJ="asm/sx86-bdsi.o" CFLAG="-DBDSI -DSHA1_ASM -DL_ENDIAN $(CFLAGS)" all
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/crypto/sha/asm/s1-win32.asm b/crypto/sha/asm/s1-win32.asm
new file mode 100644
index 00000000000..699afdb0223
--- /dev/null
+++ b/crypto/sha/asm/s1-win32.asm
@@ -0,0 +1,1716 @@
+ ; Don't even think of reading this code
+ ; It was automatically generated by sha1-586.pl
+ ; Which is a perl program used to generate the x86 assember for
+ ; any of elf, a.out, BSDI,Win32, or Solaris
+ ;
+ TITLE sha1-586.asm
+ .486
+.model FLAT
+_TEXT SEGMENT
+PUBLIC _sha1_block_asm_data_order
+
+_sha1_block_asm_data_order PROC NEAR
+ mov ecx, DWORD PTR 12[esp]
+ push esi
+ shl ecx, 6
+ mov esi, DWORD PTR 12[esp]
+ push ebp
+ add ecx, esi
+ push ebx
+ mov ebp, DWORD PTR 16[esp]
+ push edi
+ mov edx, DWORD PTR 12[ebp]
+ sub esp, 108
+ mov edi, DWORD PTR 16[ebp]
+ mov ebx, DWORD PTR 8[ebp]
+ mov DWORD PTR 68[esp],ecx
+ ; First we need to setup the X array
+L000start:
+ ; First, load the words onto the stack in network byte order
+ mov eax, DWORD PTR [esi]
+ mov ecx, DWORD PTR 4[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ecx
+ mov eax, DWORD PTR 8[esi]
+ mov ecx, DWORD PTR 12[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR 8[esp],eax
+ mov DWORD PTR 12[esp],ecx
+ mov eax, DWORD PTR 16[esi]
+ mov ecx, DWORD PTR 20[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR 16[esp],eax
+ mov DWORD PTR 20[esp],ecx
+ mov eax, DWORD PTR 24[esi]
+ mov ecx, DWORD PTR 28[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR 24[esp],eax
+ mov DWORD PTR 28[esp],ecx
+ mov eax, DWORD PTR 32[esi]
+ mov ecx, DWORD PTR 36[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR 32[esp],eax
+ mov DWORD PTR 36[esp],ecx
+ mov eax, DWORD PTR 40[esi]
+ mov ecx, DWORD PTR 44[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR 40[esp],eax
+ mov DWORD PTR 44[esp],ecx
+ mov eax, DWORD PTR 48[esi]
+ mov ecx, DWORD PTR 52[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR 48[esp],eax
+ mov DWORD PTR 52[esp],ecx
+ mov eax, DWORD PTR 56[esi]
+ mov ecx, DWORD PTR 60[esi]
+ bswap eax
+ bswap ecx
+ mov DWORD PTR 56[esp],eax
+ mov DWORD PTR 60[esp],ecx
+ ; We now have the X array on the stack
+ ; starting at sp-4
+ mov DWORD PTR 132[esp],esi
+L001shortcut:
+ ;
+ ; Start processing
+ mov eax, DWORD PTR [ebp]
+ mov ecx, DWORD PTR 4[ebp]
+ ; 00_15 0
+ mov esi, ebx
+ mov ebp, eax
+ xor esi, edx
+ rol ebp, 5
+ and esi, ecx
+ add ebp, edi
+ ror ecx, 1
+ mov edi, DWORD PTR [esp]
+ ror ecx, 1
+ xor esi, edx
+ lea ebp, DWORD PTR 1518500249[edi*1+ebp]
+ mov edi, ecx
+ add esi, ebp
+ xor edi, ebx
+ mov ebp, esi
+ and edi, eax
+ rol ebp, 5
+ add ebp, edx
+ mov edx, DWORD PTR 4[esp]
+ ror eax, 1
+ xor edi, ebx
+ ror eax, 1
+ lea ebp, DWORD PTR 1518500249[edx*1+ebp]
+ add edi, ebp
+ ; 00_15 2
+ mov edx, eax
+ mov ebp, edi
+ xor edx, ecx
+ rol ebp, 5
+ and edx, esi
+ add ebp, ebx
+ ror esi, 1
+ mov ebx, DWORD PTR 8[esp]
+ ror esi, 1
+ xor edx, ecx
+ lea ebp, DWORD PTR 1518500249[ebx*1+ebp]
+ mov ebx, esi
+ add edx, ebp
+ xor ebx, eax
+ mov ebp, edx
+ and ebx, edi
+ rol ebp, 5
+ add ebp, ecx
+ mov ecx, DWORD PTR 12[esp]
+ ror edi, 1
+ xor ebx, eax
+ ror edi, 1
+ lea ebp, DWORD PTR 1518500249[ecx*1+ebp]
+ add ebx, ebp
+ ; 00_15 4
+ mov ecx, edi
+ mov ebp, ebx
+ xor ecx, esi
+ rol ebp, 5
+ and ecx, edx
+ add ebp, eax
+ ror edx, 1
+ mov eax, DWORD PTR 16[esp]
+ ror edx, 1
+ xor ecx, esi
+ lea ebp, DWORD PTR 1518500249[eax*1+ebp]
+ mov eax, edx
+ add ecx, ebp
+ xor eax, edi
+ mov ebp, ecx
+ and eax, ebx
+ rol ebp, 5
+ add ebp, esi
+ mov esi, DWORD PTR 20[esp]
+ ror ebx, 1
+ xor eax, edi
+ ror ebx, 1
+ lea ebp, DWORD PTR 1518500249[esi*1+ebp]
+ add eax, ebp
+ ; 00_15 6
+ mov esi, ebx
+ mov ebp, eax
+ xor esi, edx
+ rol ebp, 5
+ and esi, ecx
+ add ebp, edi
+ ror ecx, 1
+ mov edi, DWORD PTR 24[esp]
+ ror ecx, 1
+ xor esi, edx
+ lea ebp, DWORD PTR 1518500249[edi*1+ebp]
+ mov edi, ecx
+ add esi, ebp
+ xor edi, ebx
+ mov ebp, esi
+ and edi, eax
+ rol ebp, 5
+ add ebp, edx
+ mov edx, DWORD PTR 28[esp]
+ ror eax, 1
+ xor edi, ebx
+ ror eax, 1
+ lea ebp, DWORD PTR 1518500249[edx*1+ebp]
+ add edi, ebp
+ ; 00_15 8
+ mov edx, eax
+ mov ebp, edi
+ xor edx, ecx
+ rol ebp, 5
+ and edx, esi
+ add ebp, ebx
+ ror esi, 1
+ mov ebx, DWORD PTR 32[esp]
+ ror esi, 1
+ xor edx, ecx
+ lea ebp, DWORD PTR 1518500249[ebx*1+ebp]
+ mov ebx, esi
+ add edx, ebp
+ xor ebx, eax
+ mov ebp, edx
+ and ebx, edi
+ rol ebp, 5
+ add ebp, ecx
+ mov ecx, DWORD PTR 36[esp]
+ ror edi, 1
+ xor ebx, eax
+ ror edi, 1
+ lea ebp, DWORD PTR 1518500249[ecx*1+ebp]
+ add ebx, ebp
+ ; 00_15 10
+ mov ecx, edi
+ mov ebp, ebx
+ xor ecx, esi
+ rol ebp, 5
+ and ecx, edx
+ add ebp, eax
+ ror edx, 1
+ mov eax, DWORD PTR 40[esp]
+ ror edx, 1
+ xor ecx, esi
+ lea ebp, DWORD PTR 1518500249[eax*1+ebp]
+ mov eax, edx
+ add ecx, ebp
+ xor eax, edi
+ mov ebp, ecx
+ and eax, ebx
+ rol ebp, 5
+ add ebp, esi
+ mov esi, DWORD PTR 44[esp]
+ ror ebx, 1
+ xor eax, edi
+ ror ebx, 1
+ lea ebp, DWORD PTR 1518500249[esi*1+ebp]
+ add eax, ebp
+ ; 00_15 12
+ mov esi, ebx
+ mov ebp, eax
+ xor esi, edx
+ rol ebp, 5
+ and esi, ecx
+ add ebp, edi
+ ror ecx, 1
+ mov edi, DWORD PTR 48[esp]
+ ror ecx, 1
+ xor esi, edx
+ lea ebp, DWORD PTR 1518500249[edi*1+ebp]
+ mov edi, ecx
+ add esi, ebp
+ xor edi, ebx
+ mov ebp, esi
+ and edi, eax
+ rol ebp, 5
+ add ebp, edx
+ mov edx, DWORD PTR 52[esp]
+ ror eax, 1
+ xor edi, ebx
+ ror eax, 1
+ lea ebp, DWORD PTR 1518500249[edx*1+ebp]
+ add edi, ebp
+ ; 00_15 14
+ mov edx, eax
+ mov ebp, edi
+ xor edx, ecx
+ rol ebp, 5
+ and edx, esi
+ add ebp, ebx
+ ror esi, 1
+ mov ebx, DWORD PTR 56[esp]
+ ror esi, 1
+ xor edx, ecx
+ lea ebp, DWORD PTR 1518500249[ebx*1+ebp]
+ mov ebx, esi
+ add edx, ebp
+ xor ebx, eax
+ mov ebp, edx
+ and ebx, edi
+ rol ebp, 5
+ add ebp, ecx
+ mov ecx, DWORD PTR 60[esp]
+ ror edi, 1
+ xor ebx, eax
+ ror edi, 1
+ lea ebp, DWORD PTR 1518500249[ecx*1+ebp]
+ add ebx, ebp
+ ; 16_19 16
+ nop
+ mov ebp, DWORD PTR [esp]
+ mov ecx, DWORD PTR 8[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 32[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor ecx, ebp
+ mov ebp, edi
+ rol ecx, 1
+ xor ebp, esi
+ mov DWORD PTR [esp],ecx
+ and ebp, edx
+ lea ecx, DWORD PTR 1518500249[eax*1+ecx]
+ xor ebp, esi
+ mov eax, ebx
+ add ecx, ebp
+ rol eax, 5
+ ror edx, 1
+ add ecx, eax
+ mov eax, DWORD PTR 4[esp]
+ mov ebp, DWORD PTR 12[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 56[esp]
+ ror edx, 1
+ xor eax, ebp
+ rol eax, 1
+ mov ebp, edx
+ xor ebp, edi
+ mov DWORD PTR 4[esp],eax
+ and ebp, ebx
+ lea eax, DWORD PTR 1518500249[esi*1+eax]
+ xor ebp, edi
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add eax, esi
+ ror ebx, 1
+ add eax, ebp
+ ; 16_19 18
+ mov ebp, DWORD PTR 8[esp]
+ mov esi, DWORD PTR 16[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 40[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor esi, ebp
+ mov ebp, ebx
+ rol esi, 1
+ xor ebp, edx
+ mov DWORD PTR 8[esp],esi
+ and ebp, ecx
+ lea esi, DWORD PTR 1518500249[edi*1+esi]
+ xor ebp, edx
+ mov edi, eax
+ add esi, ebp
+ rol edi, 5
+ ror ecx, 1
+ add esi, edi
+ mov edi, DWORD PTR 12[esp]
+ mov ebp, DWORD PTR 20[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR [esp]
+ ror ecx, 1
+ xor edi, ebp
+ rol edi, 1
+ mov ebp, ecx
+ xor ebp, ebx
+ mov DWORD PTR 12[esp],edi
+ and ebp, eax
+ lea edi, DWORD PTR 1518500249[edx*1+edi]
+ xor ebp, ebx
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add edi, edx
+ ror eax, 1
+ add edi, ebp
+ ; 20_39 20
+ mov edx, DWORD PTR 16[esp]
+ mov ebp, DWORD PTR 24[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 48[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ xor ebp, eax
+ mov DWORD PTR 16[esp],edx
+ xor ebp, ecx
+ lea edx, DWORD PTR 1859775393[ebx*1+edx]
+ mov ebx, edi
+ rol ebx, 5
+ ror esi, 1
+ add ebx, ebp
+ ror esi, 1
+ add edx, ebx
+ ; 20_39 21
+ mov ebx, DWORD PTR 20[esp]
+ mov ebp, DWORD PTR 28[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 8[esp]
+ xor ebx, ebp
+ mov ebp, edi
+ rol ebx, 1
+ xor ebp, esi
+ mov DWORD PTR 20[esp],ebx
+ xor ebp, eax
+ lea ebx, DWORD PTR 1859775393[ecx*1+ebx]
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ecx, ebp
+ ror edi, 1
+ add ebx, ecx
+ ; 20_39 22
+ mov ecx, DWORD PTR 24[esp]
+ mov ebp, DWORD PTR 32[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 56[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ xor ebp, edi
+ mov DWORD PTR 24[esp],ecx
+ xor ebp, esi
+ lea ecx, DWORD PTR 1859775393[eax*1+ecx]
+ mov eax, ebx
+ rol eax, 5
+ ror edx, 1
+ add eax, ebp
+ ror edx, 1
+ add ecx, eax
+ ; 20_39 23
+ mov eax, DWORD PTR 28[esp]
+ mov ebp, DWORD PTR 36[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 16[esp]
+ xor eax, ebp
+ mov ebp, ebx
+ rol eax, 1
+ xor ebp, edx
+ mov DWORD PTR 28[esp],eax
+ xor ebp, edi
+ lea eax, DWORD PTR 1859775393[esi*1+eax]
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add esi, ebp
+ ror ebx, 1
+ add eax, esi
+ ; 20_39 24
+ mov esi, DWORD PTR 32[esp]
+ mov ebp, DWORD PTR 40[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR [esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ xor ebp, ebx
+ mov DWORD PTR 32[esp],esi
+ xor ebp, edx
+ lea esi, DWORD PTR 1859775393[edi*1+esi]
+ mov edi, eax
+ rol edi, 5
+ ror ecx, 1
+ add edi, ebp
+ ror ecx, 1
+ add esi, edi
+ ; 20_39 25
+ mov edi, DWORD PTR 36[esp]
+ mov ebp, DWORD PTR 44[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 24[esp]
+ xor edi, ebp
+ mov ebp, eax
+ rol edi, 1
+ xor ebp, ecx
+ mov DWORD PTR 36[esp],edi
+ xor ebp, ebx
+ lea edi, DWORD PTR 1859775393[edx*1+edi]
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add edx, ebp
+ ror eax, 1
+ add edi, edx
+ ; 20_39 26
+ mov edx, DWORD PTR 40[esp]
+ mov ebp, DWORD PTR 48[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 8[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ xor ebp, eax
+ mov DWORD PTR 40[esp],edx
+ xor ebp, ecx
+ lea edx, DWORD PTR 1859775393[ebx*1+edx]
+ mov ebx, edi
+ rol ebx, 5
+ ror esi, 1
+ add ebx, ebp
+ ror esi, 1
+ add edx, ebx
+ ; 20_39 27
+ mov ebx, DWORD PTR 44[esp]
+ mov ebp, DWORD PTR 52[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 32[esp]
+ xor ebx, ebp
+ mov ebp, edi
+ rol ebx, 1
+ xor ebp, esi
+ mov DWORD PTR 44[esp],ebx
+ xor ebp, eax
+ lea ebx, DWORD PTR 1859775393[ecx*1+ebx]
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ecx, ebp
+ ror edi, 1
+ add ebx, ecx
+ ; 20_39 28
+ mov ecx, DWORD PTR 48[esp]
+ mov ebp, DWORD PTR 56[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 16[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ xor ebp, edi
+ mov DWORD PTR 48[esp],ecx
+ xor ebp, esi
+ lea ecx, DWORD PTR 1859775393[eax*1+ecx]
+ mov eax, ebx
+ rol eax, 5
+ ror edx, 1
+ add eax, ebp
+ ror edx, 1
+ add ecx, eax
+ ; 20_39 29
+ mov eax, DWORD PTR 52[esp]
+ mov ebp, DWORD PTR 60[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 40[esp]
+ xor eax, ebp
+ mov ebp, ebx
+ rol eax, 1
+ xor ebp, edx
+ mov DWORD PTR 52[esp],eax
+ xor ebp, edi
+ lea eax, DWORD PTR 1859775393[esi*1+eax]
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add esi, ebp
+ ror ebx, 1
+ add eax, esi
+ ; 20_39 30
+ mov esi, DWORD PTR 56[esp]
+ mov ebp, DWORD PTR [esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 24[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ xor ebp, ebx
+ mov DWORD PTR 56[esp],esi
+ xor ebp, edx
+ lea esi, DWORD PTR 1859775393[edi*1+esi]
+ mov edi, eax
+ rol edi, 5
+ ror ecx, 1
+ add edi, ebp
+ ror ecx, 1
+ add esi, edi
+ ; 20_39 31
+ mov edi, DWORD PTR 60[esp]
+ mov ebp, DWORD PTR 4[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 48[esp]
+ xor edi, ebp
+ mov ebp, eax
+ rol edi, 1
+ xor ebp, ecx
+ mov DWORD PTR 60[esp],edi
+ xor ebp, ebx
+ lea edi, DWORD PTR 1859775393[edx*1+edi]
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add edx, ebp
+ ror eax, 1
+ add edi, edx
+ ; 20_39 32
+ mov edx, DWORD PTR [esp]
+ mov ebp, DWORD PTR 8[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 32[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ xor ebp, eax
+ mov DWORD PTR [esp],edx
+ xor ebp, ecx
+ lea edx, DWORD PTR 1859775393[ebx*1+edx]
+ mov ebx, edi
+ rol ebx, 5
+ ror esi, 1
+ add ebx, ebp
+ ror esi, 1
+ add edx, ebx
+ ; 20_39 33
+ mov ebx, DWORD PTR 4[esp]
+ mov ebp, DWORD PTR 12[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 56[esp]
+ xor ebx, ebp
+ mov ebp, edi
+ rol ebx, 1
+ xor ebp, esi
+ mov DWORD PTR 4[esp],ebx
+ xor ebp, eax
+ lea ebx, DWORD PTR 1859775393[ecx*1+ebx]
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ecx, ebp
+ ror edi, 1
+ add ebx, ecx
+ ; 20_39 34
+ mov ecx, DWORD PTR 8[esp]
+ mov ebp, DWORD PTR 16[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 40[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ xor ebp, edi
+ mov DWORD PTR 8[esp],ecx
+ xor ebp, esi
+ lea ecx, DWORD PTR 1859775393[eax*1+ecx]
+ mov eax, ebx
+ rol eax, 5
+ ror edx, 1
+ add eax, ebp
+ ror edx, 1
+ add ecx, eax
+ ; 20_39 35
+ mov eax, DWORD PTR 12[esp]
+ mov ebp, DWORD PTR 20[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR [esp]
+ xor eax, ebp
+ mov ebp, ebx
+ rol eax, 1
+ xor ebp, edx
+ mov DWORD PTR 12[esp],eax
+ xor ebp, edi
+ lea eax, DWORD PTR 1859775393[esi*1+eax]
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add esi, ebp
+ ror ebx, 1
+ add eax, esi
+ ; 20_39 36
+ mov esi, DWORD PTR 16[esp]
+ mov ebp, DWORD PTR 24[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 48[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ xor ebp, ebx
+ mov DWORD PTR 16[esp],esi
+ xor ebp, edx
+ lea esi, DWORD PTR 1859775393[edi*1+esi]
+ mov edi, eax
+ rol edi, 5
+ ror ecx, 1
+ add edi, ebp
+ ror ecx, 1
+ add esi, edi
+ ; 20_39 37
+ mov edi, DWORD PTR 20[esp]
+ mov ebp, DWORD PTR 28[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 8[esp]
+ xor edi, ebp
+ mov ebp, eax
+ rol edi, 1
+ xor ebp, ecx
+ mov DWORD PTR 20[esp],edi
+ xor ebp, ebx
+ lea edi, DWORD PTR 1859775393[edx*1+edi]
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add edx, ebp
+ ror eax, 1
+ add edi, edx
+ ; 20_39 38
+ mov edx, DWORD PTR 24[esp]
+ mov ebp, DWORD PTR 32[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 56[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ xor ebp, eax
+ mov DWORD PTR 24[esp],edx
+ xor ebp, ecx
+ lea edx, DWORD PTR 1859775393[ebx*1+edx]
+ mov ebx, edi
+ rol ebx, 5
+ ror esi, 1
+ add ebx, ebp
+ ror esi, 1
+ add edx, ebx
+ ; 20_39 39
+ mov ebx, DWORD PTR 28[esp]
+ mov ebp, DWORD PTR 36[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 16[esp]
+ xor ebx, ebp
+ mov ebp, edi
+ rol ebx, 1
+ xor ebp, esi
+ mov DWORD PTR 28[esp],ebx
+ xor ebp, eax
+ lea ebx, DWORD PTR 1859775393[ecx*1+ebx]
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ecx, ebp
+ ror edi, 1
+ add ebx, ecx
+ ; 40_59 40
+ mov ecx, DWORD PTR 32[esp]
+ mov ebp, DWORD PTR 40[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR [esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ or ebp, edi
+ mov DWORD PTR 32[esp],ecx
+ and ebp, esi
+ lea ecx, DWORD PTR 2400959708[eax*1+ecx]
+ mov eax, edx
+ ror edx, 1
+ and eax, edi
+ or ebp, eax
+ mov eax, ebx
+ rol eax, 5
+ add ebp, eax
+ mov eax, DWORD PTR 36[esp]
+ add ecx, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 24[esp]
+ ror edx, 1
+ xor eax, ebp
+ rol eax, 1
+ mov ebp, ebx
+ mov DWORD PTR 36[esp],eax
+ or ebp, edx
+ lea eax, DWORD PTR 2400959708[esi*1+eax]
+ mov esi, ebx
+ and ebp, edi
+ and esi, edx
+ or ebp, esi
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add ebp, esi
+ ror ebx, 1
+ add eax, ebp
+ ; 40_59 41
+ ; 40_59 42
+ mov esi, DWORD PTR 40[esp]
+ mov ebp, DWORD PTR 48[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 8[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ or ebp, ebx
+ mov DWORD PTR 40[esp],esi
+ and ebp, edx
+ lea esi, DWORD PTR 2400959708[edi*1+esi]
+ mov edi, ecx
+ ror ecx, 1
+ and edi, ebx
+ or ebp, edi
+ mov edi, eax
+ rol edi, 5
+ add ebp, edi
+ mov edi, DWORD PTR 44[esp]
+ add esi, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 32[esp]
+ ror ecx, 1
+ xor edi, ebp
+ rol edi, 1
+ mov ebp, eax
+ mov DWORD PTR 44[esp],edi
+ or ebp, ecx
+ lea edi, DWORD PTR 2400959708[edx*1+edi]
+ mov edx, eax
+ and ebp, ebx
+ and edx, ecx
+ or ebp, edx
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add ebp, edx
+ ror eax, 1
+ add edi, ebp
+ ; 40_59 43
+ ; 40_59 44
+ mov edx, DWORD PTR 48[esp]
+ mov ebp, DWORD PTR 56[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 16[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ or ebp, eax
+ mov DWORD PTR 48[esp],edx
+ and ebp, ecx
+ lea edx, DWORD PTR 2400959708[ebx*1+edx]
+ mov ebx, esi
+ ror esi, 1
+ and ebx, eax
+ or ebp, ebx
+ mov ebx, edi
+ rol ebx, 5
+ add ebp, ebx
+ mov ebx, DWORD PTR 52[esp]
+ add edx, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 40[esp]
+ ror esi, 1
+ xor ebx, ebp
+ rol ebx, 1
+ mov ebp, edi
+ mov DWORD PTR 52[esp],ebx
+ or ebp, esi
+ lea ebx, DWORD PTR 2400959708[ecx*1+ebx]
+ mov ecx, edi
+ and ebp, eax
+ and ecx, esi
+ or ebp, ecx
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ebp, ecx
+ ror edi, 1
+ add ebx, ebp
+ ; 40_59 45
+ ; 40_59 46
+ mov ecx, DWORD PTR 56[esp]
+ mov ebp, DWORD PTR [esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 24[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ or ebp, edi
+ mov DWORD PTR 56[esp],ecx
+ and ebp, esi
+ lea ecx, DWORD PTR 2400959708[eax*1+ecx]
+ mov eax, edx
+ ror edx, 1
+ and eax, edi
+ or ebp, eax
+ mov eax, ebx
+ rol eax, 5
+ add ebp, eax
+ mov eax, DWORD PTR 60[esp]
+ add ecx, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 48[esp]
+ ror edx, 1
+ xor eax, ebp
+ rol eax, 1
+ mov ebp, ebx
+ mov DWORD PTR 60[esp],eax
+ or ebp, edx
+ lea eax, DWORD PTR 2400959708[esi*1+eax]
+ mov esi, ebx
+ and ebp, edi
+ and esi, edx
+ or ebp, esi
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add ebp, esi
+ ror ebx, 1
+ add eax, ebp
+ ; 40_59 47
+ ; 40_59 48
+ mov esi, DWORD PTR [esp]
+ mov ebp, DWORD PTR 8[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 32[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ or ebp, ebx
+ mov DWORD PTR [esp],esi
+ and ebp, edx
+ lea esi, DWORD PTR 2400959708[edi*1+esi]
+ mov edi, ecx
+ ror ecx, 1
+ and edi, ebx
+ or ebp, edi
+ mov edi, eax
+ rol edi, 5
+ add ebp, edi
+ mov edi, DWORD PTR 4[esp]
+ add esi, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 56[esp]
+ ror ecx, 1
+ xor edi, ebp
+ rol edi, 1
+ mov ebp, eax
+ mov DWORD PTR 4[esp],edi
+ or ebp, ecx
+ lea edi, DWORD PTR 2400959708[edx*1+edi]
+ mov edx, eax
+ and ebp, ebx
+ and edx, ecx
+ or ebp, edx
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add ebp, edx
+ ror eax, 1
+ add edi, ebp
+ ; 40_59 49
+ ; 40_59 50
+ mov edx, DWORD PTR 8[esp]
+ mov ebp, DWORD PTR 16[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 40[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ or ebp, eax
+ mov DWORD PTR 8[esp],edx
+ and ebp, ecx
+ lea edx, DWORD PTR 2400959708[ebx*1+edx]
+ mov ebx, esi
+ ror esi, 1
+ and ebx, eax
+ or ebp, ebx
+ mov ebx, edi
+ rol ebx, 5
+ add ebp, ebx
+ mov ebx, DWORD PTR 12[esp]
+ add edx, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR [esp]
+ ror esi, 1
+ xor ebx, ebp
+ rol ebx, 1
+ mov ebp, edi
+ mov DWORD PTR 12[esp],ebx
+ or ebp, esi
+ lea ebx, DWORD PTR 2400959708[ecx*1+ebx]
+ mov ecx, edi
+ and ebp, eax
+ and ecx, esi
+ or ebp, ecx
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ebp, ecx
+ ror edi, 1
+ add ebx, ebp
+ ; 40_59 51
+ ; 40_59 52
+ mov ecx, DWORD PTR 16[esp]
+ mov ebp, DWORD PTR 24[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 48[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ or ebp, edi
+ mov DWORD PTR 16[esp],ecx
+ and ebp, esi
+ lea ecx, DWORD PTR 2400959708[eax*1+ecx]
+ mov eax, edx
+ ror edx, 1
+ and eax, edi
+ or ebp, eax
+ mov eax, ebx
+ rol eax, 5
+ add ebp, eax
+ mov eax, DWORD PTR 20[esp]
+ add ecx, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 8[esp]
+ ror edx, 1
+ xor eax, ebp
+ rol eax, 1
+ mov ebp, ebx
+ mov DWORD PTR 20[esp],eax
+ or ebp, edx
+ lea eax, DWORD PTR 2400959708[esi*1+eax]
+ mov esi, ebx
+ and ebp, edi
+ and esi, edx
+ or ebp, esi
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add ebp, esi
+ ror ebx, 1
+ add eax, ebp
+ ; 40_59 53
+ ; 40_59 54
+ mov esi, DWORD PTR 24[esp]
+ mov ebp, DWORD PTR 32[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 56[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ or ebp, ebx
+ mov DWORD PTR 24[esp],esi
+ and ebp, edx
+ lea esi, DWORD PTR 2400959708[edi*1+esi]
+ mov edi, ecx
+ ror ecx, 1
+ and edi, ebx
+ or ebp, edi
+ mov edi, eax
+ rol edi, 5
+ add ebp, edi
+ mov edi, DWORD PTR 28[esp]
+ add esi, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 16[esp]
+ ror ecx, 1
+ xor edi, ebp
+ rol edi, 1
+ mov ebp, eax
+ mov DWORD PTR 28[esp],edi
+ or ebp, ecx
+ lea edi, DWORD PTR 2400959708[edx*1+edi]
+ mov edx, eax
+ and ebp, ebx
+ and edx, ecx
+ or ebp, edx
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add ebp, edx
+ ror eax, 1
+ add edi, ebp
+ ; 40_59 55
+ ; 40_59 56
+ mov edx, DWORD PTR 32[esp]
+ mov ebp, DWORD PTR 40[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR [esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ or ebp, eax
+ mov DWORD PTR 32[esp],edx
+ and ebp, ecx
+ lea edx, DWORD PTR 2400959708[ebx*1+edx]
+ mov ebx, esi
+ ror esi, 1
+ and ebx, eax
+ or ebp, ebx
+ mov ebx, edi
+ rol ebx, 5
+ add ebp, ebx
+ mov ebx, DWORD PTR 36[esp]
+ add edx, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 24[esp]
+ ror esi, 1
+ xor ebx, ebp
+ rol ebx, 1
+ mov ebp, edi
+ mov DWORD PTR 36[esp],ebx
+ or ebp, esi
+ lea ebx, DWORD PTR 2400959708[ecx*1+ebx]
+ mov ecx, edi
+ and ebp, eax
+ and ecx, esi
+ or ebp, ecx
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ebp, ecx
+ ror edi, 1
+ add ebx, ebp
+ ; 40_59 57
+ ; 40_59 58
+ mov ecx, DWORD PTR 40[esp]
+ mov ebp, DWORD PTR 48[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 8[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ or ebp, edi
+ mov DWORD PTR 40[esp],ecx
+ and ebp, esi
+ lea ecx, DWORD PTR 2400959708[eax*1+ecx]
+ mov eax, edx
+ ror edx, 1
+ and eax, edi
+ or ebp, eax
+ mov eax, ebx
+ rol eax, 5
+ add ebp, eax
+ mov eax, DWORD PTR 44[esp]
+ add ecx, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 32[esp]
+ ror edx, 1
+ xor eax, ebp
+ rol eax, 1
+ mov ebp, ebx
+ mov DWORD PTR 44[esp],eax
+ or ebp, edx
+ lea eax, DWORD PTR 2400959708[esi*1+eax]
+ mov esi, ebx
+ and ebp, edi
+ and esi, edx
+ or ebp, esi
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add ebp, esi
+ ror ebx, 1
+ add eax, ebp
+ ; 40_59 59
+ ; 20_39 60
+ mov esi, DWORD PTR 48[esp]
+ mov ebp, DWORD PTR 56[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 16[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ xor ebp, ebx
+ mov DWORD PTR 48[esp],esi
+ xor ebp, edx
+ lea esi, DWORD PTR 3395469782[edi*1+esi]
+ mov edi, eax
+ rol edi, 5
+ ror ecx, 1
+ add edi, ebp
+ ror ecx, 1
+ add esi, edi
+ ; 20_39 61
+ mov edi, DWORD PTR 52[esp]
+ mov ebp, DWORD PTR 60[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 40[esp]
+ xor edi, ebp
+ mov ebp, eax
+ rol edi, 1
+ xor ebp, ecx
+ mov DWORD PTR 52[esp],edi
+ xor ebp, ebx
+ lea edi, DWORD PTR 3395469782[edx*1+edi]
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add edx, ebp
+ ror eax, 1
+ add edi, edx
+ ; 20_39 62
+ mov edx, DWORD PTR 56[esp]
+ mov ebp, DWORD PTR [esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 24[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ xor ebp, eax
+ mov DWORD PTR 56[esp],edx
+ xor ebp, ecx
+ lea edx, DWORD PTR 3395469782[ebx*1+edx]
+ mov ebx, edi
+ rol ebx, 5
+ ror esi, 1
+ add ebx, ebp
+ ror esi, 1
+ add edx, ebx
+ ; 20_39 63
+ mov ebx, DWORD PTR 60[esp]
+ mov ebp, DWORD PTR 4[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 48[esp]
+ xor ebx, ebp
+ mov ebp, edi
+ rol ebx, 1
+ xor ebp, esi
+ mov DWORD PTR 60[esp],ebx
+ xor ebp, eax
+ lea ebx, DWORD PTR 3395469782[ecx*1+ebx]
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ecx, ebp
+ ror edi, 1
+ add ebx, ecx
+ ; 20_39 64
+ mov ecx, DWORD PTR [esp]
+ mov ebp, DWORD PTR 8[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 32[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ xor ebp, edi
+ mov DWORD PTR [esp],ecx
+ xor ebp, esi
+ lea ecx, DWORD PTR 3395469782[eax*1+ecx]
+ mov eax, ebx
+ rol eax, 5
+ ror edx, 1
+ add eax, ebp
+ ror edx, 1
+ add ecx, eax
+ ; 20_39 65
+ mov eax, DWORD PTR 4[esp]
+ mov ebp, DWORD PTR 12[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 56[esp]
+ xor eax, ebp
+ mov ebp, ebx
+ rol eax, 1
+ xor ebp, edx
+ mov DWORD PTR 4[esp],eax
+ xor ebp, edi
+ lea eax, DWORD PTR 3395469782[esi*1+eax]
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add esi, ebp
+ ror ebx, 1
+ add eax, esi
+ ; 20_39 66
+ mov esi, DWORD PTR 8[esp]
+ mov ebp, DWORD PTR 16[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 40[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ xor ebp, ebx
+ mov DWORD PTR 8[esp],esi
+ xor ebp, edx
+ lea esi, DWORD PTR 3395469782[edi*1+esi]
+ mov edi, eax
+ rol edi, 5
+ ror ecx, 1
+ add edi, ebp
+ ror ecx, 1
+ add esi, edi
+ ; 20_39 67
+ mov edi, DWORD PTR 12[esp]
+ mov ebp, DWORD PTR 20[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR [esp]
+ xor edi, ebp
+ mov ebp, eax
+ rol edi, 1
+ xor ebp, ecx
+ mov DWORD PTR 12[esp],edi
+ xor ebp, ebx
+ lea edi, DWORD PTR 3395469782[edx*1+edi]
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add edx, ebp
+ ror eax, 1
+ add edi, edx
+ ; 20_39 68
+ mov edx, DWORD PTR 16[esp]
+ mov ebp, DWORD PTR 24[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 48[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ xor ebp, eax
+ mov DWORD PTR 16[esp],edx
+ xor ebp, ecx
+ lea edx, DWORD PTR 3395469782[ebx*1+edx]
+ mov ebx, edi
+ rol ebx, 5
+ ror esi, 1
+ add ebx, ebp
+ ror esi, 1
+ add edx, ebx
+ ; 20_39 69
+ mov ebx, DWORD PTR 20[esp]
+ mov ebp, DWORD PTR 28[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 52[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 8[esp]
+ xor ebx, ebp
+ mov ebp, edi
+ rol ebx, 1
+ xor ebp, esi
+ mov DWORD PTR 20[esp],ebx
+ xor ebp, eax
+ lea ebx, DWORD PTR 3395469782[ecx*1+ebx]
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ecx, ebp
+ ror edi, 1
+ add ebx, ecx
+ ; 20_39 70
+ mov ecx, DWORD PTR 24[esp]
+ mov ebp, DWORD PTR 32[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 56[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ xor ebp, edi
+ mov DWORD PTR 24[esp],ecx
+ xor ebp, esi
+ lea ecx, DWORD PTR 3395469782[eax*1+ecx]
+ mov eax, ebx
+ rol eax, 5
+ ror edx, 1
+ add eax, ebp
+ ror edx, 1
+ add ecx, eax
+ ; 20_39 71
+ mov eax, DWORD PTR 28[esp]
+ mov ebp, DWORD PTR 36[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 60[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 16[esp]
+ xor eax, ebp
+ mov ebp, ebx
+ rol eax, 1
+ xor ebp, edx
+ mov DWORD PTR 28[esp],eax
+ xor ebp, edi
+ lea eax, DWORD PTR 3395469782[esi*1+eax]
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add esi, ebp
+ ror ebx, 1
+ add eax, esi
+ ; 20_39 72
+ mov esi, DWORD PTR 32[esp]
+ mov ebp, DWORD PTR 40[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR [esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ xor ebp, ebx
+ mov DWORD PTR 32[esp],esi
+ xor ebp, edx
+ lea esi, DWORD PTR 3395469782[edi*1+esi]
+ mov edi, eax
+ rol edi, 5
+ ror ecx, 1
+ add edi, ebp
+ ror ecx, 1
+ add esi, edi
+ ; 20_39 73
+ mov edi, DWORD PTR 36[esp]
+ mov ebp, DWORD PTR 44[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 4[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 24[esp]
+ xor edi, ebp
+ mov ebp, eax
+ rol edi, 1
+ xor ebp, ecx
+ mov DWORD PTR 36[esp],edi
+ xor ebp, ebx
+ lea edi, DWORD PTR 3395469782[edx*1+edi]
+ mov edx, esi
+ rol edx, 5
+ ror eax, 1
+ add edx, ebp
+ ror eax, 1
+ add edi, edx
+ ; 20_39 74
+ mov edx, DWORD PTR 40[esp]
+ mov ebp, DWORD PTR 48[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 8[esp]
+ xor edx, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor edx, ebp
+ mov ebp, esi
+ rol edx, 1
+ xor ebp, eax
+ mov DWORD PTR 40[esp],edx
+ xor ebp, ecx
+ lea edx, DWORD PTR 3395469782[ebx*1+edx]
+ mov ebx, edi
+ rol ebx, 5
+ ror esi, 1
+ add ebx, ebp
+ ror esi, 1
+ add edx, ebx
+ ; 20_39 75
+ mov ebx, DWORD PTR 44[esp]
+ mov ebp, DWORD PTR 52[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 12[esp]
+ xor ebx, ebp
+ mov ebp, DWORD PTR 32[esp]
+ xor ebx, ebp
+ mov ebp, edi
+ rol ebx, 1
+ xor ebp, esi
+ mov DWORD PTR 44[esp],ebx
+ xor ebp, eax
+ lea ebx, DWORD PTR 3395469782[ecx*1+ebx]
+ mov ecx, edx
+ rol ecx, 5
+ ror edi, 1
+ add ecx, ebp
+ ror edi, 1
+ add ebx, ecx
+ ; 20_39 76
+ mov ecx, DWORD PTR 48[esp]
+ mov ebp, DWORD PTR 56[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 16[esp]
+ xor ecx, ebp
+ mov ebp, DWORD PTR 36[esp]
+ xor ecx, ebp
+ mov ebp, edx
+ rol ecx, 1
+ xor ebp, edi
+ mov DWORD PTR 48[esp],ecx
+ xor ebp, esi
+ lea ecx, DWORD PTR 3395469782[eax*1+ecx]
+ mov eax, ebx
+ rol eax, 5
+ ror edx, 1
+ add eax, ebp
+ ror edx, 1
+ add ecx, eax
+ ; 20_39 77
+ mov eax, DWORD PTR 52[esp]
+ mov ebp, DWORD PTR 60[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 20[esp]
+ xor eax, ebp
+ mov ebp, DWORD PTR 40[esp]
+ xor eax, ebp
+ mov ebp, ebx
+ rol eax, 1
+ xor ebp, edx
+ mov DWORD PTR 52[esp],eax
+ xor ebp, edi
+ lea eax, DWORD PTR 3395469782[esi*1+eax]
+ mov esi, ecx
+ rol esi, 5
+ ror ebx, 1
+ add esi, ebp
+ ror ebx, 1
+ add eax, esi
+ ; 20_39 78
+ mov esi, DWORD PTR 56[esp]
+ mov ebp, DWORD PTR [esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 24[esp]
+ xor esi, ebp
+ mov ebp, DWORD PTR 44[esp]
+ xor esi, ebp
+ mov ebp, ecx
+ rol esi, 1
+ xor ebp, ebx
+ mov DWORD PTR 56[esp],esi
+ xor ebp, edx
+ lea esi, DWORD PTR 3395469782[edi*1+esi]
+ mov edi, eax
+ rol edi, 5
+ ror ecx, 1
+ add edi, ebp
+ ror ecx, 1
+ add esi, edi
+ ; 20_39 79
+ mov edi, DWORD PTR 60[esp]
+ mov ebp, DWORD PTR 4[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 28[esp]
+ xor edi, ebp
+ mov ebp, DWORD PTR 48[esp]
+ xor edi, ebp
+ mov ebp, eax
+ rol edi, 1
+ xor ebp, ecx
+ mov DWORD PTR 60[esp],edi
+ xor ebp, ebx
+ lea edi, DWORD PTR 3395469782[edx*1+edi]
+ mov edx, esi
+ rol edx, 5
+ add edx, ebp
+ mov ebp, DWORD PTR 128[esp]
+ ror eax, 1
+ add edi, edx
+ ror eax, 1
+ ; End processing
+ ;
+ mov edx, DWORD PTR 12[ebp]
+ add edx, ecx
+ mov ecx, DWORD PTR 4[ebp]
+ add ecx, esi
+ mov esi, eax
+ mov eax, DWORD PTR [ebp]
+ mov DWORD PTR 12[ebp],edx
+ add eax, edi
+ mov edi, DWORD PTR 16[ebp]
+ add edi, ebx
+ mov ebx, DWORD PTR 8[ebp]
+ add ebx, esi
+ mov DWORD PTR [ebp],eax
+ mov esi, DWORD PTR 132[esp]
+ mov DWORD PTR 8[ebp],ebx
+ add esi, 64
+ mov eax, DWORD PTR 68[esp]
+ mov DWORD PTR 16[ebp],edi
+ cmp esi, eax
+ mov DWORD PTR 4[ebp],ecx
+ jl L000start
+ add esp, 108
+ pop edi
+ pop ebx
+ pop ebp
+ pop esi
+ ret
+_TEXT SEGMENT
+PUBLIC _sha1_block_asm_host_order
+
+_sha1_block_asm_host_order PROC NEAR
+ mov ecx, DWORD PTR 12[esp]
+ push esi
+ shl ecx, 6
+ mov esi, DWORD PTR 12[esp]
+ push ebp
+ add ecx, esi
+ push ebx
+ mov ebp, DWORD PTR 16[esp]
+ push edi
+ mov edx, DWORD PTR 12[ebp]
+ sub esp, 108
+ mov edi, DWORD PTR 16[ebp]
+ mov ebx, DWORD PTR 8[ebp]
+ mov DWORD PTR 68[esp],ecx
+ ; First we need to setup the X array
+ mov eax, DWORD PTR [esi]
+ mov ecx, DWORD PTR 4[esi]
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ecx
+ mov eax, DWORD PTR 8[esi]
+ mov ecx, DWORD PTR 12[esi]
+ mov DWORD PTR 8[esp],eax
+ mov DWORD PTR 12[esp],ecx
+ mov eax, DWORD PTR 16[esi]
+ mov ecx, DWORD PTR 20[esi]
+ mov DWORD PTR 16[esp],eax
+ mov DWORD PTR 20[esp],ecx
+ mov eax, DWORD PTR 24[esi]
+ mov ecx, DWORD PTR 28[esi]
+ mov DWORD PTR 24[esp],eax
+ mov DWORD PTR 28[esp],ecx
+ mov eax, DWORD PTR 32[esi]
+ mov ecx, DWORD PTR 36[esi]
+ mov DWORD PTR 32[esp],eax
+ mov DWORD PTR 36[esp],ecx
+ mov eax, DWORD PTR 40[esi]
+ mov ecx, DWORD PTR 44[esi]
+ mov DWORD PTR 40[esp],eax
+ mov DWORD PTR 44[esp],ecx
+ mov eax, DWORD PTR 48[esi]
+ mov ecx, DWORD PTR 52[esi]
+ mov DWORD PTR 48[esp],eax
+ mov DWORD PTR 52[esp],ecx
+ mov eax, DWORD PTR 56[esi]
+ mov ecx, DWORD PTR 60[esi]
+ mov DWORD PTR 56[esp],eax
+ mov DWORD PTR 60[esp],ecx
+ jmp L001shortcut
+_sha1_block_asm_host_order ENDP
+_TEXT ENDS
+_sha1_block_asm_data_order ENDP
+_TEXT ENDS
+END
diff --git a/crypto/sha/asm/sha1-586.pl b/crypto/sha/asm/sha1-586.pl
index 09df993ecd4..48d9192a4e6 100644
--- a/crypto/sha/asm/sha1-586.pl
+++ b/crypto/sha/asm/sha1-586.pl
@@ -392,7 +392,7 @@ sub sha1_block_data
&X_expand("esi");
&mov(&wparam(1),"esi");
- &set_label("shortcut", 0, 1);
+ &set_label("shortcut", 1);
&comment("");
&comment("Start processing");
diff --git a/crypto/sha/sha_locl.h b/crypto/sha/sha_locl.h
index 2f8aef83f38..3e6f489b876 100644
--- a/crypto/sha/sha_locl.h
+++ b/crypto/sha/sha_locl.h
@@ -130,7 +130,11 @@
# error "Either SHA_0 or SHA_1 must be defined."
#endif
+#ifndef FLAT_INC
+#include "../md32_common.h"
+#else
#include "md32_common.h"
+#endif
#define INIT_DATA_h0 0x67452301UL
#define INIT_DATA_h1 0xefcdab89UL