node/deps/openssl/asm/x86-win32-masm/rc5/rc5-586.asm
Ben Noordhuis 4fdb8acdae deps: downgrade openssl to v1.0.0f
Several people have reported issues with IIS and Resin servers (or maybe
SSL terminators sitting in front of those servers) that are fixed by
downgrading OpenSSL. The AESNI performance improvements were nice but
stability is more important. Downgrade OpenSSL from 1.0.1e to 1.0.0f.

Fixes #5360 (and others).
2013-04-29 12:12:33 +02:00

574 lines
9.5 KiB
NASM

TITLE rc5-586.asm
IF @Version LT 800
ECHO MASM version 8.00 or later is strongly recommended.
ENDIF
.586
.MODEL FLAT
OPTION DOTNAME
IF @Version LT 800
.text$ SEGMENT PAGE 'CODE'
ELSE
.text$ SEGMENT ALIGN(64) 'CODE'
ENDIF
ALIGN 16
_RC5_32_encrypt PROC PUBLIC
$L_RC5_32_encrypt_begin::
;
push ebp
push esi
push edi
mov edx,DWORD PTR 16[esp]
mov ebp,DWORD PTR 20[esp]
; Load the 2 words
mov edi,DWORD PTR [edx]
mov esi,DWORD PTR 4[edx]
push ebx
mov ebx,DWORD PTR [ebp]
add edi,DWORD PTR 4[ebp]
add esi,DWORD PTR 8[ebp]
xor edi,esi
mov eax,DWORD PTR 12[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 16[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 20[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 24[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 28[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 32[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 36[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 40[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 44[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 48[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 52[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 56[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 60[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 64[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 68[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 72[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
cmp ebx,8
je $L000rc5_exit
xor edi,esi
mov eax,DWORD PTR 76[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 80[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 84[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 88[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 92[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 96[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 100[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 104[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
cmp ebx,12
je $L000rc5_exit
xor edi,esi
mov eax,DWORD PTR 108[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 112[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 116[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 120[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 124[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 128[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
xor edi,esi
mov eax,DWORD PTR 132[ebp]
mov ecx,esi
rol edi,cl
add edi,eax
xor esi,edi
mov eax,DWORD PTR 136[ebp]
mov ecx,edi
rol esi,cl
add esi,eax
$L000rc5_exit:
mov DWORD PTR [edx],edi
mov DWORD PTR 4[edx],esi
pop ebx
pop edi
pop esi
pop ebp
ret
_RC5_32_encrypt ENDP
ALIGN 16
_RC5_32_decrypt PROC PUBLIC
$L_RC5_32_decrypt_begin::
;
push ebp
push esi
push edi
mov edx,DWORD PTR 16[esp]
mov ebp,DWORD PTR 20[esp]
; Load the 2 words
mov edi,DWORD PTR [edx]
mov esi,DWORD PTR 4[edx]
push ebx
mov ebx,DWORD PTR [ebp]
cmp ebx,12
je $L001rc5_dec_12
cmp ebx,8
je $L002rc5_dec_8
mov eax,DWORD PTR 136[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 132[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 128[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 124[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 120[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 116[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 112[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 108[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
$L001rc5_dec_12:
mov eax,DWORD PTR 104[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 100[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 96[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 92[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 88[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 84[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 80[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 76[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
$L002rc5_dec_8:
mov eax,DWORD PTR 72[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 68[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 64[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 60[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 56[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 52[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 48[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 44[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 40[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 36[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 32[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 28[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 24[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 20[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
mov eax,DWORD PTR 16[ebp]
sub esi,eax
mov ecx,edi
ror esi,cl
xor esi,edi
mov eax,DWORD PTR 12[ebp]
sub edi,eax
mov ecx,esi
ror edi,cl
xor edi,esi
sub esi,DWORD PTR 8[ebp]
sub edi,DWORD PTR 4[ebp]
$L003rc5_exit:
mov DWORD PTR [edx],edi
mov DWORD PTR 4[edx],esi
pop ebx
pop edi
pop esi
pop ebp
ret
_RC5_32_decrypt ENDP
ALIGN 16
_RC5_32_cbc_encrypt PROC PUBLIC
$L_RC5_32_cbc_encrypt_begin::
;
push ebp
push ebx
push esi
push edi
mov ebp,DWORD PTR 28[esp]
; getting iv ptr from parameter 4
mov ebx,DWORD PTR 36[esp]
mov esi,DWORD PTR [ebx]
mov edi,DWORD PTR 4[ebx]
push edi
push esi
push edi
push esi
mov ebx,esp
mov esi,DWORD PTR 36[esp]
mov edi,DWORD PTR 40[esp]
; getting encrypt flag from parameter 5
mov ecx,DWORD PTR 56[esp]
; get and push parameter 3
mov eax,DWORD PTR 48[esp]
push eax
push ebx
cmp ecx,0
jz $L004decrypt
and ebp,4294967288
mov eax,DWORD PTR 8[esp]
mov ebx,DWORD PTR 12[esp]
jz $L005encrypt_finish
$L006encrypt_loop:
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR 4[esi]
xor eax,ecx
xor ebx,edx
mov DWORD PTR 8[esp],eax
mov DWORD PTR 12[esp],ebx
call $L_RC5_32_encrypt_begin
mov eax,DWORD PTR 8[esp]
mov ebx,DWORD PTR 12[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
add esi,8
add edi,8
sub ebp,8
jnz $L006encrypt_loop
$L005encrypt_finish:
mov ebp,DWORD PTR 52[esp]
and ebp,7
jz $L007finish
call $L008PIC_point
$L008PIC_point:
pop edx
lea ecx,DWORD PTR ($L009cbc_enc_jmp_table-$L008PIC_point)[edx]
mov ebp,DWORD PTR [ebp*4+ecx]
add ebp,edx
xor ecx,ecx
xor edx,edx
jmp ebp
$L010ej7:
mov dh,BYTE PTR 6[esi]
shl edx,8
$L011ej6:
mov dh,BYTE PTR 5[esi]
$L012ej5:
mov dl,BYTE PTR 4[esi]
$L013ej4:
mov ecx,DWORD PTR [esi]
jmp $L014ejend
$L015ej3:
mov ch,BYTE PTR 2[esi]
shl ecx,8
$L016ej2:
mov ch,BYTE PTR 1[esi]
$L017ej1:
mov cl,BYTE PTR [esi]
$L014ejend:
xor eax,ecx
xor ebx,edx
mov DWORD PTR 8[esp],eax
mov DWORD PTR 12[esp],ebx
call $L_RC5_32_encrypt_begin
mov eax,DWORD PTR 8[esp]
mov ebx,DWORD PTR 12[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
jmp $L007finish
$L004decrypt:
and ebp,4294967288
mov eax,DWORD PTR 16[esp]
mov ebx,DWORD PTR 20[esp]
jz $L018decrypt_finish
$L019decrypt_loop:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR 8[esp],eax
mov DWORD PTR 12[esp],ebx
call $L_RC5_32_decrypt_begin
mov eax,DWORD PTR 8[esp]
mov ebx,DWORD PTR 12[esp]
mov ecx,DWORD PTR 16[esp]
mov edx,DWORD PTR 20[esp]
xor ecx,eax
xor edx,ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR [edi],ecx
mov DWORD PTR 4[edi],edx
mov DWORD PTR 16[esp],eax
mov DWORD PTR 20[esp],ebx
add esi,8
add edi,8
sub ebp,8
jnz $L019decrypt_loop
$L018decrypt_finish:
mov ebp,DWORD PTR 52[esp]
and ebp,7
jz $L007finish
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR 8[esp],eax
mov DWORD PTR 12[esp],ebx
call $L_RC5_32_decrypt_begin
mov eax,DWORD PTR 8[esp]
mov ebx,DWORD PTR 12[esp]
mov ecx,DWORD PTR 16[esp]
mov edx,DWORD PTR 20[esp]
xor ecx,eax
xor edx,ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
$L020dj7:
ror edx,16
mov BYTE PTR 6[edi],dl
shr edx,16
$L021dj6:
mov BYTE PTR 5[edi],dh
$L022dj5:
mov BYTE PTR 4[edi],dl
$L023dj4:
mov DWORD PTR [edi],ecx
jmp $L024djend
$L025dj3:
ror ecx,16
mov BYTE PTR 2[edi],cl
shl ecx,16
$L026dj2:
mov BYTE PTR 1[esi],ch
$L027dj1:
mov BYTE PTR [esi],cl
$L024djend:
jmp $L007finish
$L007finish:
mov ecx,DWORD PTR 60[esp]
add esp,24
mov DWORD PTR [ecx],eax
mov DWORD PTR 4[ecx],ebx
pop edi
pop esi
pop ebx
pop ebp
ret
ALIGN 64
$L009cbc_enc_jmp_table:
DD 0
DD $L017ej1-$L008PIC_point
DD $L016ej2-$L008PIC_point
DD $L015ej3-$L008PIC_point
DD $L013ej4-$L008PIC_point
DD $L012ej5-$L008PIC_point
DD $L011ej6-$L008PIC_point
DD $L010ej7-$L008PIC_point
ALIGN 64
_RC5_32_cbc_encrypt ENDP
.text$ ENDS
END