summaryrefslogtreecommitdiffstats
path: root/win-x86/crypto/rc4
diff options
context:
space:
mode:
authorAdam Langley <agl@google.com>2015-05-11 17:20:37 -0700
committerKenny Root <kroot@google.com>2015-05-12 23:06:14 +0000
commite9ada863a7b3e81f5d2b1e3bdd2305da902a87f5 (patch)
tree6e43e34595ecf887c26c32b86d8ab097fe8cac64 /win-x86/crypto/rc4
parentb3106a0cc1493bbe0505c0ec0ce3da4ca90a29ae (diff)
downloadexternal_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.asm382
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