summaryrefslogtreecommitdiffstats
path: root/crypto/ripemd
diff options
context:
space:
mode:
authorRalf S. Engelschall <rse@openssl.org>1998-12-21 10:56:39 +0000
committerRalf S. Engelschall <rse@openssl.org>1998-12-21 10:56:39 +0000
commit58964a492275ca9a59a0cd9c8155cb2491b4b909 (patch)
treec7b16876a5789463bbbb468ef4829c8129b3d718 /crypto/ripemd
parentd02b48c63a58ea4367a0e905979f140b7d090f86 (diff)
Import of old SSLeay release: SSLeay 0.9.0b
Diffstat (limited to 'crypto/ripemd')
-rw-r--r--crypto/ripemd/Makefile.ssl104
-rw-r--r--crypto/ripemd/Makefile.uni109
-rw-r--r--crypto/ripemd/README15
-rw-r--r--crypto/ripemd/asm/rips.cpp78
-rw-r--r--crypto/ripemd/asm/rm-win32.asm1972
-rw-r--r--crypto/ripemd/asm/rm86unix.cpp2016
-rw-r--r--crypto/ripemd/asm/rmd-586.pl582
-rw-r--r--crypto/ripemd/ripemd.h99
-rw-r--r--crypto/ripemd/rmd160.c135
-rw-r--r--crypto/ripemd/rmd_dgst.c535
-rw-r--r--crypto/ripemd/rmd_locl.h226
-rw-r--r--crypto/ripemd/rmd_one.c77
-rw-r--r--crypto/ripemd/rmdconst.h399
-rw-r--r--crypto/ripemd/rmdtest.c133
14 files changed, 6480 insertions, 0 deletions
diff --git a/crypto/ripemd/Makefile.ssl b/crypto/ripemd/Makefile.ssl
new file mode 100644
index 0000000000..67d47ceb2c
--- /dev/null
+++ b/crypto/ripemd/Makefile.ssl
@@ -0,0 +1,104 @@
+#
+# SSLeay/crypto/ripemd/Makefile
+#
+
+DIR= ripemd
+TOP= ../..
+CC= cc
+CPP= $(CC) -E
+INCLUDES=
+CFLAG=-g
+INSTALLTOP=/usr/local/ssl
+MAKE= make -f Makefile.ssl
+MAKEDEPEND= makedepend -f Makefile.ssl
+MAKEFILE= Makefile.ssl
+AR= ar r
+
+RIP_ASM_OBJ=
+
+CFLAGS= $(INCLUDES) $(CFLAG)
+
+GENERAL=Makefile
+TEST=rmdtest.c
+APPS=rmd160.c
+
+LIB=$(TOP)/libcrypto.a
+LIBSRC=rmd_dgst.c rmd_one.c
+LIBOBJ=rmd_dgst.o rmd_one.o $(RMD160_ASM_OBJ)
+
+SRC= $(LIBSRC)
+
+EXHEADER= ripemd.h
+HEADER= rmd_locl.h rmdconst.h $(EXHEADER)
+
+ALL= $(GENERAL) $(SRC) $(HEADER)
+
+top:
+ (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
+
+all: lib
+
+lib: $(LIBOBJ)
+ $(AR) $(LIB) $(LIBOBJ)
+ sh $(TOP)/util/ranlib.sh $(LIB)
+ @touch lib
+
+# elf
+asm/rm86-elf.o: asm/rm86unix.cpp
+ $(CPP) -DELF asm/rm86unix.cpp | as -o asm/rm86-elf.o
+
+# solaris
+asm/rm86-sol.o: asm/rm86unix.cpp
+ $(CC) -E -DSOL asm/rm86unix.cpp | sed 's/^#.*//' > asm/rm86-sol.s
+ as -o asm/rm86-sol.o asm/rm86-sol.s
+ rm -f asm/rm86-sol.s
+
+# a.out
+asm/rm86-out.o: asm/rm86unix.cpp
+ $(CPP) -DOUT asm/rm86unix.cpp | as -o asm/rm86-out.o
+
+# bsdi
+asm/rm86bsdi.o: asm/rm86unix.cpp
+ $(CPP) -DBSDI asm/rm86unix.cpp | as -o asm/rm86bsdi.o
+
+asm/rm86unix.cpp:
+ (cd asm; perl rmd-586.pl cpp >rm86unix.cpp)
+
+files:
+ perl $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
+
+links:
+ /bin/rm -f Makefile
+ $(TOP)/util/point.sh Makefile.ssl Makefile ;
+ $(TOP)/util/mklink.sh ../../include $(EXHEADER)
+ $(TOP)/util/mklink.sh ../../test $(TEST)
+ $(TOP)/util/mklink.sh ../../apps $(APPS)
+
+install:
+ @for i in $(EXHEADER) ; \
+ do \
+ (cp $$i $(INSTALLTOP)/include/$$i; \
+ chmod 644 $(INSTALLTOP)/include/$$i ); \
+ done;
+
+tags:
+ ctags $(SRC)
+
+tests:
+
+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 *.o asm/*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
+
+errors:
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/crypto/ripemd/Makefile.uni b/crypto/ripemd/Makefile.uni
new file mode 100644
index 0000000000..54685712db
--- /dev/null
+++ b/crypto/ripemd/Makefile.uni
@@ -0,0 +1,109 @@
+# 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= md5
+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
+
+MD5_ASM_OBJ=
+
+CFLAGS= $(INCLUDES) $(CFLAG)
+
+GENERAL=Makefile
+TEST=md5test
+APPS=md5
+
+LIB=libmd5.a
+LIBSRC=md5_dgst.c md5_one.c
+LIBOBJ=md5_dgst.o md5_one.o $(MD5_ASM_OBJ)
+
+SRC= $(LIBSRC)
+
+EXHEADER= md5.h
+HEADER= md5_locl.h $(EXHEADER)
+
+ALL= $(GENERAL) $(SRC) $(HEADER)
+
+all: $(LIB) $(TEST) $(APPS)
+
+$(LIB): $(LIBOBJ)
+ $(AR) $(LIB) $(LIBOBJ)
+ sh $(TOP)/ranlib.sh $(LIB)
+
+# elf
+asm/mx86-elf.o: asm/mx86unix.cpp
+ $(CPP) -DELF asm/mx86unix.cpp | as -o asm/mx86-elf.o
+
+# solaris
+asm/mx86-sol.o: asm/mx86unix.cpp
+ $(CC) -E -DSOL asm/mx86unix.cpp | sed 's/^#.*//' > asm/mx86-sol.s
+ as -o asm/mx86-sol.o asm/mx86-sol.s
+ rm -f asm/mx86-sol.s
+
+# a.out
+asm/mx86-out.o: asm/mx86unix.cpp
+ $(CPP) -DOUT asm/mx86unix.cpp | as -o asm/mx86-out.o
+
+# bsdi
+asm/mx86bsdi.o: asm/mx86unix.cpp
+ $(CPP) -DBSDI asm/mx86unix.cpp | as -o asm/mx86bsdi.o
+
+asm/mx86unix.cpp:
+ (cd asm; perl md5-586.pl cpp >mx86unix.cpp)
+
+test: $(TEST)
+ ./$(TEST)
+
+$(TEST): $(TEST).c $(LIB)
+ $(CC) -o $(TEST) $(CFLAGS) $(TEST).c $(LIB)
+
+$(APPS): $(APPS).c $(LIB)
+ $(CC) -o $(APPS) $(CFLAGS) $(APPS).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) MD5_ASM_OBJ="" CC="cc" CFLAG="-O" all
+
+gcc:
+ $(MAKE) MD5_ASM_OBJ="" CC="gcc" CFLAGS="-O3 -fomit-frame-pointer" all
+
+x86-elf:
+ $(MAKE) MD5_ASM_OBJ="asm/mx86-elf.o" CFLAG="-DELF -DMD5_ASM -DL_ENDIAN $(CFLAGS)" all
+
+x86-out:
+ $(MAKE) MD5_ASM_OBJ="asm/mx86-out.o" CFLAG="-DOUT -DMD5_ASM -DL_ENDIAN $(CFLAGS)" all
+
+x86-solaris:
+ $(MAKE) MD5_ASM_OBJ="asm/mx86-sol.o" CFLAG="-DSOL -DMD5_ASM -DL_ENDIAN $(CFLAGS)" all
+
+x86-bdsi:
+ $(MAKE) MD5_ASM_OBJ="asm/mx86-bdsi.o" CFLAG="-DBDSI -DMD5_ASM -DL_ENDIAN $(CFLAGS)" all
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/crypto/ripemd/README b/crypto/ripemd/README
new file mode 100644
index 0000000000..7097707264
--- /dev/null
+++ b/crypto/ripemd/README
@@ -0,0 +1,15 @@
+RIPEMD-160
+http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html
+
+This is my implementation of RIPEMD-160. The pentium assember is a little
+off the pace since I only get 1050 cycles, while the best is 1013.
+I have a few ideas for how to get another 20 or so cycles, but at
+this point I will not bother right now. I belive the trick will be
+to remove my 'copy X array onto stack' until inside the RIP1() finctions the
+first time round. To do this I need another register and will only have one
+temporary one. A bit tricky.... I can also cleanup the saving of the 5 words
+after the first half of the calculation. I should read the origional
+value, add then write. Currently I just save the new and read the origioal.
+I then read both at the end. Bad.
+
+eric (20-Jan-1998)
diff --git a/crypto/ripemd/asm/rips.cpp b/crypto/ripemd/asm/rips.cpp
new file mode 100644
index 0000000000..78a933c448
--- /dev/null
+++ b/crypto/ripemd/asm/rips.cpp
@@ -0,0 +1,78 @@
+//
+// gettsc.inl
+//
+// gives access to the Pentium's (secret) cycle counter
+//
+// This software was written by Leonard Janke (janke@unixg.ubc.ca)
+// in 1996-7 and is entered, by him, into the public domain.
+
+#if defined(__WATCOMC__)
+void GetTSC(unsigned long&);
+#pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax];
+#elif defined(__GNUC__)
+inline
+void GetTSC(unsigned long& tsc)
+{
+ asm volatile(".byte 15, 49\n\t"
+ : "=eax" (tsc)
+ :
+ : "%edx", "%eax");
+}
+#elif defined(_MSC_VER)
+inline
+void GetTSC(unsigned long& tsc)
+{
+ unsigned long a;
+ __asm _emit 0fh
+ __asm _emit 31h
+ __asm mov a, eax;
+ tsc=a;
+}
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "ripemd.h"
+
+extern "C" {
+void ripemd160_block_x86(RIPEMD160_CTX *ctx, unsigned char *buffer,int num);
+}
+
+void main(int argc,char *argv[])
+ {
+ unsigned char buffer[64*256];
+ RIPEMD160_CTX ctx;
+ unsigned long s1,s2,e1,e2;
+ unsigned char k[16];
+ unsigned long data[2];
+ unsigned char iv[8];
+ int i,num=0,numm;
+ int j=0;
+
+ if (argc >= 2)
+ num=atoi(argv[1]);
+
+ if (num == 0) num=16;
+ if (num > 250) num=16;
+ numm=num+2;
+ num*=64;
+ numm*=64;
+
+ for (j=0; j<6; j++)
+ {
+ for (i=0; i<10; i++) /**/
+ {
+ ripemd160_block_x86(&ctx,buffer,numm);
+ GetTSC(s1);
+ ripemd160_block_x86(&ctx,buffer,numm);
+ GetTSC(e1);
+ GetTSC(s2);
+ ripemd160_block_x86(&ctx,buffer,num);
+ GetTSC(e2);
+ ripemd160_block_x86(&ctx,buffer,num);
+ }
+ printf("ripemd160 (%d bytes) %d %d (%.2f)\n",num,
+ e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2);
+ }
+ }
+
diff --git a/crypto/ripemd/asm/rm-win32.asm b/crypto/ripemd/asm/rm-win32.asm
new file mode 100644
index 0000000000..bd38791c13
--- /dev/null
+++ b/crypto/ripemd/asm/rm-win32.asm
@@ -0,0 +1,1972 @@
+ ; Don't even think of reading this code
+ ; It was automatically generated by rmd-586.pl
+ ; Which is a perl program used to generate the x86 assember for
+ ; any of elf, a.out, BSDI,Win32, or Solaris
+ ; eric <eay@cryptsoft.com>
+ ;
+ TITLE rmd-586.asm
+ .386
+.model FLAT
+_TEXT SEGMENT
+PUBLIC _ripemd160_block_x86
+
+_ripemd160_block_x86 PROC NEAR
+ push esi
+ mov ecx, DWORD PTR 16[esp]
+ push edi
+ mov esi, DWORD PTR 16[esp]
+ push ebp
+ add ecx, esi
+ push ebx
+ sub ecx, 64
+ sub esp, 88
+ mov DWORD PTR [esp],ecx
+ mov edi, DWORD PTR 108[esp]
+L000start:
+ ;
+ mov eax, DWORD PTR [esi]
+ mov ebx, DWORD PTR 4[esi]
+ mov DWORD PTR 4[esp],eax
+ mov DWORD PTR 8[esp],ebx
+ mov eax, DWORD PTR 8[esi]
+ mov ebx, DWORD PTR 12[esi]
+ mov DWORD PTR 12[esp],eax
+ mov DWORD PTR 16[esp],ebx
+ mov eax, DWORD PTR 16[esi]
+ mov ebx, DWORD PTR 20[esi]
+ mov DWORD PTR 20[esp],eax
+ mov DWORD PTR 24[esp],ebx
+ mov eax, DWORD PTR 24[esi]
+ mov ebx, DWORD PTR 28[esi]
+ mov DWORD PTR 28[esp],eax
+ mov DWORD PTR 32[esp],ebx
+ mov eax, DWORD PTR 32[esi]
+ mov ebx, DWORD PTR 36[esi]
+ mov DWORD PTR 36[esp],eax
+ mov DWORD PTR 40[esp],ebx
+ mov eax, DWORD PTR 40[esi]
+ mov ebx, DWORD PTR 44[esi]
+ mov DWORD PTR 44[esp],eax
+ mov DWORD PTR 48[esp],ebx
+ mov eax, DWORD PTR 48[esi]
+ mov ebx, DWORD PTR 52[esi]
+ mov DWORD PTR 52[esp],eax
+ mov DWORD PTR 56[esp],ebx
+ mov eax, DWORD PTR 56[esi]
+ mov ebx, DWORD PTR 60[esi]
+ mov DWORD PTR 60[esp],eax
+ mov DWORD PTR 64[esp],ebx
+ add esi, 64
+ mov eax, DWORD PTR [edi]
+ mov DWORD PTR 112[esp],esi
+ mov ebx, DWORD PTR 4[edi]
+ mov ecx, DWORD PTR 8[edi]
+ mov edx, DWORD PTR 12[edi]
+ mov ebp, DWORD PTR 16[edi]
+ ; 0
+ mov esi, ecx
+ xor esi, edx
+ mov edi, DWORD PTR 4[esp]
+ xor esi, ebx
+ add eax, edi
+ rol ecx, 10
+ add eax, esi
+ mov esi, ebx
+ rol eax, 11
+ add eax, ebp
+ ; 1
+ xor esi, ecx
+ mov edi, DWORD PTR 8[esp]
+ xor esi, eax
+ add ebp, esi
+ mov esi, eax
+ rol ebx, 10
+ add ebp, edi
+ xor esi, ebx
+ rol ebp, 14
+ add ebp, edx
+ ; 2
+ mov edi, DWORD PTR 12[esp]
+ xor esi, ebp
+ add edx, edi
+ rol eax, 10
+ add edx, esi
+ mov esi, ebp
+ rol edx, 15
+ add edx, ecx
+ ; 3
+ xor esi, eax
+ mov edi, DWORD PTR 16[esp]
+ xor esi, edx
+ add ecx, esi
+ mov esi, edx
+ rol ebp, 10
+ add ecx, edi
+ xor esi, ebp
+ rol ecx, 12
+ add ecx, ebx
+ ; 4
+ mov edi, DWORD PTR 20[esp]
+ xor esi, ecx
+ add ebx, edi
+ rol edx, 10
+ add ebx, esi
+ mov esi, ecx
+ rol ebx, 5
+ add ebx, eax
+ ; 5
+ xor esi, edx
+ mov edi, DWORD PTR 24[esp]
+ xor esi, ebx
+ add eax, esi
+ mov esi, ebx
+ rol ecx, 10
+ add eax, edi
+ xor esi, ecx
+ rol eax, 8
+ add eax, ebp
+ ; 6
+ mov edi, DWORD PTR 28[esp]
+ xor esi, eax
+ add ebp, edi
+ rol ebx, 10
+ add ebp, esi
+ mov esi, eax
+ rol ebp, 7
+ add ebp, edx
+ ; 7
+ xor esi, ebx
+ mov edi, DWORD PTR 32[esp]
+ xor esi, ebp
+ add edx, esi
+ mov esi, ebp
+ rol eax, 10
+ add edx, edi
+ xor esi, eax
+ rol edx, 9
+ add edx, ecx
+ ; 8
+ mov edi, DWORD PTR 36[esp]
+ xor esi, edx
+ add ecx, edi
+ rol ebp, 10
+ add ecx, esi
+ mov esi, edx
+ rol ecx, 11
+ add ecx, ebx
+ ; 9
+ xor esi, ebp
+ mov edi, DWORD PTR 40[esp]
+ xor esi, ecx
+ add ebx, esi
+ mov esi, ecx
+ rol edx, 10
+ add ebx, edi
+ xor esi, edx
+ rol ebx, 13
+ add ebx, eax
+ ; 10
+ mov edi, DWORD PTR 44[esp]
+ xor esi, ebx
+ add eax, edi
+ rol ecx, 10
+ add eax, esi
+ mov esi, ebx
+ rol eax, 14
+ add eax, ebp
+ ; 11
+ xor esi, ecx
+ mov edi, DWORD PTR 48[esp]
+ xor esi, eax
+ add ebp, esi
+ mov esi, eax
+ rol ebx, 10
+ add ebp, edi
+ xor esi, ebx
+ rol ebp, 15
+ add ebp, edx
+ ; 12
+ mov edi, DWORD PTR 52[esp]
+ xor esi, ebp
+ add edx, edi
+ rol eax, 10
+ add edx, esi
+ mov esi, ebp
+ rol edx, 6
+ add edx, ecx
+ ; 13
+ xor esi, eax
+ mov edi, DWORD PTR 56[esp]
+ xor esi, edx
+ add ecx, esi
+ mov esi, edx
+ rol ebp, 10
+ add ecx, edi
+ xor esi, ebp
+ rol ecx, 7
+ add ecx, ebx
+ ; 14
+ mov edi, DWORD PTR 60[esp]
+ xor esi, ecx
+ add ebx, edi
+ rol edx, 10
+ add ebx, esi
+ mov esi, ecx
+ rol ebx, 9
+ add ebx, eax
+ ; 15
+ xor esi, edx
+ mov edi, DWORD PTR 64[esp]
+ xor esi, ebx
+ add eax, esi
+ mov esi, -1
+ rol ecx, 10
+ add eax, edi
+ mov edi, DWORD PTR 32[esp]
+ rol eax, 8
+ add eax, ebp
+ ; 16
+ add ebp, edi
+ mov edi, ebx
+ sub esi, eax
+ and edi, eax
+ and esi, ecx
+ or edi, esi
+ mov esi, DWORD PTR 20[esp]
+ rol ebx, 10
+ lea ebp, DWORD PTR 1518500249[edi*1+ebp]
+ mov edi, -1
+ rol ebp, 7
+ add ebp, edx
+ ; 17
+ add edx, esi
+ mov esi, eax
+ sub edi, ebp
+ and esi, ebp
+ and edi, ebx
+ or esi, edi
+ mov edi, DWORD PTR 56[esp]
+ rol eax, 10
+ lea edx, DWORD PTR 1518500249[esi*1+edx]
+ mov esi, -1
+ rol edx, 6
+ add edx, ecx
+ ; 18
+ add ecx, edi
+ mov edi, ebp
+ sub esi, edx
+ and edi, edx
+ and esi, eax
+ or edi, esi
+ mov esi, DWORD PTR 8[esp]
+ rol ebp, 10
+ lea ecx, DWORD PTR 1518500249[edi*1+ecx]
+ mov edi, -1
+ rol ecx, 8
+ add ecx, ebx
+ ; 19
+ add ebx, esi
+ mov esi, edx
+ sub edi, ecx
+ and esi, ecx
+ and edi, ebp
+ or esi, edi
+ mov edi, DWORD PTR 44[esp]
+ rol edx, 10
+ lea ebx, DWORD PTR 1518500249[esi*1+ebx]
+ mov esi, -1
+ rol ebx, 13
+ add ebx, eax
+ ; 20
+ add eax, edi
+ mov edi, ecx
+ sub esi, ebx
+ and edi, ebx
+ and esi, edx
+ or edi, esi
+ mov esi, DWORD PTR 28[esp]
+ rol ecx, 10
+ lea eax, DWORD PTR 1518500249[edi*1+eax]
+ mov edi, -1
+ rol eax, 11
+ add eax, ebp
+ ; 21
+ add ebp, esi
+ mov esi, ebx
+ sub edi, eax
+ and esi, eax
+ and edi, ecx
+ or esi, edi
+ mov edi, DWORD PTR 64[esp]
+ rol ebx, 10
+ lea ebp, DWORD PTR 1518500249[esi*1+ebp]
+ mov esi, -1
+ rol ebp, 9
+ add ebp, edx
+ ; 22
+ add edx, edi
+ mov edi, eax
+ sub esi, ebp
+ and edi, ebp
+ and esi, ebx
+ or edi, esi
+ mov esi, DWORD PTR 16[esp]
+ rol eax, 10
+ lea edx, DWORD PTR 1518500249[edi*1+edx]
+ mov edi, -1
+ rol edx, 7
+ add edx, ecx
+ ; 23
+ add ecx, esi
+ mov esi, ebp
+ sub edi, edx
+ and esi, edx
+ and edi, eax
+ or esi, edi
+ mov edi, DWORD PTR 52[esp]
+ rol ebp, 10
+ lea ecx, DWORD PTR 1518500249[esi*1+ecx]
+ mov esi, -1
+ rol ecx, 15
+ add ecx, ebx
+ ; 24
+ add ebx, edi
+ mov edi, edx
+ sub esi, ecx
+ and edi, ecx
+ and esi, ebp
+ or edi, esi
+ mov esi, DWORD PTR 4[esp]
+ rol edx, 10
+ lea ebx, DWORD PTR 1518500249[edi*1+ebx]
+ mov edi, -1
+ rol ebx, 7
+ add ebx, eax
+ ; 25
+ add eax, esi
+ mov esi, ecx
+ sub edi, ebx
+ and esi, ebx
+ and edi, edx
+ or esi, edi
+ mov edi, DWORD PTR 40[esp]
+ rol ecx, 10
+ lea eax, DWORD PTR 1518500249[esi*1+eax]
+ mov esi, -1
+ rol eax, 12
+ add eax, ebp
+ ; 26
+ add ebp, edi
+ mov edi, ebx
+ sub esi, eax
+ and edi, eax
+ and esi, ecx
+ or edi, esi
+ mov esi, DWORD PTR 24[esp]
+ rol ebx, 10
+ lea ebp, DWORD PTR 1518500249[edi*1+ebp]
+ mov edi, -1
+ rol ebp, 15
+ add ebp, edx
+ ; 27
+ add edx, esi
+ mov esi, eax
+ sub edi, ebp
+ and esi, ebp
+ and edi, ebx
+ or esi, edi
+ mov edi, DWORD PTR 12[esp]
+ rol eax, 10
+ lea edx, DWORD PTR 1518500249[esi*1+edx]
+ mov esi, -1
+ rol edx, 9
+ add edx, ecx
+ ; 28
+ add ecx, edi
+ mov edi, ebp
+ sub esi, edx
+ and edi, edx
+ and esi, eax
+ or edi, esi
+ mov esi, DWORD PTR 60[esp]
+ rol ebp, 10
+ lea ecx, DWORD PTR 1518500249[edi*1+ecx]
+ mov edi, -1
+ rol ecx, 11
+ add ecx, ebx
+ ; 29
+ add ebx, esi
+ mov esi, edx
+ sub edi, ecx
+ and esi, ecx
+ and edi, ebp
+ or esi, edi
+ mov edi, DWORD PTR 48[esp]
+ rol edx, 10
+ lea ebx, DWORD PTR 1518500249[esi*1+ebx]
+ mov esi, -1
+ rol ebx, 7
+ add ebx, eax
+ ; 30
+ add eax, edi
+ mov edi, ecx
+ sub esi, ebx
+ and edi, ebx
+ and esi, edx
+ or edi, esi
+ mov esi, DWORD PTR 36[esp]
+ rol ecx, 10
+ lea eax, DWORD PTR 1518500249[edi*1+eax]
+ mov edi, -1
+ rol eax, 13
+ add eax, ebp
+ ; 31
+ add ebp, esi
+ mov esi, ebx
+ sub edi, eax
+ and esi, eax
+ and edi, ecx
+ or esi, edi
+ mov edi, -1
+ rol ebx, 10
+ lea ebp, DWORD PTR 1518500249[esi*1+ebp]
+ sub edi, eax
+ rol ebp, 12
+ add ebp, edx
+ ; 32
+ mov esi, DWORD PTR 16[esp]
+ or edi, ebp
+ add edx, esi
+ xor edi, ebx
+ mov esi, -1
+ rol eax, 10
+ lea edx, DWORD PTR 1859775393[edi*1+edx]
+ sub esi, ebp
+ rol edx, 11
+ add edx, ecx
+ ; 33
+ mov edi, DWORD PTR 44[esp]
+ or esi, edx
+ add ecx, edi
+ xor esi, eax
+ mov edi, -1
+ rol ebp, 10
+ lea ecx, DWORD PTR 1859775393[esi*1+ecx]
+ sub edi, edx
+ rol ecx, 13
+ add ecx, ebx
+ ; 34
+ mov esi, DWORD PTR 60[esp]
+ or edi, ecx
+ add ebx, esi
+ xor edi, ebp
+ mov esi, -1
+ rol edx, 10
+ lea ebx, DWORD PTR 1859775393[edi*1+ebx]
+ sub esi, ecx
+ rol ebx, 6
+ add ebx, eax
+ ; 35
+ mov edi, DWORD PTR 20[esp]
+ or esi, ebx
+ add eax, edi
+ xor esi, edx
+ mov edi, -1
+ rol ecx, 10
+ lea eax, DWORD PTR 1859775393[esi*1+eax]
+ sub edi, ebx
+ rol eax, 7
+ add eax, ebp
+ ; 36
+ mov esi, DWORD PTR 40[esp]
+ or edi, eax
+ add ebp, esi
+ xor edi, ecx
+ mov esi, -1
+ rol ebx, 10
+ lea ebp, DWORD PTR 1859775393[edi*1+ebp]
+ sub esi, eax
+ rol ebp, 14
+ add ebp, edx
+ ; 37
+ mov edi, DWORD PTR 64[esp]
+ or esi, ebp
+ add edx, edi
+ xor esi, ebx
+ mov edi, -1
+ rol eax, 10
+ lea edx, DWORD PTR 1859775393[esi*1+edx]
+ sub edi, ebp
+ rol edx, 9
+ add edx, ecx
+ ; 38
+ mov esi, DWORD PTR 36[esp]
+ or edi, edx
+ add ecx, esi
+ xor edi, eax
+ mov esi, -1
+ rol ebp, 10
+ lea ecx, DWORD PTR 1859775393[edi*1+ecx]
+ sub esi, edx
+ rol ecx, 13
+ add ecx, ebx
+ ; 39
+ mov edi, DWORD PTR 8[esp]
+ or esi, ecx
+ add ebx, edi
+ xor esi, ebp
+ mov edi, -1
+ rol edx, 10
+ lea ebx, DWORD PTR 1859775393[esi*1+ebx]
+ sub edi, ecx
+ rol ebx, 15
+ add ebx, eax
+ ; 40
+ mov esi, DWORD PTR 12[esp]
+ or edi, ebx
+ add eax, esi
+ xor edi, edx
+ mov esi, -1
+ rol ecx, 10
+ lea eax, DWORD PTR 1859775393[edi*1+eax]
+ sub esi, ebx
+ rol eax, 14
+ add eax, ebp
+ ; 41
+ mov edi, DWORD PTR 32[esp]
+ or esi, eax
+ add ebp, edi
+ xor esi, ecx
+ mov edi, -1
+ rol ebx, 10
+ lea ebp, DWORD PTR 1859775393[esi*1+ebp]
+ sub edi, eax
+ rol ebp, 8
+ add ebp, edx
+ ; 42
+ mov esi, DWORD PTR 4[esp]
+ or edi, ebp
+ add edx, esi
+ xor edi, ebx
+ mov esi, -1
+ rol eax, 10
+ lea edx, DWORD PTR 1859775393[edi*1+edx]
+ sub esi, ebp
+ rol edx, 13
+ add edx, ecx
+ ; 43
+ mov edi, DWORD PTR 28[esp]
+ or esi, edx
+ add ecx, edi
+ xor esi, eax
+ mov edi, -1
+ rol ebp, 10
+ lea ecx, DWORD PTR 1859775393[esi*1+ecx]
+ sub edi, edx
+ rol ecx, 6
+ add ecx, ebx
+ ; 44
+ mov esi, DWORD PTR 56[esp]
+ or edi, ecx
+ add ebx, esi
+ xor edi, ebp
+ mov esi, -1
+ rol edx, 10
+ lea ebx, DWORD PTR 1859775393[edi*1+ebx]
+ sub esi, ecx
+ rol ebx, 5
+ add ebx, eax
+ ; 45
+ mov edi, DWORD PTR 48[esp]
+ or esi, ebx
+ add eax, edi
+ xor esi, edx
+ mov edi, -1
+ rol ecx, 10
+ lea eax, DWORD PTR 1859775393[esi*1+eax]
+ sub edi, ebx
+ rol eax, 12
+ add eax, ebp
+ ; 46
+ mov esi, DWORD PTR 24[esp]
+ or edi, eax
+ add ebp, esi
+ xor edi, ecx
+ mov esi, -1
+ rol ebx, 10
+ lea ebp, DWORD PTR 1859775393[edi*1+ebp]
+ sub esi, eax
+ rol ebp, 7
+ add ebp, edx
+ ; 47
+ mov edi, DWORD PTR 52[esp]
+ or esi, ebp
+ add edx, edi
+ xor esi, ebx
+ mov edi, -1
+ rol eax, 10
+ lea edx, DWORD PTR 1859775393[esi*1+edx]
+ mov esi, eax
+ rol edx, 5
+ add edx, ecx
+ ; 48
+ sub edi, eax
+ and esi, edx
+ and edi, ebp
+ or edi, esi
+ mov esi, DWORD PTR 8[esp]
+ rol ebp, 10
+ lea ecx, DWORD PTR 2400959708[edi+ecx]
+ mov edi, -1
+ add ecx, esi
+ mov esi, ebp
+ rol ecx, 11
+ add ecx, ebx
+ ; 49
+ sub edi, ebp
+ and esi, ecx
+ and edi, edx
+ or edi, esi
+ mov esi, DWORD PTR 40[esp]
+ rol edx, 10
+ lea ebx, DWORD PTR 2400959708[edi+ebx]
+ mov edi, -1
+ add ebx, esi
+ mov esi, edx
+ rol ebx, 12
+ add ebx, eax
+ ; 50
+ sub edi, edx
+ and esi, ebx
+ and edi, ecx
+ or edi, esi
+ mov esi, DWORD PTR 48[esp]
+ rol ecx, 10
+ lea eax, DWORD PTR 2400959708[edi+eax]
+ mov edi, -1
+ add eax, esi
+ mov esi, ecx
+ rol eax, 14
+ add eax, ebp
+ ; 51
+ sub edi, ecx
+ and esi, eax
+ and edi, ebx
+ or edi, esi
+ mov esi, DWORD PTR 44[esp]
+ rol ebx, 10
+ lea ebp, DWORD PTR 2400959708[edi+ebp]
+ mov edi, -1
+ add ebp, esi
+ mov esi, ebx
+ rol ebp, 15
+ add ebp, edx
+ ; 52
+ sub edi, ebx
+ and esi, ebp
+ and edi, eax
+ or edi, esi
+ mov esi, DWORD PTR 4[esp]
+ rol eax, 10
+ lea edx, DWORD PTR 2400959708[edi+edx]
+ mov edi, -1
+ add edx, esi
+ mov esi, eax
+ rol edx, 14
+ add edx, ecx
+ ; 53
+ sub edi, eax
+ and esi, edx
+ and edi, ebp
+ or edi, esi
+ mov esi, DWORD PTR 36[esp]
+ rol ebp, 10
+ lea ecx, DWORD PTR 2400959708[edi+ecx]
+ mov edi, -1
+ add ecx, esi
+ mov esi, ebp
+ rol ecx, 15
+ add ecx, ebx
+ ; 54
+ sub edi, ebp
+ and esi, ecx
+ and edi, edx
+ or edi, esi
+ mov esi, DWORD PTR 52[esp]
+ rol edx, 10
+ lea ebx, DWORD PTR 2400959708[edi+ebx]
+ mov edi, -1
+ add ebx, esi
+ mov esi, edx
+ rol ebx, 9
+ add ebx, eax
+ ; 55
+ sub edi, edx
+ and esi, ebx
+ and edi, ecx
+ or edi, esi
+ mov esi, DWORD PTR 20[esp]
+ rol ecx, 10
+ lea eax, DWORD PTR 2400959708[edi+eax]
+ mov edi, -1
+ add eax, esi
+ mov esi, ecx
+ rol eax, 8
+ add eax, ebp
+ ; 56
+ sub edi, ecx
+ and esi, eax
+ and edi, ebx
+ or edi, esi
+ mov esi, DWORD PTR 56[esp]
+ rol ebx, 10
+ lea ebp, DWORD PTR 2400959708[edi+ebp]
+ mov edi, -1
+ add ebp, esi
+ mov esi, ebx
+ rol ebp, 9
+ add ebp, edx
+ ; 57
+ sub edi, ebx
+ and esi, ebp
+ and edi, eax
+ or edi, esi
+ mov esi, DWORD PTR 16[esp]
+ rol eax, 10
+ lea edx, DWORD PTR 2400959708[edi+edx]
+ mov edi, -1
+ add edx, esi
+ mov esi, eax
+ rol edx, 14
+ add edx, ecx
+ ; 58
+ sub edi, eax
+ and esi, edx
+ and edi, ebp
+ or edi, esi
+ mov esi, DWORD PTR 32[esp]
+ rol ebp, 10
+ lea ecx, DWORD PTR 2400959708[edi+ecx]
+ mov edi, -1
+ add ecx, esi
+ mov esi, ebp
+ rol ecx, 5
+ add ecx, ebx
+ ; 59
+ sub edi, ebp
+ and esi, ecx
+ and edi, edx
+ or edi, esi
+ mov esi, DWORD PTR 64[esp]
+ rol edx, 10
+ lea ebx, DWORD PTR 2400959708[edi+ebx]
+ mov edi, -1
+ add ebx, esi
+ mov esi, edx
+ rol ebx, 6
+ add ebx, eax
+ ; 60
+ sub edi, edx
+ and esi, ebx
+ and edi, ecx
+ or edi, esi
+ mov esi, DWORD PTR 60[esp]
+ rol ecx, 10
+ lea eax, DWORD PTR 2400959708[edi+eax]
+ mov edi, -1
+ add eax, esi
+ mov esi, ecx
+ rol eax, 8
+ add eax, ebp
+ ; 61
+ sub edi, ecx
+ and esi, eax
+ and edi, ebx
+ or edi, esi
+ mov esi, DWORD PTR 24[esp]
+ rol ebx, 10
+ lea ebp, DWORD PTR 2400959708[edi+ebp]
+ mov edi, -1
+ add ebp, esi
+ mov esi, ebx
+ rol ebp, 6
+ add ebp, edx
+ ; 62
+ sub edi, ebx
+ and esi, ebp
+ and edi, eax
+ or edi, esi
+ mov esi, DWORD PTR 28[esp]
+ rol eax, 10
+ lea edx, DWORD PTR 2400959708[edi+edx]
+ mov edi, -1
+ add edx, esi
+ mov esi, eax
+ rol edx, 5
+ add edx, ecx
+ ; 63
+ sub edi, eax
+ and esi, edx
+ and edi, ebp
+ or edi, esi
+ mov esi, DWORD PTR 12[esp]
+ rol ebp, 10
+ lea ecx, DWORD PTR 2400959708[edi+ecx]
+ mov edi, -1
+ add ecx, esi
+ sub edi, ebp
+ rol ecx, 12
+ add ecx, ebx
+ ; 64
+ mov esi, DWORD PTR 20[esp]
+ or edi, edx
+ add ebx, esi
+ xor edi, ecx
+ mov esi, -1
+ rol edx, 10
+ lea ebx, DWORD PTR 2840853838[edi*1+ebx]
+ sub esi, edx
+ rol ebx, 9
+ add ebx, eax
+ ; 65
+ mov edi, DWORD PTR 4[esp]
+ or esi, ecx
+ add eax, edi
+ xor esi, ebx
+ mov edi, -1
+ rol ecx, 10
+ lea eax, DWORD PTR 2840853838[esi*1+eax]
+ sub edi, ecx
+ rol eax, 15
+ add eax, ebp
+ ; 66
+ mov esi, DWORD PTR 24[esp]
+ or edi, ebx
+ add ebp, esi
+ xor edi, eax
+ mov esi, -1
+ rol ebx, 10
+ lea ebp, DWORD PTR 2840853838[edi*1+ebp]
+ sub esi, ebx
+ rol ebp, 5
+ add ebp, edx
+ ; 67
+ mov edi, DWORD PTR 40[esp]
+ or esi, eax
+ add edx, edi
+ xor esi, ebp
+ mov edi, -1
+ rol eax, 10
+ lea edx, DWORD PTR 2840853838[esi*1+edx]
+ sub edi, eax
+ rol edx, 11
+ add edx, ecx
+ ; 68
+ mov esi, DWORD PTR 32[esp]
+ or edi, ebp
+ add ecx, esi
+ xor edi, edx
+ mov esi, -1
+ rol ebp, 10
+ lea ecx, DWORD PTR 2840853838[edi*1+ecx]
+ sub esi, ebp
+ rol ecx, 6
+ add ecx, ebx
+ ; 69
+ mov edi, DWORD PTR 52[esp]
+ or esi, edx
+ add ebx, edi
+ xor esi, ecx
+ mov edi, -1
+ rol edx, 10