mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
ADD: BLAKE2s implementation, optimized for speed on CPUs supporting SSE2
This commit is contained in:
parent
9554dffd81
commit
26aba8bdf3
4 changed files with 1205 additions and 257 deletions
81
components/dcpcrypt/Hashes/blake2_pas.inc
Normal file
81
components/dcpcrypt/Hashes/blake2_pas.inc
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
Implementations of BLAKE2b, BLAKE2s,
|
||||
aimed at portability and simplicity
|
||||
}
|
||||
|
||||
const blake2s_sigma: array[0..9] of array[0..15] of cuint8 =
|
||||
(
|
||||
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) ,
|
||||
( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ) ,
|
||||
( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 ) ,
|
||||
( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 ) ,
|
||||
( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 ) ,
|
||||
( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 ) ,
|
||||
( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 ) ,
|
||||
( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 ) ,
|
||||
( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 ) ,
|
||||
( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 )
|
||||
);
|
||||
|
||||
function blake2s_compress( S: Pblake2s_state; const block: pcuint8 ): cint;
|
||||
var
|
||||
i: csize_t;
|
||||
m: array[0..15] of cuint32;
|
||||
v: array[0..15] of cuint32;
|
||||
|
||||
procedure G(r,i: cuint32; var a,b,c,d: cuint32); inline;
|
||||
begin
|
||||
a := a + b + m[blake2s_sigma[r][2*i+0]];
|
||||
d := RorDWord(d xor a, 16);
|
||||
c := c + d;
|
||||
b := RorDWord(b xor c, 12);
|
||||
a := a + b + m[blake2s_sigma[r][2*i+1]];
|
||||
d := RorDWord(d xor a, 8);
|
||||
c := c + d;
|
||||
b := RorDWord(b xor c, 7);
|
||||
end;
|
||||
|
||||
{$define ROUND_MACRO:=
|
||||
G(r_,0,v[ 0],v[ 4],v[ 8],v[12]);
|
||||
G(r_,1,v[ 1],v[ 5],v[ 9],v[13]);
|
||||
G(r_,2,v[ 2],v[ 6],v[10],v[14]);
|
||||
G(r_,3,v[ 3],v[ 7],v[11],v[15]);
|
||||
G(r_,4,v[ 0],v[ 5],v[10],v[15]);
|
||||
G(r_,5,v[ 1],v[ 6],v[11],v[12]);
|
||||
G(r_,6,v[ 2],v[ 7],v[ 8],v[13]);
|
||||
G(r_,7,v[ 3],v[ 4],v[ 9],v[14]);
|
||||
}
|
||||
|
||||
begin
|
||||
for i := 0 to 15 do
|
||||
m[i] := load32( @block[i * sizeof( m[i] )] );
|
||||
|
||||
for i := 0 to 7 do
|
||||
v[i] := S^.h[i];
|
||||
|
||||
v[ 8] := blake2s_IV[0];
|
||||
v[ 9] := blake2s_IV[1];
|
||||
v[10] := blake2s_IV[2];
|
||||
v[11] := blake2s_IV[3];
|
||||
v[12] := S^.t[0] xor blake2s_IV[4];
|
||||
v[13] := S^.t[1] xor blake2s_IV[5];
|
||||
v[14] := S^.f[0] xor blake2s_IV[6];
|
||||
v[15] := S^.f[1] xor blake2s_IV[7];
|
||||
|
||||
{$define r_:= 0} ROUND_MACRO;
|
||||
{$define r_:= 1} ROUND_MACRO;
|
||||
{$define r_:= 2} ROUND_MACRO;
|
||||
{$define r_:= 3} ROUND_MACRO;
|
||||
{$define r_:= 4} ROUND_MACRO;
|
||||
{$define r_:= 5} ROUND_MACRO;
|
||||
{$define r_:= 6} ROUND_MACRO;
|
||||
{$define r_:= 7} ROUND_MACRO;
|
||||
{$define r_:= 8} ROUND_MACRO;
|
||||
{$define r_:= 9} ROUND_MACRO;
|
||||
|
||||
for i := 0 to 7 do
|
||||
S^.h[i] := S^.h[i] xor v[i] xor v[i + 8];
|
||||
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
937
components/dcpcrypt/Hashes/blake2_sse.inc
Normal file
937
components/dcpcrypt/Hashes/blake2_sse.inc
Normal file
|
|
@ -0,0 +1,937 @@
|
|||
{
|
||||
Implementations of BLAKE2b, BLAKE2s,
|
||||
optimized for speed on CPUs supporting SSE2
|
||||
}
|
||||
|
||||
const blake2s_IV_2: array[0..3] of cuint32 =
|
||||
(
|
||||
$510E527F, $9B05688C, $1F83D9AB, $5BE0CD19
|
||||
);
|
||||
|
||||
function blake2s_compress( S: Pblake2s_state; const block: pcuint8 ): cint; assembler; nostackframe;
|
||||
asm
|
||||
{$IF DEFINED(WINDOWS)}
|
||||
pushq %rdi
|
||||
pushq %rsi
|
||||
{$ELSE IF DEFINED(UNIX)}
|
||||
pushq %rcx
|
||||
movq %rdi, %rcx
|
||||
pushq %rdx
|
||||
movq %rsi, %rdx
|
||||
{$ENDIF}
|
||||
pushq %r15
|
||||
pushq %r14
|
||||
pushq %r12
|
||||
pushq %rbp
|
||||
pushq %rbx
|
||||
subq $208, %rsp
|
||||
movaps %xmm6, 48(%rsp)
|
||||
movaps %xmm7, 64(%rsp)
|
||||
movaps %xmm8, 80(%rsp)
|
||||
movaps %xmm9, 96(%rsp)
|
||||
movaps %xmm10, 112(%rsp)
|
||||
movaps %xmm11, 128(%rsp)
|
||||
movaps %xmm12, 144(%rsp)
|
||||
movaps %xmm13, 160(%rsp)
|
||||
movaps %xmm14, 176(%rsp)
|
||||
movaps %xmm15, 192(%rsp)
|
||||
movdqu blake2s_IV(%rip), %xmm5
|
||||
movdqu (%rcx), %xmm0
|
||||
movl 16(%rdx), %ebx
|
||||
movdqa %xmm0, %xmm14
|
||||
movdqu 16(%rcx), %xmm0
|
||||
movd (%rdx), %xmm4
|
||||
movdqa %xmm0, %xmm13
|
||||
movd 8(%rdx), %xmm1
|
||||
movaps %xmm14, (%rsp)
|
||||
movd 24(%rdx), %xmm7
|
||||
movdqa %xmm13, %xmm15
|
||||
paddd (%rsp), %xmm15
|
||||
movd %ebx, %xmm12
|
||||
movdqu 32(%rcx), %xmm2
|
||||
movdqa %xmm4, %xmm14
|
||||
movaps %xmm13, 16(%rsp)
|
||||
punpckldq %xmm7, %xmm12
|
||||
punpckldq %xmm1, %xmm14
|
||||
punpcklqdq %xmm12, %xmm14
|
||||
movdqu blake2s_IV_2(%rip), %xmm0
|
||||
paddd %xmm15, %xmm14
|
||||
movl 12(%rdx), %eax
|
||||
pxor %xmm2, %xmm0
|
||||
pxor %xmm14, %xmm0
|
||||
movdqa %xmm0, %xmm12
|
||||
movl 20(%rdx), %r9d
|
||||
pslld $16, %xmm12
|
||||
movd 4(%rdx), %xmm11
|
||||
movdqa %xmm13, %xmm2
|
||||
movdqa %xmm14, %xmm15
|
||||
psrld $16, %xmm0
|
||||
movd 28(%rdx), %xmm10
|
||||
pxor %xmm12, %xmm0
|
||||
paddd %xmm0, %xmm5
|
||||
movd %eax, %xmm13
|
||||
movdqa %xmm11, %xmm14
|
||||
pxor %xmm5, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
movl 56(%rdx), %edi
|
||||
pslld $20, %xmm12
|
||||
punpckldq %xmm13, %xmm14
|
||||
movdqa %xmm14, %xmm13
|
||||
movl 32(%rdx), %r11d
|
||||
pxor %xmm12, %xmm2
|
||||
movd %r9d, %xmm12
|
||||
paddd %xmm2, %xmm15
|
||||
movl 40(%rdx), %r10d
|
||||
punpckldq %xmm10, %xmm12
|
||||
punpcklqdq %xmm12, %xmm13
|
||||
paddd %xmm15, %xmm13
|
||||
movd 48(%rdx), %xmm6
|
||||
pxor %xmm13, %xmm0
|
||||
movdqa %xmm0, %xmm12
|
||||
movl 60(%rdx), %ebp
|
||||
psrld $8, %xmm0
|
||||
pslld $24, %xmm12
|
||||
movdqa %xmm6, %xmm15
|
||||
movd 36(%rdx), %xmm3
|
||||
pxor %xmm12, %xmm0
|
||||
paddd %xmm0, %xmm5
|
||||
movd 52(%rdx), %xmm9
|
||||
pshufd $147, %xmm0, %xmm0
|
||||
pxor %xmm5, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $7, %xmm2
|
||||
movd 44(%rdx), %xmm8
|
||||
pslld $25, %xmm12
|
||||
pshufd $78, %xmm5, %xmm5
|
||||
pxor %xmm12, %xmm2
|
||||
movd %edi, %xmm12
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpckldq %xmm12, %xmm15
|
||||
movd %r11d, %xmm12
|
||||
movq %xmm15, %rdx
|
||||
movd %r10d, %xmm15
|
||||
punpckldq %xmm15, %xmm12
|
||||
movq %rdx, %xmm15
|
||||
punpcklqdq %xmm15, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
movdqa %xmm9, %xmm15
|
||||
paddd %xmm13, %xmm12
|
||||
movd %ebx, %xmm13
|
||||
movdqa %xmm12, %xmm14
|
||||
pxor %xmm12, %xmm0
|
||||
movdqa %xmm0, %xmm12
|
||||
pslld $16, %xmm12
|
||||
psrld $16, %xmm0
|
||||
pxor %xmm12, %xmm0
|
||||
paddd %xmm0, %xmm5
|
||||
pxor %xmm5, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movd %ebp, %xmm12
|
||||
punpckldq %xmm12, %xmm15
|
||||
movdqa %xmm3, %xmm12
|
||||
punpckldq %xmm8, %xmm12
|
||||
punpcklqdq %xmm15, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
paddd %xmm14, %xmm12
|
||||
pxor %xmm12, %xmm0
|
||||
movdqa %xmm0, %xmm15
|
||||
psrld $8, %xmm0
|
||||
pslld $24, %xmm15
|
||||
pxor %xmm15, %xmm0
|
||||
paddd %xmm0, %xmm5
|
||||
pshufd $57, %xmm0, %xmm14
|
||||
movdqa %xmm3, %xmm0
|
||||
pxor %xmm5, %xmm2
|
||||
movdqa %xmm2, %xmm15
|
||||
psrld $7, %xmm2
|
||||
punpckldq %xmm9, %xmm0
|
||||
pslld $25, %xmm15
|
||||
pshufd $78, %xmm5, %xmm5
|
||||
pxor %xmm15, %xmm2
|
||||
movd %edi, %xmm15
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
punpckldq %xmm13, %xmm15
|
||||
movdqa %xmm15, %xmm13
|
||||
movq %xmm15, %r14
|
||||
punpcklqdq %xmm0, %xmm13
|
||||
movdqa %xmm13, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
paddd %xmm0, %xmm12
|
||||
movdqa %xmm14, %xmm0
|
||||
pxor %xmm12, %xmm0
|
||||
movdqa %xmm0, %xmm15
|
||||
pslld $16, %xmm15
|
||||
movdqa %xmm15, %xmm13
|
||||
movdqa %xmm0, %xmm15
|
||||
psrld $16, %xmm15
|
||||
movdqa %xmm15, %xmm14
|
||||
movd %r10d, %xmm15
|
||||
pxor %xmm13, %xmm14
|
||||
paddd %xmm14, %xmm5
|
||||
movd %r11d, %xmm13
|
||||
pxor %xmm5, %xmm2
|
||||
movdqa %xmm2, %xmm0
|
||||
psrld $12, %xmm2
|
||||
punpckldq %xmm13, %xmm15
|
||||
pslld $20, %xmm0
|
||||
movq %xmm15, %rsi
|
||||
pxor %xmm0, %xmm2
|
||||
movd %ebp, %xmm0
|
||||
punpckldq %xmm7, %xmm0
|
||||
punpcklqdq %xmm0, %xmm15
|
||||
movdqa %xmm15, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
paddd %xmm0, %xmm12
|
||||
pxor %xmm12, %xmm14
|
||||
movdqa %xmm14, %xmm15
|
||||
psrld $8, %xmm14
|
||||
pslld $24, %xmm15
|
||||
pxor %xmm15, %xmm14
|
||||
paddd %xmm14, %xmm5
|
||||
pshufd $147, %xmm14, %xmm14
|
||||
pxor %xmm5, %xmm2
|
||||
movdqa %xmm2, %xmm0
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm5, %xmm15
|
||||
pslld $25, %xmm0
|
||||
movdqa %xmm8, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movd %r9d, %xmm0
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpckldq %xmm0, %xmm5
|
||||
movdqa %xmm11, %xmm0
|
||||
punpckldq %xmm4, %xmm0
|
||||
punpcklqdq %xmm5, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
paddd %xmm12, %xmm0
|
||||
pxor %xmm0, %xmm14
|
||||
movdqa %xmm14, %xmm12
|
||||
psrld $16, %xmm14
|
||||
pslld $16, %xmm12
|
||||
movdqa %xmm14, %xmm5
|
||||
movdqa %xmm10, %xmm14
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movd %eax, %xmm12
|
||||
punpckldq %xmm12, %xmm14
|
||||
movq %xmm14, %r8
|
||||
movdqa %xmm14, %xmm13
|
||||
movdqa %xmm6, %xmm14
|
||||
punpckldq %xmm1, %xmm14
|
||||
punpcklqdq %xmm13, %xmm14
|
||||
paddd %xmm2, %xmm14
|
||||
movdqa %xmm8, %xmm13
|
||||
paddd %xmm0, %xmm14
|
||||
punpckldq %xmm6, %xmm13
|
||||
pxor %xmm14, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm15, %xmm0
|
||||
pslld $25, %xmm12
|
||||
movd %r9d, %xmm15
|
||||
pxor %xmm12, %xmm2
|
||||
movd %ebp, %xmm12
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
punpckldq %xmm12, %xmm15
|
||||
punpcklqdq %xmm15, %xmm13
|
||||
paddd %xmm2, %xmm13
|
||||
movq %xmm15, %r15
|
||||
paddd %xmm14, %xmm13
|
||||
movdqa %xmm1, %xmm14
|
||||
movd %eax, %xmm15
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
punpckldq %xmm9, %xmm14
|
||||
pslld $16, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movd %r11d, %xmm12
|
||||
punpckldq %xmm4, %xmm12
|
||||
punpcklqdq %xmm14, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
movdqa %xmm10, %xmm14
|
||||
paddd %xmm12, %xmm13
|
||||
punpckldq %xmm3, %xmm14
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
pslld $25, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movd %r10d, %xmm12
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpckldq %xmm15, %xmm12
|
||||
punpcklqdq %xmm14, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
movdqa %xmm11, %xmm14
|
||||
paddd %xmm13, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm15
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm15
|
||||
pxor %xmm15, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm15
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movd %ebx, %xmm15
|
||||
punpckldq %xmm15, %xmm14
|
||||
movd %edi, %xmm15
|
||||
punpckldq %xmm7, %xmm15
|
||||
movdqa %xmm15, %xmm13
|
||||
punpcklqdq %xmm14, %xmm13
|
||||
paddd %xmm2, %xmm13
|
||||
movq %r8, %xmm14
|
||||
paddd %xmm13, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm15
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm15
|
||||
pxor %xmm15, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm15
|
||||
psrld $7, %xmm2
|
||||
pslld $25, %xmm15
|
||||
movdqa %xmm15, %xmm13
|
||||
pshufd $78, %xmm0, %xmm15
|
||||
movdqa %xmm9, %xmm0
|
||||
punpckldq %xmm8, %xmm0
|
||||
punpcklqdq %xmm0, %xmm14
|
||||
movdqa %xmm14, %xmm0
|
||||
pxor %xmm13, %xmm2
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
paddd %xmm2, %xmm0
|
||||
movq %rdx, %xmm14
|
||||
paddd %xmm0, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm0
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm3, %xmm0
|
||||
punpckldq %xmm11, %xmm0
|
||||
punpcklqdq %xmm14, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
movd %ebx, %xmm14
|
||||
paddd %xmm0, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
movdqa %xmm15, %xmm0
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm15
|
||||
pslld $25, %xmm15
|
||||
movdqa %xmm15, %xmm13
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm15
|
||||
movd %ebp, %xmm0
|
||||
punpckldq %xmm0, %xmm14
|
||||
pxor %xmm13, %xmm2
|
||||
movdqa %xmm1, %xmm0
|
||||
movd %r9d, %xmm13
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpckldq %xmm13, %xmm0
|
||||
punpcklqdq %xmm14, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
paddd %xmm12, %xmm0
|
||||
movd %r11d, %xmm13
|
||||
pxor %xmm0, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm4, %xmm12
|
||||
punpckldq %xmm13, %xmm12
|
||||
movdqa %xmm7, %xmm13
|
||||
movq %xmm12, %rdx
|
||||
movd %r10d, %xmm12
|
||||
punpckldq %xmm12, %xmm13
|
||||
movq %xmm13, %r12
|
||||
movdqa %xmm13, %xmm12
|
||||
movq %rdx, %xmm13
|
||||
punpcklqdq %xmm13, %xmm12
|
||||
movdqa %xmm12, %xmm13
|
||||
paddd %xmm2, %xmm13
|
||||
movdqa %xmm13, %xmm12
|
||||
movd %r10d, %xmm13
|
||||
paddd %xmm0, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
movaps %xmm5, 32(%rsp)
|
||||
movdqa %xmm15, %xmm0
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm15
|
||||
movd %r9d, %xmm5
|
||||
pslld $25, %xmm15
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
psrld $7, %xmm2
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm1, %xmm15
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
punpckldq %xmm13, %xmm15
|
||||
movdqa %xmm3, %xmm13
|
||||
punpckldq %xmm5, %xmm13
|
||||
movdqa 32(%rsp), %xmm5
|
||||
punpcklqdq %xmm15, %xmm13
|
||||
paddd %xmm2, %xmm13
|
||||
paddd %xmm12, %xmm13
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm4, %xmm12
|
||||
punpckldq %xmm10, %xmm12
|
||||
punpcklqdq %xmm14, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
movdqa %xmm7, %xmm14
|
||||
paddd %xmm12, %xmm13
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm15
|
||||
pslld $25, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movd %eax, %xmm12
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpckldq %xmm12, %xmm14
|
||||
movd %edi, %xmm12
|
||||
punpckldq %xmm8, %xmm12
|
||||
punpcklqdq %xmm14, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
movd %r11d, %xmm14
|
||||
paddd %xmm13, %xmm12
|
||||
punpckldq %xmm9, %xmm14
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm0
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm11, %xmm0
|
||||
punpckldq %xmm6, %xmm0
|
||||
punpcklqdq %xmm14, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
movq %rdx, %xmm14
|
||||
paddd %xmm0, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
movdqa %xmm15, %xmm0
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm15
|
||||
pslld $25, %xmm15
|
||||
movdqa %xmm15, %xmm13
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm15
|
||||
movdqa %xmm1, %xmm0
|
||||
pxor %xmm13, %xmm2
|
||||
punpckldq %xmm7, %xmm0
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
punpcklqdq %xmm14, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
movd %eax, %xmm14
|
||||
movd %r10d, %xmm13
|
||||
paddd %xmm12, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm8, %xmm12
|
||||
punpckldq %xmm14, %xmm12
|
||||
movdqa %xmm6, %xmm14
|
||||
punpckldq %xmm13, %xmm14
|
||||
punpcklqdq %xmm12, %xmm14
|
||||
paddd %xmm2, %xmm14
|
||||
movd %ebx, %xmm13
|
||||
paddd %xmm0, %xmm14
|
||||
punpckldq %xmm10, %xmm13
|
||||
pxor %xmm14, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
pshufd $78, %xmm15, %xmm0
|
||||
psrld $7, %xmm2
|
||||
pslld $25, %xmm12
|
||||
movd %ebp, %xmm15
|
||||
punpckldq %xmm11, %xmm15
|
||||
pxor %xmm12, %xmm2
|
||||
punpcklqdq %xmm15, %xmm13
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
paddd %xmm2, %xmm13
|
||||
movd %r9d, %xmm15
|
||||
paddd %xmm14, %xmm13
|
||||
movd %edi, %xmm14
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
punpckldq %xmm3, %xmm14
|
||||
pslld $16, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm9, %xmm12
|
||||
punpckldq %xmm15, %xmm12
|
||||
punpcklqdq %xmm14, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
movd %r10d, %xmm14
|
||||
paddd %xmm12, %xmm13
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm15
|
||||
pslld $25, %xmm12
|
||||
movq %r14, %xmm0
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm6, %xmm12
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
punpckldq %xmm11, %xmm12
|
||||
punpcklqdq %xmm0, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
paddd %xmm13, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm0
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm9, %xmm0
|
||||
punpckldq %xmm14, %xmm0
|
||||
movq %r15, %xmm14
|
||||
punpcklqdq %xmm0, %xmm14
|
||||
movdqa %xmm14, %xmm0
|
||||
movdqa %xmm3, %xmm14
|
||||
paddd %xmm2, %xmm0
|
||||
paddd %xmm0, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
movdqa %xmm15, %xmm0
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm15
|
||||
pslld $25, %xmm15
|
||||
movdqa %xmm15, %xmm13
|
||||
pshufd $78, %xmm0, %xmm15
|
||||
movd %r11d, %xmm0
|
||||
punpckldq %xmm0, %xmm14
|
||||
psrld $7, %xmm2
|
||||
movdqa %xmm4, %xmm0
|
||||
pxor %xmm13, %xmm2
|
||||
punpckldq %xmm7, %xmm0
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpcklqdq %xmm14, %xmm0
|
||||
paddd %xmm2, %xmm0
|
||||
movq %r8, %xmm13
|
||||
paddd %xmm12, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm1, %xmm12
|
||||
punpckldq %xmm8, %xmm12
|
||||
punpcklqdq %xmm12, %xmm13
|
||||
paddd %xmm2, %xmm13
|
||||
movdqa %xmm13, %xmm14
|
||||
movdqa %xmm9, %xmm13
|
||||
paddd %xmm0, %xmm14
|
||||
punpckldq %xmm10, %xmm13
|
||||
pxor %xmm14, %xmm5
|
||||
movdqa %xmm5, %xmm0
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm0
|
||||
pxor %xmm0, %xmm5
|
||||
paddd %xmm5, %xmm15
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
pxor %xmm15, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm15, %xmm0
|
||||
pslld $25, %xmm12
|
||||
movdqa %xmm6, %xmm15
|
||||
pxor %xmm12, %xmm2
|
||||
movd %eax, %xmm12
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
punpckldq %xmm12, %xmm15
|
||||
punpcklqdq %xmm15, %xmm13
|
||||
paddd %xmm2, %xmm13
|
||||
movd %edi, %xmm15
|
||||
paddd %xmm14, %xmm13
|
||||
movdqa %xmm8, %xmm14
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
punpckldq %xmm15, %xmm14
|
||||
pslld $16, %xmm12
|
||||
movdqa %xmm14, %xmm15
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm11, %xmm12
|
||||
punpckldq %xmm3, %xmm12
|
||||
punpcklqdq %xmm12, %xmm15
|
||||
movdqa %xmm15, %xmm12
|
||||
movq %r15, %xmm15
|
||||
paddd %xmm2, %xmm12
|
||||
paddd %xmm12, %xmm13
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
pslld $25, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movd %r11d, %xmm12
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpckldq %xmm1, %xmm12
|
||||
punpcklqdq %xmm12, %xmm15
|
||||
movdqa %xmm15, %xmm12
|
||||
movd %ebx, %xmm15
|
||||
paddd %xmm2, %xmm12
|
||||
paddd %xmm12, %xmm13
|
||||
pxor %xmm13, %xmm5
|
||||
movdqa %xmm5, %xmm12
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm12
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm4, %xmm12
|
||||
punpckldq %xmm15, %xmm12
|
||||
movq %r12, %xmm15
|
||||
punpcklqdq %xmm15, %xmm12
|
||||
paddd %xmm2, %xmm12
|
||||
paddd %xmm13, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm15
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm15
|
||||
pxor %xmm15, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
movdqa %xmm8, %xmm15
|
||||
movdqa %xmm7, %xmm8
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm13
|
||||
psrld $7, %xmm2
|
||||
punpckldq %xmm4, %xmm15
|
||||
pslld $25, %xmm13
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
pxor %xmm13, %xmm2
|
||||
movdqa %xmm15, %xmm13
|
||||
movd %edi, %xmm15
|
||||
pshufd $147, %xmm2, %xmm2
|
||||
punpckldq %xmm15, %xmm8
|
||||
punpcklqdq %xmm13, %xmm8
|
||||
paddd %xmm2, %xmm8
|
||||
movd %r11d, %xmm15
|
||||
paddd %xmm8, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm8
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm8
|
||||
pxor %xmm8, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm8
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm8
|
||||
pxor %xmm8, %xmm2
|
||||
movd %eax, %xmm8
|
||||
punpckldq %xmm15, %xmm8
|
||||
movd %ebp, %xmm15
|
||||
punpckldq %xmm3, %xmm15
|
||||
movdqa %xmm15, %xmm3
|
||||
punpcklqdq %xmm8, %xmm3
|
||||
movdqa %xmm3, %xmm8
|
||||
movdqa %xmm11, %xmm3
|
||||
paddd %xmm2, %xmm8
|
||||
paddd %xmm8, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm8
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm8
|
||||
pxor %xmm8, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm8
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
pslld $25, %xmm8
|
||||
pxor %xmm8, %xmm2
|
||||
movd %r10d, %xmm8
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
punpckldq %xmm8, %xmm3
|
||||
movdqa %xmm6, %xmm8
|
||||
punpckldq %xmm4, %xmm6
|
||||
punpcklqdq %xmm6, %xmm14
|
||||
punpckldq %xmm9, %xmm8
|
||||
punpcklqdq %xmm3, %xmm8
|
||||
paddd %xmm2, %xmm8
|
||||
movdqa (%rsp), %xmm4
|
||||
paddd %xmm8, %xmm12
|
||||
movaps 48(%rsp), %xmm6
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm8
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm8
|
||||
pxor %xmm8, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
movd %r9d, %xmm8
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm3
|
||||
psrld $12, %xmm2
|
||||
pslld $20, %xmm3
|
||||
pxor %xmm3, %xmm2
|
||||
movd %ebx, %xmm3
|
||||
punpckldq %xmm8, %xmm3
|
||||
movdqa %xmm1, %xmm8
|
||||
punpckldq %xmm10, %xmm8
|
||||
punpcklqdq %xmm3, %xmm8
|
||||
paddd %xmm2, %xmm8
|
||||
punpckldq %xmm11, %xmm10
|
||||
paddd %xmm8, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm8
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm8
|
||||
pxor %xmm8, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $57, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm2
|
||||
movdqa %xmm2, %xmm3
|
||||
psrld $7, %xmm2
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
pslld $25, %xmm3
|
||||
movdqa %xmm3, %xmm13
|
||||
movd %r9d, %xmm3
|
||||
pxor %xmm2, %xmm13
|
||||
movq %rsi, %xmm2
|
||||
pshufd $147, %xmm13, %xmm13
|
||||
punpckldq %xmm3, %xmm7
|
||||
punpcklqdq %xmm10, %xmm2
|
||||
paddd %xmm13, %xmm2
|
||||
movd %ebx, %xmm3
|
||||
paddd %xmm2, %xmm12
|
||||
punpckldq %xmm3, %xmm1
|
||||
punpcklqdq %xmm7, %xmm1
|
||||
movdqa 16(%rsp), %xmm3
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm2
|
||||
psrld $16, %xmm5
|
||||
movaps 64(%rsp), %xmm7
|
||||
pslld $16, %xmm2
|
||||
pxor %xmm2, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pxor %xmm0, %xmm13
|
||||
movdqa %xmm13, %xmm8
|
||||
psrld $12, %xmm13
|
||||
pslld $20, %xmm8
|
||||
pxor %xmm8, %xmm13
|
||||
paddd %xmm13, %xmm1
|
||||
paddd %xmm1, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm1
|
||||
psrld $8, %xmm5
|
||||
pslld $24, %xmm1
|
||||
pxor %xmm1, %xmm5
|
||||
paddd %xmm5, %xmm0
|
||||
pshufd $147, %xmm5, %xmm5
|
||||
pxor %xmm0, %xmm13
|
||||
movdqa %xmm13, %xmm1
|
||||
psrld $7, %xmm13
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
pslld $25, %xmm1
|
||||
pxor %xmm1, %xmm13
|
||||
movd %eax, %xmm1
|
||||
pshufd $57, %xmm13, %xmm13
|
||||
punpckldq %xmm9, %xmm1
|
||||
punpcklqdq %xmm1, %xmm15
|
||||
paddd %xmm13, %xmm15
|
||||
paddd %xmm15, %xmm12
|
||||
pxor %xmm12, %xmm5
|
||||
movdqa %xmm5, %xmm2
|
||||
psrld $16, %xmm5
|
||||
pslld $16, %xmm2
|
||||
pxor %xmm5, %xmm2
|
||||
paddd %xmm2, %xmm0
|
||||
pxor %xmm0, %xmm13
|
||||
movdqa %xmm13, %xmm1
|
||||
psrld $12, %xmm13
|
||||
pslld $20, %xmm1
|
||||
pxor %xmm1, %xmm13
|
||||
paddd %xmm13, %xmm14
|
||||
movdqa %xmm13, %xmm1
|
||||
paddd %xmm14, %xmm12
|
||||
pxor %xmm12, %xmm2
|
||||
movdqa %xmm2, %xmm5
|
||||
psrld $8, %xmm2
|
||||
pslld $24, %xmm5
|
||||
pxor %xmm5, %xmm2
|
||||
paddd %xmm2, %xmm0
|
||||
pshufd $57, %xmm2, %xmm2
|
||||
pxor %xmm0, %xmm1
|
||||
movdqa %xmm1, %xmm5
|
||||
psrld $7, %xmm1
|
||||
pshufd $78, %xmm0, %xmm0
|
||||
pslld $25, %xmm5
|
||||
pxor %xmm0, %xmm4
|
||||
pxor %xmm12, %xmm4
|
||||
movups %xmm4, (%rcx)
|
||||
pxor %xmm5, %xmm1
|
||||
pshufd $147, %xmm1, %xmm1
|
||||
pxor %xmm1, %xmm3
|
||||
pxor %xmm2, %xmm3
|
||||
movups %xmm3, 16(%rcx)
|
||||
movaps 80(%rsp), %xmm8
|
||||
movaps 96(%rsp), %xmm9
|
||||
movaps 112(%rsp), %xmm10
|
||||
movaps 128(%rsp), %xmm11
|
||||
movaps 144(%rsp), %xmm12
|
||||
movaps 160(%rsp), %xmm13
|
||||
movaps 176(%rsp), %xmm14
|
||||
movaps 192(%rsp), %xmm15
|
||||
addq $208, %rsp
|
||||
popq %rbx
|
||||
popq %rbp
|
||||
popq %r12
|
||||
popq %r14
|
||||
popq %r15
|
||||
{$IF DEFINED(WINDOWS)}
|
||||
popq %rsi
|
||||
popq %rdi
|
||||
{$ELSE IF DEFINED(UNIX)}
|
||||
popq %rdx
|
||||
popq %rcx
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
|
|
@ -94,20 +94,6 @@ const blake2s_IV: array[0..7] of cuint32 =
|
|||
$510E527F, $9B05688C, $1F83D9AB, $5BE0CD19
|
||||
);
|
||||
|
||||
const blake2s_sigma: array[0..9] of array[0..15] of cuint8 =
|
||||
(
|
||||
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) ,
|
||||
( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ) ,
|
||||
( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 ) ,
|
||||
( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 ) ,
|
||||
( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 ) ,
|
||||
( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 ) ,
|
||||
( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 ) ,
|
||||
( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 ) ,
|
||||
( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 ) ,
|
||||
( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 )
|
||||
);
|
||||
|
||||
function load32( const src: Pointer ): cuint32; inline;
|
||||
begin
|
||||
Result := NtoLE(pcuint32(src)^);
|
||||
|
|
@ -242,67 +228,11 @@ begin
|
|||
Result := blake2s_init_param( S, @P );
|
||||
end;
|
||||
|
||||
function blake2s_compress( S: Pblake2s_state; const block: pcuint8 ): cint;
|
||||
var
|
||||
i: csize_t;
|
||||
m: array[0..15] of cuint32;
|
||||
v: array[0..15] of cuint32;
|
||||
|
||||
procedure G(r,i: cuint32; var a,b,c,d: cuint32); inline;
|
||||
begin
|
||||
a := a + b + m[blake2s_sigma[r][2*i+0]];
|
||||
d := RorDWord(d xor a, 16);
|
||||
c := c + d;
|
||||
b := RorDWord(b xor c, 12);
|
||||
a := a + b + m[blake2s_sigma[r][2*i+1]];
|
||||
d := RorDWord(d xor a, 8);
|
||||
c := c + d;
|
||||
b := RorDWord(b xor c, 7);
|
||||
end;
|
||||
|
||||
{$define ROUND_MACRO:=
|
||||
G(r_,0,v[ 0],v[ 4],v[ 8],v[12]);
|
||||
G(r_,1,v[ 1],v[ 5],v[ 9],v[13]);
|
||||
G(r_,2,v[ 2],v[ 6],v[10],v[14]);
|
||||
G(r_,3,v[ 3],v[ 7],v[11],v[15]);
|
||||
G(r_,4,v[ 0],v[ 5],v[10],v[15]);
|
||||
G(r_,5,v[ 1],v[ 6],v[11],v[12]);
|
||||
G(r_,6,v[ 2],v[ 7],v[ 8],v[13]);
|
||||
G(r_,7,v[ 3],v[ 4],v[ 9],v[14]);
|
||||
}
|
||||
|
||||
begin
|
||||
for i := 0 to 15 do
|
||||
m[i] := load32( @block[i * sizeof( m[i] )] );
|
||||
|
||||
for i := 0 to 7 do
|
||||
v[i] := S^.h[i];
|
||||
|
||||
v[ 8] := blake2s_IV[0];
|
||||
v[ 9] := blake2s_IV[1];
|
||||
v[10] := blake2s_IV[2];
|
||||
v[11] := blake2s_IV[3];
|
||||
v[12] := S^.t[0] xor blake2s_IV[4];
|
||||
v[13] := S^.t[1] xor blake2s_IV[5];
|
||||
v[14] := S^.f[0] xor blake2s_IV[6];
|
||||
v[15] := S^.f[1] xor blake2s_IV[7];
|
||||
|
||||
{$define r_:= 0} ROUND_MACRO;
|
||||
{$define r_:= 1} ROUND_MACRO;
|
||||
{$define r_:= 2} ROUND_MACRO;
|
||||
{$define r_:= 3} ROUND_MACRO;
|
||||
{$define r_:= 4} ROUND_MACRO;
|
||||
{$define r_:= 5} ROUND_MACRO;
|
||||
{$define r_:= 6} ROUND_MACRO;
|
||||
{$define r_:= 7} ROUND_MACRO;
|
||||
{$define r_:= 8} ROUND_MACRO;
|
||||
{$define r_:= 9} ROUND_MACRO;
|
||||
|
||||
for i := 0 to 7 do
|
||||
S^.h[i] := S^.h[i] xor v[i] xor v[i + 8];
|
||||
|
||||
Result := 0;
|
||||
end;
|
||||
{$IF DEFINED(CPUX86_64)}
|
||||
{$include blake2_sse.inc}
|
||||
{$ELSE}
|
||||
{$include blake2_pas.inc}
|
||||
{$ENDIF}
|
||||
|
||||
function blake2s_update( S: Pblake2s_state; inp: pcuint8; inlen: cuint64 ): cint;
|
||||
var
|
||||
|
|
|
|||
|
|
@ -1,185 +1,185 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<Package Version="4">
|
||||
<Name Value="dcpcrypt"/>
|
||||
<Author Value="David Barton, Barko & Graeme Geldenhuys"/>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="Hashes/Keccak;Ciphers"/>
|
||||
<OtherUnitFiles Value="Ciphers;Hashes;Hashes/Keccak;Random;$(PkgOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<SyntaxMode Value="Delphi"/>
|
||||
<CStyleOperator Value="False"/>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
<AllowLabel Value="False"/>
|
||||
<CPPInline Value="False"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="2"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CustomOptions Value="-Xd"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<Package Version="4">
|
||||
<Name Value="dcpcrypt"/>
|
||||
<Author Value="David Barton, Barko & Graeme Geldenhuys"/>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="Hashes/Keccak;Ciphers"/>
|
||||
<OtherUnitFiles Value="Ciphers;Hashes;Hashes/Keccak;Random;$(PkgOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<SyntaxMode Value="Delphi"/>
|
||||
<CStyleOperator Value="False"/>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
<AllowLabel Value="False"/>
|
||||
<CPPInline Value="False"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="2"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CustomOptions Value="-Xd"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Description Value="DCPcrypt Cryptographic Component Library
|
||||
"/>
|
||||
"/>
|
||||
<License Value="DCPcrypt is open source software (released under the MIT license) and as such there is no charge for inclusion in other software.
|
||||
www.cityinthesky.co.uk/cryptography.html
|
||||
"/>
|
||||
<Version Major="2" Minor="1"/>
|
||||
<Files Count="31">
|
||||
<Item1>
|
||||
<Filename Value="dcpbase64.pas"/>
|
||||
<UnitName Value="DCPbase64"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Filename Value="dcpblockciphers.pas"/>
|
||||
<UnitName Value="DCPblockciphers"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Filename Value="dcpconst.pas"/>
|
||||
<UnitName Value="DCPconst"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<Filename Value="dcpcrypt2.pas"/>
|
||||
<UnitName Value="DCPcrypt2"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<Filename Value="Hashes/dcphaval.pas"/>
|
||||
<UnitName Value="DCPhaval"/>
|
||||
</Item5>
|
||||
<Item6>
|
||||
<Filename Value="Hashes/dcpmd4.pas"/>
|
||||
<UnitName Value="DCPmd4"/>
|
||||
</Item6>
|
||||
<Item7>
|
||||
<Filename Value="Hashes/dcpmd5.pas"/>
|
||||
<UnitName Value="DCPmd5"/>
|
||||
</Item7>
|
||||
<Item8>
|
||||
<Filename Value="Hashes/dcpripemd128.pas"/>
|
||||
<UnitName Value="DCPripemd128"/>
|
||||
</Item8>
|
||||
<Item9>
|
||||
<Filename Value="Hashes/dcpripemd160.pas"/>
|
||||
<UnitName Value="DCPripemd160"/>
|
||||
</Item9>
|
||||
<Item10>
|
||||
<Filename Value="Hashes/dcpsha1.pas"/>
|
||||
<UnitName Value="DCPsha1"/>
|
||||
</Item10>
|
||||
<Item11>
|
||||
<Filename Value="Hashes/dcpsha256.pas"/>
|
||||
<UnitName Value="DCPsha256"/>
|
||||
</Item11>
|
||||
<Item12>
|
||||
<Filename Value="Hashes/dcpsha512.pas"/>
|
||||
<UnitName Value="DCPsha512"/>
|
||||
</Item12>
|
||||
<Item13>
|
||||
<Filename Value="Hashes/dcptiger.pas"/>
|
||||
<UnitName Value="DCPtiger"/>
|
||||
</Item13>
|
||||
<Item14>
|
||||
<Filename Value="Hashes/DCPhaval3.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item14>
|
||||
<Item15>
|
||||
<Filename Value="Hashes/DCPhaval4.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item15>
|
||||
<Item16>
|
||||
<Filename Value="Hashes/DCPhaval5.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item16>
|
||||
<Item17>
|
||||
<Filename Value="Hashes/dcpcrc32.pas"/>
|
||||
<UnitName Value="DCPcrc32"/>
|
||||
</Item17>
|
||||
<Item18>
|
||||
<Filename Value="Hashes/DCPtiger.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item18>
|
||||
<Item19>
|
||||
<Filename Value="Hashes/dccrc32.pp"/>
|
||||
<UnitName Value="DCcrc32"/>
|
||||
</Item19>
|
||||
<Item20>
|
||||
<Filename Value="Hashes/dcblake2.pp"/>
|
||||
<UnitName Value="DCblake2"/>
|
||||
</Item20>
|
||||
<Item21>
|
||||
<Filename Value="Hashes/dcpblake2.pas"/>
|
||||
<UnitName Value="DCPblake2"/>
|
||||
</Item21>
|
||||
<Item22>
|
||||
<Filename Value="Hashes/dcpsha3.pas"/>
|
||||
<UnitName Value="DCPsha3"/>
|
||||
</Item22>
|
||||
<Item23>
|
||||
<Filename Value="Hashes/dcpsha224.pas"/>
|
||||
<UnitName Value="DCPsha224"/>
|
||||
</Item23>
|
||||
<Item24>
|
||||
<Filename Value="Hashes/Keccak/hmac.pas"/>
|
||||
<UnitName Value="HMAC"/>
|
||||
</Item24>
|
||||
<Item25>
|
||||
<Filename Value="Hashes/Keccak/sha3.pas"/>
|
||||
<UnitName Value="SHA3"/>
|
||||
</Item25>
|
||||
<Item26>
|
||||
<Filename Value="Hashes/Keccak/sha3_512.pas"/>
|
||||
<UnitName Value="SHA3_512"/>
|
||||
</Item26>
|
||||
<Item27>
|
||||
<Filename Value="Random/isaac.pas"/>
|
||||
<UnitName Value="ISAAC"/>
|
||||
</Item27>
|
||||
<Item28>
|
||||
<Filename Value="Hashes/Keccak/scrypt.pas"/>
|
||||
<UnitName Value="scrypt"/>
|
||||
</Item28>
|
||||
<Item29>
|
||||
<Filename Value="Ciphers/DCPrijndael.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item29>
|
||||
<Item30>
|
||||
<Filename Value="Ciphers/dcprijndael.pas"/>
|
||||
<UnitName Value="DCPrijndael"/>
|
||||
</Item30>
|
||||
<Item31>
|
||||
<Filename Value="Hashes/Keccak/sha1.pas"/>
|
||||
<UnitName Value="SHA1"/>
|
||||
</Item31>
|
||||
</Files>
|
||||
<RequiredPkgs Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="multithreadprocslaz"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="FCL"/>
|
||||
<MinVersion Major="1" Valid="True"/>
|
||||
</Item2>
|
||||
</RequiredPkgs>
|
||||
<UsageOptions>
|
||||
<UnitPath Value="$(PkgOutDir)"/>
|
||||
</UsageOptions>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
</PublishOptions>
|
||||
</Package>
|
||||
</CONFIG>
|
||||
"/>
|
||||
<Version Major="2" Minor="1" Release="1"/>
|
||||
<Files Count="31">
|
||||
<Item1>
|
||||
<Filename Value="dcpbase64.pas"/>
|
||||
<UnitName Value="DCPbase64"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Filename Value="dcpblockciphers.pas"/>
|
||||
<UnitName Value="DCPblockciphers"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Filename Value="dcpconst.pas"/>
|
||||
<UnitName Value="DCPconst"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<Filename Value="dcpcrypt2.pas"/>
|
||||
<UnitName Value="DCPcrypt2"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<Filename Value="Hashes/dcphaval.pas"/>
|
||||
<UnitName Value="DCPhaval"/>
|
||||
</Item5>
|
||||
<Item6>
|
||||
<Filename Value="Hashes/dcpmd4.pas"/>
|
||||
<UnitName Value="DCPmd4"/>
|
||||
</Item6>
|
||||
<Item7>
|
||||
<Filename Value="Hashes/dcpmd5.pas"/>
|
||||
<UnitName Value="DCPmd5"/>
|
||||
</Item7>
|
||||
<Item8>
|
||||
<Filename Value="Hashes/dcpripemd128.pas"/>
|
||||
<UnitName Value="DCPripemd128"/>
|
||||
</Item8>
|
||||
<Item9>
|
||||
<Filename Value="Hashes/dcpripemd160.pas"/>
|
||||
<UnitName Value="DCPripemd160"/>
|
||||
</Item9>
|
||||
<Item10>
|
||||
<Filename Value="Hashes/dcpsha1.pas"/>
|
||||
<UnitName Value="DCPsha1"/>
|
||||
</Item10>
|
||||
<Item11>
|
||||
<Filename Value="Hashes/dcpsha256.pas"/>
|
||||
<UnitName Value="DCPsha256"/>
|
||||
</Item11>
|
||||
<Item12>
|
||||
<Filename Value="Hashes/dcpsha512.pas"/>
|
||||
<UnitName Value="DCPsha512"/>
|
||||
</Item12>
|
||||
<Item13>
|
||||
<Filename Value="Hashes/dcptiger.pas"/>
|
||||
<UnitName Value="DCPtiger"/>
|
||||
</Item13>
|
||||
<Item14>
|
||||
<Filename Value="Hashes/DCPhaval3.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item14>
|
||||
<Item15>
|
||||
<Filename Value="Hashes/DCPhaval4.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item15>
|
||||
<Item16>
|
||||
<Filename Value="Hashes/DCPhaval5.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item16>
|
||||
<Item17>
|
||||
<Filename Value="Hashes/dcpcrc32.pas"/>
|
||||
<UnitName Value="DCPcrc32"/>
|
||||
</Item17>
|
||||
<Item18>
|
||||
<Filename Value="Hashes/DCPtiger.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item18>
|
||||
<Item19>
|
||||
<Filename Value="Hashes/dccrc32.pp"/>
|
||||
<UnitName Value="DCcrc32"/>
|
||||
</Item19>
|
||||
<Item20>
|
||||
<Filename Value="Hashes/dcblake2.pp"/>
|
||||
<UnitName Value="DCblake2"/>
|
||||
</Item20>
|
||||
<Item21>
|
||||
<Filename Value="Hashes/dcpblake2.pas"/>
|
||||
<UnitName Value="DCPblake2"/>
|
||||
</Item21>
|
||||
<Item22>
|
||||
<Filename Value="Hashes/dcpsha3.pas"/>
|
||||
<UnitName Value="DCPsha3"/>
|
||||
</Item22>
|
||||
<Item23>
|
||||
<Filename Value="Hashes/dcpsha224.pas"/>
|
||||
<UnitName Value="DCPsha224"/>
|
||||
</Item23>
|
||||
<Item24>
|
||||
<Filename Value="Hashes/Keccak/hmac.pas"/>
|
||||
<UnitName Value="HMAC"/>
|
||||
</Item24>
|
||||
<Item25>
|
||||
<Filename Value="Hashes/Keccak/sha3.pas"/>
|
||||
<UnitName Value="SHA3"/>
|
||||
</Item25>
|
||||
<Item26>
|
||||
<Filename Value="Hashes/Keccak/sha3_512.pas"/>
|
||||
<UnitName Value="SHA3_512"/>
|
||||
</Item26>
|
||||
<Item27>
|
||||
<Filename Value="Random/isaac.pas"/>
|
||||
<UnitName Value="ISAAC"/>
|
||||
</Item27>
|
||||
<Item28>
|
||||
<Filename Value="Hashes/Keccak/scrypt.pas"/>
|
||||
<UnitName Value="scrypt"/>
|
||||
</Item28>
|
||||
<Item29>
|
||||
<Filename Value="Ciphers/DCPrijndael.inc"/>
|
||||
<Type Value="Include"/>
|
||||
</Item29>
|
||||
<Item30>
|
||||
<Filename Value="Ciphers/dcprijndael.pas"/>
|
||||
<UnitName Value="DCPrijndael"/>
|
||||
</Item30>
|
||||
<Item31>
|
||||
<Filename Value="Hashes/Keccak/sha1.pas"/>
|
||||
<UnitName Value="SHA1"/>
|
||||
</Item31>
|
||||
</Files>
|
||||
<RequiredPkgs Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="multithreadprocslaz"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="FCL"/>
|
||||
<MinVersion Major="1" Valid="True"/>
|
||||
</Item2>
|
||||
</RequiredPkgs>
|
||||
<UsageOptions>
|
||||
<UnitPath Value="$(PkgOutDir)"/>
|
||||
</UsageOptions>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
</PublishOptions>
|
||||
</Package>
|
||||
</CONFIG>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue