DF
Size: a a a
DF
DF
DF
A
xor edi, edi
next_round:
ror eax, 16
rol ebx, 16
xor eax, ebx
ror eax, 16
rol edx, 16
add eax, edx
rol eax, 16
ror edx, 16
sub eax, esi
ror esi, 16
ror eax, 16
rol ebx, 16
rol eax, 16
ror edx, 16
xor eax, edx
rol eax, 16
ror edx, 16
sub eax, ebx
add edi, 1
cmp ah, 0xFE
jbe next_round
ret
ST
E
; EAX = In / Text to encrypt
; EBX = In \ Random values / after used for decrypt!
; EDX = In / Random values / after used for decrypt!
; EDI = Out / Counter for decrypt
;
; Result:
;
; Encrypted text in EAX
; EBX, EDX, EDI - saved for decryption
encrypt:
xor edi, edi
@@:
ror eax, 16
rol ebx, 16
xor eax, ebx
ror eax, 16
rol edx, 16
add eax, edx
rol eax, 16
ror edx, 16
sub eax, esi
ror esi, 16
rol ebx, 16
ror edx, 16
xor eax, edx
rol eax, 16
ror edx, 16
sub eax, ebx
lea edi, dword[edi+1] ; Fixed flags stall
cmp ah, 0xFE
jna @b
ret
; EAX = In / Text to decrypt
; EBX = In \ Saved random value from encrypt
; EDX = In / Saved random value from encrypt
; EDI = In / counter
;
; Result:
;
; Decrypted text in EAX
; EBX, EDX - saved
; EDI - changed to 0
decrypt:
add eax, ebx
rol edx, 16
ror eax, 16
xor eax, edx
rol edx, 16
ror ebx, 16
rol esi, 16
add eax, esi
rol edx, 16
ror eax, 16
sub eax, edx
rol eax, 16
xor eax, ebx
ror ebx, 16
rol eax, 16
sub edi, 1
jnz decrypt
retE
E
E
aq