Ver código fonte

Using assembler implementation of SHA-256, SHA-512 and RIMEMD

Source commit: 15dec3e3882ede87e9f98d0c2bd6f025c03d0e59
Martin Prikryl 2 anos atrás
pai
commit
5ac255b6fc

+ 13 - 2
libs/openssl/Makefile

@@ -18,7 +18,7 @@ CC=bcc32
 CFLAG= \
     -q -w-ccc -w-rch -w-pia -w-aus -w-par -w-inl -w-eff -w-sus -w-dup -w-spa -w-csu \
     -w-rvl  -c -tWC -tWM -O2 -ff -fp \
-    -DMD5_ASM -DSHA1_ASM \
+    -DMD5_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRMD160_ASM \
     -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m \
     -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_WHIRLPOOL \
     -DOPENSSL_NO_SEED -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_ENGINE \
@@ -327,7 +327,9 @@ CRYPTOOBJ= \
     $(OBJ_D)\cast_586.obj \
     $(OBJ_D)\md5_586.obj \
     $(OBJ_D)\sha1_586.obj \
-    $(OBJ_D)\bn_586.obj $(OBJ_D)\x86_mont.obj $(OBJ_D)\x86_gf2m.obj $(OBJ_D)\co_586.obj
+    $(OBJ_D)\bn_586.obj $(OBJ_D)\x86_mont.obj $(OBJ_D)\x86_gf2m.obj $(OBJ_D)\co_586.obj \
+    $(OBJ_D)\rmd_586.obj \
+    $(OBJ_D)\sha256_586.obj $(OBJ_D)\sha512_586.obj
 ###################################################################
 all: banner $(TMP_D) lib
 
@@ -2805,6 +2807,15 @@ $(OBJ_D)\x86_gf2m.obj: $(SRC_D)\crypto\bn\asm\x86_gf2m.asm
 $(OBJ_D)\co_586.obj: $(SRC_D)\crypto\bn\asm\co_586.asm
     $(ASM) -o$(OBJ_D)\co_586.obj $(SRC_D)\crypto\bn\asm\co_586.asm
 
+$(OBJ_D)\rmd_586.obj: $(SRC_D)\crypto\ripemd\asm\rmd_586.asm
+    $(ASM) -o$(OBJ_D)\rmd_586.obj $(SRC_D)\crypto\ripemd\asm\rmd_586.asm
+
+$(OBJ_D)\sha256_586.obj: $(SRC_D)\crypto\sha\asm\sha256_586.asm
+    $(ASM) -o$(OBJ_D)\sha256_586.obj $(SRC_D)\crypto\sha\asm\sha256_586.asm
+
+$(OBJ_D)\sha512_586.obj: $(SRC_D)\crypto\sha\asm\sha512_586.asm
+    $(ASM) -o$(OBJ_D)\sha512_586.obj $(SRC_D)\crypto\sha\asm\sha512_586.asm
+
 $(O_SSL): $(SSLOBJ)
     -if exist $(O_SSL) $(RM) $(O_SSL)
     $(MKLIB) $(O_SSL) @&&!

+ 1970 - 0
libs/openssl/crypto/ripemd/asm/rmd_586.asm

@@ -0,0 +1,1970 @@
+
+%ifidn __OUTPUT_FORMAT__,obj
+section	code	use32 class=code align=256
+%elifidn __OUTPUT_FORMAT__,win32
[email protected] equ 1
+section	.text	code align=256
+%else
+section	.text	code
+%endif
+global	_ripemd160_block_asm_data_order
+align	16
+_ripemd160_block_asm_data_order:
+L$_ripemd160_block_asm_data_order_begin:
+	mov	edx,DWORD [4+esp]
+	mov	eax,DWORD [8+esp]
+	push	esi
+	mov	ecx,DWORD [edx]
+	push	edi
+	mov	esi,DWORD [4+edx]
+	push	ebp
+	mov	edi,DWORD [8+edx]
+	push	ebx
+	sub	esp,108
+L$000start:
+	; 
+	mov	ebx,DWORD [eax]
+	mov	ebp,DWORD [4+eax]
+	mov	DWORD [esp],ebx
+	mov	DWORD [4+esp],ebp
+	mov	ebx,DWORD [8+eax]
+	mov	ebp,DWORD [12+eax]
+	mov	DWORD [8+esp],ebx
+	mov	DWORD [12+esp],ebp
+	mov	ebx,DWORD [16+eax]
+	mov	ebp,DWORD [20+eax]
+	mov	DWORD [16+esp],ebx
+	mov	DWORD [20+esp],ebp
+	mov	ebx,DWORD [24+eax]
+	mov	ebp,DWORD [28+eax]
+	mov	DWORD [24+esp],ebx
+	mov	DWORD [28+esp],ebp
+	mov	ebx,DWORD [32+eax]
+	mov	ebp,DWORD [36+eax]
+	mov	DWORD [32+esp],ebx
+	mov	DWORD [36+esp],ebp
+	mov	ebx,DWORD [40+eax]
+	mov	ebp,DWORD [44+eax]
+	mov	DWORD [40+esp],ebx
+	mov	DWORD [44+esp],ebp
+	mov	ebx,DWORD [48+eax]
+	mov	ebp,DWORD [52+eax]
+	mov	DWORD [48+esp],ebx
+	mov	DWORD [52+esp],ebp
+	mov	ebx,DWORD [56+eax]
+	mov	ebp,DWORD [60+eax]
+	mov	DWORD [56+esp],ebx
+	mov	DWORD [60+esp],ebp
+	mov	eax,edi
+	mov	ebx,DWORD [12+edx]
+	mov	ebp,DWORD [16+edx]
+	; 0
+	xor	eax,ebx
+	mov	edx,DWORD [esp]
+	xor	eax,esi
+	add	ecx,edx
+	rol	edi,10
+	add	ecx,eax
+	mov	eax,esi
+	rol	ecx,11
+	add	ecx,ebp
+	; 1
+	xor	eax,edi
+	mov	edx,DWORD [4+esp]
+	xor	eax,ecx
+	add	ebp,eax
+	mov	eax,ecx
+	rol	esi,10
+	add	ebp,edx
+	xor	eax,esi
+	rol	ebp,14
+	add	ebp,ebx
+	; 2
+	mov	edx,DWORD [8+esp]
+	xor	eax,ebp
+	add	ebx,edx
+	rol	ecx,10
+	add	ebx,eax
+	mov	eax,ebp
+	rol	ebx,15
+	add	ebx,edi
+	; 3
+	xor	eax,ecx
+	mov	edx,DWORD [12+esp]
+	xor	eax,ebx
+	add	edi,eax
+	mov	eax,ebx
+	rol	ebp,10
+	add	edi,edx
+	xor	eax,ebp
+	rol	edi,12
+	add	edi,esi
+	; 4
+	mov	edx,DWORD [16+esp]
+	xor	eax,edi
+	add	esi,edx
+	rol	ebx,10
+	add	esi,eax
+	mov	eax,edi
+	rol	esi,5
+	add	esi,ecx
+	; 5
+	xor	eax,ebx
+	mov	edx,DWORD [20+esp]
+	xor	eax,esi
+	add	ecx,eax
+	mov	eax,esi
+	rol	edi,10
+	add	ecx,edx
+	xor	eax,edi
+	rol	ecx,8
+	add	ecx,ebp
+	; 6
+	mov	edx,DWORD [24+esp]
+	xor	eax,ecx
+	add	ebp,edx
+	rol	esi,10
+	add	ebp,eax
+	mov	eax,ecx
+	rol	ebp,7
+	add	ebp,ebx
+	; 7
+	xor	eax,esi
+	mov	edx,DWORD [28+esp]
+	xor	eax,ebp
+	add	ebx,eax
+	mov	eax,ebp
+	rol	ecx,10
+	add	ebx,edx
+	xor	eax,ecx
+	rol	ebx,9
+	add	ebx,edi
+	; 8
+	mov	edx,DWORD [32+esp]
+	xor	eax,ebx
+	add	edi,edx
+	rol	ebp,10
+	add	edi,eax
+	mov	eax,ebx
+	rol	edi,11
+	add	edi,esi
+	; 9
+	xor	eax,ebp
+	mov	edx,DWORD [36+esp]
+	xor	eax,edi
+	add	esi,eax
+	mov	eax,edi
+	rol	ebx,10
+	add	esi,edx
+	xor	eax,ebx
+	rol	esi,13
+	add	esi,ecx
+	; 10
+	mov	edx,DWORD [40+esp]
+	xor	eax,esi
+	add	ecx,edx
+	rol	edi,10
+	add	ecx,eax
+	mov	eax,esi
+	rol	ecx,14
+	add	ecx,ebp
+	; 11
+	xor	eax,edi
+	mov	edx,DWORD [44+esp]
+	xor	eax,ecx
+	add	ebp,eax
+	mov	eax,ecx
+	rol	esi,10
+	add	ebp,edx
+	xor	eax,esi
+	rol	ebp,15
+	add	ebp,ebx
+	; 12
+	mov	edx,DWORD [48+esp]
+	xor	eax,ebp
+	add	ebx,edx
+	rol	ecx,10
+	add	ebx,eax
+	mov	eax,ebp
+	rol	ebx,6
+	add	ebx,edi
+	; 13
+	xor	eax,ecx
+	mov	edx,DWORD [52+esp]
+	xor	eax,ebx
+	add	edi,eax
+	mov	eax,ebx
+	rol	ebp,10
+	add	edi,edx
+	xor	eax,ebp
+	rol	edi,7
+	add	edi,esi
+	; 14
+	mov	edx,DWORD [56+esp]
+	xor	eax,edi
+	add	esi,edx
+	rol	ebx,10
+	add	esi,eax
+	mov	eax,edi
+	rol	esi,9
+	add	esi,ecx
+	; 15
+	xor	eax,ebx
+	mov	edx,DWORD [60+esp]
+	xor	eax,esi
+	add	ecx,eax
+	mov	eax,-1
+	rol	edi,10
+	add	ecx,edx
+	mov	edx,DWORD [28+esp]
+	rol	ecx,8
+	add	ecx,ebp
+	; 16
+	add	ebp,edx
+	mov	edx,esi
+	sub	eax,ecx
+	and	edx,ecx
+	and	eax,edi
+	or	edx,eax
+	mov	eax,DWORD [16+esp]
+	rol	esi,10
+	lea	ebp,[1518500249+edx*1+ebp]
+	mov	edx,-1
+	rol	ebp,7
+	add	ebp,ebx
+	; 17
+	add	ebx,eax
+	mov	eax,ecx
+	sub	edx,ebp
+	and	eax,ebp
+	and	edx,esi
+	or	eax,edx
+	mov	edx,DWORD [52+esp]
+	rol	ecx,10
+	lea	ebx,[1518500249+eax*1+ebx]
+	mov	eax,-1
+	rol	ebx,6
+	add	ebx,edi
+	; 18
+	add	edi,edx
+	mov	edx,ebp
+	sub	eax,ebx
+	and	edx,ebx
+	and	eax,ecx
+	or	edx,eax
+	mov	eax,DWORD [4+esp]
+	rol	ebp,10
+	lea	edi,[1518500249+edx*1+edi]
+	mov	edx,-1
+	rol	edi,8
+	add	edi,esi
+	; 19
+	add	esi,eax
+	mov	eax,ebx
+	sub	edx,edi
+	and	eax,edi
+	and	edx,ebp
+	or	eax,edx
+	mov	edx,DWORD [40+esp]
+	rol	ebx,10
+	lea	esi,[1518500249+eax*1+esi]
+	mov	eax,-1
+	rol	esi,13
+	add	esi,ecx
+	; 20
+	add	ecx,edx
+	mov	edx,edi
+	sub	eax,esi
+	and	edx,esi
+	and	eax,ebx
+	or	edx,eax
+	mov	eax,DWORD [24+esp]
+	rol	edi,10
+	lea	ecx,[1518500249+edx*1+ecx]
+	mov	edx,-1
+	rol	ecx,11
+	add	ecx,ebp
+	; 21
+	add	ebp,eax
+	mov	eax,esi
+	sub	edx,ecx
+	and	eax,ecx
+	and	edx,edi
+	or	eax,edx
+	mov	edx,DWORD [60+esp]
+	rol	esi,10
+	lea	ebp,[1518500249+eax*1+ebp]
+	mov	eax,-1
+	rol	ebp,9
+	add	ebp,ebx
+	; 22
+	add	ebx,edx
+	mov	edx,ecx
+	sub	eax,ebp
+	and	edx,ebp
+	and	eax,esi
+	or	edx,eax
+	mov	eax,DWORD [12+esp]
+	rol	ecx,10
+	lea	ebx,[1518500249+edx*1+ebx]
+	mov	edx,-1
+	rol	ebx,7
+	add	ebx,edi
+	; 23
+	add	edi,eax
+	mov	eax,ebp
+	sub	edx,ebx
+	and	eax,ebx
+	and	edx,ecx
+	or	eax,edx
+	mov	edx,DWORD [48+esp]
+	rol	ebp,10
+	lea	edi,[1518500249+eax*1+edi]
+	mov	eax,-1
+	rol	edi,15
+	add	edi,esi
+	; 24
+	add	esi,edx
+	mov	edx,ebx
+	sub	eax,edi
+	and	edx,edi
+	and	eax,ebp
+	or	edx,eax
+	mov	eax,DWORD [esp]
+	rol	ebx,10
+	lea	esi,[1518500249+edx*1+esi]
+	mov	edx,-1
+	rol	esi,7
+	add	esi,ecx
+	; 25
+	add	ecx,eax
+	mov	eax,edi
+	sub	edx,esi
+	and	eax,esi
+	and	edx,ebx
+	or	eax,edx
+	mov	edx,DWORD [36+esp]
+	rol	edi,10
+	lea	ecx,[1518500249+eax*1+ecx]
+	mov	eax,-1
+	rol	ecx,12
+	add	ecx,ebp
+	; 26
+	add	ebp,edx
+	mov	edx,esi
+	sub	eax,ecx
+	and	edx,ecx
+	and	eax,edi
+	or	edx,eax
+	mov	eax,DWORD [20+esp]
+	rol	esi,10
+	lea	ebp,[1518500249+edx*1+ebp]
+	mov	edx,-1
+	rol	ebp,15
+	add	ebp,ebx
+	; 27
+	add	ebx,eax
+	mov	eax,ecx
+	sub	edx,ebp
+	and	eax,ebp
+	and	edx,esi
+	or	eax,edx
+	mov	edx,DWORD [8+esp]
+	rol	ecx,10
+	lea	ebx,[1518500249+eax*1+ebx]
+	mov	eax,-1
+	rol	ebx,9
+	add	ebx,edi
+	; 28
+	add	edi,edx
+	mov	edx,ebp
+	sub	eax,ebx
+	and	edx,ebx
+	and	eax,ecx
+	or	edx,eax
+	mov	eax,DWORD [56+esp]
+	rol	ebp,10
+	lea	edi,[1518500249+edx*1+edi]
+	mov	edx,-1
+	rol	edi,11
+	add	edi,esi
+	; 29
+	add	esi,eax
+	mov	eax,ebx
+	sub	edx,edi
+	and	eax,edi
+	and	edx,ebp
+	or	eax,edx
+	mov	edx,DWORD [44+esp]
+	rol	ebx,10
+	lea	esi,[1518500249+eax*1+esi]
+	mov	eax,-1
+	rol	esi,7
+	add	esi,ecx
+	; 30
+	add	ecx,edx
+	mov	edx,edi
+	sub	eax,esi
+	and	edx,esi
+	and	eax,ebx
+	or	edx,eax
+	mov	eax,DWORD [32+esp]
+	rol	edi,10
+	lea	ecx,[1518500249+edx*1+ecx]
+	mov	edx,-1
+	rol	ecx,13
+	add	ecx,ebp
+	; 31
+	add	ebp,eax
+	mov	eax,esi
+	sub	edx,ecx
+	and	eax,ecx
+	and	edx,edi
+	or	eax,edx
+	mov	edx,-1
+	rol	esi,10
+	lea	ebp,[1518500249+eax*1+ebp]
+	sub	edx,ecx
+	rol	ebp,12
+	add	ebp,ebx
+	; 32
+	mov	eax,DWORD [12+esp]
+	or	edx,ebp
+	add	ebx,eax
+	xor	edx,esi
+	mov	eax,-1
+	rol	ecx,10
+	lea	ebx,[1859775393+edx*1+ebx]
+	sub	eax,ebp
+	rol	ebx,11
+	add	ebx,edi
+	; 33
+	mov	edx,DWORD [40+esp]
+	or	eax,ebx
+	add	edi,edx
+	xor	eax,ecx
+	mov	edx,-1
+	rol	ebp,10
+	lea	edi,[1859775393+eax*1+edi]
+	sub	edx,ebx
+	rol	edi,13
+	add	edi,esi
+	; 34
+	mov	eax,DWORD [56+esp]
+	or	edx,edi
+	add	esi,eax
+	xor	edx,ebp
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[1859775393+edx*1+esi]
+	sub	eax,edi
+	rol	esi,6
+	add	esi,ecx
+	; 35
+	mov	edx,DWORD [16+esp]
+	or	eax,esi
+	add	ecx,edx
+	xor	eax,ebx
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[1859775393+eax*1+ecx]
+	sub	edx,esi
+	rol	ecx,7
+	add	ecx,ebp
+	; 36
+	mov	eax,DWORD [36+esp]
+	or	edx,ecx
+	add	ebp,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	esi,10
+	lea	ebp,[1859775393+edx*1+ebp]
+	sub	eax,ecx
+	rol	ebp,14
+	add	ebp,ebx
+	; 37
+	mov	edx,DWORD [60+esp]
+	or	eax,ebp
+	add	ebx,edx
+	xor	eax,esi
+	mov	edx,-1
+	rol	ecx,10
+	lea	ebx,[1859775393+eax*1+ebx]
+	sub	edx,ebp
+	rol	ebx,9
+	add	ebx,edi
+	; 38
+	mov	eax,DWORD [32+esp]
+	or	edx,ebx
+	add	edi,eax
+	xor	edx,ecx
+	mov	eax,-1
+	rol	ebp,10
+	lea	edi,[1859775393+edx*1+edi]
+	sub	eax,ebx
+	rol	edi,13
+	add	edi,esi
+	; 39
+	mov	edx,DWORD [4+esp]
+	or	eax,edi
+	add	esi,edx
+	xor	eax,ebp
+	mov	edx,-1
+	rol	ebx,10
+	lea	esi,[1859775393+eax*1+esi]
+	sub	edx,edi
+	rol	esi,15
+	add	esi,ecx
+	; 40
+	mov	eax,DWORD [8+esp]
+	or	edx,esi
+	add	ecx,eax
+	xor	edx,ebx
+	mov	eax,-1
+	rol	edi,10
+	lea	ecx,[1859775393+edx*1+ecx]
+	sub	eax,esi
+	rol	ecx,14
+	add	ecx,ebp
+	; 41
+	mov	edx,DWORD [28+esp]
+	or	eax,ecx
+	add	ebp,edx
+	xor	eax,edi
+	mov	edx,-1
+	rol	esi,10
+	lea	ebp,[1859775393+eax*1+ebp]
+	sub	edx,ecx
+	rol	ebp,8
+	add	ebp,ebx
+	; 42
+	mov	eax,DWORD [esp]
+	or	edx,ebp
+	add	ebx,eax
+	xor	edx,esi
+	mov	eax,-1
+	rol	ecx,10
+	lea	ebx,[1859775393+edx*1+ebx]
+	sub	eax,ebp
+	rol	ebx,13
+	add	ebx,edi
+	; 43
+	mov	edx,DWORD [24+esp]
+	or	eax,ebx
+	add	edi,edx
+	xor	eax,ecx
+	mov	edx,-1
+	rol	ebp,10
+	lea	edi,[1859775393+eax*1+edi]
+	sub	edx,ebx
+	rol	edi,6
+	add	edi,esi
+	; 44
+	mov	eax,DWORD [52+esp]
+	or	edx,edi
+	add	esi,eax
+	xor	edx,ebp
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[1859775393+edx*1+esi]
+	sub	eax,edi
+	rol	esi,5
+	add	esi,ecx
+	; 45
+	mov	edx,DWORD [44+esp]
+	or	eax,esi
+	add	ecx,edx
+	xor	eax,ebx
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[1859775393+eax*1+ecx]
+	sub	edx,esi
+	rol	ecx,12
+	add	ecx,ebp
+	; 46
+	mov	eax,DWORD [20+esp]
+	or	edx,ecx
+	add	ebp,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	esi,10
+	lea	ebp,[1859775393+edx*1+ebp]
+	sub	eax,ecx
+	rol	ebp,7
+	add	ebp,ebx
+	; 47
+	mov	edx,DWORD [48+esp]
+	or	eax,ebp
+	add	ebx,edx
+	xor	eax,esi
+	mov	edx,-1
+	rol	ecx,10
+	lea	ebx,[1859775393+eax*1+ebx]
+	mov	eax,ecx
+	rol	ebx,5
+	add	ebx,edi
+	; 48
+	sub	edx,ecx
+	and	eax,ebx
+	and	edx,ebp
+	or	edx,eax
+	mov	eax,DWORD [4+esp]
+	rol	ebp,10
+	lea	edi,[2400959708+edx*1+edi]
+	mov	edx,-1
+	add	edi,eax
+	mov	eax,ebp
+	rol	edi,11
+	add	edi,esi
+	; 49
+	sub	edx,ebp
+	and	eax,edi
+	and	edx,ebx
+	or	edx,eax
+	mov	eax,DWORD [36+esp]
+	rol	ebx,10
+	lea	esi,[2400959708+edx*1+esi]
+	mov	edx,-1
+	add	esi,eax
+	mov	eax,ebx
+	rol	esi,12
+	add	esi,ecx
+	; 50
+	sub	edx,ebx
+	and	eax,esi
+	and	edx,edi
+	or	edx,eax
+	mov	eax,DWORD [44+esp]
+	rol	edi,10
+	lea	ecx,[2400959708+edx*1+ecx]
+	mov	edx,-1
+	add	ecx,eax
+	mov	eax,edi
+	rol	ecx,14
+	add	ecx,ebp
+	; 51
+	sub	edx,edi
+	and	eax,ecx
+	and	edx,esi
+	or	edx,eax
+	mov	eax,DWORD [40+esp]
+	rol	esi,10
+	lea	ebp,[2400959708+edx*1+ebp]
+	mov	edx,-1
+	add	ebp,eax
+	mov	eax,esi
+	rol	ebp,15
+	add	ebp,ebx
+	; 52
+	sub	edx,esi
+	and	eax,ebp
+	and	edx,ecx
+	or	edx,eax
+	mov	eax,DWORD [esp]
+	rol	ecx,10
+	lea	ebx,[2400959708+edx*1+ebx]
+	mov	edx,-1
+	add	ebx,eax
+	mov	eax,ecx
+	rol	ebx,14
+	add	ebx,edi
+	; 53
+	sub	edx,ecx
+	and	eax,ebx
+	and	edx,ebp
+	or	edx,eax
+	mov	eax,DWORD [32+esp]
+	rol	ebp,10
+	lea	edi,[2400959708+edx*1+edi]
+	mov	edx,-1
+	add	edi,eax
+	mov	eax,ebp
+	rol	edi,15
+	add	edi,esi
+	; 54
+	sub	edx,ebp
+	and	eax,edi
+	and	edx,ebx
+	or	edx,eax
+	mov	eax,DWORD [48+esp]
+	rol	ebx,10
+	lea	esi,[2400959708+edx*1+esi]
+	mov	edx,-1
+	add	esi,eax
+	mov	eax,ebx
+	rol	esi,9
+	add	esi,ecx
+	; 55
+	sub	edx,ebx
+	and	eax,esi
+	and	edx,edi
+	or	edx,eax
+	mov	eax,DWORD [16+esp]
+	rol	edi,10
+	lea	ecx,[2400959708+edx*1+ecx]
+	mov	edx,-1
+	add	ecx,eax
+	mov	eax,edi
+	rol	ecx,8
+	add	ecx,ebp
+	; 56
+	sub	edx,edi
+	and	eax,ecx
+	and	edx,esi
+	or	edx,eax
+	mov	eax,DWORD [52+esp]
+	rol	esi,10
+	lea	ebp,[2400959708+edx*1+ebp]
+	mov	edx,-1
+	add	ebp,eax
+	mov	eax,esi
+	rol	ebp,9
+	add	ebp,ebx
+	; 57
+	sub	edx,esi
+	and	eax,ebp
+	and	edx,ecx
+	or	edx,eax
+	mov	eax,DWORD [12+esp]
+	rol	ecx,10
+	lea	ebx,[2400959708+edx*1+ebx]
+	mov	edx,-1
+	add	ebx,eax
+	mov	eax,ecx
+	rol	ebx,14
+	add	ebx,edi
+	; 58
+	sub	edx,ecx
+	and	eax,ebx
+	and	edx,ebp
+	or	edx,eax
+	mov	eax,DWORD [28+esp]
+	rol	ebp,10
+	lea	edi,[2400959708+edx*1+edi]
+	mov	edx,-1
+	add	edi,eax
+	mov	eax,ebp
+	rol	edi,5
+	add	edi,esi
+	; 59
+	sub	edx,ebp
+	and	eax,edi
+	and	edx,ebx
+	or	edx,eax
+	mov	eax,DWORD [60+esp]
+	rol	ebx,10
+	lea	esi,[2400959708+edx*1+esi]
+	mov	edx,-1
+	add	esi,eax
+	mov	eax,ebx
+	rol	esi,6
+	add	esi,ecx
+	; 60
+	sub	edx,ebx
+	and	eax,esi
+	and	edx,edi
+	or	edx,eax
+	mov	eax,DWORD [56+esp]
+	rol	edi,10
+	lea	ecx,[2400959708+edx*1+ecx]
+	mov	edx,-1
+	add	ecx,eax
+	mov	eax,edi
+	rol	ecx,8
+	add	ecx,ebp
+	; 61
+	sub	edx,edi
+	and	eax,ecx
+	and	edx,esi
+	or	edx,eax
+	mov	eax,DWORD [20+esp]
+	rol	esi,10
+	lea	ebp,[2400959708+edx*1+ebp]
+	mov	edx,-1
+	add	ebp,eax
+	mov	eax,esi
+	rol	ebp,6
+	add	ebp,ebx
+	; 62
+	sub	edx,esi
+	and	eax,ebp
+	and	edx,ecx
+	or	edx,eax
+	mov	eax,DWORD [24+esp]
+	rol	ecx,10
+	lea	ebx,[2400959708+edx*1+ebx]
+	mov	edx,-1
+	add	ebx,eax
+	mov	eax,ecx
+	rol	ebx,5
+	add	ebx,edi
+	; 63
+	sub	edx,ecx
+	and	eax,ebx
+	and	edx,ebp
+	or	edx,eax
+	mov	eax,DWORD [8+esp]
+	rol	ebp,10
+	lea	edi,[2400959708+edx*1+edi]
+	mov	edx,-1
+	add	edi,eax
+	sub	edx,ebp
+	rol	edi,12
+	add	edi,esi
+	; 64
+	mov	eax,DWORD [16+esp]
+	or	edx,ebx
+	add	esi,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[2840853838+edx*1+esi]
+	sub	eax,ebx
+	rol	esi,9
+	add	esi,ecx
+	; 65
+	mov	edx,DWORD [esp]
+	or	eax,edi
+	add	ecx,edx
+	xor	eax,esi
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[2840853838+eax*1+ecx]
+	sub	edx,edi
+	rol	ecx,15
+	add	ecx,ebp
+	; 66
+	mov	eax,DWORD [20+esp]
+	or	edx,esi
+	add	ebp,eax
+	xor	edx,ecx
+	mov	eax,-1
+	rol	esi,10
+	lea	ebp,[2840853838+edx*1+ebp]
+	sub	eax,esi
+	rol	ebp,5
+	add	ebp,ebx
+	; 67
+	mov	edx,DWORD [36+esp]
+	or	eax,ecx
+	add	ebx,edx
+	xor	eax,ebp
+	mov	edx,-1
+	rol	ecx,10
+	lea	ebx,[2840853838+eax*1+ebx]
+	sub	edx,ecx
+	rol	ebx,11
+	add	ebx,edi
+	; 68
+	mov	eax,DWORD [28+esp]
+	or	edx,ebp
+	add	edi,eax
+	xor	edx,ebx
+	mov	eax,-1
+	rol	ebp,10
+	lea	edi,[2840853838+edx*1+edi]
+	sub	eax,ebp
+	rol	edi,6
+	add	edi,esi
+	; 69
+	mov	edx,DWORD [48+esp]
+	or	eax,ebx
+	add	esi,edx
+	xor	eax,edi
+	mov	edx,-1
+	rol	ebx,10
+	lea	esi,[2840853838+eax*1+esi]
+	sub	edx,ebx
+	rol	esi,8
+	add	esi,ecx
+	; 70
+	mov	eax,DWORD [8+esp]
+	or	edx,edi
+	add	ecx,eax
+	xor	edx,esi
+	mov	eax,-1
+	rol	edi,10
+	lea	ecx,[2840853838+edx*1+ecx]
+	sub	eax,edi
+	rol	ecx,13
+	add	ecx,ebp
+	; 71
+	mov	edx,DWORD [40+esp]
+	or	eax,esi
+	add	ebp,edx
+	xor	eax,ecx
+	mov	edx,-1
+	rol	esi,10
+	lea	ebp,[2840853838+eax*1+ebp]
+	sub	edx,esi
+	rol	ebp,12
+	add	ebp,ebx
+	; 72
+	mov	eax,DWORD [56+esp]
+	or	edx,ecx
+	add	ebx,eax
+	xor	edx,ebp
+	mov	eax,-1
+	rol	ecx,10
+	lea	ebx,[2840853838+edx*1+ebx]
+	sub	eax,ecx
+	rol	ebx,5
+	add	ebx,edi
+	; 73
+	mov	edx,DWORD [4+esp]
+	or	eax,ebp
+	add	edi,edx
+	xor	eax,ebx
+	mov	edx,-1
+	rol	ebp,10
+	lea	edi,[2840853838+eax*1+edi]
+	sub	edx,ebp
+	rol	edi,12
+	add	edi,esi
+	; 74
+	mov	eax,DWORD [12+esp]
+	or	edx,ebx
+	add	esi,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[2840853838+edx*1+esi]
+	sub	eax,ebx
+	rol	esi,13
+	add	esi,ecx
+	; 75
+	mov	edx,DWORD [32+esp]
+	or	eax,edi
+	add	ecx,edx
+	xor	eax,esi
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[2840853838+eax*1+ecx]
+	sub	edx,edi
+	rol	ecx,14
+	add	ecx,ebp
+	; 76
+	mov	eax,DWORD [44+esp]
+	or	edx,esi
+	add	ebp,eax
+	xor	edx,ecx
+	mov	eax,-1
+	rol	esi,10
+	lea	ebp,[2840853838+edx*1+ebp]
+	sub	eax,esi
+	rol	ebp,11
+	add	ebp,ebx
+	; 77
+	mov	edx,DWORD [24+esp]
+	or	eax,ecx
+	add	ebx,edx
+	xor	eax,ebp
+	mov	edx,-1
+	rol	ecx,10
+	lea	ebx,[2840853838+eax*1+ebx]
+	sub	edx,ecx
+	rol	ebx,8
+	add	ebx,edi
+	; 78
+	mov	eax,DWORD [60+esp]
+	or	edx,ebp
+	add	edi,eax
+	xor	edx,ebx
+	mov	eax,-1
+	rol	ebp,10
+	lea	edi,[2840853838+edx*1+edi]
+	sub	eax,ebp
+	rol	edi,5
+	add	edi,esi
+	; 79
+	mov	edx,DWORD [52+esp]
+	or	eax,ebx
+	add	esi,edx
+	xor	eax,edi
+	mov	edx,DWORD [128+esp]
+	rol	ebx,10
+	lea	esi,[2840853838+eax*1+esi]
+	mov	DWORD [64+esp],ecx
+	rol	esi,6
+	add	esi,ecx
+	mov	ecx,DWORD [edx]
+	mov	DWORD [68+esp],esi
+	mov	DWORD [72+esp],edi
+	mov	esi,DWORD [4+edx]
+	mov	DWORD [76+esp],ebx
+	mov	edi,DWORD [8+edx]
+	mov	DWORD [80+esp],ebp
+	mov	ebx,DWORD [12+edx]
+	mov	ebp,DWORD [16+edx]
+	; 80
+	mov	edx,-1
+	sub	edx,ebx
+	mov	eax,DWORD [20+esp]
+	or	edx,edi
+	add	ecx,eax
+	xor	edx,esi
+	mov	eax,-1
+	rol	edi,10
+	lea	ecx,[1352829926+edx*1+ecx]
+	sub	eax,edi
+	rol	ecx,8
+	add	ecx,ebp
+	; 81
+	mov	edx,DWORD [56+esp]
+	or	eax,esi
+	add	ebp,edx
+	xor	eax,ecx
+	mov	edx,-1
+	rol	esi,10
+	lea	ebp,[1352829926+eax*1+ebp]
+	sub	edx,esi
+	rol	ebp,9
+	add	ebp,ebx
+	; 82
+	mov	eax,DWORD [28+esp]
+	or	edx,ecx
+	add	ebx,eax
+	xor	edx,ebp
+	mov	eax,-1
+	rol	ecx,10
+	lea	ebx,[1352829926+edx*1+ebx]
+	sub	eax,ecx
+	rol	ebx,9
+	add	ebx,edi
+	; 83
+	mov	edx,DWORD [esp]
+	or	eax,ebp
+	add	edi,edx
+	xor	eax,ebx
+	mov	edx,-1
+	rol	ebp,10
+	lea	edi,[1352829926+eax*1+edi]
+	sub	edx,ebp
+	rol	edi,11
+	add	edi,esi
+	; 84
+	mov	eax,DWORD [36+esp]
+	or	edx,ebx
+	add	esi,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[1352829926+edx*1+esi]
+	sub	eax,ebx
+	rol	esi,13
+	add	esi,ecx
+	; 85
+	mov	edx,DWORD [8+esp]
+	or	eax,edi
+	add	ecx,edx
+	xor	eax,esi
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[1352829926+eax*1+ecx]
+	sub	edx,edi
+	rol	ecx,15
+	add	ecx,ebp
+	; 86
+	mov	eax,DWORD [44+esp]
+	or	edx,esi
+	add	ebp,eax
+	xor	edx,ecx
+	mov	eax,-1
+	rol	esi,10
+	lea	ebp,[1352829926+edx*1+ebp]
+	sub	eax,esi
+	rol	ebp,15
+	add	ebp,ebx
+	; 87
+	mov	edx,DWORD [16+esp]
+	or	eax,ecx
+	add	ebx,edx
+	xor	eax,ebp
+	mov	edx,-1
+	rol	ecx,10
+	lea	ebx,[1352829926+eax*1+ebx]
+	sub	edx,ecx
+	rol	ebx,5
+	add	ebx,edi
+	; 88
+	mov	eax,DWORD [52+esp]
+	or	edx,ebp
+	add	edi,eax
+	xor	edx,ebx
+	mov	eax,-1
+	rol	ebp,10
+	lea	edi,[1352829926+edx*1+edi]
+	sub	eax,ebp
+	rol	edi,7
+	add	edi,esi
+	; 89
+	mov	edx,DWORD [24+esp]
+	or	eax,ebx
+	add	esi,edx
+	xor	eax,edi
+	mov	edx,-1
+	rol	ebx,10
+	lea	esi,[1352829926+eax*1+esi]
+	sub	edx,ebx
+	rol	esi,7
+	add	esi,ecx
+	; 90
+	mov	eax,DWORD [60+esp]
+	or	edx,edi
+	add	ecx,eax
+	xor	edx,esi
+	mov	eax,-1
+	rol	edi,10
+	lea	ecx,[1352829926+edx*1+ecx]
+	sub	eax,edi
+	rol	ecx,8
+	add	ecx,ebp
+	; 91
+	mov	edx,DWORD [32+esp]
+	or	eax,esi
+	add	ebp,edx
+	xor	eax,ecx
+	mov	edx,-1
+	rol	esi,10
+	lea	ebp,[1352829926+eax*1+ebp]
+	sub	edx,esi
+	rol	ebp,11
+	add	ebp,ebx
+	; 92
+	mov	eax,DWORD [4+esp]
+	or	edx,ecx
+	add	ebx,eax
+	xor	edx,ebp
+	mov	eax,-1
+	rol	ecx,10
+	lea	ebx,[1352829926+edx*1+ebx]
+	sub	eax,ecx
+	rol	ebx,14
+	add	ebx,edi
+	; 93
+	mov	edx,DWORD [40+esp]
+	or	eax,ebp
+	add	edi,edx
+	xor	eax,ebx
+	mov	edx,-1
+	rol	ebp,10
+	lea	edi,[1352829926+eax*1+edi]
+	sub	edx,ebp
+	rol	edi,14
+	add	edi,esi
+	; 94
+	mov	eax,DWORD [12+esp]
+	or	edx,ebx
+	add	esi,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[1352829926+edx*1+esi]
+	sub	eax,ebx
+	rol	esi,12
+	add	esi,ecx
+	; 95
+	mov	edx,DWORD [48+esp]
+	or	eax,edi
+	add	ecx,edx
+	xor	eax,esi
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[1352829926+eax*1+ecx]
+	mov	eax,edi
+	rol	ecx,6
+	add	ecx,ebp
+	; 96
+	sub	edx,edi
+	and	eax,ecx
+	and	edx,esi
+	or	edx,eax
+	mov	eax,DWORD [24+esp]
+	rol	esi,10
+	lea	ebp,[1548603684+edx*1+ebp]
+	mov	edx,-1
+	add	ebp,eax
+	mov	eax,esi
+	rol	ebp,9
+	add	ebp,ebx
+	; 97
+	sub	edx,esi
+	and	eax,ebp
+	and	edx,ecx
+	or	edx,eax
+	mov	eax,DWORD [44+esp]
+	rol	ecx,10
+	lea	ebx,[1548603684+edx*1+ebx]
+	mov	edx,-1
+	add	ebx,eax
+	mov	eax,ecx
+	rol	ebx,13
+	add	ebx,edi
+	; 98
+	sub	edx,ecx
+	and	eax,ebx
+	and	edx,ebp
+	or	edx,eax
+	mov	eax,DWORD [12+esp]
+	rol	ebp,10
+	lea	edi,[1548603684+edx*1+edi]
+	mov	edx,-1
+	add	edi,eax
+	mov	eax,ebp
+	rol	edi,15
+	add	edi,esi
+	; 99
+	sub	edx,ebp
+	and	eax,edi
+	and	edx,ebx
+	or	edx,eax
+	mov	eax,DWORD [28+esp]
+	rol	ebx,10
+	lea	esi,[1548603684+edx*1+esi]
+	mov	edx,-1
+	add	esi,eax
+	mov	eax,ebx
+	rol	esi,7
+	add	esi,ecx
+	; 100
+	sub	edx,ebx
+	and	eax,esi
+	and	edx,edi
+	or	edx,eax
+	mov	eax,DWORD [esp]
+	rol	edi,10
+	lea	ecx,[1548603684+edx*1+ecx]
+	mov	edx,-1
+	add	ecx,eax
+	mov	eax,edi
+	rol	ecx,12
+	add	ecx,ebp
+	; 101
+	sub	edx,edi
+	and	eax,ecx
+	and	edx,esi
+	or	edx,eax
+	mov	eax,DWORD [52+esp]
+	rol	esi,10
+	lea	ebp,[1548603684+edx*1+ebp]
+	mov	edx,-1
+	add	ebp,eax
+	mov	eax,esi
+	rol	ebp,8
+	add	ebp,ebx
+	; 102
+	sub	edx,esi
+	and	eax,ebp
+	and	edx,ecx
+	or	edx,eax
+	mov	eax,DWORD [20+esp]
+	rol	ecx,10
+	lea	ebx,[1548603684+edx*1+ebx]
+	mov	edx,-1
+	add	ebx,eax
+	mov	eax,ecx
+	rol	ebx,9
+	add	ebx,edi
+	; 103
+	sub	edx,ecx
+	and	eax,ebx
+	and	edx,ebp
+	or	edx,eax
+	mov	eax,DWORD [40+esp]
+	rol	ebp,10
+	lea	edi,[1548603684+edx*1+edi]
+	mov	edx,-1
+	add	edi,eax
+	mov	eax,ebp
+	rol	edi,11
+	add	edi,esi
+	; 104
+	sub	edx,ebp
+	and	eax,edi
+	and	edx,ebx
+	or	edx,eax
+	mov	eax,DWORD [56+esp]
+	rol	ebx,10
+	lea	esi,[1548603684+edx*1+esi]
+	mov	edx,-1
+	add	esi,eax
+	mov	eax,ebx
+	rol	esi,7
+	add	esi,ecx
+	; 105
+	sub	edx,ebx
+	and	eax,esi
+	and	edx,edi
+	or	edx,eax
+	mov	eax,DWORD [60+esp]
+	rol	edi,10
+	lea	ecx,[1548603684+edx*1+ecx]
+	mov	edx,-1
+	add	ecx,eax
+	mov	eax,edi
+	rol	ecx,7
+	add	ecx,ebp
+	; 106
+	sub	edx,edi
+	and	eax,ecx
+	and	edx,esi
+	or	edx,eax
+	mov	eax,DWORD [32+esp]
+	rol	esi,10
+	lea	ebp,[1548603684+edx*1+ebp]
+	mov	edx,-1
+	add	ebp,eax
+	mov	eax,esi
+	rol	ebp,12
+	add	ebp,ebx
+	; 107
+	sub	edx,esi
+	and	eax,ebp
+	and	edx,ecx
+	or	edx,eax
+	mov	eax,DWORD [48+esp]
+	rol	ecx,10
+	lea	ebx,[1548603684+edx*1+ebx]
+	mov	edx,-1
+	add	ebx,eax
+	mov	eax,ecx
+	rol	ebx,7
+	add	ebx,edi
+	; 108
+	sub	edx,ecx
+	and	eax,ebx
+	and	edx,ebp
+	or	edx,eax
+	mov	eax,DWORD [16+esp]
+	rol	ebp,10
+	lea	edi,[1548603684+edx*1+edi]
+	mov	edx,-1
+	add	edi,eax
+	mov	eax,ebp
+	rol	edi,6
+	add	edi,esi
+	; 109
+	sub	edx,ebp
+	and	eax,edi
+	and	edx,ebx
+	or	edx,eax
+	mov	eax,DWORD [36+esp]
+	rol	ebx,10
+	lea	esi,[1548603684+edx*1+esi]
+	mov	edx,-1
+	add	esi,eax
+	mov	eax,ebx
+	rol	esi,15
+	add	esi,ecx
+	; 110
+	sub	edx,ebx
+	and	eax,esi
+	and	edx,edi
+	or	edx,eax
+	mov	eax,DWORD [4+esp]
+	rol	edi,10
+	lea	ecx,[1548603684+edx*1+ecx]
+	mov	edx,-1
+	add	ecx,eax
+	mov	eax,edi
+	rol	ecx,13
+	add	ecx,ebp
+	; 111
+	sub	edx,edi
+	and	eax,ecx
+	and	edx,esi
+	or	edx,eax
+	mov	eax,DWORD [8+esp]
+	rol	esi,10
+	lea	ebp,[1548603684+edx*1+ebp]
+	mov	edx,-1
+	add	ebp,eax
+	sub	edx,ecx
+	rol	ebp,11
+	add	ebp,ebx
+	; 112
+	mov	eax,DWORD [60+esp]
+	or	edx,ebp
+	add	ebx,eax
+	xor	edx,esi
+	mov	eax,-1
+	rol	ecx,10
+	lea	ebx,[1836072691+edx*1+ebx]
+	sub	eax,ebp
+	rol	ebx,9
+	add	ebx,edi
+	; 113
+	mov	edx,DWORD [20+esp]
+	or	eax,ebx
+	add	edi,edx
+	xor	eax,ecx
+	mov	edx,-1
+	rol	ebp,10
+	lea	edi,[1836072691+eax*1+edi]
+	sub	edx,ebx
+	rol	edi,7
+	add	edi,esi
+	; 114
+	mov	eax,DWORD [4+esp]
+	or	edx,edi
+	add	esi,eax
+	xor	edx,ebp
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[1836072691+edx*1+esi]
+	sub	eax,edi
+	rol	esi,15
+	add	esi,ecx
+	; 115
+	mov	edx,DWORD [12+esp]
+	or	eax,esi
+	add	ecx,edx
+	xor	eax,ebx
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[1836072691+eax*1+ecx]
+	sub	edx,esi
+	rol	ecx,11
+	add	ecx,ebp
+	; 116
+	mov	eax,DWORD [28+esp]
+	or	edx,ecx
+	add	ebp,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	esi,10
+	lea	ebp,[1836072691+edx*1+ebp]
+	sub	eax,ecx
+	rol	ebp,8
+	add	ebp,ebx
+	; 117
+	mov	edx,DWORD [56+esp]
+	or	eax,ebp
+	add	ebx,edx
+	xor	eax,esi
+	mov	edx,-1
+	rol	ecx,10
+	lea	ebx,[1836072691+eax*1+ebx]
+	sub	edx,ebp
+	rol	ebx,6
+	add	ebx,edi
+	; 118
+	mov	eax,DWORD [24+esp]
+	or	edx,ebx
+	add	edi,eax
+	xor	edx,ecx
+	mov	eax,-1
+	rol	ebp,10
+	lea	edi,[1836072691+edx*1+edi]
+	sub	eax,ebx
+	rol	edi,6
+	add	edi,esi
+	; 119
+	mov	edx,DWORD [36+esp]
+	or	eax,edi
+	add	esi,edx
+	xor	eax,ebp
+	mov	edx,-1
+	rol	ebx,10
+	lea	esi,[1836072691+eax*1+esi]
+	sub	edx,edi
+	rol	esi,14
+	add	esi,ecx
+	; 120
+	mov	eax,DWORD [44+esp]
+	or	edx,esi
+	add	ecx,eax
+	xor	edx,ebx
+	mov	eax,-1
+	rol	edi,10
+	lea	ecx,[1836072691+edx*1+ecx]
+	sub	eax,esi
+	rol	ecx,12
+	add	ecx,ebp
+	; 121
+	mov	edx,DWORD [32+esp]
+	or	eax,ecx
+	add	ebp,edx
+	xor	eax,edi
+	mov	edx,-1
+	rol	esi,10
+	lea	ebp,[1836072691+eax*1+ebp]
+	sub	edx,ecx
+	rol	ebp,13
+	add	ebp,ebx
+	; 122
+	mov	eax,DWORD [48+esp]
+	or	edx,ebp
+	add	ebx,eax
+	xor	edx,esi
+	mov	eax,-1
+	rol	ecx,10
+	lea	ebx,[1836072691+edx*1+ebx]
+	sub	eax,ebp
+	rol	ebx,5
+	add	ebx,edi
+	; 123
+	mov	edx,DWORD [8+esp]
+	or	eax,ebx
+	add	edi,edx
+	xor	eax,ecx
+	mov	edx,-1
+	rol	ebp,10
+	lea	edi,[1836072691+eax*1+edi]
+	sub	edx,ebx
+	rol	edi,14
+	add	edi,esi
+	; 124
+	mov	eax,DWORD [40+esp]
+	or	edx,edi
+	add	esi,eax
+	xor	edx,ebp
+	mov	eax,-1
+	rol	ebx,10
+	lea	esi,[1836072691+edx*1+esi]
+	sub	eax,edi
+	rol	esi,13
+	add	esi,ecx
+	; 125
+	mov	edx,DWORD [esp]
+	or	eax,esi
+	add	ecx,edx
+	xor	eax,ebx
+	mov	edx,-1
+	rol	edi,10
+	lea	ecx,[1836072691+eax*1+ecx]
+	sub	edx,esi
+	rol	ecx,13
+	add	ecx,ebp
+	; 126
+	mov	eax,DWORD [16+esp]
+	or	edx,ecx
+	add	ebp,eax
+	xor	edx,edi
+	mov	eax,-1
+	rol	esi,10
+	lea	ebp,[1836072691+edx*1+ebp]
+	sub	eax,ecx
+	rol	ebp,7
+	add	ebp,ebx
+	; 127
+	mov	edx,DWORD [52+esp]
+	or	eax,ebp
+	add	ebx,edx
+	xor	eax,esi
+	mov	edx,DWORD [32+esp]
+	rol	ecx,10
+	lea	ebx,[1836072691+eax*1+ebx]
+	mov	eax,-1
+	rol	ebx,5
+	add	ebx,edi
+	; 128
+	add	edi,edx
+	mov	edx,ebp
+	sub	eax,ebx
+	and	edx,ebx
+	and	eax,ecx
+	or	edx,eax
+	mov	eax,DWORD [24+esp]
+	rol	ebp,10
+	lea	edi,[2053994217+edx*1+edi]
+	mov	edx,-1
+	rol	edi,15
+	add	edi,esi
+	; 129
+	add	esi,eax
+	mov	eax,ebx
+	sub	edx,edi
+	and	eax,edi
+	and	edx,ebp
+	or	eax,edx
+	mov	edx,DWORD [16+esp]
+	rol	ebx,10
+	lea	esi,[2053994217+eax*1+esi]
+	mov	eax,-1
+	rol	esi,5
+	add	esi,ecx
+	; 130
+	add	ecx,edx
+	mov	edx,edi
+	sub	eax,esi
+	and	edx,esi
+	and	eax,ebx
+	or	edx,eax
+	mov	eax,DWORD [4+esp]
+	rol	edi,10
+	lea	ecx,[2053994217+edx*1+ecx]
+	mov	edx,-1
+	rol	ecx,8
+	add	ecx,ebp
+	; 131
+	add	ebp,eax
+	mov	eax,esi
+	sub	edx,ecx
+	and	eax,ecx
+	and	edx,edi
+	or	eax,edx
+	mov	edx,DWORD [12+esp]
+	rol	esi,10
+	lea	ebp,[2053994217+eax*1+ebp]
+	mov	eax,-1
+	rol	ebp,11
+	add	ebp,ebx
+	; 132
+	add	ebx,edx
+	mov	edx,ecx
+	sub	eax,ebp
+	and	edx,ebp
+	and	eax,esi
+	or	edx,eax
+	mov	eax,DWORD [44+esp]
+	rol	ecx,10
+	lea	ebx,[2053994217+edx*1+ebx]
+	mov	edx,-1
+	rol	ebx,14
+	add	ebx,edi
+	; 133
+	add	edi,eax
+	mov	eax,ebp
+	sub	edx,ebx
+	and	eax,ebx
+	and	edx,ecx
+	or	eax,edx
+	mov	edx,DWORD [60+esp]
+	rol	ebp,10
+	lea	edi,[2053994217+eax*1+edi]
+	mov	eax,-1
+	rol	edi,14
+	add	edi,esi
+	; 134
+	add	esi,edx
+	mov	edx,ebx
+	sub	eax,edi
+	and	edx,edi
+	and	eax,ebp
+	or	edx,eax
+	mov	eax,DWORD [esp]
+	rol	ebx,10
+	lea	esi,[2053994217+edx*1+esi]
+	mov	edx,-1
+	rol	esi,6
+	add	esi,ecx
+	; 135
+	add	ecx,eax
+	mov	eax,edi
+	sub	edx,esi
+	and	eax,esi
+	and	edx,ebx
+	or	eax,edx
+	mov	edx,DWORD [20+esp]
+	rol	edi,10
+	lea	ecx,[2053994217+eax*1+ecx]
+	mov	eax,-1
+	rol	ecx,14
+	add	ecx,ebp
+	; 136
+	add	ebp,edx
+	mov	edx,esi
+	sub	eax,ecx
+	and	edx,ecx
+	and	eax,edi
+	or	edx,eax
+	mov	eax,DWORD [48+esp]
+	rol	esi,10
+	lea	ebp,[2053994217+edx*1+ebp]
+	mov	edx,-1
+	rol	ebp,6
+	add	ebp,ebx
+	; 137
+	add	ebx,eax
+	mov	eax,ecx
+	sub	edx,ebp
+	and	eax,ebp
+	and	edx,esi
+	or	eax,edx
+	mov	edx,DWORD [8+esp]
+	rol	ecx,10
+	lea	ebx,[2053994217+eax*1+ebx]
+	mov	eax,-1
+	rol	ebx,9
+	add	ebx,edi
+	; 138
+	add	edi,edx
+	mov	edx,ebp
+	sub	eax,ebx
+	and	edx,ebx
+	and	eax,ecx
+	or	edx,eax
+	mov	eax,DWORD [52+esp]
+	rol	ebp,10
+	lea	edi,[2053994217+edx*1+edi]
+	mov	edx,-1
+	rol	edi,12
+	add	edi,esi
+	; 139
+	add	esi,eax
+	mov	eax,ebx
+	sub	edx,edi
+	and	eax,edi
+	and	edx,ebp
+	or	eax,edx
+	mov	edx,DWORD [36+esp]
+	rol	ebx,10
+	lea	esi,[2053994217+eax*1+esi]
+	mov	eax,-1
+	rol	esi,9
+	add	esi,ecx
+	; 140
+	add	ecx,edx
+	mov	edx,edi
+	sub	eax,esi
+	and	edx,esi
+	and	eax,ebx
+	or	edx,eax
+	mov	eax,DWORD [28+esp]
+	rol	edi,10
+	lea	ecx,[2053994217+edx*1+ecx]
+	mov	edx,-1
+	rol	ecx,12
+	add	ecx,ebp
+	; 141
+	add	ebp,eax
+	mov	eax,esi
+	sub	edx,ecx
+	and	eax,ecx
+	and	edx,edi
+	or	eax,edx
+	mov	edx,DWORD [40+esp]
+	rol	esi,10
+	lea	ebp,[2053994217+eax*1+ebp]
+	mov	eax,-1
+	rol	ebp,5
+	add	ebp,ebx
+	; 142
+	add	ebx,edx
+	mov	edx,ecx
+	sub	eax,ebp
+	and	edx,ebp
+	and	eax,esi
+	or	edx,eax
+	mov	eax,DWORD [56+esp]
+	rol	ecx,10
+	lea	ebx,[2053994217+edx*1+ebx]
+	mov	edx,-1
+	rol	ebx,15
+	add	ebx,edi
+	; 143
+	add	edi,eax
+	mov	eax,ebp
+	sub	edx,ebx
+	and	eax,ebx
+	and	edx,ecx
+	or	edx,eax
+	mov	eax,ebx
+	rol	ebp,10
+	lea	edi,[2053994217+edx*1+edi]
+	xor	eax,ebp
+	rol	edi,8
+	add	edi,esi
+	; 144
+	mov	edx,DWORD [48+esp]
+	xor	eax,edi
+	add	esi,edx
+	rol	ebx,10
+	add	esi,eax
+	mov	eax,edi
+	rol	esi,8
+	add	esi,ecx
+	; 145
+	xor	eax,ebx
+	mov	edx,DWORD [60+esp]
+	xor	eax,esi
+	add	ecx,eax
+	mov	eax,esi
+	rol	edi,10
+	add	ecx,edx
+	xor	eax,edi
+	rol	ecx,5
+	add	ecx,ebp
+	; 146
+	mov	edx,DWORD [40+esp]
+	xor	eax,ecx
+	add	ebp,edx
+	rol	esi,10
+	add	ebp,eax
+	mov	eax,ecx
+	rol	ebp,12
+	add	ebp,ebx
+	; 147
+	xor	eax,esi
+	mov	edx,DWORD [16+esp]
+	xor	eax,ebp
+	add	ebx,eax
+	mov	eax,ebp
+	rol	ecx,10
+	add	ebx,edx
+	xor	eax,ecx
+	rol	ebx,9
+	add	ebx,edi
+	; 148
+	mov	edx,DWORD [4+esp]
+	xor	eax,ebx
+	add	edi,edx
+	rol	ebp,10
+	add	edi,eax
+	mov	eax,ebx
+	rol	edi,12
+	add	edi,esi
+	; 149
+	xor	eax,ebp
+	mov	edx,DWORD [20+esp]
+	xor	eax,edi
+	add	esi,eax
+	mov	eax,edi
+	rol	ebx,10
+	add	esi,edx
+	xor	eax,ebx
+	rol	esi,5
+	add	esi,ecx
+	; 150
+	mov	edx,DWORD [32+esp]
+	xor	eax,esi
+	add	ecx,edx
+	rol	edi,10
+	add	ecx,eax
+	mov	eax,esi
+	rol	ecx,14
+	add	ecx,ebp
+	; 151
+	xor	eax,edi
+	mov	edx,DWORD [28+esp]
+	xor	eax,ecx
+	add	ebp,eax
+	mov	eax,ecx
+	rol	esi,10
+	add	ebp,edx
+	xor	eax,esi
+	rol	ebp,6
+	add	ebp,ebx
+	; 152
+	mov	edx,DWORD [24+esp]
+	xor	eax,ebp
+	add	ebx,edx
+	rol	ecx,10
+	add	ebx,eax
+	mov	eax,ebp
+	rol	ebx,8
+	add	ebx,edi
+	; 153
+	xor	eax,ecx
+	mov	edx,DWORD [8+esp]
+	xor	eax,ebx
+	add	edi,eax
+	mov	eax,ebx
+	rol	ebp,10
+	add	edi,edx
+	xor	eax,ebp
+	rol	edi,13
+	add	edi,esi
+	; 154
+	mov	edx,DWORD [52+esp]
+	xor	eax,edi
+	add	esi,edx
+	rol	ebx,10
+	add	esi,eax
+	mov	eax,edi
+	rol	esi,6
+	add	esi,ecx
+	; 155
+	xor	eax,ebx
+	mov	edx,DWORD [56+esp]
+	xor	eax,esi
+	add	ecx,eax
+	mov	eax,esi
+	rol	edi,10
+	add	ecx,edx
+	xor	eax,edi
+	rol	ecx,5
+	add	ecx,ebp
+	; 156
+	mov	edx,DWORD [esp]
+	xor	eax,ecx
+	add	ebp,edx
+	rol	esi,10
+	add	ebp,eax
+	mov	eax,ecx
+	rol	ebp,15
+	add	ebp,ebx
+	; 157
+	xor	eax,esi
+	mov	edx,DWORD [12+esp]
+	xor	eax,ebp
+	add	ebx,eax
+	mov	eax,ebp
+	rol	ecx,10
+	add	ebx,edx
+	xor	eax,ecx
+	rol	ebx,13
+	add	ebx,edi
+	; 158
+	mov	edx,DWORD [36+esp]
+	xor	eax,ebx
+	add	edi,edx
+	rol	ebp,10
+	add	edi,eax
+	mov	eax,ebx
+	rol	edi,11
+	add	edi,esi
+	; 159
+	xor	eax,ebp
+	mov	edx,DWORD [44+esp]
+	xor	eax,edi
+	add	esi,eax
+	rol	ebx,10
+	add	esi,edx
+	mov	edx,DWORD [128+esp]
+	rol	esi,11
+	add	esi,ecx
+	mov	eax,DWORD [4+edx]
+	add	ebx,eax
+	mov	eax,DWORD [72+esp]
+	add	ebx,eax
+	mov	eax,DWORD [8+edx]
+	add	ebp,eax
+	mov	eax,DWORD [76+esp]
+	add	ebp,eax
+	mov	eax,DWORD [12+edx]
+	add	ecx,eax
+	mov	eax,DWORD [80+esp]
+	add	ecx,eax
+	mov	eax,DWORD [16+edx]
+	add	esi,eax
+	mov	eax,DWORD [64+esp]
+	add	esi,eax
+	mov	eax,DWORD [edx]
+	add	edi,eax
+	mov	eax,DWORD [68+esp]
+	add	edi,eax
+	mov	eax,DWORD [136+esp]
+	mov	DWORD [edx],ebx
+	mov	DWORD [4+edx],ebp
+	mov	DWORD [8+edx],ecx
+	sub	eax,1
+	mov	DWORD [12+edx],esi
+	mov	DWORD [16+edx],edi
+	jle	NEAR L$001get_out
+	mov	DWORD [136+esp],eax
+	mov	edi,ecx
+	mov	eax,DWORD [132+esp]
+	mov	ecx,ebx
+	add	eax,64
+	mov	esi,ebp
+	mov	DWORD [132+esp],eax
+	jmp	NEAR L$000start
+L$001get_out:
+	add	esp,108
+	pop	ebx
+	pop	ebp
+	pop	edi
+	pop	esi
+	ret

+ 292 - 0
libs/openssl/crypto/sha/asm/sha256_586.asm

@@ -0,0 +1,292 @@
+
+%ifidn __OUTPUT_FORMAT__,obj
+section	code	use32 class=code align=256
+%elifidn __OUTPUT_FORMAT__,win32
[email protected] equ 1
+section	.text	code align=256
+%else
+section	.text	code
+%endif
+global	_sha256_block_data_order
+align	16
+_sha256_block_data_order:
+L$_sha256_block_data_order_begin:
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD [20+esp]
+	mov	edi,DWORD [24+esp]
+	mov	eax,DWORD [28+esp]
+	mov	ebx,esp
+	call	L$000pic_point
+L$000pic_point:
+	pop	ebp
+	lea	ebp,[(L$001K256-L$000pic_point)+ebp]
+	sub	esp,16
+	and	esp,-64
+	shl	eax,6
+	add	eax,edi
+	mov	DWORD [esp],esi
+	mov	DWORD [4+esp],edi
+	mov	DWORD [8+esp],eax
+	mov	DWORD [12+esp],ebx
+	jmp	NEAR L$002loop
+align	16
+L$002loop:
+	mov	eax,DWORD [edi]
+	mov	ebx,DWORD [4+edi]
+	mov	ecx,DWORD [8+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	mov	edx,DWORD [12+edi]
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	push	eax
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	push	ebx
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	ecx
+	push	edx
+	mov	eax,DWORD [16+edi]
+	mov	ebx,DWORD [20+edi]
+	mov	ecx,DWORD [24+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	mov	edx,DWORD [28+edi]
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	push	eax
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	push	ebx
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	ecx
+	push	edx
+	mov	eax,DWORD [32+edi]
+	mov	ebx,DWORD [36+edi]
+	mov	ecx,DWORD [40+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	mov	edx,DWORD [44+edi]
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	push	eax
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	push	ebx
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	ecx
+	push	edx
+	mov	eax,DWORD [48+edi]
+	mov	ebx,DWORD [52+edi]
+	mov	ecx,DWORD [56+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	mov	edx,DWORD [60+edi]
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	push	eax
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	push	ebx
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	ecx
+	push	edx
+	add	edi,64
+	lea	esp,[esp-36]
+	mov	DWORD [104+esp],edi
+	mov	eax,DWORD [esi]
+	mov	ebx,DWORD [4+esi]
+	mov	ecx,DWORD [8+esi]
+	mov	edi,DWORD [12+esi]
+	mov	DWORD [8+esp],ebx
+	xor	ebx,ecx
+	mov	DWORD [12+esp],ecx
+	mov	DWORD [16+esp],edi
+	mov	DWORD [esp],ebx
+	mov	edx,DWORD [16+esi]
+	mov	ebx,DWORD [20+esi]
+	mov	ecx,DWORD [24+esi]
+	mov	edi,DWORD [28+esi]
+	mov	DWORD [24+esp],ebx
+	mov	DWORD [28+esp],ecx
+	mov	DWORD [32+esp],edi
+align	16
+L$00300_15:
+	mov	ecx,edx
+	mov	esi,DWORD [24+esp]
+	ror	ecx,14
+	mov	edi,DWORD [28+esp]
+	xor	ecx,edx
+	xor	esi,edi
+	mov	ebx,DWORD [96+esp]
+	ror	ecx,5
+	and	esi,edx
+	mov	DWORD [20+esp],edx
+	xor	edx,ecx
+	add	ebx,DWORD [32+esp]
+	xor	esi,edi
+	ror	edx,6
+	mov	ecx,eax
+	add	ebx,esi
+	ror	ecx,9
+	add	ebx,edx
+	mov	edi,DWORD [8+esp]
+	xor	ecx,eax
+	mov	DWORD [4+esp],eax
+	lea	esp,[esp-4]
+	ror	ecx,11
+	mov	esi,DWORD [ebp]
+	xor	ecx,eax
+	mov	edx,DWORD [20+esp]
+	xor	eax,edi
+	ror	ecx,2
+	add	ebx,esi
+	mov	DWORD [esp],eax
+	add	edx,ebx
+	and	eax,DWORD [4+esp]
+	add	ebx,ecx
+	xor	eax,edi
+	add	ebp,4
+	add	eax,ebx
+	cmp	esi,3248222580
+	jne	NEAR L$00300_15
+	mov	ecx,DWORD [156+esp]
+	jmp	NEAR L$00416_63
+align	16
+L$00416_63:
+	mov	ebx,ecx
+	mov	esi,DWORD [104+esp]
+	ror	ecx,11
+	mov	edi,esi
+	ror	esi,2
+	xor	ecx,ebx
+	shr	ebx,3
+	ror	ecx,7
+	xor	esi,edi
+	xor	ebx,ecx
+	ror	esi,17
+	add	ebx,DWORD [160+esp]
+	shr	edi,10
+	add	ebx,DWORD [124+esp]
+	mov	ecx,edx
+	xor	edi,esi
+	mov	esi,DWORD [24+esp]
+	ror	ecx,14
+	add	ebx,edi
+	mov	edi,DWORD [28+esp]
+	xor	ecx,edx
+	xor	esi,edi
+	mov	DWORD [96+esp],ebx
+	ror	ecx,5
+	and	esi,edx
+	mov	DWORD [20+esp],edx
+	xor	edx,ecx
+	add	ebx,DWORD [32+esp]
+	xor	esi,edi
+	ror	edx,6
+	mov	ecx,eax
+	add	ebx,esi
+	ror	ecx,9
+	add	ebx,edx
+	mov	edi,DWORD [8+esp]
+	xor	ecx,eax
+	mov	DWORD [4+esp],eax
+	lea	esp,[esp-4]
+	ror	ecx,11
+	mov	esi,DWORD [ebp]
+	xor	ecx,eax
+	mov	edx,DWORD [20+esp]
+	xor	eax,edi
+	ror	ecx,2
+	add	ebx,esi
+	mov	DWORD [esp],eax
+	add	edx,ebx
+	and	eax,DWORD [4+esp]
+	add	ebx,ecx
+	xor	eax,edi
+	mov	ecx,DWORD [156+esp]
+	add	ebp,4
+	add	eax,ebx
+	cmp	esi,3329325298
+	jne	NEAR L$00416_63
+	mov	esi,DWORD [356+esp]
+	mov	ebx,DWORD [8+esp]
+	mov	ecx,DWORD [16+esp]
+	add	eax,DWORD [esi]
+	add	ebx,DWORD [4+esi]
+	add	edi,DWORD [8+esi]
+	add	ecx,DWORD [12+esi]
+	mov	DWORD [esi],eax
+	mov	DWORD [4+esi],ebx
+	mov	DWORD [8+esi],edi
+	mov	DWORD [12+esi],ecx
+	mov	eax,DWORD [24+esp]
+	mov	ebx,DWORD [28+esp]
+	mov	ecx,DWORD [32+esp]
+	mov	edi,DWORD [360+esp]
+	add	edx,DWORD [16+esi]
+	add	eax,DWORD [20+esi]
+	add	ebx,DWORD [24+esi]
+	add	ecx,DWORD [28+esi]
+	mov	DWORD [16+esi],edx
+	mov	DWORD [20+esi],eax
+	mov	DWORD [24+esi],ebx
+	mov	DWORD [28+esi],ecx
+	lea	esp,[356+esp]
+	sub	ebp,256
+	cmp	edi,DWORD [8+esp]
+	jb	NEAR L$002loop
+	mov	esp,DWORD [12+esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+align	64
+L$001K256:
+dd	1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298
+dd	66051,67438087,134810123,202182159
+db	83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
+db	110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
+db	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+db	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+db	62,0

+ 666 - 0
libs/openssl/crypto/sha/asm/sha512_586.asm

@@ -0,0 +1,666 @@
+
+%ifidn __OUTPUT_FORMAT__,obj
+section	code	use32 class=code align=256
+%elifidn __OUTPUT_FORMAT__,win32
[email protected] equ 1
+section	.text	code align=256
+%else
+section	.text	code
+%endif
+global	_sha512_block_data_order
+align	16
+_sha512_block_data_order:
+L$_sha512_block_data_order_begin:
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD [20+esp]
+	mov	edi,DWORD [24+esp]
+	mov	eax,DWORD [28+esp]
+	mov	ebx,esp
+	call	L$000pic_point
+L$000pic_point:
+	pop	ebp
+	lea	ebp,[(L$001K512-L$000pic_point)+ebp]
+	sub	esp,16
+	and	esp,-64
+	shl	eax,7
+	add	eax,edi
+	mov	DWORD [esp],esi
+	mov	DWORD [4+esp],edi
+	mov	DWORD [8+esp],eax
+	mov	DWORD [12+esp],ebx
+align	16
+L$002loop_x86:
+	mov	eax,DWORD [edi]
+	mov	ebx,DWORD [4+edi]
+	mov	ecx,DWORD [8+edi]
+	mov	edx,DWORD [12+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	mov	eax,DWORD [16+edi]
+	mov	ebx,DWORD [20+edi]
+	mov	ecx,DWORD [24+edi]
+	mov	edx,DWORD [28+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	mov	eax,DWORD [32+edi]
+	mov	ebx,DWORD [36+edi]
+	mov	ecx,DWORD [40+edi]
+	mov	edx,DWORD [44+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	mov	eax,DWORD [48+edi]
+	mov	ebx,DWORD [52+edi]
+	mov	ecx,DWORD [56+edi]
+	mov	edx,DWORD [60+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	mov	eax,DWORD [64+edi]
+	mov	ebx,DWORD [68+edi]
+	mov	ecx,DWORD [72+edi]
+	mov	edx,DWORD [76+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	mov	eax,DWORD [80+edi]
+	mov	ebx,DWORD [84+edi]
+	mov	ecx,DWORD [88+edi]
+	mov	edx,DWORD [92+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	mov	eax,DWORD [96+edi]
+	mov	ebx,DWORD [100+edi]
+	mov	ecx,DWORD [104+edi]
+	mov	edx,DWORD [108+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	mov	eax,DWORD [112+edi]
+	mov	ebx,DWORD [116+edi]
+	mov	ecx,DWORD [120+edi]
+	mov	edx,DWORD [124+edi]
+	; bswap eax
+	xchg	ah,al
+	ror	eax,16
+	xchg	ah,al
+	; bswap ebx
+	xchg	bh,bl
+	ror	ebx,16
+	xchg	bh,bl
+	; bswap ecx
+	xchg	ch,cl
+	ror	ecx,16
+	xchg	ch,cl
+	; bswap edx
+	xchg	dh,dl
+	ror	edx,16
+	xchg	dh,dl
+	push	eax
+	push	ebx
+	push	ecx
+	push	edx
+	add	edi,128
+	sub	esp,72
+	mov	DWORD [204+esp],edi
+	lea	edi,[8+esp]
+	mov	ecx,16
+dd	2784229001
+align	16
+L$00300_15_x86:
+	mov	ecx,DWORD [40+esp]
+	mov	edx,DWORD [44+esp]
+	mov	esi,ecx
+	shr	ecx,9
+	mov	edi,edx
+	shr	edx,9
+	mov	ebx,ecx
+	shl	esi,14
+	mov	eax,edx
+	shl	edi,14
+	xor	ebx,esi
+	shr	ecx,5
+	xor	eax,edi
+	shr	edx,5
+	xor	eax,ecx
+	shl	esi,4
+	xor	ebx,edx
+	shl	edi,4
+	xor	ebx,esi
+	shr	ecx,4
+	xor	eax,edi
+	shr	edx,4
+	xor	eax,ecx
+	shl	esi,5
+	xor	ebx,edx
+	shl	edi,5
+	xor	eax,esi
+	xor	ebx,edi
+	mov	ecx,DWORD [48+esp]
+	mov	edx,DWORD [52+esp]
+	mov	esi,DWORD [56+esp]
+	mov	edi,DWORD [60+esp]
+	add	eax,DWORD [64+esp]
+	adc	ebx,DWORD [68+esp]
+	xor	ecx,esi
+	xor	edx,edi
+	and	ecx,DWORD [40+esp]
+	and	edx,DWORD [44+esp]
+	add	eax,DWORD [192+esp]
+	adc	ebx,DWORD [196+esp]
+	xor	ecx,esi
+	xor	edx,edi
+	mov	esi,DWORD [ebp]
+	mov	edi,DWORD [4+ebp]
+	add	eax,ecx
+	adc	ebx,edx
+	mov	ecx,DWORD [32+esp]
+	mov	edx,DWORD [36+esp]
+	add	eax,esi
+	adc	ebx,edi
+	mov	DWORD [esp],eax
+	mov	DWORD [4+esp],ebx
+	add	eax,ecx
+	adc	ebx,edx
+	mov	ecx,DWORD [8+esp]
+	mov	edx,DWORD [12+esp]
+	mov	DWORD [32+esp],eax
+	mov	DWORD [36+esp],ebx
+	mov	esi,ecx
+	shr	ecx,2
+	mov	edi,edx
+	shr	edx,2
+	mov	ebx,ecx
+	shl	esi,4
+	mov	eax,edx
+	shl	edi,4
+	xor	ebx,esi
+	shr	ecx,5
+	xor	eax,edi
+	shr	edx,5
+	xor	ebx,ecx
+	shl	esi,21
+	xor	eax,edx
+	shl	edi,21
+	xor	eax,esi
+	shr	ecx,21
+	xor	ebx,edi
+	shr	edx,21
+	xor	eax,ecx
+	shl	esi,5
+	xor	ebx,edx
+	shl	edi,5
+	xor	eax,esi
+	xor	ebx,edi
+	mov	ecx,DWORD [8+esp]
+	mov	edx,DWORD [12+esp]
+	mov	esi,DWORD [16+esp]
+	mov	edi,DWORD [20+esp]
+	add	eax,DWORD [esp]
+	adc	ebx,DWORD [4+esp]
+	or	ecx,esi
+	or	edx,edi
+	and	ecx,DWORD [24+esp]
+	and	edx,DWORD [28+esp]
+	and	esi,DWORD [8+esp]
+	and	edi,DWORD [12+esp]
+	or	ecx,esi
+	or	edx,edi
+	add	eax,ecx
+	adc	ebx,edx
+	mov	DWORD [esp],eax
+	mov	DWORD [4+esp],ebx
+	mov	dl,BYTE [ebp]
+	sub	esp,8
+	lea	ebp,[8+ebp]
+	cmp	dl,148
+	jne	NEAR L$00300_15_x86
+align	16
+L$00416_79_x86:
+	mov	ecx,DWORD [312+esp]
+	mov	edx,DWORD [316+esp]
+	mov	esi,ecx
+	shr	ecx,1
+	mov	edi,edx
+	shr	edx,1
+	mov	eax,ecx
+	shl	esi,24
+	mov	ebx,edx
+	shl	edi,24
+	xor	ebx,esi
+	shr	ecx,6
+	xor	eax,edi
+	shr	edx,6
+	xor	eax,ecx
+	shl	esi,7
+	xor	ebx,edx
+	shl	edi,1
+	xor	ebx,esi
+	shr	ecx,1
+	xor	eax,edi
+	shr	edx,1
+	xor	eax,ecx
+	shl	edi,6
+	xor	ebx,edx
+	xor	eax,edi
+	mov	DWORD [esp],eax
+	mov	DWORD [4+esp],ebx
+	mov	ecx,DWORD [208+esp]
+	mov	edx,DWORD [212+esp]
+	mov	esi,ecx
+	shr	ecx,6
+	mov	edi,edx
+	shr	edx,6
+	mov	eax,ecx
+	shl	esi,3
+	mov	ebx,edx
+	shl	edi,3
+	xor	eax,esi
+	shr	ecx,13
+	xor	ebx,edi
+	shr	edx,13
+	xor	eax,ecx
+	shl	esi,10
+	xor	ebx,edx
+	shl	edi,10
+	xor	ebx,esi
+	shr	ecx,10
+	xor	eax,edi
+	shr	edx,10
+	xor	ebx,ecx
+	shl	edi,13
+	xor	eax,edx
+	xor	eax,edi
+	mov	ecx,DWORD [320+esp]
+	mov	edx,DWORD [324+esp]
+	add	eax,DWORD [esp]
+	adc	ebx,DWORD [4+esp]
+	mov	esi,DWORD [248+esp]
+	mov	edi,DWORD [252+esp]
+	add	eax,ecx
+	adc	ebx,edx
+	add	eax,esi
+	adc	ebx,edi
+	mov	DWORD [192+esp],eax
+	mov	DWORD [196+esp],ebx
+	mov	ecx,DWORD [40+esp]
+	mov	edx,DWORD [44+esp]
+	mov	esi,ecx
+	shr	ecx,9
+	mov	edi,edx
+	shr	edx,9
+	mov	ebx,ecx
+	shl	esi,14
+	mov	eax,edx
+	shl	edi,14
+	xor	ebx,esi
+	shr	ecx,5
+	xor	eax,edi
+	shr	edx,5
+	xor	eax,ecx
+	shl	esi,4
+	xor	ebx,edx
+	shl	edi,4
+	xor	ebx,esi
+	shr	ecx,4
+	xor	eax,edi
+	shr	edx,4
+	xor	eax,ecx
+	shl	esi,5
+	xor	ebx,edx
+	shl	edi,5
+	xor	eax,esi
+	xor	ebx,edi
+	mov	ecx,DWORD [48+esp]
+	mov	edx,DWORD [52+esp]
+	mov	esi,DWORD [56+esp]
+	mov	edi,DWORD [60+esp]
+	add	eax,DWORD [64+esp]
+	adc	ebx,DWORD [68+esp]
+	xor	ecx,esi
+	xor	edx,edi
+	and	ecx,DWORD [40+esp]
+	and	edx,DWORD [44+esp]
+	add	eax,DWORD [192+esp]
+	adc	ebx,DWORD [196+esp]
+	xor	ecx,esi
+	xor	edx,edi
+	mov	esi,DWORD [ebp]
+	mov	edi,DWORD [4+ebp]
+	add	eax,ecx
+	adc	ebx,edx
+	mov	ecx,DWORD [32+esp]
+	mov	edx,DWORD [36+esp]
+	add	eax,esi
+	adc	ebx,edi
+	mov	DWORD [esp],eax
+	mov	DWORD [4+esp],ebx
+	add	eax,ecx
+	adc	ebx,edx
+	mov	ecx,DWORD [8+esp]
+	mov	edx,DWORD [12+esp]
+	mov	DWORD [32+esp],eax
+	mov	DWORD [36+esp],ebx
+	mov	esi,ecx
+	shr	ecx,2
+	mov	edi,edx
+	shr	edx,2
+	mov	ebx,ecx
+	shl	esi,4
+	mov	eax,edx
+	shl	edi,4
+	xor	ebx,esi
+	shr	ecx,5
+	xor	eax,edi
+	shr	edx,5
+	xor	ebx,ecx
+	shl	esi,21
+	xor	eax,edx
+	shl	edi,21
+	xor	eax,esi
+	shr	ecx,21
+	xor	ebx,edi
+	shr	edx,21
+	xor	eax,ecx
+	shl	esi,5
+	xor	ebx,edx
+	shl	edi,5
+	xor	eax,esi
+	xor	ebx,edi
+	mov	ecx,DWORD [8+esp]
+	mov	edx,DWORD [12+esp]
+	mov	esi,DWORD [16+esp]
+	mov	edi,DWORD [20+esp]
+	add	eax,DWORD [esp]
+	adc	ebx,DWORD [4+esp]
+	or	ecx,esi
+	or	edx,edi
+	and	ecx,DWORD [24+esp]
+	and	edx,DWORD [28+esp]
+	and	esi,DWORD [8+esp]
+	and	edi,DWORD [12+esp]
+	or	ecx,esi
+	or	edx,edi
+	add	eax,ecx
+	adc	ebx,edx
+	mov	DWORD [esp],eax
+	mov	DWORD [4+esp],ebx
+	mov	dl,BYTE [ebp]
+	sub	esp,8
+	lea	ebp,[8+ebp]
+	cmp	dl,23
+	jne	NEAR L$00416_79_x86
+	mov	esi,DWORD [840+esp]
+	mov	edi,DWORD [844+esp]
+	mov	eax,DWORD [esi]
+	mov	ebx,DWORD [4+esi]
+	mov	ecx,DWORD [8+esi]
+	mov	edx,DWORD [12+esi]
+	add	eax,DWORD [8+esp]
+	adc	ebx,DWORD [12+esp]
+	mov	DWORD [esi],eax
+	mov	DWORD [4+esi],ebx
+	add	ecx,DWORD [16+esp]
+	adc	edx,DWORD [20+esp]
+	mov	DWORD [8+esi],ecx
+	mov	DWORD [12+esi],edx
+	mov	eax,DWORD [16+esi]
+	mov	ebx,DWORD [20+esi]
+	mov	ecx,DWORD [24+esi]
+	mov	edx,DWORD [28+esi]
+	add	eax,DWORD [24+esp]
+	adc	ebx,DWORD [28+esp]
+	mov	DWORD [16+esi],eax
+	mov	DWORD [20+esi],ebx
+	add	ecx,DWORD [32+esp]
+	adc	edx,DWORD [36+esp]
+	mov	DWORD [24+esi],ecx
+	mov	DWORD [28+esi],edx
+	mov	eax,DWORD [32+esi]
+	mov	ebx,DWORD [36+esi]
+	mov	ecx,DWORD [40+esi]
+	mov	edx,DWORD [44+esi]
+	add	eax,DWORD [40+esp]
+	adc	ebx,DWORD [44+esp]
+	mov	DWORD [32+esi],eax
+	mov	DWORD [36+esi],ebx
+	add	ecx,DWORD [48+esp]
+	adc	edx,DWORD [52+esp]
+	mov	DWORD [40+esi],ecx
+	mov	DWORD [44+esi],edx
+	mov	eax,DWORD [48+esi]
+	mov	ebx,DWORD [52+esi]
+	mov	ecx,DWORD [56+esi]
+	mov	edx,DWORD [60+esi]
+	add	eax,DWORD [56+esp]
+	adc	ebx,DWORD [60+esp]
+	mov	DWORD [48+esi],eax
+	mov	DWORD [52+esi],ebx
+	add	ecx,DWORD [64+esp]
+	adc	edx,DWORD [68+esp]
+	mov	DWORD [56+esi],ecx
+	mov	DWORD [60+esi],edx
+	add	esp,840
+	sub	ebp,640
+	cmp	edi,DWORD [8+esp]
+	jb	NEAR L$002loop_x86
+	mov	esp,DWORD [12+esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+align	64
+L$001K512:
+dd	3609767458,1116352408
+dd	602891725,1899447441
+dd	3964484399,3049323471
+dd	2173295548,3921009573
+dd	4081628472,961987163
+dd	3053834265,1508970993
+dd	2937671579,2453635748
+dd	3664609560,2870763221
+dd	2734883394,3624381080
+dd	1164996542,310598401
+dd	1323610764,607225278
+dd	3590304994,1426881987
+dd	4068182383,1925078388
+dd	991336113,2162078206
+dd	633803317,2614888103
+dd	3479774868,3248222580
+dd	2666613458,3835390401
+dd	944711139,4022224774
+dd	2341262773,264347078
+dd	2007800933,604807628
+dd	1495990901,770255983
+dd	1856431235,1249150122
+dd	3175218132,1555081692
+dd	2198950837,1996064986
+dd	3999719339,2554220882
+dd	766784016,2821834349
+dd	2566594879,2952996808
+dd	3203337956,3210313671
+dd	1034457026,3336571891
+dd	2466948901,3584528711
+dd	3758326383,113926993
+dd	168717936,338241895
+dd	1188179964,666307205
+dd	1546045734,773529912
+dd	1522805485,1294757372
+dd	2643833823,1396182291
+dd	2343527390,1695183700
+dd	1014477480,1986661051
+dd	1206759142,2177026350
+dd	344077627,2456956037
+dd	1290863460,2730485921
+dd	3158454273,2820302411
+dd	3505952657,3259730800
+dd	106217008,3345764771
+dd	3606008344,3516065817
+dd	1432725776,3600352804
+dd	1467031594,4094571909
+dd	851169720,275423344
+dd	3100823752,430227734
+dd	1363258195,506948616
+dd	3750685593,659060556
+dd	3785050280,883997877
+dd	3318307427,958139571
+dd	3812723403,1322822218
+dd	2003034995,1537002063
+dd	3602036899,1747873779
+dd	1575990012,1955562222
+dd	1125592928,2024104815
+dd	2716904306,2227730452
+dd	442776044,2361852424
+dd	593698344,2428436474
+dd	3733110249,2756734187
+dd	2999351573,3204031479
+dd	3815920427,3329325298
+dd	3928383900,3391569614
+dd	566280711,3515267271
+dd	3454069534,3940187606
+dd	4000239992,4118630271
+dd	1914138554,116418474
+dd	2731055270,174292421
+dd	3203993006,289380356
+dd	320620315,460393269
+dd	587496836,685471733
+dd	1086792851,852142971
+dd	365543100,1017036298
+dd	2618297676,1126000580
+dd	3409855158,1288033470
+dd	4234509866,1501505948
+dd	987167468,1607167915
+dd	1246189591,1816402316
+dd	67438087,66051
+dd	202182159,134810123
+db	83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
+db	110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
+db	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+db	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+db	62,0