diff options
author | Adam Langley <agl@google.com> | 2015-05-11 17:20:37 -0700 |
---|---|---|
committer | Kenny Root <kroot@google.com> | 2015-05-12 23:06:14 +0000 |
commit | e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5 (patch) | |
tree | 6e43e34595ecf887c26c32b86d8ab097fe8cac64 /win-x86/crypto/rc4 | |
parent | b3106a0cc1493bbe0505c0ec0ce3da4ca90a29ae (diff) | |
download | external_boringssl-e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5.zip external_boringssl-e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5.tar.gz external_boringssl-e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5.tar.bz2 |
external/boringssl: bump revision.
This change bumps the BoringSSL revision to the current tip-of-tree.
Change-Id: I91d5bf467e16e8d86cb19a4de873985f524e5faa
Diffstat (limited to 'win-x86/crypto/rc4')
-rw-r--r-- | win-x86/crypto/rc4/rc4-586.asm | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/win-x86/crypto/rc4/rc4-586.asm b/win-x86/crypto/rc4/rc4-586.asm new file mode 100644 index 0000000..08cd9f6 --- /dev/null +++ b/win-x86/crypto/rc4/rc4-586.asm @@ -0,0 +1,382 @@ +%ifidn __OUTPUT_FORMAT__,obj +section code use32 class=code align=64 +%elifidn __OUTPUT_FORMAT__,win32 +%ifdef __YASM_VERSION_ID__ +%if __YASM_VERSION_ID__ < 01010000h +%error yasm version 1.1.0 or later needed. +%endif +; Yasm automatically includes .00 and complains about redefining it. +; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html +%else +$@feat.00 equ 1 +%endif +section .text code align=64 +%else +section .text code +%endif +;extern _OPENSSL_ia32cap_P +global _asm_RC4 +align 16 +_asm_RC4: +L$_asm_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 _asm_RC4_set_key +align 16 +_asm_RC4_set_key: +L$_asm_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 |