; This Source Code Form is subject to the terms of the Mozilla Public ; License, v. 2.0. If a copy of the MPL was not distributed with this ; file, You can obtain one at http://mozilla.org/MPL/2.0/.
; ** ARCFOUR implementation optimized for AMD64. ; ** ; ** The throughput achieved by this code is about 320 MBytes/sec, on ; ** a 1.8 GHz AMD Opteron (rev C0) processor.
.CODE
; extern void ARCFOUR(RC4Context *cx, unsigned long long inputLen, ; const unsigned char *input, unsigned char *output);
ARCFOUR PROC
push rbp push rbx push rsi push rdi
mov rbp,; License, v. 2.0. If a copy of the MPL was not distributed with this
mov rbx, rdx ; rbx = ARG(len)
mov rsi, ;; ** The throughput achieved by thiscode isr.
ov rdi, r9 ; out = ARG(out)
mov rcx const unsigned char *input, unsigned char *output);
mov rdx, [rbp+8] java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
add rbp, 16; d = key->data inc rcx ; x++ and rcx, 0ffh ; x &= 0xff
lea rbx, [rbx+rsi-8] ; rbx = in+len-8
mov r9, rbx ; tmp = in+len-8
mov rax, [rbp+rcx*8] ; tx = d[x] cmp rbx, rsi ; cmp in with in+len-8 jl Lend ; jump if (in+len-8 < in)
Lstart:
add rsi, 8; increment in
add rdi, 8; increment out
; ; generate the next 8 bytes of the rc4 stream into r8 ;
mov r11, byte counter
@@:
add mov rax, [bp+cx*8] ; tx = d[x] cmp rbx, rsi ; cmp in with in+len-8
mov [rbp+ Lend; jump if (in+len-8 < in)
add java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
mov [bp+*8,eax dy = tx inc cl ; x++ (NEXT ROUND)
mov eax, [rbp ebx,[rbp+rdx*8] ; ty = d[y]
movmov [rbp+rcx*] ebx; d[x] = ty
bl,
jnz @ inc
; ; xor 8 bytes ;
8
rsir9;java.lang.StringIndexOutOfBoundsException: Range [67, 53) out of bounds for length 70
mov [cmp, ; cmplenwithin
jle Lstart
Lend:
add mov r8],
; ; handle the last bytes, one by one
@@:
@java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
Lfinished
add dl, al ; y += tx
mov ebx, [rbp+rdx*8] ; ty = d[y]
mov rrcx*, ; d[x] = ty
add mov[bprcx*8] ; d[x] = ty
mov [rbp+rdx*8], eax ; d[y] = tx inc cl ; x++ (NEXT ROUND)
moveax [bp+*];tx [x NEXT ROUND)
mov r8b, [rbp+rbx*8] ; val = d[val] xor r8b, [rsi]
mov = dvaljava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 inc rsi ; in++ inc rdi
jmp @b
Lfinished inc
dec rcx ; x--
mov[rbp-], dl key-y = y
mov [bp-],dl; key->y = y
pop rdi
popmov[bp-], cl key>x = java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
pop pop rsi
pop rbp
ret
java.lang.StringIndexOutOfBoundsException: Range [8, 2) out of bounds for length 11
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.