Import OpenSSL 1.0.2k (as of svn r86089)
This commit is contained in:
374
tmp32/rc4-586.asm
Normal file
374
tmp32/rc4-586.asm
Normal file
@@ -0,0 +1,374 @@
|
||||
%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 _OPENSSL_ia32cap_P
|
||||
global _RC4
|
||||
align 16
|
||||
_RC4:
|
||||
L$_RC4_begin:
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
mov edi,DWORD [20+esp]
|
||||
mov edx,DWORD [24+esp]
|
||||
mov esi,DWORD [28+esp]
|
||||
mov ebp,DWORD [32+esp]
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
cmp edx,0
|
||||
je NEAR L$000abort
|
||||
mov al,BYTE [edi]
|
||||
mov bl,BYTE [4+edi]
|
||||
add edi,8
|
||||
lea ecx,[edx*1+esi]
|
||||
sub ebp,esi
|
||||
mov DWORD [24+esp],ecx
|
||||
inc al
|
||||
cmp DWORD [256+edi],-1
|
||||
je NEAR L$001RC4_CHAR
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
and edx,-4
|
||||
jz NEAR L$002loop1
|
||||
mov DWORD [32+esp],ebp
|
||||
test edx,-8
|
||||
jz NEAR L$003go4loop4
|
||||
lea ebp,[_OPENSSL_ia32cap_P]
|
||||
bt DWORD [ebp],26
|
||||
jnc NEAR L$003go4loop4
|
||||
mov ebp,DWORD [32+esp]
|
||||
and edx,-8
|
||||
lea edx,[edx*1+esi-8]
|
||||
mov DWORD [edi-4],edx
|
||||
add bl,cl
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
movq mm0,[esi]
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm2,DWORD [edx*4+edi]
|
||||
jmp NEAR L$004loop_mmx_enter
|
||||
align 16
|
||||
L$005loop_mmx:
|
||||
add bl,cl
|
||||
psllq mm1,56
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm1
|
||||
movq mm0,[esi]
|
||||
movq [esi*1+ebp-8],mm2
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm2,DWORD [edx*4+edi]
|
||||
L$004loop_mmx_enter:
|
||||
add bl,cl
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm0
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm1,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
psllq mm1,8
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm1
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm1,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
psllq mm1,16
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm1
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm1,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
psllq mm1,24
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm1
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm1,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
psllq mm1,32
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm1
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm1,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
psllq mm1,40
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm1
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm1,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
psllq mm1,48
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
inc eax
|
||||
add edx,ecx
|
||||
movzx eax,al
|
||||
movzx edx,dl
|
||||
pxor mm2,mm1
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
movd mm1,DWORD [edx*4+edi]
|
||||
mov edx,ebx
|
||||
xor ebx,ebx
|
||||
mov bl,dl
|
||||
cmp esi,DWORD [edi-4]
|
||||
lea esi,[8+esi]
|
||||
jb NEAR L$005loop_mmx
|
||||
psllq mm1,56
|
||||
pxor mm2,mm1
|
||||
movq [esi*1+ebp-8],mm2
|
||||
emms
|
||||
cmp esi,DWORD [24+esp]
|
||||
je NEAR L$006done
|
||||
jmp NEAR L$002loop1
|
||||
align 16
|
||||
L$003go4loop4:
|
||||
lea edx,[edx*1+esi-4]
|
||||
mov DWORD [28+esp],edx
|
||||
L$007loop4:
|
||||
add bl,cl
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
add edx,ecx
|
||||
inc al
|
||||
and edx,255
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
mov ebp,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
add edx,ecx
|
||||
inc al
|
||||
and edx,255
|
||||
ror ebp,8
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
or ebp,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
add edx,ecx
|
||||
inc al
|
||||
and edx,255
|
||||
ror ebp,8
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
or ebp,DWORD [edx*4+edi]
|
||||
add bl,cl
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
add edx,ecx
|
||||
inc al
|
||||
and edx,255
|
||||
ror ebp,8
|
||||
mov ecx,DWORD [32+esp]
|
||||
or ebp,DWORD [edx*4+edi]
|
||||
ror ebp,8
|
||||
xor ebp,DWORD [esi]
|
||||
cmp esi,DWORD [28+esp]
|
||||
mov DWORD [esi*1+ecx],ebp
|
||||
lea esi,[4+esi]
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
jb NEAR L$007loop4
|
||||
cmp esi,DWORD [24+esp]
|
||||
je NEAR L$006done
|
||||
mov ebp,DWORD [32+esp]
|
||||
align 16
|
||||
L$002loop1:
|
||||
add bl,cl
|
||||
mov edx,DWORD [ebx*4+edi]
|
||||
mov DWORD [ebx*4+edi],ecx
|
||||
mov DWORD [eax*4+edi],edx
|
||||
add edx,ecx
|
||||
inc al
|
||||
and edx,255
|
||||
mov edx,DWORD [edx*4+edi]
|
||||
xor dl,BYTE [esi]
|
||||
lea esi,[1+esi]
|
||||
mov ecx,DWORD [eax*4+edi]
|
||||
cmp esi,DWORD [24+esp]
|
||||
mov BYTE [esi*1+ebp-1],dl
|
||||
jb NEAR L$002loop1
|
||||
jmp NEAR L$006done
|
||||
align 16
|
||||
L$001RC4_CHAR:
|
||||
movzx ecx,BYTE [eax*1+edi]
|
||||
L$008cloop1:
|
||||
add bl,cl
|
||||
movzx edx,BYTE [ebx*1+edi]
|
||||
mov BYTE [ebx*1+edi],cl
|
||||
mov BYTE [eax*1+edi],dl
|
||||
add dl,cl
|
||||
movzx edx,BYTE [edx*1+edi]
|
||||
add al,1
|
||||
xor dl,BYTE [esi]
|
||||
lea esi,[1+esi]
|
||||
movzx ecx,BYTE [eax*1+edi]
|
||||
cmp esi,DWORD [24+esp]
|
||||
mov BYTE [esi*1+ebp-1],dl
|
||||
jb NEAR L$008cloop1
|
||||
L$006done:
|
||||
dec al
|
||||
mov DWORD [edi-4],ebx
|
||||
mov BYTE [edi-8],al
|
||||
L$000abort:
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
ret
|
||||
global _private_RC4_set_key
|
||||
align 16
|
||||
_private_RC4_set_key:
|
||||
L$_private_RC4_set_key_begin:
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
mov edi,DWORD [20+esp]
|
||||
mov ebp,DWORD [24+esp]
|
||||
mov esi,DWORD [28+esp]
|
||||
lea edx,[_OPENSSL_ia32cap_P]
|
||||
lea edi,[8+edi]
|
||||
lea esi,[ebp*1+esi]
|
||||
neg ebp
|
||||
xor eax,eax
|
||||
mov DWORD [edi-4],ebp
|
||||
bt DWORD [edx],20
|
||||
jc NEAR L$009c1stloop
|
||||
align 16
|
||||
L$010w1stloop:
|
||||
mov DWORD [eax*4+edi],eax
|
||||
add al,1
|
||||
jnc NEAR L$010w1stloop
|
||||
xor ecx,ecx
|
||||
xor edx,edx
|
||||
align 16
|
||||
L$011w2ndloop:
|
||||
mov eax,DWORD [ecx*4+edi]
|
||||
add dl,BYTE [ebp*1+esi]
|
||||
add dl,al
|
||||
add ebp,1
|
||||
mov ebx,DWORD [edx*4+edi]
|
||||
jnz NEAR L$012wnowrap
|
||||
mov ebp,DWORD [edi-4]
|
||||
L$012wnowrap:
|
||||
mov DWORD [edx*4+edi],eax
|
||||
mov DWORD [ecx*4+edi],ebx
|
||||
add cl,1
|
||||
jnc NEAR L$011w2ndloop
|
||||
jmp NEAR L$013exit
|
||||
align 16
|
||||
L$009c1stloop:
|
||||
mov BYTE [eax*1+edi],al
|
||||
add al,1
|
||||
jnc NEAR L$009c1stloop
|
||||
xor ecx,ecx
|
||||
xor edx,edx
|
||||
xor ebx,ebx
|
||||
align 16
|
||||
L$014c2ndloop:
|
||||
mov al,BYTE [ecx*1+edi]
|
||||
add dl,BYTE [ebp*1+esi]
|
||||
add dl,al
|
||||
add ebp,1
|
||||
mov bl,BYTE [edx*1+edi]
|
||||
jnz NEAR L$015cnowrap
|
||||
mov ebp,DWORD [edi-4]
|
||||
L$015cnowrap:
|
||||
mov BYTE [edx*1+edi],al
|
||||
mov BYTE [ecx*1+edi],bl
|
||||
add cl,1
|
||||
jnc NEAR L$014c2ndloop
|
||||
mov DWORD [256+edi],-1
|
||||
L$013exit:
|
||||
xor eax,eax
|
||||
mov DWORD [edi-8],eax
|
||||
mov DWORD [edi-4],eax
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
ret
|
||||
global _RC4_options
|
||||
align 16
|
||||
_RC4_options:
|
||||
L$_RC4_options_begin:
|
||||
call L$016pic_point
|
||||
L$016pic_point:
|
||||
pop eax
|
||||
lea eax,[(L$017opts-L$016pic_point)+eax]
|
||||
lea edx,[_OPENSSL_ia32cap_P]
|
||||
mov edx,DWORD [edx]
|
||||
bt edx,20
|
||||
jc NEAR L$0181xchar
|
||||
bt edx,26
|
||||
jnc NEAR L$019ret
|
||||
add eax,25
|
||||
ret
|
||||
L$0181xchar:
|
||||
add eax,12
|
||||
L$019ret:
|
||||
ret
|
||||
align 64
|
||||
L$017opts:
|
||||
db 114,99,52,40,52,120,44,105,110,116,41,0
|
||||
db 114,99,52,40,49,120,44,99,104,97,114,41,0
|
||||
db 114,99,52,40,56,120,44,109,109,120,41,0
|
||||
db 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
|
||||
db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
|
||||
db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
|
||||
align 64
|
||||
segment .bss
|
||||
common _OPENSSL_ia32cap_P 16
|
||||
Reference in New Issue
Block a user