draconisplusplus/subprojects/openssl-3.0.8/generated-config/archs/VC-WIN32/asm/crypto/des/crypt586.asm

881 lines
14 KiB
NASM

%ifidn __OUTPUT_FORMAT__,obj
section code use32 class=code align=64
%elifidn __OUTPUT_FORMAT__,win32
$@feat.00 equ 1
section .text code align=64
%else
section .text code
%endif
extern _DES_SPtrans
global _fcrypt_body
align 16
_fcrypt_body:
L$_fcrypt_body_begin:
push ebp
push ebx
push esi
push edi
;
; Load the 2 words
xor edi,edi
xor esi,esi
lea edx,[_DES_SPtrans]
push edx
mov ebp,DWORD [28+esp]
push DWORD 25
L$000start:
;
; Round 0
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [ebp]
xor eax,ebx
mov ecx,DWORD [4+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 1
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [8+ebp]
xor eax,ebx
mov ecx,DWORD [12+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
;
; Round 2
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [16+ebp]
xor eax,ebx
mov ecx,DWORD [20+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 3
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [24+ebp]
xor eax,ebx
mov ecx,DWORD [28+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
;
; Round 4
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [32+ebp]
xor eax,ebx
mov ecx,DWORD [36+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 5
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [40+ebp]
xor eax,ebx
mov ecx,DWORD [44+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
;
; Round 6
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [48+ebp]
xor eax,ebx
mov ecx,DWORD [52+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 7
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [56+ebp]
xor eax,ebx
mov ecx,DWORD [60+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
;
; Round 8
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [64+ebp]
xor eax,ebx
mov ecx,DWORD [68+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 9
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [72+ebp]
xor eax,ebx
mov ecx,DWORD [76+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
;
; Round 10
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [80+ebp]
xor eax,ebx
mov ecx,DWORD [84+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 11
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [88+ebp]
xor eax,ebx
mov ecx,DWORD [92+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
;
; Round 12
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [96+ebp]
xor eax,ebx
mov ecx,DWORD [100+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 13
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [104+ebp]
xor eax,ebx
mov ecx,DWORD [108+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
;
; Round 14
mov eax,DWORD [36+esp]
mov edx,esi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,esi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [112+ebp]
xor eax,ebx
mov ecx,DWORD [116+ebp]
xor eax,esi
xor edx,esi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor edi,DWORD [ebx*1+ebp]
mov bl,dl
xor edi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor edi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor edi,ebx
mov ebp,DWORD [32+esp]
;
; Round 15
mov eax,DWORD [36+esp]
mov edx,edi
shr edx,16
mov ecx,DWORD [40+esp]
xor edx,edi
and eax,edx
and edx,ecx
mov ebx,eax
shl ebx,16
mov ecx,edx
shl ecx,16
xor eax,ebx
xor edx,ecx
mov ebx,DWORD [120+ebp]
xor eax,ebx
mov ecx,DWORD [124+ebp]
xor eax,edi
xor edx,edi
xor edx,ecx
and eax,0xfcfcfcfc
xor ebx,ebx
and edx,0xcfcfcfcf
xor ecx,ecx
mov bl,al
mov cl,ah
ror edx,4
mov ebp,DWORD [4+esp]
xor esi,DWORD [ebx*1+ebp]
mov bl,dl
xor esi,DWORD [0x200+ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD [0x100+ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD [0x300+ecx*1+ebp]
mov cl,dh
and eax,0xff
and edx,0xff
mov ebx,DWORD [0x600+ebx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x700+ecx*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x400+eax*1+ebp]
xor esi,ebx
mov ebx,DWORD [0x500+edx*1+ebp]
xor esi,ebx
mov ebp,DWORD [32+esp]
mov ebx,DWORD [esp]
mov eax,edi
dec ebx
mov edi,esi
mov esi,eax
mov DWORD [esp],ebx
jnz NEAR L$000start
;
; FP
mov edx,DWORD [28+esp]
ror edi,1
mov eax,esi
xor esi,edi
and esi,0xaaaaaaaa
xor eax,esi
xor edi,esi
;
rol eax,23
mov esi,eax
xor eax,edi
and eax,0x03fc03fc
xor esi,eax
xor edi,eax
;
rol esi,10
mov eax,esi
xor esi,edi
and esi,0x33333333
xor eax,esi
xor edi,esi
;
rol edi,18
mov esi,edi
xor edi,eax
and edi,0xfff0000f
xor esi,edi
xor eax,edi
;
rol esi,12
mov edi,esi
xor esi,eax
and esi,0xf0f0f0f0
xor edi,esi
xor eax,esi
;
ror eax,4
mov DWORD [edx],eax
mov DWORD [4+edx],edi
add esp,8
pop edi
pop esi
pop ebx
pop ebp
ret