ADD: BLAKE2s implementation, optimized for speed on CPUs supporting SSE2

This commit is contained in:
Alexander Koblov 2017-12-23 10:06:59 +00:00
commit 26aba8bdf3
4 changed files with 1205 additions and 257 deletions

View 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;

View 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;

View file

@ -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

View file

@ -1,185 +1,185 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<Package Version="4">
<Name Value="dcpcrypt"/>
<Author Value="David Barton, Barko &amp; 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 &amp; 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>