mirror of
https://github.com/nodejs/node.git
synced 2025-05-19 08:07:23 +00:00

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).
574 lines
9.5 KiB
NASM
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
|