diff --git a/Ciphers/DCPblowfish.pas b/Ciphers/DCPblowfish.pas
index da83939..2fd73c2 100644
--- a/Ciphers/DCPblowfish.pas
+++ b/Ciphers/DCPblowfish.pas
@@ -51,7 +51,7 @@ implementation
{$R-}{$Q-}
{$I DCPblowfish.inc}
-class function TDCP_blowfish.GetID: integer;
+class function TDCP_blowfish.GetId: integer;
begin
Result:= DCP_blowfish;
end;
diff --git a/Ciphers/DCPcast128.pas b/Ciphers/DCPcast128.pas
index b79cee7..2311e02 100644
--- a/Ciphers/DCPcast128.pas
+++ b/Ciphers/DCPcast128.pas
@@ -35,7 +35,7 @@ TDCP_cast128= class(TDCP_blockcipher64)
Rounds: longword;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -62,7 +62,7 @@ class function TDCP_cast128.GetMaxKeySize: integer;
Result:= 128;
end;
-class function TDCP_cast128.GetID: integer;
+class function TDCP_cast128.GetId: integer;
begin
Result:= DCP_cast128;
end;
diff --git a/Ciphers/DCPdes.pas b/Ciphers/DCPdes.pas
index 96e398b..e24cadd 100644
--- a/Ciphers/DCPdes.pas
+++ b/Ciphers/DCPdes.pas
@@ -331,7 +331,7 @@ class function TDCP_des.GetMaxKeySize: integer;
Result:= 64;
end;
-class function TDCP_des.GetID: integer;
+class function TDCP_des.GetId: integer;
begin
Result:= DCP_des;
end;
@@ -410,7 +410,7 @@ class function TDCP_3des.GetMaxKeySize: integer;
Result:= 192;
end;
-class function TDCP_3des.GetID: integer;
+class function TDCP_3des.GetId: integer;
begin
Result:= DCP_3des;
end;
diff --git a/Ciphers/DCPgost.pas b/Ciphers/DCPgost.pas
index 2fc52c5..6405911 100644
--- a/Ciphers/DCPgost.pas
+++ b/Ciphers/DCPgost.pas
@@ -43,7 +43,7 @@ TDCP_gost= class(TDCP_blockcipher64)
KeyData: array[0..7] of DWord;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -64,7 +64,7 @@ class function TDCP_gost.GetMaxKeySize: integer;
Result:= 256;
end;
-class function TDCP_gost.GetID: integer;
+class function TDCP_gost.GetId: integer;
begin
Result:= DCP_gost;
end;
diff --git a/Ciphers/DCPice.pas b/Ciphers/DCPice.pas
index 230a4df..3f6c3c8 100644
--- a/Ciphers/DCPice.pas
+++ b/Ciphers/DCPice.pas
@@ -47,7 +47,7 @@ TDCP_ice= class(TDCP_customice)
protected
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -57,7 +57,7 @@ TDCP_thinice= class(TDCP_customice)
protected
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -67,7 +67,7 @@ TDCP_ice2= class(TDCP_customice)
protected
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -318,7 +318,7 @@ class function TDCP_ice.GetMaxKeySize: integer;
Result:= 64;
end;
-class function TDCP_ice.GetID: integer;
+class function TDCP_ice.GetId: integer;
begin
Result:= DCP_ice;
end;
@@ -359,7 +359,7 @@ class function TDCP_thinice.GetMaxKeySize: integer;
Result:= 64;
end;
-class function TDCP_thinice.GetID: integer;
+class function TDCP_thinice.GetId: integer;
begin
Result:= DCP_thinice;
end;
@@ -400,7 +400,7 @@ class function TDCP_ice2.GetMaxKeySize: integer;
Result:= 128;
end;
-class function TDCP_ice2.GetID: integer;
+class function TDCP_ice2.GetId: integer;
begin
Result:= DCP_ice2;
end;
diff --git a/Ciphers/DCPidea.pas b/Ciphers/DCPidea.pas
index 0bf8d69..d4938a5 100644
--- a/Ciphers/DCPidea.pas
+++ b/Ciphers/DCPidea.pas
@@ -34,7 +34,7 @@ TDCP_idea= class(TDCP_blockcipher64)
EK, DK: array[0..51] of word;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -54,7 +54,7 @@ class function TDCP_idea.GetMaxKeySize: integer;
Result:= 128;
end;
-class function TDCP_idea.GetID: integer;
+class function TDCP_idea.GetId: integer;
begin
Result:= DCP_idea;
end;
diff --git a/Ciphers/DCPmars.pas b/Ciphers/DCPmars.pas
index 818a29a..52f918a 100644
--- a/Ciphers/DCPmars.pas
+++ b/Ciphers/DCPmars.pas
@@ -34,7 +34,7 @@ TDCP_mars= class(TDCP_blockcipher128)
KeyData: array[0..39] of DWord;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -60,7 +60,7 @@ function RRot32(X: DWord; c: longword): DWord;
RRot32:= (X shr c) or (X shl (32 - c));
end;
-class function TDCP_mars.GetID: integer;
+class function TDCP_mars.GetId: integer;
begin
Result:= DCP_mars;
end;
diff --git a/Ciphers/DCPmisty1.pas b/Ciphers/DCPmisty1.pas
index 4c60d97..53b1d93 100644
--- a/Ciphers/DCPmisty1.pas
+++ b/Ciphers/DCPmisty1.pas
@@ -41,7 +41,7 @@ TDCP_misty1= class(TDCP_blockcipher64)
function FLINV(const FL_IN: DWord; const k: longword): DWord;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -63,7 +63,7 @@ function SwapDword(a: dword): dword;
Result:= ((a and $FF) shl 24) or ((a and $FF00) shl 8) or ((a and $FF0000) shr 8) or ((a and $FF000000) shr 24);
end;
-class function TDCP_misty1.GetID: integer;
+class function TDCP_misty1.GetId: integer;
begin
Result:= DCP_misty1;
end;
diff --git a/Ciphers/DCPrc2.pas b/Ciphers/DCPrc2.pas
index eb0cfb5..7fb5884 100644
--- a/Ciphers/DCPrc2.pas
+++ b/Ciphers/DCPrc2.pas
@@ -34,7 +34,7 @@ TDCP_rc2= class(TDCP_blockcipher64)
KeyData: array[0..63] of word;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -66,7 +66,7 @@ class function TDCP_rc2.GetMaxKeySize: integer;
Result:= 1024;
end;
-class function TDCP_rc2.GetID: integer;
+class function TDCP_rc2.GetId: integer;
begin
Result:= DCP_rc2;
end;
diff --git a/Ciphers/DCPrc4.pas b/Ciphers/DCPrc4.pas
index a8550c0..b907f95 100644
--- a/Ciphers/DCPrc4.pas
+++ b/Ciphers/DCPrc4.pas
@@ -33,7 +33,7 @@ TDCP_rc4= class(TDCP_cipher)
protected
KeyData, KeyOrg: array[0..255] of byte;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -49,7 +49,7 @@ TDCP_rc4= class(TDCP_cipher)
implementation
{$R-}{$Q-}
-class function TDCP_rc4.GetID: integer;
+class function TDCP_rc4.GetId: integer;
begin
Result:= DCP_rc4;
end;
diff --git a/Ciphers/DCPrc5.pas b/Ciphers/DCPrc5.pas
index f34132a..2be0452 100644
--- a/Ciphers/DCPrc5.pas
+++ b/Ciphers/DCPrc5.pas
@@ -71,7 +71,7 @@ function RRot32(a, b: longword): longword;
Result:= (a shr b) or (a shl (32-b));
end;
-class function TDCP_rc5.GetID: integer;
+class function TDCP_rc5.GetId: integer;
begin
Result:= DCP_rc5;
end;
diff --git a/Ciphers/DCPrc6.pas b/Ciphers/DCPrc6.pas
index b5137cd..21a587b 100644
--- a/Ciphers/DCPrc6.pas
+++ b/Ciphers/DCPrc6.pas
@@ -75,7 +75,7 @@ function RRot32(X: DWord; c: longword): DWord;
RRot32:= (X shr c) or (X shl (32 - c));
end;
-class function TDCP_rc6.GetID: integer;
+class function TDCP_rc6.GetId: integer;
begin
Result:= DCP_rc6;
end;
diff --git a/Ciphers/DCPrijndael.pas b/Ciphers/DCPrijndael.pas
index c7a2418..cc950fe 100644
--- a/Ciphers/DCPrijndael.pas
+++ b/Ciphers/DCPrijndael.pas
@@ -39,7 +39,7 @@ TDCP_rijndael= class(TDCP_blockcipher128)
rk, drk: array[0..MAXROUNDS,0..7] of DWord;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -60,7 +60,7 @@ class function TDCP_rijndael.GetMaxKeySize: integer;
Result:= 256;
end;
-class function TDCP_rijndael.GetID: integer;
+class function TDCP_rijndael.GetId: integer;
begin
Result:= DCP_rijndael;
end;
diff --git a/Ciphers/DCPserpent.pas b/Ciphers/DCPserpent.pas
index b8d01dd..4598bb5 100644
--- a/Ciphers/DCPserpent.pas
+++ b/Ciphers/DCPserpent.pas
@@ -36,7 +36,7 @@ TDCP_serpent= class(TDCP_blockcipher128)
l_key: array[0..131] of dword;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -51,7 +51,7 @@ TDCP_serpent= class(TDCP_blockcipher128)
implementation
{$R-}{$Q-}
-class function TDCP_serpent.GetID: integer;
+class function TDCP_serpent.GetId: integer;
begin
Result:= DCP_serpent;
end;
diff --git a/Ciphers/DCPtea.pas b/Ciphers/DCPtea.pas
index 40e662c..d968dc5 100644
--- a/Ciphers/DCPtea.pas
+++ b/Ciphers/DCPtea.pas
@@ -34,7 +34,7 @@ TDCP_tea= class(TDCP_blockcipher64)
KeyData: array[0..3] of dword;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -58,7 +58,7 @@ function SwapDword(a: dword): dword;
Result:= ((a and $FF) shl 24) or ((a and $FF00) shl 8) or ((a and $FF0000) shr 8) or ((a and $FF000000) shr 24);
end;
-class function TDCP_tea.GetID: integer;
+class function TDCP_tea.GetId: integer;
begin
Result:= DCP_tea;
end;
diff --git a/Ciphers/DCPtwofish.pas b/Ciphers/DCPtwofish.pas
index 70647f2..a0ad9bc 100644
--- a/Ciphers/DCPtwofish.pas
+++ b/Ciphers/DCPtwofish.pas
@@ -47,7 +47,7 @@ TDCP_twofish= class(TDCP_blockcipher128)
sbox: array[0..3,0..255] of DWord;
procedure InitKey(const Key; Size: longword); override;
public
- class function GetID: integer; override;
+ class function GetId: integer; override;
class function GetAlgorithm: string; override;
class function GetMaxKeySize: integer; override;
class function SelfTest: boolean; override;
@@ -68,7 +68,7 @@ implementation
MDS: array[0..3,0..255] of dword;
MDSDone: boolean;
-class function TDCP_twofish.GetID: integer;
+class function TDCP_twofish.GetId: integer;
begin
Result:= DCP_twofish;
end;
diff --git a/DCP.inc b/DCP.inc
index ef2622b..4a295e8 100644
--- a/DCP.inc
+++ b/DCP.inc
@@ -164,6 +164,7 @@
DELPHIX_TOKYO Alias for DELPHI25
DELPHI26 Defined when compiling with Delphi 10.3 for Win32 (Codename CARNIVAL)
DELPHIX_RIO Alias for DELPHI26
+ DELPHI29 Defined when compiling with Delphi 12.2 for Win32 (Codename Athens)
DELPHI1_UP Defined when compiling with Delphi 1 or higher
DELPHI2_UP Defined when compiling with Delphi 2 or higher
DELPHI3_UP Defined when compiling with Delphi 3 or higher
@@ -206,6 +207,7 @@
DELPHIX_TOKYO_UP Alias for DELPHI25_UP
DELPHI26_UP Defined when compiling with Delphi 10.3 for Win32 or higher
DELPHIX_RIO_UP Alias for DELPHI26_UP
+ DELPHI29_UP Defined when compiling with Delphi 12.2 for Win32 or higher
- Kylix Versions
@@ -253,6 +255,7 @@
DELPHICOMPILER24 Defined when compiling with Delphi Personality of BDS 18.0
DELPHICOMPILER25 Defined when compiling with Delphi Personality of BDS 19.0
DELPHICOMPILER26 Defined when compiling with Delphi Personality of BDS 20.0
+ DELPHICOMPILER29 Defined when compiling with Delphi Personality of BDS 23.0
DELPHICOMPILER1_UP Defined when compiling with Delphi 1 or higher
DELPHICOMPILER2_UP Defined when compiling with Delphi 2 or higher
DELPHICOMPILER3_UP Defined when compiling with Delphi 3 or higher
@@ -278,6 +281,7 @@
DELPHICOMPILER24_UP Defined when compiling with Delphi 10.1 for Win32 or higher
DELPHICOMPILER25_UP Defined when compiling with Delphi 10.2 for Win32 or higher
DELPHICOMPILER26_UP Defined when compiling with Delphi 10.3 for Win32 or higher
+ DELPHICOMPILER29_UP Defined when compiling with Delphi 12.2 for Win32 or higher
- C++Builder Versions
@@ -309,6 +313,7 @@
BCB24 Defined when compiling with C++Builder Personality of RAD Studio 10.1 Berlin (also known as C++Builder 10.1 Berlin) (Codename BIGBEN)
BCB25 Defined when compiling with C++Builder Personality of RAD Studio 10.2 Tokyo (also known as C++Builder 10.2 Tokyo) (Codename GODZILLA)
BCB26 Defined when compiling with C++Builder Personality of RAD Studio 10.3 Rio (also known as C++Builder 10.3) (Codename CARNIVAL)
+ BCB29 Defined when compiling with C++Builder Personality of RAD Studio 12.2 (also known as C++Builder 12.2) (Codename Athens)
BCB1_UP Defined when compiling with C++Builder 1 or higher
BCB3_UP Defined when compiling with C++Builder 3 or higher
BCB4_UP Defined when compiling with C++Builder 4 or higher
@@ -330,6 +335,7 @@
BCB24_UP Defined when compiling with C++Builder Personality of RAD Studio 10.1 or higher
BCB25_UP Defined when compiling with C++Builder Personality of RAD Studio 10.2 or higher
BCB26_UP Defined when compiling with C++Builder Personality of RAD Studio 10.3 or higher
+ BCB29_UP Defined when compiling with C++Builder Personality of RAD Studio 12.2 or higher
- RAD Studio / Borland Developer Studio Versions
@@ -362,6 +368,7 @@
BDS18 Defined when compiling with BDS 18.0 (Embarcadero RAD Studio 10.1) (Codename BIGBEN)
BDS19 Defined when compiling with BDS 19.0 (Embarcadero RAD Studio 10.2) (Codename GODZILLA)
BDS20 Defined when compiling with BDS 20.0 (Embarcadero RAD Studio 10.3) (Codename CARNIVAL)
+ BDS23 Defined when compiling with BDS 23.0 (Embarcadero RAD Studio 12.2) (Codename Athens)
BDS2_UP Defined when compiling with BDS 2.0 or higher
BDS3_UP Defined when compiling with BDS 3.0 or higher
BDS4_UP Defined when compiling with BDS 4.0 or higher
@@ -380,6 +387,7 @@
BDS18_UP Defined when compiling with BDS 18.0 or higher
BDS19_UP Defined when compiling with BDS 19.0 or higher
BDS20_UP Defined when compiling with BDS 20.0 or higher
+ BDS23_UP Defined when compiling with BDS 23.0 or higher
- Compiler Versions
@@ -417,6 +425,7 @@
COMPILER24 Defined when compiling with Delphi or C++Builder Personalities of BDS 18.0
COMPILER25 Defined when compiling with Delphi or C++Builder Personalities of BDS 19.0
COMPILER26 Defined when compiling with Delphi or C++Builder Personalities of BDS 20.0
+ COMPILER29 Defined when compiling with Delphi or C++Builder Personalities of BDS 23.0
COMPILER1_UP Defined when compiling with Delphi 1 or higher
COMPILER2_UP Defined when compiling with Delphi 2 or C++Builder 1 or higher
COMPILER3_UP Defined when compiling with Delphi 3 or higher
@@ -443,6 +452,7 @@
COMPILER24_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 18.0 or higher
COMPILER25_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 19.0 or higher
COMPILER26_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 20.0 or higher
+ COMPILER29_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 23.0 or higher
- RTL Versions
@@ -486,6 +496,7 @@
RTL310_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 18.0 or higher
RTL320_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 19.0 or higher
RTL330_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 20.0 or higher
+ RTL360_UP Defined when compiling with Delphi or C++Builder Personalities of BDS 23.0 or higher
- CLR Versions
@@ -1067,17 +1078,31 @@
{$UNDEF UNKNOWN_COMPILER_VERSION}
{$ENDIF VER330}
+ {$IFDEF VER360} // RAD Studio 12.2
+ {$DEFINE BDS}
+ {$DEFINE BDS23}
+ {$DEFINE COMPILER29}
+ {$IFDEF BCB}
+ {$DEFINE BCB29}
+ {$ELSE}
+ {$DEFINE DELPHI29}
+ {$DEFINE DELPHICOMPILER29}
+ {$ENDIF BCB}
+ {$DEFINE RTL360_UP}
+ {$UNDEF UNKNOWN_COMPILER_VERSION}
+ {$ENDIF VER360}
+
{$IFDEF UNKNOWN_COMPILER_VERSION} // adjust for newer version (always use latest version)
{$DEFINE BDS}
- {$DEFINE BDS20}
- {$DEFINE COMPILER26}
+ {$DEFINE BDS23}
+ {$DEFINE COMPILER29}
{$IFDEF BCB}
- {$DEFINE BCB26}
+ {$DEFINE BCB29}
{$ELSE}
- {$DEFINE DELPHI26}
- {$DEFINE DELPHICOMPILER26}
+ {$DEFINE DELPHI29}
+ {$DEFINE DELPHICOMPILER29}
{$ENDIF BCB}
- {$DEFINE RTL330_UP}
+ {$DEFINE RTL360_UP}
{$UNDEF UNKNOWN_COMPILER_VERSION}
{$ENDIF}
@@ -1097,6 +1122,7 @@
{ DELPHIX_UP from DELPHIX mappings }
{------------------------------------------------------------------------------}
+{$IFDEF DELPHI29} {$DEFINE DELPHI29_UP} {$ENDIF}
{$IFDEF DELPHI26} {$DEFINE DELPHI26_UP} {$ENDIF}
{$IFDEF DELPHI25} {$DEFINE DELPHI25_UP} {$ENDIF}
{$IFDEF DELPHI24} {$DEFINE DELPHI24_UP} {$ENDIF}
@@ -1127,6 +1153,10 @@
{ DELPHIX_UP from DELPHIX_UP mappings }
{------------------------------------------------------------------------------}
+{$IFDEF DELPHI29_UP}
+ {$DEFINE DELPHI26_UP}
+{$ENDIF}
+
{$IFDEF DELPHI26_UP}
{$DEFINE DELPHIX_RIO_UP} // synonym to DELPHI26_UP
{$DEFINE DELPHI25_UP}
@@ -1224,6 +1254,7 @@
{ BCBX_UP from BCBX mappings }
{------------------------------------------------------------------------------}
+{$IFDEF BCB29} {$DEFINE BCB29_UP} {$ENDIF}
{$IFDEF BCB26} {$DEFINE BCB26_UP} {$ENDIF}
{$IFDEF BCB25} {$DEFINE BCB25_UP} {$ENDIF}
{$IFDEF BCB24} {$DEFINE BCB24_UP} {$ENDIF}
@@ -1250,6 +1281,7 @@
{ BCBX_UP from BCBX_UP mappings }
{------------------------------------------------------------------------------}
+{$IFDEF BCB29_UP} {$DEFINE BCB26_UP} {$ENDIF}
{$IFDEF BCB26_UP} {$DEFINE BCB25_UP} {$ENDIF}
{$IFDEF BCB25_UP} {$DEFINE BCB24_UP} {$ENDIF}
{$IFDEF BCB24_UP} {$DEFINE BCB23_UP} {$ENDIF}
@@ -1275,6 +1307,7 @@
{ BDSX_UP from BDSX mappings }
{------------------------------------------------------------------------------}
+{$IFDEF BDS23} {$DEFINE BDS23_UP} {$ENDIF}
{$IFDEF BDS20} {$DEFINE BDS20_UP} {$ENDIF}
{$IFDEF BDS19} {$DEFINE BDS19_UP} {$ENDIF}
{$IFDEF BDS18} {$DEFINE BDS18_UP} {$ENDIF}
@@ -1298,6 +1331,7 @@
{ BDSX_UP from BDSX_UP mappings }
{------------------------------------------------------------------------------}
+{$IFDEF BDS23_UP} {$DEFINE BDS20_UP} {$ENDIF}
{$IFDEF BDS20_UP} {$DEFINE BDS19_UP} {$ENDIF}
{$IFDEF BDS19_UP} {$DEFINE BDS18_UP} {$ENDIF}
{$IFDEF BDS18_UP} {$DEFINE BDS17_UP} {$ENDIF}
@@ -1320,6 +1354,7 @@
{ DELPHICOMPILERX_UP from DELPHICOMPILERX mappings }
{------------------------------------------------------------------------------}
+{$IFDEF DELPHICOMPILER29} {$DEFINE DELPHICOMPILER29_UP} {$ENDIF}
{$IFDEF DELPHICOMPILER26} {$DEFINE DELPHICOMPILER26_UP} {$ENDIF}
{$IFDEF DELPHICOMPILER25} {$DEFINE DELPHICOMPILER25_UP} {$ENDIF}
{$IFDEF DELPHICOMPILER24} {$DEFINE DELPHICOMPILER24_UP} {$ENDIF}
@@ -1350,6 +1385,7 @@
{ DELPHICOMPILERX_UP from DELPHICOMPILERX_UP mappings }
{------------------------------------------------------------------------------}
+{$IFDEF DELPHICOMPILER29_UP} {$DEFINE DELPHICOMPILER26_UP} {$ENDIF}
{$IFDEF DELPHICOMPILER26_UP} {$DEFINE DELPHICOMPILER25_UP} {$ENDIF}
{$IFDEF DELPHICOMPILER25_UP} {$DEFINE DELPHICOMPILER24_UP} {$ENDIF}
{$IFDEF DELPHICOMPILER24_UP} {$DEFINE DELPHICOMPILER23_UP} {$ENDIF}
@@ -1380,6 +1416,7 @@
{ COMPILERX_UP from COMPILERX mappings }
{------------------------------------------------------------------------------}
+{$IFDEF COMPILER29} {$DEFINE COMPILER29_UP} {$ENDIF}
{$IFDEF COMPILER26} {$DEFINE COMPILER26_UP} {$ENDIF}
{$IFDEF COMPILER25} {$DEFINE COMPILER25_UP} {$ENDIF}
{$IFDEF COMPILER24} {$DEFINE COMPILER24_UP} {$ENDIF}
@@ -1411,6 +1448,7 @@
{ COMPILERX_UP from COMPILERX_UP mappings }
{------------------------------------------------------------------------------}
+{$IFDEF COMPILER29_UP} {$DEFINE COMPILER26_UP} {$ENDIF}
{$IFDEF COMPILER26_UP} {$DEFINE COMPILER25_UP} {$ENDIF}
{$IFDEF COMPILER25_UP} {$DEFINE COMPILER24_UP} {$ENDIF}
{$IFDEF COMPILER24_UP} {$DEFINE COMPILER23_UP} {$ENDIF}
@@ -1441,6 +1479,7 @@
{ RTLX_UP from RTLX_UP mappings }
{------------------------------------------------------------------------------}
+{$IFDEF RTL360_UP} {$DEFINE RTL330_UP} {$ENDIF}
{$IFDEF RTL330_UP} {$DEFINE RTL320_UP} {$ENDIF}
{$IFDEF RTL320_UP} {$DEFINE RTL310_UP} {$ENDIF}
{$IFDEF RTL310_UP} {$DEFINE RTL300_UP} {$ENDIF}
@@ -1668,7 +1707,6 @@
{$IFDEF COMPILER7_UP}
{$DEFINE SUPPORTS_UNSAFE_WARNINGS}
- {$DEFINE SUPPORTS_UINT64}
{$ENDIF COMPILER7_UP}
{$IFDEF COMPILER9_UP}
@@ -1725,6 +1763,7 @@
{$IFDEF COMPILER16_UP}
{$DEFINE USE_64BIT_TYPES}
+ {$DEFINE SUPPORTS_UINT64}
{$ENDIF COMPILER16_UP}
{$IFDEF COMPILER17_UP}
diff --git a/DCPcrypt2.pas b/DCPcrypt2.pas
index a0a5442..dea1fb1 100644
--- a/DCPcrypt2.pas
+++ b/DCPcrypt2.pas
@@ -1,720 +1,727 @@
-{******************************************************************************}
-{* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********}
-{******************************************************************************}
-{* Main component definitions *************************************************}
-{******************************************************************************}
-{* Copyright (c) 1999-2003 David Barton *}
-{* Permission is hereby granted, free of charge, to any person obtaining a *}
-{* copy of this software and associated documentation files (the "Software"), *}
-{* to deal in the Software without restriction, including without limitation *}
-{* the rights to use, copy, modify, merge, publish, distribute, sublicense, *}
-{* and/or sell copies of the Software, and to permit persons to whom the *}
-{* Software is furnished to do so, subject to the following conditions: *}
-{* *}
-{* The above copyright notice and this permission notice shall be included in *}
-{* all copies or substantial portions of the Software. *}
-{* *}
-{* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *}
-{* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *}
-{* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *}
-{* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *}
-{* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *}
-{* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *}
-{* DEALINGS IN THE SOFTWARE. *}
-{******************************************************************************}
-unit DCPcrypt2;
-
-interface
-uses
- Classes, Sysutils, DCPconst, DCPbase64;
-
-//{$DEFINE DCP1COMPAT} { DCPcrypt v1.31 compatiblity mode - see documentation }
-
-{******************************************************************************}
- { A few predefined types to help out }
-
-type
- Pbyte= ^byte;
- Pword= ^word;
- Pdword= ^dword;
- Pint64= ^int64;
- dword= longword;
- Pwordarray= ^Twordarray;
- Twordarray= array[0..19383] of word;
- Pdwordarray= ^Tdwordarray;
- Tdwordarray= array[0..8191] of dword;
-
-
-{******************************************************************************}
- { The base class from which all hash algorithms are to be derived }
-
-type
- EDCP_hash= class(Exception);
- TDCP_hash= class(TComponent)
- protected
- fInitialized: boolean; { Whether or not the algorithm has been initialized }
-
- procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector }
- procedure DeadStr(Value: string); { Knudge to display vars in the object inspector }
-
- private
- function _GetId: integer;
- function _GetAlgorithm: string;
- function _GetHashSize: integer;
-
- public
- property Initialized: boolean
- read fInitialized;
-
- class function GetId: integer; virtual;
- { Get the algorithm id }
- class function GetAlgorithm: string; virtual;
- { Get the algorithm name }
- class function GetHashSize: integer; virtual;
- { Get the size of the digest produced - in bits }
- class function SelfTest: boolean; virtual;
- { Tests the implementation with several test vectors }
-
- procedure Init; virtual;
- { Initialize the hash algorithm }
- procedure Final(var Digest); virtual;
- { Create the final digest and clear the stored information.
- The size of the Digest var must be at least equal to the hash size }
- procedure Burn; virtual;
- { Clear any stored information with out creating the final digest }
-
- procedure Update(const Buffer; Size: longword); virtual;
- { Update the hash buffer with Size bytes of data from Buffer }
- procedure UpdateStream(Stream: TStream; Size: longword);
- { Update the hash buffer with Size bytes of data from the stream }
- procedure UpdateStr(const Str: AnsiString); {$IFDEF UNICODE}overload; {$ENDIF}
- { Update the hash buffer with the string }
-{$IFDEF UNICODE}
- procedure UpdateStr(const Str: UnicodeString); overload;
- { Update the hash buffer with the string }
-{$ENDIF}
-
-
- destructor Destroy; override;
-
- published
- property Id: integer
- read _GetId write DeadInt;
- property Algorithm: string
- read _GetAlgorithm write DeadStr;
- property HashSize: integer
- read _GetHashSize write DeadInt;
- end;
- TDCP_hashclass= class of TDCP_hash;
-
-
-{******************************************************************************}
- { The base class from which all encryption components will be derived. }
- { Stream ciphers will be derived directly from this class where as }
- { Block ciphers will have a further foundation class TDCP_blockcipher. }
-
-type
- EDCP_cipher= class(Exception);
- TDCP_cipher= class(TComponent)
- protected
- fInitialized: boolean; { Whether or not the key setup has been done yet }
-
- procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector }
- procedure DeadStr(Value: string); { Knudge to display vars in the object inspector }
-
- private
- function _GetId: integer;
- function _GetAlgorithm: string;
- function _GetMaxKeySize: integer;
-
- public
- property Initialized: boolean
- read fInitialized;
-
- class function GetId: integer; virtual;
- { Get the algorithm id }
- class function GetAlgorithm: string; virtual;
- { Get the algorithm name }
- class function GetMaxKeySize: integer; virtual;
- { Get the maximum key size (in bits) }
- class function SelfTest: boolean; virtual;
- { Tests the implementation with several test vectors }
-
- procedure Init(const Key; Size: longword; InitVector: pointer); virtual;
- { Do key setup based on the data in Key, size is in bits }
- procedure InitStr(const Key: AnsiString; HashType: TDCP_hashclass); {$IFDEF UNICODE}overload; {$ENDIF}
- { Do key setup based on a hash of the key string }
-{$IFDEF UNICODE}
- procedure InitStr(const Key: UnicodeString; HashType: TDCP_hashclass); overload;
- { Do key setup based on a hash of the key string }
-{$ENDIF}
- procedure Burn; virtual;
- { Clear all stored key information }
- procedure Reset; virtual;
- { Reset any stored chaining information }
- procedure Encrypt(const Indata; var Outdata; Size: longword); virtual;
- { Encrypt size bytes of data and place in Outdata }
- procedure Decrypt(const Indata; var Outdata; Size: longword); virtual;
- { Decrypt size bytes of data and place in Outdata }
- function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
- { Encrypt size bytes of data from InStream and place in OutStream }
- function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
- { Decrypt size bytes of data from InStream and place in OutStream }
- function EncryptString(const Str: AnsiString): AnsiString; {$IFDEF UNICODE}overload; {$ENDIF}virtual;
- { Encrypt a string and return Base64 encoded }
- function DecryptString(const Str: AnsiString): AnsiString; {$IFDEF UNICODE}overload; {$ENDIF}virtual;
- { Decrypt a Base64 encoded string }
-{$IFDEF UNICODE}
- function EncryptString(const Str: UnicodeString): UnicodeString; overload; virtual;
- { Encrypt a Unicode string and return Base64 encoded }
- function DecryptString(const Str: UnicodeString): UnicodeString; overload; virtual;
- { Decrypt a Base64 encoded Unicode string }
-{$ENDIF}
-
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
-
- published
- property Id: integer
- read _GetId write DeadInt;
- property Algorithm: string
- read _GetAlgorithm write DeadStr;
- property MaxKeySize: integer
- read _GetMaxKeySize write DeadInt;
- end;
- TDCP_cipherclass= class of TDCP_cipher;
-
-
-{******************************************************************************}
- { The base class from which all block ciphers are to be derived, this }
- { extra class takes care of the different block encryption modes. }
-
-type
- TDCP_ciphermode= (cmCBC, cmCFB8bit, cmCFBblock, cmOFB, cmCTR); // cmCFB8bit is equal to DCPcrypt v1.xx's CFB mode
- EDCP_blockcipher= class(EDCP_cipher);
- TDCP_blockcipher= class(TDCP_cipher)
- protected
- fCipherMode: TDCP_ciphermode; { The cipher mode the encrypt method uses }
-
- procedure InitKey(const Key; Size: longword); virtual;
-
- private
- function _GetBlockSize: integer;
-
- public
- class function GetBlockSize: integer; virtual;
- { Get the block size of the cipher (in bits) }
-
- procedure SetIV(const Value); virtual;
- { Sets the IV to Value and performs a reset }
- procedure GetIV(var Value); virtual;
- { Returns the current chaining information, not the actual IV }
-
- procedure Encrypt(const Indata; var Outdata; Size: longword); override;
- { Encrypt size bytes of data and place in Outdata using CipherMode }
- procedure Decrypt(const Indata; var Outdata; Size: longword); override;
- { Decrypt size bytes of data and place in Outdata using CipherMode }
- function EncryptString(const Str: AnsiString): AnsiString; overload; override;
- { Encrypt a string and return Base64 encoded }
- function DecryptString(const Str: AnsiString): AnsiString; overload; override;
- { Decrypt a Base64 encoded string }
-{$IFDEF UNICODE}
- function EncryptString(const Str: UnicodeString): UnicodeString; overload; override;
- { Encrypt a Unicode string and return Base64 encoded }
- function DecryptString(const Str: UnicodeString): UnicodeString; overload; override;
- { Decrypt a Base64 encoded Unicode string }
-{$ENDIF}
- procedure EncryptECB(const Indata; var Outdata); virtual;
- { Encrypt a block of data using the ECB method of encryption }
- procedure DecryptECB(const Indata; var Outdata); virtual;
- { Decrypt a block of data using the ECB method of decryption }
- procedure EncryptCBC(const Indata; var Outdata; Size: longword); virtual;
- { Encrypt size bytes of data using the CBC method of encryption }
- procedure DecryptCBC(const Indata; var Outdata; Size: longword); virtual;
- { Decrypt size bytes of data using the CBC method of decryption }
- procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); virtual;
- { Encrypt size bytes of data using the CFB (8 bit) method of encryption }
- procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); virtual;
- { Decrypt size bytes of data using the CFB (8 bit) method of decryption }
- procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); virtual;
- { Encrypt size bytes of data using the CFB (block) method of encryption }
- procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); virtual;
- { Decrypt size bytes of data using the CFB (block) method of decryption }
- procedure EncryptOFB(const Indata; var Outdata; Size: longword); virtual;
- { Encrypt size bytes of data using the OFB method of encryption }
- procedure DecryptOFB(const Indata; var Outdata; Size: longword); virtual;
- { Decrypt size bytes of data using the OFB method of decryption }
- procedure EncryptCTR(const Indata; var Outdata; Size: longword); virtual;
- { Encrypt size bytes of data using the CTR method of encryption }
- procedure DecryptCTR(const Indata; var Outdata; Size: longword); virtual;
- { Decrypt size bytes of data using the CTR method of decryption }
-
- constructor Create(AOwner: TComponent); override;
-
- published
- property BlockSize: integer
- read _GetBlockSize write DeadInt;
- property CipherMode: TDCP_ciphermode
- read fCipherMode write fCipherMode default cmCBC;
- end;
- TDCP_blockcipherclass= class of TDCP_blockcipher;
-
-
-{******************************************************************************}
- { Helper functions }
-
-procedure XorBlock(var InData1, InData2; Size: longword);
-
-
-implementation
-{$Q-}{$R-}
-
-
-{** TDCP_hash *****************************************************************}
-
-procedure TDCP_hash.DeadInt(Value: integer);
-begin
-end;
-
-procedure TDCP_hash.DeadStr(Value: string);
-begin
-end;
-
-function TDCP_hash._GetId: integer;
-begin
- Result:= GetId;
-end;
-
-function TDCP_hash._GetAlgorithm: string;
-begin
- Result:= GetAlgorithm;
-end;
-
-function TDCP_hash._GetHashSize: integer;
-begin
- Result:= GetHashSize;
-end;
-
-class function TDCP_hash.GetId: integer;
-begin
- Result:= -1;
-end;
-
-class function TDCP_hash.GetAlgorithm: string;
-begin
- Result:= '';
-end;
-
-class function TDCP_hash.GetHashSize: integer;
-begin
- Result:= -1;
-end;
-
-class function TDCP_hash.SelfTest: boolean;
-begin
- Result:= false;
-end;
-
-procedure TDCP_hash.Init;
-begin
-end;
-
-procedure TDCP_hash.Final(var Digest);
-begin
-end;
-
-procedure TDCP_hash.Burn;
-begin
-end;
-
-procedure TDCP_hash.Update(const Buffer; Size: longword);
-begin
-end;
-
-procedure TDCP_hash.UpdateStream(Stream: TStream; Size: longword);
-var
- Buffer: array[0..8191] of byte;
- i, read: integer;
-begin
- for i:= 1 to (Size div Sizeof(Buffer)) do
- begin
- read:= Stream.Read(Buffer,Sizeof(Buffer));
- Update(Buffer,read);
- end;
- if (Size mod Sizeof(Buffer))<> 0 then
- begin
- read:= Stream.Read(Buffer,Size mod Sizeof(Buffer));
- Update(Buffer,read);
- end;
-end;
-
-procedure TDCP_hash.UpdateStr(const Str: AnsiString);
-begin
- Update(Str[1],Length(Str));
-end;
-
-{$IFDEF UNICODE}
-procedure TDCP_hash.UpdateStr(const Str: UnicodeString);
-begin
- Update(Str[1],Length(Str)*Sizeof(Str[1]));
-end; { DecryptString }
-{$ENDIF}
-
-destructor TDCP_hash.Destroy;
-begin
- if fInitialized then
- Burn;
- inherited Destroy;
-end;
-
-
-{** TDCP_cipher ***************************************************************}
-
-procedure TDCP_cipher.DeadInt(Value: integer);
-begin
-end;
-
-procedure TDCP_cipher.DeadStr(Value: string);
-begin
-end;
-
-function TDCP_cipher._GetId: integer;
-begin
- Result:= GetId;
-end;
-
-function TDCP_cipher._GetAlgorithm: string;
-begin
- Result:= GetAlgorithm;
-end;
-
-function TDCP_cipher._GetMaxKeySize: integer;
-begin
- Result:= GetMaxKeySize;
-end;
-
-class function TDCP_cipher.GetId: integer;
-begin
- Result:= -1;
-end;
-
-class function TDCP_cipher.GetAlgorithm: string;
-begin
- Result:= '';
-end;
-
-class function TDCP_cipher.GetMaxKeySize: integer;
-begin
- Result:= -1;
-end;
-
-class function TDCP_cipher.SelfTest: boolean;
-begin
- Result:= false;
-end;
-
-procedure TDCP_cipher.Init(const Key; Size: longword; InitVector: pointer);
-begin
- if fInitialized then
- Burn;
- if (Size <= 0) or ((Size and 3)<> 0) or (Size> longword(GetMaxKeySize)) then
- raise EDCP_cipher.Create('Invalid key size')
- else
- fInitialized:= true;
-end;
-
-procedure TDCP_cipher.InitStr(const Key: AnsiString; HashType: TDCP_hashclass);
-var
- Hash: TDCP_hash;
- Digest: pointer;
-begin
- if fInitialized then
- Burn;
- try
- GetMem(Digest,HashType.GetHashSize div 8);
- Hash:= HashType.Create(Self);
- Hash.Init;
- Hash.UpdateStr(Key);
- Hash.Final(Digest^);
- Hash.Free;
- if MaxKeySize< HashType.GetHashSize then
- Init(Digest^,MaxKeySize,nil)
- else
- Init(Digest^,HashType.GetHashSize,nil);
- FillChar(Digest^,HashType.GetHashSize div 8,$FF);
- FreeMem(Digest);
- except
- raise EDCP_cipher.Create('Unable to allocate sufficient memory for hash digest');
- end;
-end;
-
-{$IFDEF UNICODE}
-procedure TDCP_cipher.InitStr(const Key: UnicodeString; HashType: TDCP_hashclass);
-var
- Hash: TDCP_hash;
- Digest: pointer;
-begin
- if fInitialized then
- Burn;
- try
- GetMem(Digest,HashType.GetHashSize div 8);
- Hash:= HashType.Create(Self);
- Hash.Init;
- Hash.UpdateStr(Key);
- Hash.Final(Digest^);
- Hash.Free;
- if MaxKeySize< HashType.GetHashSize then
- Init(Digest^,MaxKeySize,nil)
- else
- Init(Digest^,HashType.GetHashSize,nil);
- FillChar(Digest^,HashType.GetHashSize div 8,$FF);
- FreeMem(Digest);
- except
- raise EDCP_cipher.Create('Unable to allocate sufficient memory for hash digest');
- end;
-end;
-{$ENDIF}
-
-procedure TDCP_cipher.Burn;
-begin
- fInitialized:= false;
-end;
-
-procedure TDCP_cipher.Reset;
-begin
-end;
-
-procedure TDCP_cipher.Encrypt(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_cipher.Decrypt(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-function TDCP_cipher.EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
-var
- Buffer: array[0..8191] of byte;
- i, Read: longword;
-begin
- Result:= 0;
- for i:= 1 to (Size div Sizeof(Buffer)) do
- begin
- Read:= InStream.Read(Buffer,Sizeof(Buffer));
- Inc(Result,Read);
- Encrypt(Buffer,Buffer,Read);
- OutStream.Write(Buffer,Read);
- end;
- if (Size mod Sizeof(Buffer))<> 0 then
- begin
- Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer));
- Inc(Result,Read);
- Encrypt(Buffer,Buffer,Read);
- OutStream.Write(Buffer,Read);
- end;
-end;
-
-function TDCP_cipher.DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
-var
- Buffer: array[0..8191] of byte;
- i, Read: longword;
-begin
- Result:= 0;
- for i:= 1 to (Size div Sizeof(Buffer)) do
- begin
- Read:= InStream.Read(Buffer,Sizeof(Buffer));
- Inc(Result,Read);
- Decrypt(Buffer,Buffer,Read);
- OutStream.Write(Buffer,Read);
- end;
- if (Size mod Sizeof(Buffer))<> 0 then
- begin
- Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer));
- Inc(Result,Read);
- Decrypt(Buffer,Buffer,Read);
- OutStream.Write(Buffer,Read);
- end;
-end;
-
-function TDCP_cipher.EncryptString(const Str: AnsiString): AnsiString;
-begin
- SetLength(Result,Length(Str));
- Encrypt(Str[1],Result[1],Length(Str));
- Result:= Base64EncodeStr(Result);
-end;
-
-function TDCP_cipher.DecryptString(const Str: AnsiString): AnsiString;
-begin
- Result:= Base64DecodeStr(Str);
- Decrypt(Result[1],Result[1],Length(Result));
-end;
-
-{$IFDEF UNICODE}
-function TDCP_cipher.EncryptString(const Str: UnicodeString): UnicodeString;
-begin
- SetLength(Result,Length(Str));
- Encrypt(Str[1],Result[1],Length(Str)*SizeOf(Str[1]));
- Result:= Base64EncodeStr(Result);
-end;
-
-function TDCP_cipher.DecryptString(const Str: UnicodeString): UnicodeString;
-begin
- Result:= Base64DecodeStr(Str);
- Decrypt(Result[1],Result[1],Length(Result)*SizeOf(Result[1]));
-end;
-{$ENDIF}
-
-constructor TDCP_cipher.Create(AOwner: TComponent);
-begin
- inherited Create(AOwner);
- Burn;
-end;
-
-destructor TDCP_cipher.Destroy;
-begin
- if fInitialized then
- Burn;
- inherited Destroy;
-end;
-
-
-{** TDCP_blockcipher **********************************************************}
-
-procedure TDCP_blockcipher.InitKey(const Key; Size: longword);
-begin
-end;
-
-function TDCP_blockcipher._GetBlockSize: integer;
-begin
- Result:= GetBlockSize;
-end;
-
-class function TDCP_blockcipher.GetBlockSize: integer;
-begin
- Result:= -1;
-end;
-
-procedure TDCP_blockcipher.SetIV(const Value);
-begin
-end;
-
-procedure TDCP_blockcipher.GetIV(var Value);
-begin
-end;
-
-procedure TDCP_blockcipher.Encrypt(const Indata; var Outdata; Size: longword);
-begin
- case fCipherMode of
- cmCBC: EncryptCBC(Indata,Outdata,Size);
- cmCFB8bit: EncryptCFB8bit(Indata,Outdata,Size);
- cmCFBblock: EncryptCFBblock(Indata,Outdata,Size);
- cmOFB: EncryptOFB(Indata,Outdata,Size);
- cmCTR: EncryptCTR(Indata,Outdata,Size);
- end;
-end;
-
-function TDCP_blockcipher.EncryptString(const Str: AnsiString): AnsiString;
-begin
- SetLength(Result,Length(Str));
- EncryptCFB8bit(Str[1],Result[1],Length(Str));
- Result:= Base64EncodeStr(Result);
-end;
-
-function TDCP_blockcipher.DecryptString(const Str: AnsiString): AnsiString;
-begin
- Result:= Base64DecodeStr(Str);
- DecryptCFB8bit(Result[1],Result[1],Length(Result));
-end;
-
-{$IFDEF UNICODE}
-function TDCP_blockcipher.EncryptString(const Str: UnicodeString): UnicodeString;
-begin
- SetLength(Result,Length(Str));
- EncryptCFB8bit(Str[1],Result[1],Length(Str)*SizeOf(Str[1]));
- Result:= Base64EncodeStr(Result);
-end;
-
-function TDCP_blockcipher.DecryptString(const Str: UnicodeString): UnicodeString;
-begin
- Result:= Base64DecodeStr(Str);
- DecryptCFB8bit(Result[1],Result[1],Length(Result)*SizeOf(Result[1]));
-end;
-{$ENDIF}
-
-procedure TDCP_blockcipher.Decrypt(const Indata; var Outdata; Size: longword);
-begin
- case fCipherMode of
- cmCBC: DecryptCBC(Indata,Outdata,Size);
- cmCFB8bit: DecryptCFB8bit(Indata,Outdata,Size);
- cmCFBblock: DecryptCFBblock(Indata,Outdata,Size);
- cmOFB: DecryptOFB(Indata,Outdata,Size);
- cmCTR: DecryptCTR(Indata,Outdata,Size);
- end;
-end;
-
-procedure TDCP_blockcipher.EncryptECB(const Indata; var Outdata);
-begin
-end;
-
-procedure TDCP_blockcipher.DecryptECB(const Indata; var Outdata);
-begin
-end;
-
-procedure TDCP_blockcipher.EncryptCBC(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.DecryptCBC(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.EncryptCFB8bit(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.DecryptCFB8bit(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.EncryptCFBblock(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.DecryptCFBblock(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.EncryptOFB(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.DecryptOFB(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.EncryptCTR(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-procedure TDCP_blockcipher.DecryptCTR(const Indata; var Outdata; Size: longword);
-begin
-end;
-
-constructor TDCP_blockcipher.Create(AOwner: TComponent);
-begin
- inherited Create(AOwner);
- fCipherMode:= cmCBC;
-end;
-
-
-{** Helpher functions *********************************************************}
-procedure XorBlock(var InData1, InData2; Size: longword);
-var
- i: longword;
-begin
- for i:= 1 to Size do
- Pbyte(longword(@InData1)+i-1)^:= Pbyte(longword(@InData1)+i-1)^ xor Pbyte(longword(@InData2)+i-1)^;
-end;
-
-end.
-
+{******************************************************************************}
+{* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********}
+{******************************************************************************}
+{* Main component definitions *************************************************}
+{******************************************************************************}
+{* Copyright (c) 1999-2003 David Barton *}
+{* Permission is hereby granted, free of charge, to any person obtaining a *}
+{* copy of this software and associated documentation files (the "Software"), *}
+{* to deal in the Software without restriction, including without limitation *}
+{* the rights to use, copy, modify, merge, publish, distribute, sublicense, *}
+{* and/or sell copies of the Software, and to permit persons to whom the *}
+{* Software is furnished to do so, subject to the following conditions: *}
+{* *}
+{* The above copyright notice and this permission notice shall be included in *}
+{* all copies or substantial portions of the Software. *}
+{* *}
+{* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *}
+{* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *}
+{* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *}
+{* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *}
+{* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *}
+{* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *}
+{* DEALINGS IN THE SOFTWARE. *}
+{******************************************************************************}
+unit DCPcrypt2;
+
+interface
+uses
+ Classes, Sysutils, DCPconst, DCPbase64;
+
+//{$DEFINE DCP1COMPAT} { DCPcrypt v1.31 compatiblity mode - see documentation }
+
+{$I DCP.inc}
+
+{******************************************************************************}
+ { A few predefined types to help out }
+
+type
+ Pbyte= ^byte;
+ Pword= ^word;
+ Pdword= ^dword;
+ {$IFDEF SUPPORTS_UINT64}
+ TDCPUInt64 = UInt64;
+ {$ELSE}
+ TDCPUInt64 = Int64;
+ {$ENDIF}
+ PDCPUInt64= ^TDCPUInt64;
+ dword= longword;
+ Pwordarray= ^Twordarray;
+ Twordarray= array[0..19383] of word;
+ Pdwordarray= ^Tdwordarray;
+ Tdwordarray= array[0..8191] of dword;
+
+
+{******************************************************************************}
+ { The base class from which all hash algorithms are to be derived }
+
+type
+ EDCP_hash= class(Exception);
+ TDCP_hash= class(TComponent)
+ protected
+ fInitialized: boolean; { Whether or not the algorithm has been initialized }
+
+ procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector }
+ procedure DeadStr(Value: string); { Knudge to display vars in the object inspector }
+
+ private
+ function _GetId: integer;
+ function _GetAlgorithm: string;
+ function _GetHashSize: integer;
+
+ public
+ property Initialized: boolean
+ read fInitialized;
+
+ class function GetId: integer; virtual;
+ { Get the algorithm id }
+ class function GetAlgorithm: string; virtual;
+ { Get the algorithm name }
+ class function GetHashSize: integer; virtual;
+ { Get the size of the digest produced - in bits }
+ class function SelfTest: boolean; virtual;
+ { Tests the implementation with several test vectors }
+
+ procedure Init; virtual;
+ { Initialize the hash algorithm }
+ procedure Final(var Digest); virtual;
+ { Create the final digest and clear the stored information.
+ The size of the Digest var must be at least equal to the hash size }
+ procedure Burn; virtual;
+ { Clear any stored information with out creating the final digest }
+
+ procedure Update(const Buffer; Size: longword); virtual;
+ { Update the hash buffer with Size bytes of data from Buffer }
+ procedure UpdateStream(Stream: TStream; Size: longword);
+ { Update the hash buffer with Size bytes of data from the stream }
+ procedure UpdateStr(const Str: AnsiString); {$IFDEF UNICODE}overload; {$ENDIF}
+ { Update the hash buffer with the string }
+{$IFDEF UNICODE}
+ procedure UpdateStr(const Str: UnicodeString); overload;
+ { Update the hash buffer with the string }
+{$ENDIF}
+
+
+ destructor Destroy; override;
+
+ published
+ property Id: integer
+ read _GetId write DeadInt;
+ property Algorithm: string
+ read _GetAlgorithm write DeadStr;
+ property HashSize: integer
+ read _GetHashSize write DeadInt;
+ end;
+ TDCP_hashclass= class of TDCP_hash;
+
+
+{******************************************************************************}
+ { The base class from which all encryption components will be derived. }
+ { Stream ciphers will be derived directly from this class where as }
+ { Block ciphers will have a further foundation class TDCP_blockcipher. }
+
+type
+ EDCP_cipher= class(Exception);
+ TDCP_cipher= class(TComponent)
+ protected
+ fInitialized: boolean; { Whether or not the key setup has been done yet }
+
+ procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector }
+ procedure DeadStr(Value: string); { Knudge to display vars in the object inspector }
+
+ private
+ function _GetId: integer;
+ function _GetAlgorithm: string;
+ function _GetMaxKeySize: integer;
+
+ public
+ property Initialized: boolean
+ read fInitialized;
+
+ class function GetId: integer; virtual;
+ { Get the algorithm id }
+ class function GetAlgorithm: string; virtual;
+ { Get the algorithm name }
+ class function GetMaxKeySize: integer; virtual;
+ { Get the maximum key size (in bits) }
+ class function SelfTest: boolean; virtual;
+ { Tests the implementation with several test vectors }
+
+ procedure Init(const Key; Size: longword; InitVector: pointer); virtual;
+ { Do key setup based on the data in Key, size is in bits }
+ procedure InitStr(const Key: AnsiString; HashType: TDCP_hashclass); {$IFDEF UNICODE}overload; {$ENDIF}
+ { Do key setup based on a hash of the key string }
+{$IFDEF UNICODE}
+ procedure InitStr(const Key: UnicodeString; HashType: TDCP_hashclass); overload;
+ { Do key setup based on a hash of the key string }
+{$ENDIF}
+ procedure Burn; virtual;
+ { Clear all stored key information }
+ procedure Reset; virtual;
+ { Reset any stored chaining information }
+ procedure Encrypt(const Indata; var Outdata; Size: longword); virtual;
+ { Encrypt size bytes of data and place in Outdata }
+ procedure Decrypt(const Indata; var Outdata; Size: longword); virtual;
+ { Decrypt size bytes of data and place in Outdata }
+ function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
+ { Encrypt size bytes of data from InStream and place in OutStream }
+ function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
+ { Decrypt size bytes of data from InStream and place in OutStream }
+ function EncryptString(const Str: AnsiString): AnsiString; {$IFDEF UNICODE}overload; {$ENDIF}virtual;
+ { Encrypt a string and return Base64 encoded }
+ function DecryptString(const Str: AnsiString): AnsiString; {$IFDEF UNICODE}overload; {$ENDIF}virtual;
+ { Decrypt a Base64 encoded string }
+{$IFDEF UNICODE}
+ function EncryptString(const Str: UnicodeString): UnicodeString; overload; virtual;
+ { Encrypt a Unicode string and return Base64 encoded }
+ function DecryptString(const Str: UnicodeString): UnicodeString; overload; virtual;
+ { Decrypt a Base64 encoded Unicode string }
+{$ENDIF}
+
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+
+ published
+ property Id: integer
+ read _GetId write DeadInt;
+ property Algorithm: string
+ read _GetAlgorithm write DeadStr;
+ property MaxKeySize: integer
+ read _GetMaxKeySize write DeadInt;
+ end;
+ TDCP_cipherclass= class of TDCP_cipher;
+
+
+{******************************************************************************}
+ { The base class from which all block ciphers are to be derived, this }
+ { extra class takes care of the different block encryption modes. }
+
+type
+ TDCP_ciphermode= (cmCBC, cmCFB8bit, cmCFBblock, cmOFB, cmCTR); // cmCFB8bit is equal to DCPcrypt v1.xx's CFB mode
+ EDCP_blockcipher= class(EDCP_cipher);
+ TDCP_blockcipher= class(TDCP_cipher)
+ protected
+ fCipherMode: TDCP_ciphermode; { The cipher mode the encrypt method uses }
+
+ procedure InitKey(const Key; Size: longword); virtual;
+
+ private
+ function _GetBlockSize: integer;
+
+ public
+ class function GetBlockSize: integer; virtual;
+ { Get the block size of the cipher (in bits) }
+
+ procedure SetIV(const Value); virtual;
+ { Sets the IV to Value and performs a reset }
+ procedure GetIV(var Value); virtual;
+ { Returns the current chaining information, not the actual IV }
+
+ procedure Encrypt(const Indata; var Outdata; Size: longword); override;
+ { Encrypt size bytes of data and place in Outdata using CipherMode }
+ procedure Decrypt(const Indata; var Outdata; Size: longword); override;
+ { Decrypt size bytes of data and place in Outdata using CipherMode }
+ function EncryptString(const Str: AnsiString): AnsiString; overload; override;
+ { Encrypt a string and return Base64 encoded }
+ function DecryptString(const Str: AnsiString): AnsiString; overload; override;
+ { Decrypt a Base64 encoded string }
+{$IFDEF UNICODE}
+ function EncryptString(const Str: UnicodeString): UnicodeString; overload; override;
+ { Encrypt a Unicode string and return Base64 encoded }
+ function DecryptString(const Str: UnicodeString): UnicodeString; overload; override;
+ { Decrypt a Base64 encoded Unicode string }
+{$ENDIF}
+ procedure EncryptECB(const Indata; var Outdata); virtual;
+ { Encrypt a block of data using the ECB method of encryption }
+ procedure DecryptECB(const Indata; var Outdata); virtual;
+ { Decrypt a block of data using the ECB method of decryption }
+ procedure EncryptCBC(const Indata; var Outdata; Size: longword); virtual;
+ { Encrypt size bytes of data using the CBC method of encryption }
+ procedure DecryptCBC(const Indata; var Outdata; Size: longword); virtual;
+ { Decrypt size bytes of data using the CBC method of decryption }
+ procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); virtual;
+ { Encrypt size bytes of data using the CFB (8 bit) method of encryption }
+ procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); virtual;
+ { Decrypt size bytes of data using the CFB (8 bit) method of decryption }
+ procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); virtual;
+ { Encrypt size bytes of data using the CFB (block) method of encryption }
+ procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); virtual;
+ { Decrypt size bytes of data using the CFB (block) method of decryption }
+ procedure EncryptOFB(const Indata; var Outdata; Size: longword); virtual;
+ { Encrypt size bytes of data using the OFB method of encryption }
+ procedure DecryptOFB(const Indata; var Outdata; Size: longword); virtual;
+ { Decrypt size bytes of data using the OFB method of decryption }
+ procedure EncryptCTR(const Indata; var Outdata; Size: longword); virtual;
+ { Encrypt size bytes of data using the CTR method of encryption }
+ procedure DecryptCTR(const Indata; var Outdata; Size: longword); virtual;
+ { Decrypt size bytes of data using the CTR method of decryption }
+
+ constructor Create(AOwner: TComponent); override;
+
+ published
+ property BlockSize: integer
+ read _GetBlockSize write DeadInt;
+ property CipherMode: TDCP_ciphermode
+ read fCipherMode write fCipherMode default cmCBC;
+ end;
+ TDCP_blockcipherclass= class of TDCP_blockcipher;
+
+
+{******************************************************************************}
+ { Helper functions }
+
+procedure XorBlock(var InData1, InData2; Size: longword);
+
+
+implementation
+{$Q-}{$R-}
+
+
+{** TDCP_hash *****************************************************************}
+
+procedure TDCP_hash.DeadInt(Value: integer);
+begin
+end;
+
+procedure TDCP_hash.DeadStr(Value: string);
+begin
+end;
+
+function TDCP_hash._GetId: integer;
+begin
+ Result:= GetId;
+end;
+
+function TDCP_hash._GetAlgorithm: string;
+begin
+ Result:= GetAlgorithm;
+end;
+
+function TDCP_hash._GetHashSize: integer;
+begin
+ Result:= GetHashSize;
+end;
+
+class function TDCP_hash.GetId: integer;
+begin
+ Result:= -1;
+end;
+
+class function TDCP_hash.GetAlgorithm: string;
+begin
+ Result:= '';
+end;
+
+class function TDCP_hash.GetHashSize: integer;
+begin
+ Result:= -1;
+end;
+
+class function TDCP_hash.SelfTest: boolean;
+begin
+ Result:= false;
+end;
+
+procedure TDCP_hash.Init;
+begin
+end;
+
+procedure TDCP_hash.Final(var Digest);
+begin
+end;
+
+procedure TDCP_hash.Burn;
+begin
+end;
+
+procedure TDCP_hash.Update(const Buffer; Size: longword);
+begin
+end;
+
+procedure TDCP_hash.UpdateStream(Stream: TStream; Size: longword);
+var
+ Buffer: array[0..8191] of byte;
+ i, read: integer;
+begin
+ for i:= 1 to (Size div Sizeof(Buffer)) do
+ begin
+ read:= Stream.Read(Buffer,Sizeof(Buffer));
+ Update(Buffer,read);
+ end;
+ if (Size mod Sizeof(Buffer))<> 0 then
+ begin
+ read:= Stream.Read(Buffer,Size mod Sizeof(Buffer));
+ Update(Buffer,read);
+ end;
+end;
+
+procedure TDCP_hash.UpdateStr(const Str: AnsiString);
+begin
+ Update(Str[1],Length(Str));
+end;
+
+{$IFDEF UNICODE}
+procedure TDCP_hash.UpdateStr(const Str: UnicodeString);
+begin
+ Update(Str[1],Length(Str)*Sizeof(Str[1]));
+end; { DecryptString }
+{$ENDIF}
+
+destructor TDCP_hash.Destroy;
+begin
+ if fInitialized then
+ Burn;
+ inherited Destroy;
+end;
+
+
+{** TDCP_cipher ***************************************************************}
+
+procedure TDCP_cipher.DeadInt(Value: integer);
+begin
+end;
+
+procedure TDCP_cipher.DeadStr(Value: string);
+begin
+end;
+
+function TDCP_cipher._GetId: integer;
+begin
+ Result:= GetId;
+end;
+
+function TDCP_cipher._GetAlgorithm: string;
+begin
+ Result:= GetAlgorithm;
+end;
+
+function TDCP_cipher._GetMaxKeySize: integer;
+begin
+ Result:= GetMaxKeySize;
+end;
+
+class function TDCP_cipher.GetId: integer;
+begin
+ Result:= -1;
+end;
+
+class function TDCP_cipher.GetAlgorithm: string;
+begin
+ Result:= '';
+end;
+
+class function TDCP_cipher.GetMaxKeySize: integer;
+begin
+ Result:= -1;
+end;
+
+class function TDCP_cipher.SelfTest: boolean;
+begin
+ Result:= false;
+end;
+
+procedure TDCP_cipher.Init(const Key; Size: longword; InitVector: pointer);
+begin
+ if fInitialized then
+ Burn;
+ if (Size <= 0) or ((Size and 3)<> 0) or (Size> longword(GetMaxKeySize)) then
+ raise EDCP_cipher.Create('Invalid key size')
+ else
+ fInitialized:= true;
+end;
+
+procedure TDCP_cipher.InitStr(const Key: AnsiString; HashType: TDCP_hashclass);
+var
+ Hash: TDCP_hash;
+ Digest: pointer;
+begin
+ if fInitialized then
+ Burn;
+ try
+ GetMem(Digest,HashType.GetHashSize div 8);
+ Hash:= HashType.Create(Self);
+ Hash.Init;
+ Hash.UpdateStr(Key);
+ Hash.Final(Digest^);
+ Hash.Free;
+ if MaxKeySize< HashType.GetHashSize then
+ Init(Digest^,MaxKeySize,nil)
+ else
+ Init(Digest^,HashType.GetHashSize,nil);
+ FillChar(Digest^,HashType.GetHashSize div 8,$FF);
+ FreeMem(Digest);
+ except
+ raise EDCP_cipher.Create('Unable to allocate sufficient memory for hash digest');
+ end;
+end;
+
+{$IFDEF UNICODE}
+procedure TDCP_cipher.InitStr(const Key: UnicodeString; HashType: TDCP_hashclass);
+var
+ Hash: TDCP_hash;
+ Digest: pointer;
+begin
+ if fInitialized then
+ Burn;
+ try
+ GetMem(Digest,HashType.GetHashSize div 8);
+ Hash:= HashType.Create(Self);
+ Hash.Init;
+ Hash.UpdateStr(Key);
+ Hash.Final(Digest^);
+ Hash.Free;
+ if MaxKeySize< HashType.GetHashSize then
+ Init(Digest^,MaxKeySize,nil)
+ else
+ Init(Digest^,HashType.GetHashSize,nil);
+ FillChar(Digest^,HashType.GetHashSize div 8,$FF);
+ FreeMem(Digest);
+ except
+ raise EDCP_cipher.Create('Unable to allocate sufficient memory for hash digest');
+ end;
+end;
+{$ENDIF}
+
+procedure TDCP_cipher.Burn;
+begin
+ fInitialized:= false;
+end;
+
+procedure TDCP_cipher.Reset;
+begin
+end;
+
+procedure TDCP_cipher.Encrypt(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_cipher.Decrypt(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+function TDCP_cipher.EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
+var
+ Buffer: array[0..8191] of byte;
+ i, Read: longword;
+begin
+ Result:= 0;
+ for i:= 1 to (Size div Sizeof(Buffer)) do
+ begin
+ Read:= InStream.Read(Buffer,Sizeof(Buffer));
+ Inc(Result,Read);
+ Encrypt(Buffer,Buffer,Read);
+ OutStream.Write(Buffer,Read);
+ end;
+ if (Size mod Sizeof(Buffer))<> 0 then
+ begin
+ Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer));
+ Inc(Result,Read);
+ Encrypt(Buffer,Buffer,Read);
+ OutStream.Write(Buffer,Read);
+ end;
+end;
+
+function TDCP_cipher.DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
+var
+ Buffer: array[0..8191] of byte;
+ i, Read: longword;
+begin
+ Result:= 0;
+ for i:= 1 to (Size div Sizeof(Buffer)) do
+ begin
+ Read:= InStream.Read(Buffer,Sizeof(Buffer));
+ Inc(Result,Read);
+ Decrypt(Buffer,Buffer,Read);
+ OutStream.Write(Buffer,Read);
+ end;
+ if (Size mod Sizeof(Buffer))<> 0 then
+ begin
+ Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer));
+ Inc(Result,Read);
+ Decrypt(Buffer,Buffer,Read);
+ OutStream.Write(Buffer,Read);
+ end;
+end;
+
+function TDCP_cipher.EncryptString(const Str: AnsiString): AnsiString;
+begin
+ SetLength(Result,Length(Str));
+ Encrypt(Str[1],Result[1],Length(Str));
+ Result:= Base64EncodeStr(Result);
+end;
+
+function TDCP_cipher.DecryptString(const Str: AnsiString): AnsiString;
+begin
+ Result:= Base64DecodeStr(Str);
+ Decrypt(Result[1],Result[1],Length(Result));
+end;
+
+{$IFDEF UNICODE}
+function TDCP_cipher.EncryptString(const Str: UnicodeString): UnicodeString;
+begin
+ SetLength(Result,Length(Str));
+ Encrypt(Str[1],Result[1],Length(Str)*SizeOf(Str[1]));
+ Result:= Base64EncodeStr(Result);
+end;
+
+function TDCP_cipher.DecryptString(const Str: UnicodeString): UnicodeString;
+begin
+ Result:= Base64DecodeStr(Str);
+ Decrypt(Result[1],Result[1],Length(Result)*SizeOf(Result[1]));
+end;
+{$ENDIF}
+
+constructor TDCP_cipher.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ Burn;
+end;
+
+destructor TDCP_cipher.Destroy;
+begin
+ if fInitialized then
+ Burn;
+ inherited Destroy;
+end;
+
+
+{** TDCP_blockcipher **********************************************************}
+
+procedure TDCP_blockcipher.InitKey(const Key; Size: longword);
+begin
+end;
+
+function TDCP_blockcipher._GetBlockSize: integer;
+begin
+ Result:= GetBlockSize;
+end;
+
+class function TDCP_blockcipher.GetBlockSize: integer;
+begin
+ Result:= -1;
+end;
+
+procedure TDCP_blockcipher.SetIV(const Value);
+begin
+end;
+
+procedure TDCP_blockcipher.GetIV(var Value);
+begin
+end;
+
+procedure TDCP_blockcipher.Encrypt(const Indata; var Outdata; Size: longword);
+begin
+ case fCipherMode of
+ cmCBC: EncryptCBC(Indata,Outdata,Size);
+ cmCFB8bit: EncryptCFB8bit(Indata,Outdata,Size);
+ cmCFBblock: EncryptCFBblock(Indata,Outdata,Size);
+ cmOFB: EncryptOFB(Indata,Outdata,Size);
+ cmCTR: EncryptCTR(Indata,Outdata,Size);
+ end;
+end;
+
+function TDCP_blockcipher.EncryptString(const Str: AnsiString): AnsiString;
+begin
+ SetLength(Result,Length(Str));
+ EncryptCFB8bit(Str[1],Result[1],Length(Str));
+ Result:= Base64EncodeStr(Result);
+end;
+
+function TDCP_blockcipher.DecryptString(const Str: AnsiString): AnsiString;
+begin
+ Result:= Base64DecodeStr(Str);
+ DecryptCFB8bit(Result[1],Result[1],Length(Result));
+end;
+
+{$IFDEF UNICODE}
+function TDCP_blockcipher.EncryptString(const Str: UnicodeString): UnicodeString;
+begin
+ SetLength(Result,Length(Str));
+ EncryptCFB8bit(Str[1],Result[1],Length(Str)*SizeOf(Str[1]));
+ Result:= Base64EncodeStr(Result);
+end;
+
+function TDCP_blockcipher.DecryptString(const Str: UnicodeString): UnicodeString;
+begin
+ Result:= Base64DecodeStr(Str);
+ DecryptCFB8bit(Result[1],Result[1],Length(Result)*SizeOf(Result[1]));
+end;
+{$ENDIF}
+
+procedure TDCP_blockcipher.Decrypt(const Indata; var Outdata; Size: longword);
+begin
+ case fCipherMode of
+ cmCBC: DecryptCBC(Indata,Outdata,Size);
+ cmCFB8bit: DecryptCFB8bit(Indata,Outdata,Size);
+ cmCFBblock: DecryptCFBblock(Indata,Outdata,Size);
+ cmOFB: DecryptOFB(Indata,Outdata,Size);
+ cmCTR: DecryptCTR(Indata,Outdata,Size);
+ end;
+end;
+
+procedure TDCP_blockcipher.EncryptECB(const Indata; var Outdata);
+begin
+end;
+
+procedure TDCP_blockcipher.DecryptECB(const Indata; var Outdata);
+begin
+end;
+
+procedure TDCP_blockcipher.EncryptCBC(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.DecryptCBC(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.EncryptCFB8bit(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.DecryptCFB8bit(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.EncryptCFBblock(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.DecryptCFBblock(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.EncryptOFB(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.DecryptOFB(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.EncryptCTR(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+procedure TDCP_blockcipher.DecryptCTR(const Indata; var Outdata; Size: longword);
+begin
+end;
+
+constructor TDCP_blockcipher.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ fCipherMode:= cmCBC;
+end;
+
+
+{** Helpher functions *********************************************************}
+procedure XorBlock(var InData1, InData2; Size: longword);
+var
+ i: longword;
+begin
+ for i:= 1 to Size do
+ Pbyte(longword(@InData1)+i-1)^:= Pbyte(longword(@InData1)+i-1)^ xor Pbyte(longword(@InData2)+i-1)^;
+end;
+
+end.
+
diff --git a/DCPdelphi12_2.dpk b/DCPdelphi12_2.dpk
new file mode 100644
index 0000000..7fca962
--- /dev/null
+++ b/DCPdelphi12_2.dpk
@@ -0,0 +1,68 @@
+package DCPdelphi12_2;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'DCPcrypt cryptographic component library v2 BETA 3'}
+{$IMPLICITBUILD ON}
+
+requires
+ rtl;
+
+contains
+ DCPbase64 in 'DCPbase64.pas',
+ DCPblockciphers in 'DCPblockciphers.pas',
+ DCPconst in 'DCPconst.pas',
+ DCPcrypt2 in 'DCPcrypt2.pas',
+ DCPblowfish in 'Ciphers\DCPblowfish.pas',
+ DCPcast128 in 'Ciphers\DCPcast128.pas',
+ DCPcast256 in 'Ciphers\DCPcast256.pas',
+ DCPdes in 'Ciphers\DCPdes.pas',
+ DCPgost in 'Ciphers\DCPgost.pas',
+ DCPice in 'Ciphers\DCPice.pas',
+ DCPidea in 'Ciphers\DCPidea.pas',
+ DCPmars in 'Ciphers\DCPmars.pas',
+ DCPmisty1 in 'Ciphers\DCPmisty1.pas',
+ DCPrc2 in 'Ciphers\DCPrc2.pas',
+ DCPrc4 in 'Ciphers\DCPrc4.pas',
+ DCPrc5 in 'Ciphers\DCPrc5.pas',
+ DCPrc6 in 'Ciphers\DCPrc6.pas',
+ DCPrijndael in 'Ciphers\DCPrijndael.pas',
+ DCPtea in 'Ciphers\DCPtea.pas',
+ DCPtwofish in 'Ciphers\DCPtwofish.pas',
+ DCPhaval in 'Hashes\DCPhaval.pas',
+ DCPmd4 in 'Hashes\DCPmd4.pas',
+ DCPmd5 in 'Hashes\DCPmd5.pas',
+ DCPripemd128 in 'Hashes\DCPripemd128.pas',
+ DCPripemd160 in 'Hashes\DCPripemd160.pas',
+ DCPsha1 in 'Hashes\DCPsha1.pas',
+ DCPtiger in 'Hashes\DCPtiger.pas',
+ DCPreg in 'DCPreg.pas',
+ DCPserpent in 'Ciphers\DCPserpent.pas',
+ DCPsha256 in 'Hashes\DCPsha256.pas',
+ DCPsha512 in 'Hashes\DCPsha512.pas',
+ DCPtypes in 'DCPtypes.pas';
+
+end.
diff --git a/DCPdelphi12_2.dproj b/DCPdelphi12_2.dproj
new file mode 100644
index 0000000..7aee1b8
--- /dev/null
+++ b/DCPdelphi12_2.dproj
@@ -0,0 +1,299 @@
+
+
+ {ae9b70a6-b2c2-45a0-ba7b-2448a376d24f}
+ DCPdelphi12_2.dpk
+ Debug
+ DCC32
+ DCPdelphi12_2.bpl
+ 20.2
+ Release
+ None
+ True
+ Win32
+ 1048579
+ Package
+ DCPdelphi12_2
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ DCPdelphi12_2
+ .\$(Platform)\$(Config)
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ rtl;$(DCC_UsePackage)
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ 1036
+ 00400000
+ DCPdelphi12_2.bpl
+ DCPcrypt cryptographic component library v2 BETA 3
+ true
+ true
+ 1
+
+
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34
+ Debug
+ false
+ activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar
+
+
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34
+ Debug
+ false
+ activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar
+
+
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
+ iPhoneAndiPad
+ Debug
+ $(MSBuildProjectName)
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
+ iPhoneAndiPad
+
+
+ .\$(Platform)\$(Config)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+
+
+ .\$(Platform)\$(Config)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ 1033
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ true
+
+
+ 7.0
+ 0
+ False
+ 0
+ RELEASE;$(DCC_Define)
+
+
+ 1033
+ .\$(Platform)\$(Config)
+
+
+ .\$(Platform)\$(Config)
+ 1033
+
+
+ 7.0
+
+
+ true
+
+
+ true
+
+
+ 1033
+
+
+ 1033
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ False
+ True
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1036
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ DCPdelphi12_2.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ False
+ False
+ True
+ True
+ True
+
+
+ 12
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+ Cfg_2
+ Base
+
+
+
+
+
diff --git a/DCPdelphi12_2.dproj.local b/DCPdelphi12_2.dproj.local
new file mode 100644
index 0000000..d576f03
--- /dev/null
+++ b/DCPdelphi12_2.dproj.local
@@ -0,0 +1,2 @@
+
+
diff --git a/DCPdelphi12_2.identcache b/DCPdelphi12_2.identcache
new file mode 100644
index 0000000..5e5db31
Binary files /dev/null and b/DCPdelphi12_2.identcache differ
diff --git a/DCPdelphi12_2.res b/DCPdelphi12_2.res
new file mode 100644
index 0000000..194adb8
Binary files /dev/null and b/DCPdelphi12_2.res differ
diff --git a/Hashes/DCPsha512.pas b/Hashes/DCPsha512.pas
index 863c550..cba96a4 100644
--- a/Hashes/DCPsha512.pas
+++ b/Hashes/DCPsha512.pas
@@ -31,9 +31,9 @@ interface
type
TDCP_sha512base= class(TDCP_hash)
protected
- LenHi, LenLo: int64;
+ LenHi, LenLo: TDCPUInt64;
Index: DWord;
- CurrentHash: array[0..7] of int64;
+ CurrentHash: array[0..7] of TDCPUInt64;
HashBuffer: array[0..127] of byte;
procedure Compress;
public
@@ -66,7 +66,7 @@ TDCP_sha512= class(TDCP_sha512base)
implementation
{$R-}{$Q-}
-function SwapDWord(a: int64): int64;
+function SwapDWord(a: TDCPUInt64): TDCPUInt64;
begin
Result:= ((a and $FF) shl 56) or ((a and $FF00) shl 40) or ((a and $FF0000) shl 24) or ((a and $FF000000) shl 8) or
((a and $FF00000000) shr 8) or ((a and $FF0000000000) shr 24) or ((a and $FF000000000000) shr 40) or ((a and $FF00000000000000) shr 56);
@@ -74,8 +74,8 @@ function SwapDWord(a: int64): int64;
procedure TDCP_sha512base.Compress;
var
- a, b, c, d, e, f, g, h, t1, t2: int64;
- W: array[0..79] of int64;
+ a, b, c, d, e, f, g, h, t1, t2: TDCPUInt64;
+ W: array[0..79] of TDCPUInt64;
i: longword;
begin
Index:= 0;
@@ -101,86 +101,86 @@ procedure TDCP_sha512base.Compress;
end;
}
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $428a2f98d728ae22 + W[0]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $7137449123ef65cd + W[1]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $b5c0fbcfec4d3b2f + W[2]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $e9b5dba58189dbbc + W[3]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $3956c25bf348b538 + W[4]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $59f111f1b605d019 + W[5]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $923f82a4af194f9b + W[6]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $ab1c5ed5da6d8118 + W[7]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $d807aa98a3030242 + W[8]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $12835b0145706fbe + W[9]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $243185be4ee4b28c + W[10]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $550c7dc3d5ffb4e2 + W[11]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $72be5d74f27b896f + W[12]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $80deb1fe3b1696b1 + W[13]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $9bdc06a725c71235 + W[14]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $c19bf174cf692694 + W[15]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $e49b69c19ef14ad2 + W[16]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $efbe4786384f25e3 + W[17]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $0fc19dc68b8cd5b5 + W[18]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $240ca1cc77ac9c65 + W[19]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $2de92c6f592b0275 + W[20]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $4a7484aa6ea6e483 + W[21]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5cb0a9dcbd41fbd4 + W[22]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $76f988da831153b5 + W[23]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $983e5152ee66dfab + W[24]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $a831c66d2db43210 + W[25]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $b00327c898fb213f + W[26]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $bf597fc7beef0ee4 + W[27]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $c6e00bf33da88fc2 + W[28]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $d5a79147930aa725 + W[29]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $06ca6351e003826f + W[30]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $142929670a0e6e70 + W[31]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $27b70a8546d22ffc + W[32]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $2e1b21385c26c926 + W[33]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $4d2c6dfc5ac42aed + W[34]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $53380d139d95b3df + W[35]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $650a73548baf63de + W[36]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $766a0abb3c77b2a8 + W[37]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $81c2c92e47edaee6 + W[38]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $92722c851482353b + W[39]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $a2bfe8a14cf10364 + W[40]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $a81a664bbc423001 + W[41]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $c24b8b70d0f89791 + W[42]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $c76c51a30654be30 + W[43]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $d192e819d6ef5218 + W[44]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $d69906245565a910 + W[45]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $f40e35855771202a + W[46]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $106aa07032bbd1b8 + W[47]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $19a4c116b8d2d0c8 + W[48]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $1e376c085141ab53 + W[49]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $2748774cdf8eeb99 + W[50]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $34b0bcb5e19b48a8 + W[51]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $391c0cb3c5c95a63 + W[52]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $4ed8aa4ae3418acb + W[53]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5b9cca4f7763e373 + W[54]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $682e6ff3d6b2b8a3 + W[55]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $748f82ee5defb2fc + W[56]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $78a5636f43172f60 + W[57]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $84c87814a1f0ab72 + W[58]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $8cc702081a6439ec + W[59]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $90befffa23631e28 + W[60]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $a4506cebde82bde9 + W[61]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $bef9a3f7b2c67915 + W[62]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $c67178f2e372532b + W[63]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $ca273eceea26619c + W[64]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $d186b8c721c0c207 + W[65]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $eada7dd6cde0eb1e + W[66]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $f57d4f7fee6ed178 + W[67]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $06f067aa72176fba + W[68]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $0a637dc5a2c898a6 + W[69]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $113f9804bef90dae + W[70]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $1b710b35131c471b + W[71]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
- t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $28db77f523047d84 + W[72]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
- t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $32caab7b40c72493 + W[73]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
- t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $3c9ebe0a15c9bebc + W[74]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
- t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $431d67c49c100d4c + W[75]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
- t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $4cc5d4becb3e42b6 + W[76]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
- t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $597f299cfc657e2a + W[77]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
- t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5fcb6fab3ad6faec + W[78]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
- t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $6c44198c4a475817 + W[79]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($428a2f98d728ae22) + W[0]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($7137449123ef65cd) + W[1]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($b5c0fbcfec4d3b2f) + W[2]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($e9b5dba58189dbbc) + W[3]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($3956c25bf348b538) + W[4]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($59f111f1b605d019) + W[5]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($923f82a4af194f9b) + W[6]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($ab1c5ed5da6d8118) + W[7]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($d807aa98a3030242) + W[8]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($12835b0145706fbe) + W[9]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($243185be4ee4b28c) + W[10]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($550c7dc3d5ffb4e2) + W[11]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($72be5d74f27b896f) + W[12]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($80deb1fe3b1696b1) + W[13]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($9bdc06a725c71235) + W[14]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($c19bf174cf692694) + W[15]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($e49b69c19ef14ad2) + W[16]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($efbe4786384f25e3) + W[17]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($0fc19dc68b8cd5b5) + W[18]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($240ca1cc77ac9c65) + W[19]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($2de92c6f592b0275) + W[20]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($4a7484aa6ea6e483) + W[21]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($5cb0a9dcbd41fbd4) + W[22]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($76f988da831153b5) + W[23]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($983e5152ee66dfab) + W[24]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($a831c66d2db43210) + W[25]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($b00327c898fb213f) + W[26]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($bf597fc7beef0ee4) + W[27]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($c6e00bf33da88fc2) + W[28]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($d5a79147930aa725) + W[29]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($06ca6351e003826f) + W[30]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($142929670a0e6e70) + W[31]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($27b70a8546d22ffc) + W[32]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($2e1b21385c26c926) + W[33]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($4d2c6dfc5ac42aed) + W[34]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($53380d139d95b3df) + W[35]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($650a73548baf63de) + W[36]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($766a0abb3c77b2a8) + W[37]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($81c2c92e47edaee6) + W[38]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($92722c851482353b) + W[39]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($a2bfe8a14cf10364) + W[40]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($a81a664bbc423001) + W[41]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($c24b8b70d0f89791) + W[42]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($c76c51a30654be30) + W[43]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($d192e819d6ef5218) + W[44]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($d69906245565a910) + W[45]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($f40e35855771202a) + W[46]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($106aa07032bbd1b8) + W[47]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($19a4c116b8d2d0c8) + W[48]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($1e376c085141ab53) + W[49]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($2748774cdf8eeb99) + W[50]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($34b0bcb5e19b48a8) + W[51]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($391c0cb3c5c95a63) + W[52]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($4ed8aa4ae3418acb) + W[53]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($5b9cca4f7763e373) + W[54]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($682e6ff3d6b2b8a3) + W[55]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($748f82ee5defb2fc) + W[56]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($78a5636f43172f60) + W[57]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($84c87814a1f0ab72) + W[58]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($8cc702081a6439ec) + W[59]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($90befffa23631e28) + W[60]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($a4506cebde82bde9) + W[61]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($bef9a3f7b2c67915) + W[62]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($c67178f2e372532b) + W[63]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($ca273eceea26619c) + W[64]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($d186b8c721c0c207) + W[65]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($eada7dd6cde0eb1e) + W[66]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($f57d4f7fee6ed178) + W[67]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($06f067aa72176fba) + W[68]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($0a637dc5a2c898a6) + W[69]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($113f9804bef90dae) + W[70]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($1b710b35131c471b) + W[71]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
+ t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + TDCPUInt64($28db77f523047d84) + W[72]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2;
+ t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + TDCPUInt64($32caab7b40c72493) + W[73]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2;
+ t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + TDCPUInt64($3c9ebe0a15c9bebc) + W[74]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2;
+ t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + TDCPUInt64($431d67c49c100d4c) + W[75]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2;
+ t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + TDCPUInt64($4cc5d4becb3e42b6) + W[76]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2;
+ t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + TDCPUInt64($597f299cfc657e2a) + W[77]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2;
+ t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + TDCPUInt64($5fcb6fab3ad6faec) + W[78]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2;
+ t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + TDCPUInt64($6c44198c4a475817) + W[79]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2;
CurrentHash[0]:= CurrentHash[0] + a;
CurrentHash[1]:= CurrentHash[1] + b;
@@ -278,14 +278,14 @@ class function TDCP_sha384.SelfTest: boolean;
procedure TDCP_sha384.Init;
begin
Burn;
- CurrentHash[0]:= $cbbb9d5dc1059ed8;
- CurrentHash[1]:= $629a292a367cd507;
- CurrentHash[2]:= $9159015a3070dd17;
- CurrentHash[3]:= $152fecd8f70e5939;
- CurrentHash[4]:= $67332667ffc00b31;
- CurrentHash[5]:= $8eb44a8768581511;
- CurrentHash[6]:= $db0c2e0d64f98fa7;
- CurrentHash[7]:= $47b5481dbefa4fa4;
+ CurrentHash[0]:= TDCPUInt64($cbbb9d5dc1059ed8);
+ CurrentHash[1]:= TDCPUInt64($629a292a367cd507);
+ CurrentHash[2]:= TDCPUInt64($9159015a3070dd17);
+ CurrentHash[3]:= TDCPUInt64($152fecd8f70e5939);
+ CurrentHash[4]:= TDCPUInt64($67332667ffc00b31);
+ CurrentHash[5]:= TDCPUInt64($8eb44a8768581511);
+ CurrentHash[6]:= TDCPUInt64($db0c2e0d64f98fa7);
+ CurrentHash[7]:= TDCPUInt64($47b5481dbefa4fa4);
fInitialized:= true;
end;
@@ -296,8 +296,8 @@ procedure TDCP_sha384.Final(var Digest);
HashBuffer[Index]:= $80;
if Index>= 112 then
Compress;
- Pint64(@HashBuffer[112])^:= SwapDWord(LenHi);
- Pint64(@HashBuffer[120])^:= SwapDWord(LenLo);
+ PDCPUInt64(@HashBuffer[112])^:= SwapDWord(LenHi);
+ PDCPUInt64(@HashBuffer[120])^:= SwapDWord(LenLo);
Compress;
CurrentHash[0]:= SwapDWord(CurrentHash[0]);
CurrentHash[1]:= SwapDWord(CurrentHash[1]);
@@ -356,14 +356,14 @@ class function TDCP_sha512.SelfTest: boolean;
procedure TDCP_sha512.Init;
begin
Burn;
- CurrentHash[0]:= $6a09e667f3bcc908;
- CurrentHash[1]:= $bb67ae8584caa73b;
- CurrentHash[2]:= $3c6ef372fe94f82b;
- CurrentHash[3]:= $a54ff53a5f1d36f1;
- CurrentHash[4]:= $510e527fade682d1;
- CurrentHash[5]:= $9b05688c2b3e6c1f;
- CurrentHash[6]:= $1f83d9abfb41bd6b;
- CurrentHash[7]:= $5be0cd19137e2179;
+ CurrentHash[0]:= TDCPUInt64($6a09e667f3bcc908);
+ CurrentHash[1]:= TDCPUInt64($bb67ae8584caa73b);
+ CurrentHash[2]:= TDCPUInt64($3c6ef372fe94f82b);
+ CurrentHash[3]:= TDCPUInt64($a54ff53a5f1d36f1);
+ CurrentHash[4]:= TDCPUInt64($510e527fade682d1);
+ CurrentHash[5]:= TDCPUInt64($9b05688c2b3e6c1f);
+ CurrentHash[6]:= TDCPUInt64($1f83d9abfb41bd6b);
+ CurrentHash[7]:= TDCPUInt64($5be0cd19137e2179);
fInitialized:= true;
end;
@@ -374,8 +374,8 @@ procedure TDCP_sha512.Final(var Digest);
HashBuffer[Index]:= $80;
if Index>= 112 then
Compress;
- Pint64(@HashBuffer[112])^:= SwapDWord(LenHi);
- Pint64(@HashBuffer[120])^:= SwapDWord(LenLo);
+ PDCPUInt64(@HashBuffer[112])^:= SwapDWord(LenHi);
+ PDCPUInt64(@HashBuffer[120])^:= SwapDWord(LenLo);
Compress;
CurrentHash[0]:= SwapDWord(CurrentHash[0]);
CurrentHash[1]:= SwapDWord(CurrentHash[1]);
diff --git a/Hashes/DCPtiger.inc b/Hashes/DCPtiger.inc
index 4772d31..c9bbaf1 100644
--- a/Hashes/DCPtiger.inc
+++ b/Hashes/DCPtiger.inc
@@ -1,520 +1,520 @@
const
- t1: array[0..255] of int64= (
- $02AAB17CF7E90C5E, $AC424B03E243A8EC,
- $72CD5BE30DD5FCD3, $6D019B93F6F97F3A,
- $CD9978FFD21F9193, $7573A1C9708029E2,
- $B164326B922A83C3, $46883EEE04915870,
- $EAACE3057103ECE6, $C54169B808A3535C,
- $4CE754918DDEC47C, $0AA2F4DFDC0DF40C,
- $10B76F18A74DBEFA, $C6CCB6235AD1AB6A,
- $13726121572FE2FF, $1A488C6F199D921E,
- $4BC9F9F4DA0007CA, $26F5E6F6E85241C7,
- $859079DBEA5947B6, $4F1885C5C99E8C92,
- $D78E761EA96F864B, $8E36428C52B5C17D,
- $69CF6827373063C1, $B607C93D9BB4C56E,
- $7D820E760E76B5EA, $645C9CC6F07FDC42,
- $BF38A078243342E0, $5F6B343C9D2E7D04,
- $F2C28AEB600B0EC6, $6C0ED85F7254BCAC,
- $71592281A4DB4FE5, $1967FA69CE0FED9F,
- $FD5293F8B96545DB, $C879E9D7F2A7600B,
- $860248920193194E, $A4F9533B2D9CC0B3,
- $9053836C15957613, $DB6DCF8AFC357BF1,
- $18BEEA7A7A370F57, $037117CA50B99066,
- $6AB30A9774424A35, $F4E92F02E325249B,
- $7739DB07061CCAE1, $D8F3B49CECA42A05,
- $BD56BE3F51382F73, $45FAED5843B0BB28,
- $1C813D5C11BF1F83, $8AF0E4B6D75FA169,
- $33EE18A487AD9999, $3C26E8EAB1C94410,
- $B510102BC0A822F9, $141EEF310CE6123B,
- $FC65B90059DDB154, $E0158640C5E0E607,
- $884E079826C3A3CF, $930D0D9523C535FD,
- $35638D754E9A2B00, $4085FCCF40469DD5,
- $C4B17AD28BE23A4C, $CAB2F0FC6A3E6A2E,
- $2860971A6B943FCD, $3DDE6EE212E30446,
- $6222F32AE01765AE, $5D550BB5478308FE,
- $A9EFA98DA0EDA22A, $C351A71686C40DA7,
- $1105586D9C867C84, $DCFFEE85FDA22853,
- $CCFBD0262C5EEF76, $BAF294CB8990D201,
- $E69464F52AFAD975, $94B013AFDF133E14,
- $06A7D1A32823C958, $6F95FE5130F61119,
- $D92AB34E462C06C0, $ED7BDE33887C71D2,
- $79746D6E6518393E, $5BA419385D713329,
- $7C1BA6B948A97564, $31987C197BFDAC67,
- $DE6C23C44B053D02, $581C49FED002D64D,
- $DD474D6338261571, $AA4546C3E473D062,
- $928FCE349455F860, $48161BBACAAB94D9,
- $63912430770E6F68, $6EC8A5E602C6641C,
- $87282515337DDD2B, $2CDA6B42034B701B,
- $B03D37C181CB096D, $E108438266C71C6F,
- $2B3180C7EB51B255, $DF92B82F96C08BBC,
- $5C68C8C0A632F3BA, $5504CC861C3D0556,
- $ABBFA4E55FB26B8F, $41848B0AB3BACEB4,
- $B334A273AA445D32, $BCA696F0A85AD881,
- $24F6EC65B528D56C, $0CE1512E90F4524A,
- $4E9DD79D5506D35A, $258905FAC6CE9779,
- $2019295B3E109B33, $F8A9478B73A054CC,
- $2924F2F934417EB0, $3993357D536D1BC4,
- $38A81AC21DB6FF8B, $47C4FBF17D6016BF,
- $1E0FAADD7667E3F5, $7ABCFF62938BEB96,
- $A78DAD948FC179C9, $8F1F98B72911E50D,
- $61E48EAE27121A91, $4D62F7AD31859808,
- $ECEBA345EF5CEAEB, $F5CEB25EBC9684CE,
- $F633E20CB7F76221, $A32CDF06AB8293E4,
- $985A202CA5EE2CA4, $CF0B8447CC8A8FB1,
- $9F765244979859A3, $A8D516B1A1240017,
- $0BD7BA3EBB5DC726, $E54BCA55B86ADB39,
- $1D7A3AFD6C478063, $519EC608E7669EDD,
- $0E5715A2D149AA23, $177D4571848FF194,
- $EEB55F3241014C22, $0F5E5CA13A6E2EC2,
- $8029927B75F5C361, $AD139FABC3D6E436,
- $0D5DF1A94CCF402F, $3E8BD948BEA5DFC8,
- $A5A0D357BD3FF77E, $A2D12E251F74F645,
- $66FD9E525E81A082, $2E0C90CE7F687A49,
- $C2E8BCBEBA973BC5, $000001BCE509745F,
- $423777BBE6DAB3D6, $D1661C7EAEF06EB5,
- $A1781F354DAACFD8, $2D11284A2B16AFFC,
- $F1FC4F67FA891D1F, $73ECC25DCB920ADA,
- $AE610C22C2A12651, $96E0A810D356B78A,
- $5A9A381F2FE7870F, $D5AD62EDE94E5530,
- $D225E5E8368D1427, $65977B70C7AF4631,
- $99F889B2DE39D74F, $233F30BF54E1D143,
- $9A9675D3D9A63C97, $5470554FF334F9A8,
- $166ACB744A4F5688, $70C74CAAB2E4AEAD,
- $F0D091646F294D12, $57B82A89684031D1,
- $EFD95A5A61BE0B6B, $2FBD12E969F2F29A,
- $9BD37013FEFF9FE8, $3F9B0404D6085A06,
- $4940C1F3166CFE15, $09542C4DCDF3DEFB,
- $B4C5218385CD5CE3, $C935B7DC4462A641,
- $3417F8A68ED3B63F, $B80959295B215B40,
- $F99CDAEF3B8C8572, $018C0614F8FCB95D,
- $1B14ACCD1A3ACDF3, $84D471F200BB732D,
- $C1A3110E95E8DA16, $430A7220BF1A82B8,
- $B77E090D39DF210E, $5EF4BD9F3CD05E9D,
- $9D4FF6DA7E57A444, $DA1D60E183D4A5F8,
- $B287C38417998E47, $FE3EDC121BB31886,
- $C7FE3CCC980CCBEF, $E46FB590189BFD03,
- $3732FD469A4C57DC, $7EF700A07CF1AD65,
- $59C64468A31D8859, $762FB0B4D45B61F6,
- $155BAED099047718, $68755E4C3D50BAA6,
- $E9214E7F22D8B4DF, $2ADDBF532EAC95F4,
- $32AE3909B4BD0109, $834DF537B08E3450,
- $FA209DA84220728D, $9E691D9B9EFE23F7,
- $0446D288C4AE8D7F, $7B4CC524E169785B,
- $21D87F0135CA1385, $CEBB400F137B8AA5,
- $272E2B66580796BE, $3612264125C2B0DE,
- $057702BDAD1EFBB2, $D4BABB8EACF84BE9,
- $91583139641BC67B, $8BDC2DE08036E024,
- $603C8156F49F68ED, $F7D236F7DBEF5111,
- $9727C4598AD21E80, $A08A0896670A5FD7,
- $CB4A8F4309EBA9CB, $81AF564B0F7036A1,
- $C0B99AA778199ABD, $959F1EC83FC8E952,
- $8C505077794A81B9, $3ACAAF8F056338F0,
- $07B43F50627A6778, $4A44AB49F5ECCC77,
- $3BC3D6E4B679EE98, $9CC0D4D1CF14108C,
- $4406C00B206BC8A0, $82A18854C8D72D89,
- $67E366B35C3C432C, $B923DD61102B37F2,
- $56AB2779D884271D, $BE83E1B0FF1525AF,
- $FB7C65D4217E49A9, $6BDBE0E76D48E7D4,
- $08DF828745D9179E, $22EA6A9ADD53BD34,
- $E36E141C5622200A, $7F805D1B8CB750EE,
- $AFE5C7A59F58E837, $E27F996A4FB1C23C,
- $D3867DFB0775F0D0, $D0E673DE6E88891A,
- $123AEB9EAFB86C25, $30F1D5D5C145B895,
- $BB434A2DEE7269E7, $78CB67ECF931FA38,
- $F33B0372323BBF9C, $52D66336FB279C74,
- $505F33AC0AFB4EAA, $E8A5CD99A2CCE187,
- $534974801E2D30BB, $8D2D5711D5876D90,
- $1F1A412891BC038E, $D6E2E71D82E56648,
- $74036C3A497732B7, $89B67ED96361F5AB,
- $FFED95D8F1EA02A2, $E72B3BD61464D43D,
- $A6300F170BDC4820, $EBC18760ED78A77A);
-
- t2: array[0..255] of int64= (
- $E6A6BE5A05A12138, $B5A122A5B4F87C98,
- $563C6089140B6990, $4C46CB2E391F5DD5,
- $D932ADDBC9B79434, $08EA70E42015AFF5,
- $D765A6673E478CF1, $C4FB757EAB278D99,
- $DF11C6862D6E0692, $DDEB84F10D7F3B16,
- $6F2EF604A665EA04, $4A8E0F0FF0E0DFB3,
- $A5EDEEF83DBCBA51, $FC4F0A2A0EA4371E,
- $E83E1DA85CB38429, $DC8FF882BA1B1CE2,
- $CD45505E8353E80D, $18D19A00D4DB0717,
- $34A0CFEDA5F38101, $0BE77E518887CAF2,
- $1E341438B3C45136, $E05797F49089CCF9,
- $FFD23F9DF2591D14, $543DDA228595C5CD,
- $661F81FD99052A33, $8736E641DB0F7B76,
- $15227725418E5307, $E25F7F46162EB2FA,
- $48A8B2126C13D9FE, $AFDC541792E76EEA,
- $03D912BFC6D1898F, $31B1AAFA1B83F51B,
- $F1AC2796E42AB7D9, $40A3A7D7FCD2EBAC,
- $1056136D0AFBBCC5, $7889E1DD9A6D0C85,
- $D33525782A7974AA, $A7E25D09078AC09B,
- $BD4138B3EAC6EDD0, $920ABFBE71EB9E70,
- $A2A5D0F54FC2625C, $C054E36B0B1290A3,
- $F6DD59FF62FE932B, $3537354511A8AC7D,
- $CA845E9172FADCD4, $84F82B60329D20DC,
- $79C62CE1CD672F18, $8B09A2ADD124642C,
- $D0C1E96A19D9E726, $5A786A9B4BA9500C,
- $0E020336634C43F3, $C17B474AEB66D822,
- $6A731AE3EC9BAAC2, $8226667AE0840258,
- $67D4567691CAECA5, $1D94155C4875ADB5,
- $6D00FD985B813FDF, $51286EFCB774CD06,
- $5E8834471FA744AF, $F72CA0AEE761AE2E,
- $BE40E4CDAEE8E09A, $E9970BBB5118F665,
- $726E4BEB33DF1964, $703B000729199762,
- $4631D816F5EF30A7, $B880B5B51504A6BE,
- $641793C37ED84B6C, $7B21ED77F6E97D96,
- $776306312EF96B73, $AE528948E86FF3F4,
- $53DBD7F286A3F8F8, $16CADCE74CFC1063,
- $005C19BDFA52C6DD, $68868F5D64D46AD3,
- $3A9D512CCF1E186A, $367E62C2385660AE,
- $E359E7EA77DCB1D7, $526C0773749ABE6E,
- $735AE5F9D09F734B, $493FC7CC8A558BA8,
- $B0B9C1533041AB45, $321958BA470A59BD,
- $852DB00B5F46C393, $91209B2BD336B0E5,
- $6E604F7D659EF19F, $B99A8AE2782CCB24,
- $CCF52AB6C814C4C7, $4727D9AFBE11727B,
- $7E950D0C0121B34D, $756F435670AD471F,
- $F5ADD442615A6849, $4E87E09980B9957A,
- $2ACFA1DF50AEE355, $D898263AFD2FD556,
- $C8F4924DD80C8FD6, $CF99CA3D754A173A,
- $FE477BACAF91BF3C, $ED5371F6D690C12D,
- $831A5C285E687094, $C5D3C90A3708A0A4,
- $0F7F903717D06580, $19F9BB13B8FDF27F,
- $B1BD6F1B4D502843, $1C761BA38FFF4012,
- $0D1530C4E2E21F3B, $8943CE69A7372C8A,
- $E5184E11FEB5CE66, $618BDB80BD736621,
- $7D29BAD68B574D0B, $81BB613E25E6FE5B,
- $071C9C10BC07913F, $C7BEEB7909AC2D97,
- $C3E58D353BC5D757, $EB017892F38F61E8,
- $D4EFFB9C9B1CC21A, $99727D26F494F7AB,
- $A3E063A2956B3E03, $9D4A8B9A4AA09C30,
- $3F6AB7D500090FB4, $9CC0F2A057268AC0,
- $3DEE9D2DEDBF42D1, $330F49C87960A972,
- $C6B2720287421B41, $0AC59EC07C00369C,
- $EF4EAC49CB353425, $F450244EEF0129D8,
- $8ACC46E5CAF4DEB6, $2FFEAB63989263F7,
- $8F7CB9FE5D7A4578, $5BD8F7644E634635,
- $427A7315BF2DC900, $17D0C4AA2125261C,
- $3992486C93518E50, $B4CBFEE0A2D7D4C3,
- $7C75D6202C5DDD8D, $DBC295D8E35B6C61,
- $60B369D302032B19, $CE42685FDCE44132,
- $06F3DDB9DDF65610, $8EA4D21DB5E148F0,
- $20B0FCE62FCD496F, $2C1B912358B0EE31,
- $B28317B818F5A308, $A89C1E189CA6D2CF,
- $0C6B18576AAADBC8, $B65DEAA91299FAE3,
- $FB2B794B7F1027E7, $04E4317F443B5BEB,
- $4B852D325939D0A6, $D5AE6BEEFB207FFC,
- $309682B281C7D374, $BAE309A194C3B475,
- $8CC3F97B13B49F05, $98A9422FF8293967,
- $244B16B01076FF7C, $F8BF571C663D67EE,
- $1F0D6758EEE30DA1, $C9B611D97ADEB9B7,
- $B7AFD5887B6C57A2, $6290AE846B984FE1,
- $94DF4CDEACC1A5FD, $058A5BD1C5483AFF,
- $63166CC142BA3C37, $8DB8526EB2F76F40,
- $E10880036F0D6D4E, $9E0523C9971D311D,
- $45EC2824CC7CD691, $575B8359E62382C9,
- $FA9E400DC4889995, $D1823ECB45721568,
- $DAFD983B8206082F, $AA7D29082386A8CB,
- $269FCD4403B87588, $1B91F5F728BDD1E0,
- $E4669F39040201F6, $7A1D7C218CF04ADE,
- $65623C29D79CE5CE, $2368449096C00BB1,
- $AB9BF1879DA503BA, $BC23ECB1A458058E,
- $9A58DF01BB401ECC, $A070E868A85F143D,
- $4FF188307DF2239E, $14D565B41A641183,
- $EE13337452701602, $950E3DCF3F285E09,
- $59930254B9C80953, $3BF299408930DA6D,
- $A955943F53691387, $A15EDECAA9CB8784,
- $29142127352BE9A0, $76F0371FFF4E7AFB,
- $0239F450274F2228, $BB073AF01D5E868B,
- $BFC80571C10E96C1, $D267088568222E23,
- $9671A3D48E80B5B0, $55B5D38AE193BB81,
- $693AE2D0A18B04B8, $5C48B4ECADD5335F,
- $FD743B194916A1CA, $2577018134BE98C4,
- $E77987E83C54A4AD, $28E11014DA33E1B9,
- $270CC59E226AA213, $71495F756D1A5F60,
- $9BE853FB60AFEF77, $ADC786A7F7443DBF,
- $0904456173B29A82, $58BC7A66C232BD5E,
- $F306558C673AC8B2, $41F639C6B6C9772A,
- $216DEFE99FDA35DA, $11640CC71C7BE615,
- $93C43694565C5527, $EA038E6246777839,
- $F9ABF3CE5A3E2469, $741E768D0FD312D2,
- $0144B883CED652C6, $C20B5A5BA33F8552,
- $1AE69633C3435A9D, $97A28CA4088CFDEC,
- $8824A43C1E96F420, $37612FA66EEEA746,
- $6B4CB165F9CF0E5A, $43AA1C06A0ABFB4A,
- $7F4DC26FF162796B, $6CBACC8E54ED9B0F,
- $A6B7FFEFD2BB253E, $2E25BC95B0A29D4F,
- $86D6A58BDEF1388C, $DED74AC576B6F054,
- $8030BDBC2B45805D, $3C81AF70E94D9289,
- $3EFF6DDA9E3100DB, $B38DC39FDFCC8847,
- $123885528D17B87E, $F2DA0ED240B1B642,
- $44CEFADCD54BF9A9, $1312200E433C7EE6,
- $9FFCC84F3A78C748, $F0CD1F72248576BB,
- $EC6974053638CFE4, $2BA7B67C0CEC4E4C,
- $AC2F4DF3E5CE32ED, $CB33D14326EA4C11,
- $A4E9044CC77E58BC, $5F513293D934FCEF,
- $5DC9645506E55444, $50DE418F317DE40A,
- $388CB31A69DDE259, $2DB4A83455820A86,
- $9010A91E84711AE9, $4DF7F0B7B1498371,
- $D62A2EABC0977179, $22FAC097AA8D5C0E);
+ t1: array[0..255] of UInt64= (
+ TDCPUInt64($02AAB17CF7E90C5E), TDCPUInt64($AC424B03E243A8EC),
+ TDCPUInt64($72CD5BE30DD5FCD3), TDCPUInt64($6D019B93F6F97F3A),
+ TDCPUInt64($CD9978FFD21F9193), TDCPUInt64($7573A1C9708029E2),
+ TDCPUInt64($B164326B922A83C3), TDCPUInt64($46883EEE04915870),
+ TDCPUInt64($EAACE3057103ECE6), TDCPUInt64($C54169B808A3535C),
+ TDCPUInt64($4CE754918DDEC47C), TDCPUInt64($0AA2F4DFDC0DF40C),
+ TDCPUInt64($10B76F18A74DBEFA), TDCPUInt64($C6CCB6235AD1AB6A),
+ TDCPUInt64($13726121572FE2FF), TDCPUInt64($1A488C6F199D921E),
+ TDCPUInt64($4BC9F9F4DA0007CA), TDCPUInt64($26F5E6F6E85241C7),
+ TDCPUInt64($859079DBEA5947B6), TDCPUInt64($4F1885C5C99E8C92),
+ TDCPUInt64($D78E761EA96F864B), TDCPUInt64($8E36428C52B5C17D),
+ TDCPUInt64($69CF6827373063C1), TDCPUInt64($B607C93D9BB4C56E),
+ TDCPUInt64($7D820E760E76B5EA), TDCPUInt64($645C9CC6F07FDC42),
+ TDCPUInt64($BF38A078243342E0), TDCPUInt64($5F6B343C9D2E7D04),
+ TDCPUInt64($F2C28AEB600B0EC6), TDCPUInt64($6C0ED85F7254BCAC),
+ TDCPUInt64($71592281A4DB4FE5), TDCPUInt64($1967FA69CE0FED9F),
+ TDCPUInt64($FD5293F8B96545DB), TDCPUInt64($C879E9D7F2A7600B),
+ TDCPUInt64($860248920193194E), TDCPUInt64($A4F9533B2D9CC0B3),
+ TDCPUInt64($9053836C15957613), TDCPUInt64($DB6DCF8AFC357BF1),
+ TDCPUInt64($18BEEA7A7A370F57), TDCPUInt64($037117CA50B99066),
+ TDCPUInt64($6AB30A9774424A35), TDCPUInt64($F4E92F02E325249B),
+ TDCPUInt64($7739DB07061CCAE1), TDCPUInt64($D8F3B49CECA42A05),
+ TDCPUInt64($BD56BE3F51382F73), TDCPUInt64($45FAED5843B0BB28),
+ TDCPUInt64($1C813D5C11BF1F83), TDCPUInt64($8AF0E4B6D75FA169),
+ TDCPUInt64($33EE18A487AD9999), TDCPUInt64($3C26E8EAB1C94410),
+ TDCPUInt64($B510102BC0A822F9), TDCPUInt64($141EEF310CE6123B),
+ TDCPUInt64($FC65B90059DDB154), TDCPUInt64($E0158640C5E0E607),
+ TDCPUInt64($884E079826C3A3CF), TDCPUInt64($930D0D9523C535FD),
+ TDCPUInt64($35638D754E9A2B00), TDCPUInt64($4085FCCF40469DD5),
+ TDCPUInt64($C4B17AD28BE23A4C), TDCPUInt64($CAB2F0FC6A3E6A2E),
+ TDCPUInt64($2860971A6B943FCD), TDCPUInt64($3DDE6EE212E30446),
+ TDCPUInt64($6222F32AE01765AE), TDCPUInt64($5D550BB5478308FE),
+ TDCPUInt64($A9EFA98DA0EDA22A), TDCPUInt64($C351A71686C40DA7),
+ TDCPUInt64($1105586D9C867C84), TDCPUInt64($DCFFEE85FDA22853),
+ TDCPUInt64($CCFBD0262C5EEF76), TDCPUInt64($BAF294CB8990D201),
+ TDCPUInt64($E69464F52AFAD975), TDCPUInt64($94B013AFDF133E14),
+ TDCPUInt64($06A7D1A32823C958), TDCPUInt64($6F95FE5130F61119),
+ TDCPUInt64($D92AB34E462C06C0), TDCPUInt64($ED7BDE33887C71D2),
+ TDCPUInt64($79746D6E6518393E), TDCPUInt64($5BA419385D713329),
+ TDCPUInt64($7C1BA6B948A97564), TDCPUInt64($31987C197BFDAC67),
+ TDCPUInt64($DE6C23C44B053D02), TDCPUInt64($581C49FED002D64D),
+ TDCPUInt64($DD474D6338261571), TDCPUInt64($AA4546C3E473D062),
+ TDCPUInt64($928FCE349455F860), TDCPUInt64($48161BBACAAB94D9),
+ TDCPUInt64($63912430770E6F68), TDCPUInt64($6EC8A5E602C6641C),
+ TDCPUInt64($87282515337DDD2B), TDCPUInt64($2CDA6B42034B701B),
+ TDCPUInt64($B03D37C181CB096D), TDCPUInt64($E108438266C71C6F),
+ TDCPUInt64($2B3180C7EB51B255), TDCPUInt64($DF92B82F96C08BBC),
+ TDCPUInt64($5C68C8C0A632F3BA), TDCPUInt64($5504CC861C3D0556),
+ TDCPUInt64($ABBFA4E55FB26B8F), TDCPUInt64($41848B0AB3BACEB4),
+ TDCPUInt64($B334A273AA445D32), TDCPUInt64($BCA696F0A85AD881),
+ TDCPUInt64($24F6EC65B528D56C), TDCPUInt64($0CE1512E90F4524A),
+ TDCPUInt64($4E9DD79D5506D35A), TDCPUInt64($258905FAC6CE9779),
+ TDCPUInt64($2019295B3E109B33), TDCPUInt64($F8A9478B73A054CC),
+ TDCPUInt64($2924F2F934417EB0), TDCPUInt64($3993357D536D1BC4),
+ TDCPUInt64($38A81AC21DB6FF8B), TDCPUInt64($47C4FBF17D6016BF),
+ TDCPUInt64($1E0FAADD7667E3F5), TDCPUInt64($7ABCFF62938BEB96),
+ TDCPUInt64($A78DAD948FC179C9), TDCPUInt64($8F1F98B72911E50D),
+ TDCPUInt64($61E48EAE27121A91), TDCPUInt64($4D62F7AD31859808),
+ TDCPUInt64($ECEBA345EF5CEAEB), TDCPUInt64($F5CEB25EBC9684CE),
+ TDCPUInt64($F633E20CB7F76221), TDCPUInt64($A32CDF06AB8293E4),
+ TDCPUInt64($985A202CA5EE2CA4), TDCPUInt64($CF0B8447CC8A8FB1),
+ TDCPUInt64($9F765244979859A3), TDCPUInt64($A8D516B1A1240017),
+ TDCPUInt64($0BD7BA3EBB5DC726), TDCPUInt64($E54BCA55B86ADB39),
+ TDCPUInt64($1D7A3AFD6C478063), TDCPUInt64($519EC608E7669EDD),
+ TDCPUInt64($0E5715A2D149AA23), TDCPUInt64($177D4571848FF194),
+ TDCPUInt64($EEB55F3241014C22), TDCPUInt64($0F5E5CA13A6E2EC2),
+ TDCPUInt64($8029927B75F5C361), TDCPUInt64($AD139FABC3D6E436),
+ TDCPUInt64($0D5DF1A94CCF402F), TDCPUInt64($3E8BD948BEA5DFC8),
+ TDCPUInt64($A5A0D357BD3FF77E), TDCPUInt64($A2D12E251F74F645),
+ TDCPUInt64($66FD9E525E81A082), TDCPUInt64($2E0C90CE7F687A49),
+ TDCPUInt64($C2E8BCBEBA973BC5), TDCPUInt64($000001BCE509745F),
+ TDCPUInt64($423777BBE6DAB3D6), TDCPUInt64($D1661C7EAEF06EB5),
+ TDCPUInt64($A1781F354DAACFD8), TDCPUInt64($2D11284A2B16AFFC),
+ TDCPUInt64($F1FC4F67FA891D1F), TDCPUInt64($73ECC25DCB920ADA),
+ TDCPUInt64($AE610C22C2A12651), TDCPUInt64($96E0A810D356B78A),
+ TDCPUInt64($5A9A381F2FE7870F), TDCPUInt64($D5AD62EDE94E5530),
+ TDCPUInt64($D225E5E8368D1427), TDCPUInt64($65977B70C7AF4631),
+ TDCPUInt64($99F889B2DE39D74F), TDCPUInt64($233F30BF54E1D143),
+ TDCPUInt64($9A9675D3D9A63C97), TDCPUInt64($5470554FF334F9A8),
+ TDCPUInt64($166ACB744A4F5688), TDCPUInt64($70C74CAAB2E4AEAD),
+ TDCPUInt64($F0D091646F294D12), TDCPUInt64($57B82A89684031D1),
+ TDCPUInt64($EFD95A5A61BE0B6B), TDCPUInt64($2FBD12E969F2F29A),
+ TDCPUInt64($9BD37013FEFF9FE8), TDCPUInt64($3F9B0404D6085A06),
+ TDCPUInt64($4940C1F3166CFE15), TDCPUInt64($09542C4DCDF3DEFB),
+ TDCPUInt64($B4C5218385CD5CE3), TDCPUInt64($C935B7DC4462A641),
+ TDCPUInt64($3417F8A68ED3B63F), TDCPUInt64($B80959295B215B40),
+ TDCPUInt64($F99CDAEF3B8C8572), TDCPUInt64($018C0614F8FCB95D),
+ TDCPUInt64($1B14ACCD1A3ACDF3), TDCPUInt64($84D471F200BB732D),
+ TDCPUInt64($C1A3110E95E8DA16), TDCPUInt64($430A7220BF1A82B8),
+ TDCPUInt64($B77E090D39DF210E), TDCPUInt64($5EF4BD9F3CD05E9D),
+ TDCPUInt64($9D4FF6DA7E57A444), TDCPUInt64($DA1D60E183D4A5F8),
+ TDCPUInt64($B287C38417998E47), TDCPUInt64($FE3EDC121BB31886),
+ TDCPUInt64($C7FE3CCC980CCBEF), TDCPUInt64($E46FB590189BFD03),
+ TDCPUInt64($3732FD469A4C57DC), TDCPUInt64($7EF700A07CF1AD65),
+ TDCPUInt64($59C64468A31D8859), TDCPUInt64($762FB0B4D45B61F6),
+ TDCPUInt64($155BAED099047718), TDCPUInt64($68755E4C3D50BAA6),
+ TDCPUInt64($E9214E7F22D8B4DF), TDCPUInt64($2ADDBF532EAC95F4),
+ TDCPUInt64($32AE3909B4BD0109), TDCPUInt64($834DF537B08E3450),
+ TDCPUInt64($FA209DA84220728D), TDCPUInt64($9E691D9B9EFE23F7),
+ TDCPUInt64($0446D288C4AE8D7F), TDCPUInt64($7B4CC524E169785B),
+ TDCPUInt64($21D87F0135CA1385), TDCPUInt64($CEBB400F137B8AA5),
+ TDCPUInt64($272E2B66580796BE), TDCPUInt64($3612264125C2B0DE),
+ TDCPUInt64($057702BDAD1EFBB2), TDCPUInt64($D4BABB8EACF84BE9),
+ TDCPUInt64($91583139641BC67B), TDCPUInt64($8BDC2DE08036E024),
+ TDCPUInt64($603C8156F49F68ED), TDCPUInt64($F7D236F7DBEF5111),
+ TDCPUInt64($9727C4598AD21E80), TDCPUInt64($A08A0896670A5FD7),
+ TDCPUInt64($CB4A8F4309EBA9CB), TDCPUInt64($81AF564B0F7036A1),
+ TDCPUInt64($C0B99AA778199ABD), TDCPUInt64($959F1EC83FC8E952),
+ TDCPUInt64($8C505077794A81B9), TDCPUInt64($3ACAAF8F056338F0),
+ TDCPUInt64($07B43F50627A6778), TDCPUInt64($4A44AB49F5ECCC77),
+ TDCPUInt64($3BC3D6E4B679EE98), TDCPUInt64($9CC0D4D1CF14108C),
+ TDCPUInt64($4406C00B206BC8A0), TDCPUInt64($82A18854C8D72D89),
+ TDCPUInt64($67E366B35C3C432C), TDCPUInt64($B923DD61102B37F2),
+ TDCPUInt64($56AB2779D884271D), TDCPUInt64($BE83E1B0FF1525AF),
+ TDCPUInt64($FB7C65D4217E49A9), TDCPUInt64($6BDBE0E76D48E7D4),
+ TDCPUInt64($08DF828745D9179E), TDCPUInt64($22EA6A9ADD53BD34),
+ TDCPUInt64($E36E141C5622200A), TDCPUInt64($7F805D1B8CB750EE),
+ TDCPUInt64($AFE5C7A59F58E837), TDCPUInt64($E27F996A4FB1C23C),
+ TDCPUInt64($D3867DFB0775F0D0), TDCPUInt64($D0E673DE6E88891A),
+ TDCPUInt64($123AEB9EAFB86C25), TDCPUInt64($30F1D5D5C145B895),
+ TDCPUInt64($BB434A2DEE7269E7), TDCPUInt64($78CB67ECF931FA38),
+ TDCPUInt64($F33B0372323BBF9C), TDCPUInt64($52D66336FB279C74),
+ TDCPUInt64($505F33AC0AFB4EAA), TDCPUInt64($E8A5CD99A2CCE187),
+ TDCPUInt64($534974801E2D30BB), TDCPUInt64($8D2D5711D5876D90),
+ TDCPUInt64($1F1A412891BC038E), TDCPUInt64($D6E2E71D82E56648),
+ TDCPUInt64($74036C3A497732B7), TDCPUInt64($89B67ED96361F5AB),
+ TDCPUInt64($FFED95D8F1EA02A2), TDCPUInt64($E72B3BD61464D43D),
+ TDCPUInt64($A6300F170BDC4820), TDCPUInt64($EBC18760ED78A77A) );
- t3: array[0..255] of int64= (
- $F49FCC2FF1DAF39B, $487FD5C66FF29281,
- $E8A30667FCDCA83F, $2C9B4BE3D2FCCE63,
- $DA3FF74B93FBBBC2, $2FA165D2FE70BA66,
- $A103E279970E93D4, $BECDEC77B0E45E71,
- $CFB41E723985E497, $B70AAA025EF75017,
- $D42309F03840B8E0, $8EFC1AD035898579,
- $96C6920BE2B2ABC5, $66AF4163375A9172,
- $2174ABDCCA7127FB, $B33CCEA64A72FF41,
- $F04A4933083066A5, $8D970ACDD7289AF5,
- $8F96E8E031C8C25E, $F3FEC02276875D47,
- $EC7BF310056190DD, $F5ADB0AEBB0F1491,
- $9B50F8850FD58892, $4975488358B74DE8,
- $A3354FF691531C61, $0702BBE481D2C6EE,
- $89FB24057DEDED98, $AC3075138596E902,
- $1D2D3580172772ED, $EB738FC28E6BC30D,
- $5854EF8F63044326, $9E5C52325ADD3BBE,
- $90AA53CF325C4623, $C1D24D51349DD067,
- $2051CFEEA69EA624, $13220F0A862E7E4F,
- $CE39399404E04864, $D9C42CA47086FCB7,
- $685AD2238A03E7CC, $066484B2AB2FF1DB,
- $FE9D5D70EFBF79EC, $5B13B9DD9C481854,
- $15F0D475ED1509AD, $0BEBCD060EC79851,
- $D58C6791183AB7F8, $D1187C5052F3EEE4,
- $C95D1192E54E82FF, $86EEA14CB9AC6CA2,
- $3485BEB153677D5D, $DD191D781F8C492A,
- $F60866BAA784EBF9, $518F643BA2D08C74,
- $8852E956E1087C22, $A768CB8DC410AE8D,
- $38047726BFEC8E1A, $A67738B4CD3B45AA,
- $AD16691CEC0DDE19, $C6D4319380462E07,
- $C5A5876D0BA61938, $16B9FA1FA58FD840,
- $188AB1173CA74F18, $ABDA2F98C99C021F,
- $3E0580AB134AE816, $5F3B05B773645ABB,
- $2501A2BE5575F2F6, $1B2F74004E7E8BA9,
- $1CD7580371E8D953, $7F6ED89562764E30,
- $B15926FF596F003D, $9F65293DA8C5D6B9,
- $6ECEF04DD690F84C, $4782275FFF33AF88,
- $E41433083F820801, $FD0DFE409A1AF9B5,
- $4325A3342CDB396B, $8AE77E62B301B252,
- $C36F9E9F6655615A, $85455A2D92D32C09,
- $F2C7DEA949477485, $63CFB4C133A39EBA,
- $83B040CC6EBC5462, $3B9454C8FDB326B0,
- $56F56A9E87FFD78C, $2DC2940D99F42BC6,
- $98F7DF096B096E2D, $19A6E01E3AD852BF,
- $42A99CCBDBD4B40B, $A59998AF45E9C559,
- $366295E807D93186, $6B48181BFAA1F773,
- $1FEC57E2157A0A1D, $4667446AF6201AD5,
- $E615EBCACFB0F075, $B8F31F4F68290778,
- $22713ED6CE22D11E, $3057C1A72EC3C93B,
- $CB46ACC37C3F1F2F, $DBB893FD02AAF50E,
- $331FD92E600B9FCF, $A498F96148EA3AD6,
- $A8D8426E8B6A83EA, $A089B274B7735CDC,
- $87F6B3731E524A11, $118808E5CBC96749,
- $9906E4C7B19BD394, $AFED7F7E9B24A20C,
- $6509EADEEB3644A7, $6C1EF1D3E8EF0EDE,
- $B9C97D43E9798FB4, $A2F2D784740C28A3,
- $7B8496476197566F, $7A5BE3E6B65F069D,
- $F96330ED78BE6F10, $EEE60DE77A076A15,
- $2B4BEE4AA08B9BD0, $6A56A63EC7B8894E,
- $02121359BA34FEF4, $4CBF99F8283703FC,
- $398071350CAF30C8, $D0A77A89F017687A,
- $F1C1A9EB9E423569, $8C7976282DEE8199,
- $5D1737A5DD1F7ABD, $4F53433C09A9FA80,
- $FA8B0C53DF7CA1D9, $3FD9DCBC886CCB77,
- $C040917CA91B4720, $7DD00142F9D1DCDF,
- $8476FC1D4F387B58, $23F8E7C5F3316503,
- $032A2244E7E37339, $5C87A5D750F5A74B,
- $082B4CC43698992E, $DF917BECB858F63C,
- $3270B8FC5BF86DDA, $10AE72BB29B5DD76,
- $576AC94E7700362B, $1AD112DAC61EFB8F,
- $691BC30EC5FAA427, $FF246311CC327143,
- $3142368E30E53206, $71380E31E02CA396,
- $958D5C960AAD76F1, $F8D6F430C16DA536,
- $C8FFD13F1BE7E1D2, $7578AE66004DDBE1,
- $05833F01067BE646, $BB34B5AD3BFE586D,
- $095F34C9A12B97F0, $247AB64525D60CA8,
- $DCDBC6F3017477D1, $4A2E14D4DECAD24D,
- $BDB5E6D9BE0A1EEB, $2A7E70F7794301AB,
- $DEF42D8A270540FD, $01078EC0A34C22C1,
- $E5DE511AF4C16387, $7EBB3A52BD9A330A,
- $77697857AA7D6435, $004E831603AE4C32,
- $E7A21020AD78E312, $9D41A70C6AB420F2,
- $28E06C18EA1141E6, $D2B28CBD984F6B28,
- $26B75F6C446E9D83, $BA47568C4D418D7F,
- $D80BADBFE6183D8E, $0E206D7F5F166044,
- $E258A43911CBCA3E, $723A1746B21DC0BC,
- $C7CAA854F5D7CDD3, $7CAC32883D261D9C,
- $7690C26423BA942C, $17E55524478042B8,
- $E0BE477656A2389F, $4D289B5E67AB2DA0,
- $44862B9C8FBBFD31, $B47CC8049D141365,
- $822C1B362B91C793, $4EB14655FB13DFD8,
- $1ECBBA0714E2A97B, $6143459D5CDE5F14,
- $53A8FBF1D5F0AC89, $97EA04D81C5E5B00,
- $622181A8D4FDB3F3, $E9BCD341572A1208,
- $1411258643CCE58A, $9144C5FEA4C6E0A4,
- $0D33D06565CF620F, $54A48D489F219CA1,
- $C43E5EAC6D63C821, $A9728B3A72770DAF,
- $D7934E7B20DF87EF, $E35503B61A3E86E5,
- $CAE321FBC819D504, $129A50B3AC60BFA6,
- $CD5E68EA7E9FB6C3, $B01C90199483B1C7,
- $3DE93CD5C295376C, $AED52EDF2AB9AD13,
- $2E60F512C0A07884, $BC3D86A3E36210C9,
- $35269D9B163951CE, $0C7D6E2AD0CDB5FA,
- $59E86297D87F5733, $298EF221898DB0E7,
- $55000029D1A5AA7E, $8BC08AE1B5061B45,
- $C2C31C2B6C92703A, $94CC596BAF25EF42,
- $0A1D73DB22540456, $04B6A0F9D9C4179A,
- $EFFDAFA2AE3D3C60, $F7C8075BB49496C4,
- $9CC5C7141D1CD4E3, $78BD1638218E5534,
- $B2F11568F850246A, $EDFABCFA9502BC29,
- $796CE5F2DA23051B, $AAE128B0DC93537C,
- $3A493DA0EE4B29AE, $B5DF6B2C416895D7,
- $FCABBD25122D7F37, $70810B58105DC4B1,
- $E10FDD37F7882A90, $524DCAB5518A3F5C,
- $3C9E85878451255B, $4029828119BD34E2,
- $74A05B6F5D3CECCB, $B610021542E13ECA,
- $0FF979D12F59E2AC, $6037DA27E4F9CC50,
- $5E92975A0DF1847D, $D66DE190D3E623FE,
- $5032D6B87B568048, $9A36B7CE8235216E,
- $80272A7A24F64B4A, $93EFED8B8C6916F7,
- $37DDBFF44CCE1555, $4B95DB5D4B99BD25,
- $92D3FDA169812FC0, $FB1A4A9A90660BB6,
- $730C196946A4B9B2, $81E289AA7F49DA68,
- $64669A0F83B1A05F, $27B3FF7D9644F48B,
- $CC6B615C8DB675B3, $674F20B9BCEBBE95,
- $6F31238275655982, $5AE488713E45CF05,
- $BF619F9954C21157, $EABAC46040A8EAE9,
- $454C6FE9F2C0C1CD, $419CF6496412691C,
- $D3DC3BEF265B0F70, $6D0E60F5C3578A9E);
+ t2: array[0..255] of TDCPUInt64= (
+ TDCPUInt64($E6A6BE5A05A12138), TDCPUInt64($B5A122A5B4F87C98),
+ TDCPUInt64($563C6089140B6990), TDCPUInt64($4C46CB2E391F5DD5),
+ TDCPUInt64($D932ADDBC9B79434), TDCPUInt64($08EA70E42015AFF5),
+ TDCPUInt64($D765A6673E478CF1), TDCPUInt64($C4FB757EAB278D99),
+ TDCPUInt64($DF11C6862D6E0692), TDCPUInt64($DDEB84F10D7F3B16),
+ TDCPUInt64($6F2EF604A665EA04), TDCPUInt64($4A8E0F0FF0E0DFB3),
+ TDCPUInt64($A5EDEEF83DBCBA51), TDCPUInt64($FC4F0A2A0EA4371E),
+ TDCPUInt64($E83E1DA85CB38429), TDCPUInt64($DC8FF882BA1B1CE2),
+ TDCPUInt64($CD45505E8353E80D), TDCPUInt64($18D19A00D4DB0717),
+ TDCPUInt64($34A0CFEDA5F38101), TDCPUInt64($0BE77E518887CAF2),
+ TDCPUInt64($1E341438B3C45136), TDCPUInt64($E05797F49089CCF9),
+ TDCPUInt64($FFD23F9DF2591D14), TDCPUInt64($543DDA228595C5CD),
+ TDCPUInt64($661F81FD99052A33), TDCPUInt64($8736E641DB0F7B76),
+ TDCPUInt64($15227725418E5307), TDCPUInt64($E25F7F46162EB2FA),
+ TDCPUInt64($48A8B2126C13D9FE), TDCPUInt64($AFDC541792E76EEA),
+ TDCPUInt64($03D912BFC6D1898F), TDCPUInt64($31B1AAFA1B83F51B),
+ TDCPUInt64($F1AC2796E42AB7D9), TDCPUInt64($40A3A7D7FCD2EBAC),
+ TDCPUInt64($1056136D0AFBBCC5), TDCPUInt64($7889E1DD9A6D0C85),
+ TDCPUInt64($D33525782A7974AA), TDCPUInt64($A7E25D09078AC09B),
+ TDCPUInt64($BD4138B3EAC6EDD0), TDCPUInt64($920ABFBE71EB9E70),
+ TDCPUInt64($A2A5D0F54FC2625C), TDCPUInt64($C054E36B0B1290A3),
+ TDCPUInt64($F6DD59FF62FE932B), TDCPUInt64($3537354511A8AC7D),
+ TDCPUInt64($CA845E9172FADCD4), TDCPUInt64($84F82B60329D20DC),
+ TDCPUInt64($79C62CE1CD672F18), TDCPUInt64($8B09A2ADD124642C),
+ TDCPUInt64($D0C1E96A19D9E726), TDCPUInt64($5A786A9B4BA9500C),
+ TDCPUInt64($0E020336634C43F3), TDCPUInt64($C17B474AEB66D822),
+ TDCPUInt64($6A731AE3EC9BAAC2), TDCPUInt64($8226667AE0840258),
+ TDCPUInt64($67D4567691CAECA5), TDCPUInt64($1D94155C4875ADB5),
+ TDCPUInt64($6D00FD985B813FDF), TDCPUInt64($51286EFCB774CD06),
+ TDCPUInt64($5E8834471FA744AF), TDCPUInt64($F72CA0AEE761AE2E),
+ TDCPUInt64($BE40E4CDAEE8E09A), TDCPUInt64($E9970BBB5118F665),
+ TDCPUInt64($726E4BEB33DF1964), TDCPUInt64($703B000729199762),
+ TDCPUInt64($4631D816F5EF30A7), TDCPUInt64($B880B5B51504A6BE),
+ TDCPUInt64($641793C37ED84B6C), TDCPUInt64($7B21ED77F6E97D96),
+ TDCPUInt64($776306312EF96B73), TDCPUInt64($AE528948E86FF3F4),
+ TDCPUInt64($53DBD7F286A3F8F8), TDCPUInt64($16CADCE74CFC1063),
+ TDCPUInt64($005C19BDFA52C6DD), TDCPUInt64($68868F5D64D46AD3),
+ TDCPUInt64($3A9D512CCF1E186A), TDCPUInt64($367E62C2385660AE),
+ TDCPUInt64($E359E7EA77DCB1D7), TDCPUInt64($526C0773749ABE6E),
+ TDCPUInt64($735AE5F9D09F734B), TDCPUInt64($493FC7CC8A558BA8),
+ TDCPUInt64($B0B9C1533041AB45), TDCPUInt64($321958BA470A59BD),
+ TDCPUInt64($852DB00B5F46C393), TDCPUInt64($91209B2BD336B0E5),
+ TDCPUInt64($6E604F7D659EF19F), TDCPUInt64($B99A8AE2782CCB24),
+ TDCPUInt64($CCF52AB6C814C4C7), TDCPUInt64($4727D9AFBE11727B),
+ TDCPUInt64($7E950D0C0121B34D), TDCPUInt64($756F435670AD471F),
+ TDCPUInt64($F5ADD442615A6849), TDCPUInt64($4E87E09980B9957A),
+ TDCPUInt64($2ACFA1DF50AEE355), TDCPUInt64($D898263AFD2FD556),
+ TDCPUInt64($C8F4924DD80C8FD6), TDCPUInt64($CF99CA3D754A173A),
+ TDCPUInt64($FE477BACAF91BF3C), TDCPUInt64($ED5371F6D690C12D),
+ TDCPUInt64($831A5C285E687094), TDCPUInt64($C5D3C90A3708A0A4),
+ TDCPUInt64($0F7F903717D06580), TDCPUInt64($19F9BB13B8FDF27F),
+ TDCPUInt64($B1BD6F1B4D502843), TDCPUInt64($1C761BA38FFF4012),
+ TDCPUInt64($0D1530C4E2E21F3B), TDCPUInt64($8943CE69A7372C8A),
+ TDCPUInt64($E5184E11FEB5CE66), TDCPUInt64($618BDB80BD736621),
+ TDCPUInt64($7D29BAD68B574D0B), TDCPUInt64($81BB613E25E6FE5B),
+ TDCPUInt64($071C9C10BC07913F), TDCPUInt64($C7BEEB7909AC2D97),
+ TDCPUInt64($C3E58D353BC5D757), TDCPUInt64($EB017892F38F61E8),
+ TDCPUInt64($D4EFFB9C9B1CC21A), TDCPUInt64($99727D26F494F7AB),
+ TDCPUInt64($A3E063A2956B3E03), TDCPUInt64($9D4A8B9A4AA09C30),
+ TDCPUInt64($3F6AB7D500090FB4), TDCPUInt64($9CC0F2A057268AC0),
+ TDCPUInt64($3DEE9D2DEDBF42D1), TDCPUInt64($330F49C87960A972),
+ TDCPUInt64($C6B2720287421B41), TDCPUInt64($0AC59EC07C00369C),
+ TDCPUInt64($EF4EAC49CB353425), TDCPUInt64($F450244EEF0129D8),
+ TDCPUInt64($8ACC46E5CAF4DEB6), TDCPUInt64($2FFEAB63989263F7),
+ TDCPUInt64($8F7CB9FE5D7A4578), TDCPUInt64($5BD8F7644E634635),
+ TDCPUInt64($427A7315BF2DC900), TDCPUInt64($17D0C4AA2125261C),
+ TDCPUInt64($3992486C93518E50), TDCPUInt64($B4CBFEE0A2D7D4C3),
+ TDCPUInt64($7C75D6202C5DDD8D), TDCPUInt64($DBC295D8E35B6C61),
+ TDCPUInt64($60B369D302032B19), TDCPUInt64($CE42685FDCE44132),
+ TDCPUInt64($06F3DDB9DDF65610), TDCPUInt64($8EA4D21DB5E148F0),
+ TDCPUInt64($20B0FCE62FCD496F), TDCPUInt64($2C1B912358B0EE31),
+ TDCPUInt64($B28317B818F5A308), TDCPUInt64($A89C1E189CA6D2CF),
+ TDCPUInt64($0C6B18576AAADBC8), TDCPUInt64($B65DEAA91299FAE3),
+ TDCPUInt64($FB2B794B7F1027E7), TDCPUInt64($04E4317F443B5BEB),
+ TDCPUInt64($4B852D325939D0A6), TDCPUInt64($D5AE6BEEFB207FFC),
+ TDCPUInt64($309682B281C7D374), TDCPUInt64($BAE309A194C3B475),
+ TDCPUInt64($8CC3F97B13B49F05), TDCPUInt64($98A9422FF8293967),
+ TDCPUInt64($244B16B01076FF7C), TDCPUInt64($F8BF571C663D67EE),
+ TDCPUInt64($1F0D6758EEE30DA1), TDCPUInt64($C9B611D97ADEB9B7),
+ TDCPUInt64($B7AFD5887B6C57A2), TDCPUInt64($6290AE846B984FE1),
+ TDCPUInt64($94DF4CDEACC1A5FD), TDCPUInt64($058A5BD1C5483AFF),
+ TDCPUInt64($63166CC142BA3C37), TDCPUInt64($8DB8526EB2F76F40),
+ TDCPUInt64($E10880036F0D6D4E), TDCPUInt64($9E0523C9971D311D),
+ TDCPUInt64($45EC2824CC7CD691), TDCPUInt64($575B8359E62382C9),
+ TDCPUInt64($FA9E400DC4889995), TDCPUInt64($D1823ECB45721568),
+ TDCPUInt64($DAFD983B8206082F), TDCPUInt64($AA7D29082386A8CB),
+ TDCPUInt64($269FCD4403B87588), TDCPUInt64($1B91F5F728BDD1E0),
+ TDCPUInt64($E4669F39040201F6), TDCPUInt64($7A1D7C218CF04ADE),
+ TDCPUInt64($65623C29D79CE5CE), TDCPUInt64($2368449096C00BB1),
+ TDCPUInt64($AB9BF1879DA503BA), TDCPUInt64($BC23ECB1A458058E),
+ TDCPUInt64($9A58DF01BB401ECC), TDCPUInt64($A070E868A85F143D),
+ TDCPUInt64($4FF188307DF2239E), TDCPUInt64($14D565B41A641183),
+ TDCPUInt64($EE13337452701602), TDCPUInt64($950E3DCF3F285E09),
+ TDCPUInt64($59930254B9C80953), TDCPUInt64($3BF299408930DA6D),
+ TDCPUInt64($A955943F53691387), TDCPUInt64($A15EDECAA9CB8784),
+ TDCPUInt64($29142127352BE9A0), TDCPUInt64($76F0371FFF4E7AFB),
+ TDCPUInt64($0239F450274F2228), TDCPUInt64($BB073AF01D5E868B),
+ TDCPUInt64($BFC80571C10E96C1), TDCPUInt64($D267088568222E23),
+ TDCPUInt64($9671A3D48E80B5B0), TDCPUInt64($55B5D38AE193BB81),
+ TDCPUInt64($693AE2D0A18B04B8), TDCPUInt64($5C48B4ECADD5335F),
+ TDCPUInt64($FD743B194916A1CA), TDCPUInt64($2577018134BE98C4),
+ TDCPUInt64($E77987E83C54A4AD), TDCPUInt64($28E11014DA33E1B9),
+ TDCPUInt64($270CC59E226AA213), TDCPUInt64($71495F756D1A5F60),
+ TDCPUInt64($9BE853FB60AFEF77), TDCPUInt64($ADC786A7F7443DBF),
+ TDCPUInt64($0904456173B29A82), TDCPUInt64($58BC7A66C232BD5E),
+ TDCPUInt64($F306558C673AC8B2), TDCPUInt64($41F639C6B6C9772A),
+ TDCPUInt64($216DEFE99FDA35DA), TDCPUInt64($11640CC71C7BE615),
+ TDCPUInt64($93C43694565C5527), TDCPUInt64($EA038E6246777839),
+ TDCPUInt64($F9ABF3CE5A3E2469), TDCPUInt64($741E768D0FD312D2),
+ TDCPUInt64($0144B883CED652C6), TDCPUInt64($C20B5A5BA33F8552),
+ TDCPUInt64($1AE69633C3435A9D), TDCPUInt64($97A28CA4088CFDEC),
+ TDCPUInt64($8824A43C1E96F420), TDCPUInt64($37612FA66EEEA746),
+ TDCPUInt64($6B4CB165F9CF0E5A), TDCPUInt64($43AA1C06A0ABFB4A),
+ TDCPUInt64($7F4DC26FF162796B), TDCPUInt64($6CBACC8E54ED9B0F),
+ TDCPUInt64($A6B7FFEFD2BB253E), TDCPUInt64($2E25BC95B0A29D4F),
+ TDCPUInt64($86D6A58BDEF1388C), TDCPUInt64($DED74AC576B6F054),
+ TDCPUInt64($8030BDBC2B45805D), TDCPUInt64($3C81AF70E94D9289),
+ TDCPUInt64($3EFF6DDA9E3100DB), TDCPUInt64($B38DC39FDFCC8847),
+ TDCPUInt64($123885528D17B87E), TDCPUInt64($F2DA0ED240B1B642),
+ TDCPUInt64($44CEFADCD54BF9A9), TDCPUInt64($1312200E433C7EE6),
+ TDCPUInt64($9FFCC84F3A78C748), TDCPUInt64($F0CD1F72248576BB),
+ TDCPUInt64($EC6974053638CFE4), TDCPUInt64($2BA7B67C0CEC4E4C),
+ TDCPUInt64($AC2F4DF3E5CE32ED), TDCPUInt64($CB33D14326EA4C11),
+ TDCPUInt64($A4E9044CC77E58BC), TDCPUInt64($5F513293D934FCEF),
+ TDCPUInt64($5DC9645506E55444), TDCPUInt64($50DE418F317DE40A),
+ TDCPUInt64($388CB31A69DDE259), TDCPUInt64($2DB4A83455820A86),
+ TDCPUInt64($9010A91E84711AE9), TDCPUInt64($4DF7F0B7B1498371),
+ TDCPUInt64($D62A2EABC0977179), TDCPUInt64($22FAC097AA8D5C0E) );
- t4: array[0..255] of int64= (
- $5B0E608526323C55, $1A46C1A9FA1B59F5,
- $A9E245A17C4C8FFA, $65CA5159DB2955D7,
- $05DB0A76CE35AFC2, $81EAC77EA9113D45,
- $528EF88AB6AC0A0D, $A09EA253597BE3FF,
- $430DDFB3AC48CD56, $C4B3A67AF45CE46F,
- $4ECECFD8FBE2D05E, $3EF56F10B39935F0,
- $0B22D6829CD619C6, $17FD460A74DF2069,
- $6CF8CC8E8510ED40, $D6C824BF3A6ECAA7,
- $61243D581A817049, $048BACB6BBC163A2,
- $D9A38AC27D44CC32, $7FDDFF5BAAF410AB,
- $AD6D495AA804824B, $E1A6A74F2D8C9F94,
- $D4F7851235DEE8E3, $FD4B7F886540D893,
- $247C20042AA4BFDA, $096EA1C517D1327C,
- $D56966B4361A6685, $277DA5C31221057D,
- $94D59893A43ACFF7, $64F0C51CCDC02281,
- $3D33BCC4FF6189DB, $E005CB184CE66AF1,
- $FF5CCD1D1DB99BEA, $B0B854A7FE42980F,
- $7BD46A6A718D4B9F, $D10FA8CC22A5FD8C,
- $D31484952BE4BD31, $C7FA975FCB243847,
- $4886ED1E5846C407, $28CDDB791EB70B04,
- $C2B00BE2F573417F, $5C9590452180F877,
- $7A6BDDFFF370EB00, $CE509E38D6D9D6A4,
- $EBEB0F00647FA702, $1DCC06CF76606F06,
- $E4D9F28BA286FF0A, $D85A305DC918C262,
- $475B1D8732225F54, $2D4FB51668CCB5FE,
- $A679B9D9D72BBA20, $53841C0D912D43A5,
- $3B7EAA48BF12A4E8, $781E0E47F22F1DDF,
- $EFF20CE60AB50973, $20D261D19DFFB742,
- $16A12B03062A2E39, $1960EB2239650495,
- $251C16FED50EB8B8, $9AC0C330F826016E,
- $ED152665953E7671, $02D63194A6369570,
- $5074F08394B1C987, $70BA598C90B25CE1,
- $794A15810B9742F6, $0D5925E9FCAF8C6C,
- $3067716CD868744E, $910AB077E8D7731B,
- $6A61BBDB5AC42F61, $93513EFBF0851567,
- $F494724B9E83E9D5, $E887E1985C09648D,
- $34B1D3C675370CFD, $DC35E433BC0D255D,
- $D0AAB84234131BE0, $08042A50B48B7EAF,
- $9997C4EE44A3AB35, $829A7B49201799D0,
- $263B8307B7C54441, $752F95F4FD6A6CA6,
- $927217402C08C6E5, $2A8AB754A795D9EE,
- $A442F7552F72943D, $2C31334E19781208,
- $4FA98D7CEAEE6291, $55C3862F665DB309,
- $BD0610175D53B1F3, $46FE6CB840413F27,
- $3FE03792DF0CFA59, $CFE700372EB85E8F,
- $A7BE29E7ADBCE118, $E544EE5CDE8431DD,
- $8A781B1B41F1873E, $A5C94C78A0D2F0E7,
- $39412E2877B60728, $A1265EF3AFC9A62C,
- $BCC2770C6A2506C5, $3AB66DD5DCE1CE12,
- $E65499D04A675B37, $7D8F523481BFD216,
- $0F6F64FCEC15F389, $74EFBE618B5B13C8,
- $ACDC82B714273E1D, $DD40BFE003199D17,
- $37E99257E7E061F8, $FA52626904775AAA,
- $8BBBF63A463D56F9, $F0013F1543A26E64,
- $A8307E9F879EC898, $CC4C27A4150177CC,
- $1B432F2CCA1D3348, $DE1D1F8F9F6FA013,
- $606602A047A7DDD6, $D237AB64CC1CB2C7,
- $9B938E7225FCD1D3, $EC4E03708E0FF476,
- $FEB2FBDA3D03C12D, $AE0BCED2EE43889A,
- $22CB8923EBFB4F43, $69360D013CF7396D,
- $855E3602D2D4E022, $073805BAD01F784C,
- $33E17A133852F546, $DF4874058AC7B638,
- $BA92B29C678AA14A, $0CE89FC76CFAADCD,
- $5F9D4E0908339E34, $F1AFE9291F5923B9,
- $6E3480F60F4A265F, $EEBF3A2AB29B841C,
- $E21938A88F91B4AD, $57DFEFF845C6D3C3,
- $2F006B0BF62CAAF2, $62F479EF6F75EE78,
- $11A55AD41C8916A9, $F229D29084FED453,
- $42F1C27B16B000E6, $2B1F76749823C074,
- $4B76ECA3C2745360, $8C98F463B91691BD,
- $14BCC93CF1ADE66A, $8885213E6D458397,
- $8E177DF0274D4711, $B49B73B5503F2951,
- $10168168C3F96B6B, $0E3D963B63CAB0AE,
- $8DFC4B5655A1DB14, $F789F1356E14DE5C,
- $683E68AF4E51DAC1, $C9A84F9D8D4B0FD9,
- $3691E03F52A0F9D1, $5ED86E46E1878E80,
- $3C711A0E99D07150, $5A0865B20C4E9310,
- $56FBFC1FE4F0682E, $EA8D5DE3105EDF9B,
- $71ABFDB12379187A, $2EB99DE1BEE77B9C,
- $21ECC0EA33CF4523, $59A4D7521805C7A1,
- $3896F5EB56AE7C72, $AA638F3DB18F75DC,
- $9F39358DABE9808E, $B7DEFA91C00B72AC,
- $6B5541FD62492D92, $6DC6DEE8F92E4D5B,
- $353F57ABC4BEEA7E, $735769D6DA5690CE,
- $0A234AA642391484, $F6F9508028F80D9D,
- $B8E319A27AB3F215, $31AD9C1151341A4D,
- $773C22A57BEF5805, $45C7561A07968633,
- $F913DA9E249DBE36, $DA652D9B78A64C68,
- $4C27A97F3BC334EF, $76621220E66B17F4,
- $967743899ACD7D0B, $F3EE5BCAE0ED6782,
- $409F753600C879FC, $06D09A39B5926DB6,
- $6F83AEB0317AC588, $01E6CA4A86381F21,
- $66FF3462D19F3025, $72207C24DDFD3BFB,
- $4AF6B6D3E2ECE2EB, $9C994DBEC7EA08DE,
- $49ACE597B09A8BC4, $B38C4766CF0797BA,
- $131B9373C57C2A75, $B1822CCE61931E58,
- $9D7555B909BA1C0C, $127FAFDD937D11D2,
- $29DA3BADC66D92E4, $A2C1D57154C2ECBC,
- $58C5134D82F6FE24, $1C3AE3515B62274F,
- $E907C82E01CB8126, $F8ED091913E37FCB,
- $3249D8F9C80046C9, $80CF9BEDE388FB63,
- $1881539A116CF19E, $5103F3F76BD52457,
- $15B7E6F5AE47F7A8, $DBD7C6DED47E9CCF,
- $44E55C410228BB1A, $B647D4255EDB4E99,
- $5D11882BB8AAFC30, $F5098BBB29D3212A,
- $8FB5EA14E90296B3, $677B942157DD025A,
- $FB58E7C0A390ACB5, $89D3674C83BD4A01,
- $9E2DA4DF4BF3B93B, $FCC41E328CAB4829,
- $03F38C96BA582C52, $CAD1BDBD7FD85DB2,
- $BBB442C16082AE83, $B95FE86BA5DA9AB0,
- $B22E04673771A93F, $845358C9493152D8,
- $BE2A488697B4541E, $95A2DC2DD38E6966,
- $C02C11AC923C852B, $2388B1990DF2A87B,
- $7C8008FA1B4F37BE, $1F70D0C84D54E503,
- $5490ADEC7ECE57D4, $002B3C27D9063A3A,
- $7EAEA3848030A2BF, $C602326DED2003C0,
- $83A7287D69A94086, $C57A5FCB30F57A8A,
- $B56844E479EBE779, $A373B40F05DCBCE9,
- $D71A786E88570EE2, $879CBACDBDE8F6A0,
- $976AD1BCC164A32F, $AB21E25E9666D78B,
- $901063AAE5E5C33C, $9818B34448698D90,
- $E36487AE3E1E8ABB, $AFBDF931893BDCB4,
- $6345A0DC5FBBD519, $8628FE269B9465CA,
- $1E5D01603F9C51EC, $4DE44006A15049B7,
- $BF6C70E5F776CBB1, $411218F2EF552BED,
- $CB0C0708705A36A3, $E74D14754F986044,
- $CD56D9430EA8280E, $C12591D7535F5065,
- $C83223F1720AEF96, $C3A0396F7363A51F);
+ t3: array[0..255] of TDCPUInt64= (
+ TDCPUInt64($F49FCC2FF1DAF39B), TDCPUInt64($487FD5C66FF29281),
+ TDCPUInt64($E8A30667FCDCA83F), TDCPUInt64($2C9B4BE3D2FCCE63),
+ TDCPUInt64($DA3FF74B93FBBBC2), TDCPUInt64($2FA165D2FE70BA66),
+ TDCPUInt64($A103E279970E93D4), TDCPUInt64($BECDEC77B0E45E71),
+ TDCPUInt64($CFB41E723985E497), TDCPUInt64($B70AAA025EF75017),
+ TDCPUInt64($D42309F03840B8E0), TDCPUInt64($8EFC1AD035898579),
+ TDCPUInt64($96C6920BE2B2ABC5), TDCPUInt64($66AF4163375A9172),
+ TDCPUInt64($2174ABDCCA7127FB), TDCPUInt64($B33CCEA64A72FF41),
+ TDCPUInt64($F04A4933083066A5), TDCPUInt64($8D970ACDD7289AF5),
+ TDCPUInt64($8F96E8E031C8C25E), TDCPUInt64($F3FEC02276875D47),
+ TDCPUInt64($EC7BF310056190DD), TDCPUInt64($F5ADB0AEBB0F1491),
+ TDCPUInt64($9B50F8850FD58892), TDCPUInt64($4975488358B74DE8),
+ TDCPUInt64($A3354FF691531C61), TDCPUInt64($0702BBE481D2C6EE),
+ TDCPUInt64($89FB24057DEDED98), TDCPUInt64($AC3075138596E902),
+ TDCPUInt64($1D2D3580172772ED), TDCPUInt64($EB738FC28E6BC30D),
+ TDCPUInt64($5854EF8F63044326), TDCPUInt64($9E5C52325ADD3BBE),
+ TDCPUInt64($90AA53CF325C4623), TDCPUInt64($C1D24D51349DD067),
+ TDCPUInt64($2051CFEEA69EA624), TDCPUInt64($13220F0A862E7E4F),
+ TDCPUInt64($CE39399404E04864), TDCPUInt64($D9C42CA47086FCB7),
+ TDCPUInt64($685AD2238A03E7CC), TDCPUInt64($066484B2AB2FF1DB),
+ TDCPUInt64($FE9D5D70EFBF79EC), TDCPUInt64($5B13B9DD9C481854),
+ TDCPUInt64($15F0D475ED1509AD), TDCPUInt64($0BEBCD060EC79851),
+ TDCPUInt64($D58C6791183AB7F8), TDCPUInt64($D1187C5052F3EEE4),
+ TDCPUInt64($C95D1192E54E82FF), TDCPUInt64($86EEA14CB9AC6CA2),
+ TDCPUInt64($3485BEB153677D5D), TDCPUInt64($DD191D781F8C492A),
+ TDCPUInt64($F60866BAA784EBF9), TDCPUInt64($518F643BA2D08C74),
+ TDCPUInt64($8852E956E1087C22), TDCPUInt64($A768CB8DC410AE8D),
+ TDCPUInt64($38047726BFEC8E1A), TDCPUInt64($A67738B4CD3B45AA),
+ TDCPUInt64($AD16691CEC0DDE19), TDCPUInt64($C6D4319380462E07),
+ TDCPUInt64($C5A5876D0BA61938), TDCPUInt64($16B9FA1FA58FD840),
+ TDCPUInt64($188AB1173CA74F18), TDCPUInt64($ABDA2F98C99C021F),
+ TDCPUInt64($3E0580AB134AE816), TDCPUInt64($5F3B05B773645ABB),
+ TDCPUInt64($2501A2BE5575F2F6), TDCPUInt64($1B2F74004E7E8BA9),
+ TDCPUInt64($1CD7580371E8D953), TDCPUInt64($7F6ED89562764E30),
+ TDCPUInt64($B15926FF596F003D), TDCPUInt64($9F65293DA8C5D6B9),
+ TDCPUInt64($6ECEF04DD690F84C), TDCPUInt64($4782275FFF33AF88),
+ TDCPUInt64($E41433083F820801), TDCPUInt64($FD0DFE409A1AF9B5),
+ TDCPUInt64($4325A3342CDB396B), TDCPUInt64($8AE77E62B301B252),
+ TDCPUInt64($C36F9E9F6655615A), TDCPUInt64($85455A2D92D32C09),
+ TDCPUInt64($F2C7DEA949477485), TDCPUInt64($63CFB4C133A39EBA),
+ TDCPUInt64($83B040CC6EBC5462), TDCPUInt64($3B9454C8FDB326B0),
+ TDCPUInt64($56F56A9E87FFD78C), TDCPUInt64($2DC2940D99F42BC6),
+ TDCPUInt64($98F7DF096B096E2D), TDCPUInt64($19A6E01E3AD852BF),
+ TDCPUInt64($42A99CCBDBD4B40B), TDCPUInt64($A59998AF45E9C559),
+ TDCPUInt64($366295E807D93186), TDCPUInt64($6B48181BFAA1F773),
+ TDCPUInt64($1FEC57E2157A0A1D), TDCPUInt64($4667446AF6201AD5),
+ TDCPUInt64($E615EBCACFB0F075), TDCPUInt64($B8F31F4F68290778),
+ TDCPUInt64($22713ED6CE22D11E), TDCPUInt64($3057C1A72EC3C93B),
+ TDCPUInt64($CB46ACC37C3F1F2F), TDCPUInt64($DBB893FD02AAF50E),
+ TDCPUInt64($331FD92E600B9FCF), TDCPUInt64($A498F96148EA3AD6),
+ TDCPUInt64($A8D8426E8B6A83EA), TDCPUInt64($A089B274B7735CDC),
+ TDCPUInt64($87F6B3731E524A11), TDCPUInt64($118808E5CBC96749),
+ TDCPUInt64($9906E4C7B19BD394), TDCPUInt64($AFED7F7E9B24A20C),
+ TDCPUInt64($6509EADEEB3644A7), TDCPUInt64($6C1EF1D3E8EF0EDE),
+ TDCPUInt64($B9C97D43E9798FB4), TDCPUInt64($A2F2D784740C28A3),
+ TDCPUInt64($7B8496476197566F), TDCPUInt64($7A5BE3E6B65F069D),
+ TDCPUInt64($F96330ED78BE6F10), TDCPUInt64($EEE60DE77A076A15),
+ TDCPUInt64($2B4BEE4AA08B9BD0), TDCPUInt64($6A56A63EC7B8894E),
+ TDCPUInt64($02121359BA34FEF4), TDCPUInt64($4CBF99F8283703FC),
+ TDCPUInt64($398071350CAF30C8), TDCPUInt64($D0A77A89F017687A),
+ TDCPUInt64($F1C1A9EB9E423569), TDCPUInt64($8C7976282DEE8199),
+ TDCPUInt64($5D1737A5DD1F7ABD), TDCPUInt64($4F53433C09A9FA80),
+ TDCPUInt64($FA8B0C53DF7CA1D9), TDCPUInt64($3FD9DCBC886CCB77),
+ TDCPUInt64($C040917CA91B4720), TDCPUInt64($7DD00142F9D1DCDF),
+ TDCPUInt64($8476FC1D4F387B58), TDCPUInt64($23F8E7C5F3316503),
+ TDCPUInt64($032A2244E7E37339), TDCPUInt64($5C87A5D750F5A74B),
+ TDCPUInt64($082B4CC43698992E), TDCPUInt64($DF917BECB858F63C),
+ TDCPUInt64($3270B8FC5BF86DDA), TDCPUInt64($10AE72BB29B5DD76),
+ TDCPUInt64($576AC94E7700362B), TDCPUInt64($1AD112DAC61EFB8F),
+ TDCPUInt64($691BC30EC5FAA427), TDCPUInt64($FF246311CC327143),
+ TDCPUInt64($3142368E30E53206), TDCPUInt64($71380E31E02CA396),
+ TDCPUInt64($958D5C960AAD76F1), TDCPUInt64($F8D6F430C16DA536),
+ TDCPUInt64($C8FFD13F1BE7E1D2), TDCPUInt64($7578AE66004DDBE1),
+ TDCPUInt64($05833F01067BE646), TDCPUInt64($BB34B5AD3BFE586D),
+ TDCPUInt64($095F34C9A12B97F0), TDCPUInt64($247AB64525D60CA8),
+ TDCPUInt64($DCDBC6F3017477D1), TDCPUInt64($4A2E14D4DECAD24D),
+ TDCPUInt64($BDB5E6D9BE0A1EEB), TDCPUInt64($2A7E70F7794301AB),
+ TDCPUInt64($DEF42D8A270540FD), TDCPUInt64($01078EC0A34C22C1),
+ TDCPUInt64($E5DE511AF4C16387), TDCPUInt64($7EBB3A52BD9A330A),
+ TDCPUInt64($77697857AA7D6435), TDCPUInt64($004E831603AE4C32),
+ TDCPUInt64($E7A21020AD78E312), TDCPUInt64($9D41A70C6AB420F2),
+ TDCPUInt64($28E06C18EA1141E6), TDCPUInt64($D2B28CBD984F6B28),
+ TDCPUInt64($26B75F6C446E9D83), TDCPUInt64($BA47568C4D418D7F),
+ TDCPUInt64($D80BADBFE6183D8E), TDCPUInt64($0E206D7F5F166044),
+ TDCPUInt64($E258A43911CBCA3E), TDCPUInt64($723A1746B21DC0BC),
+ TDCPUInt64($C7CAA854F5D7CDD3), TDCPUInt64($7CAC32883D261D9C),
+ TDCPUInt64($7690C26423BA942C), TDCPUInt64($17E55524478042B8),
+ TDCPUInt64($E0BE477656A2389F), TDCPUInt64($4D289B5E67AB2DA0),
+ TDCPUInt64($44862B9C8FBBFD31), TDCPUInt64($B47CC8049D141365),
+ TDCPUInt64($822C1B362B91C793), TDCPUInt64($4EB14655FB13DFD8),
+ TDCPUInt64($1ECBBA0714E2A97B), TDCPUInt64($6143459D5CDE5F14),
+ TDCPUInt64($53A8FBF1D5F0AC89), TDCPUInt64($97EA04D81C5E5B00),
+ TDCPUInt64($622181A8D4FDB3F3), TDCPUInt64($E9BCD341572A1208),
+ TDCPUInt64($1411258643CCE58A), TDCPUInt64($9144C5FEA4C6E0A4),
+ TDCPUInt64($0D33D06565CF620F), TDCPUInt64($54A48D489F219CA1),
+ TDCPUInt64($C43E5EAC6D63C821), TDCPUInt64($A9728B3A72770DAF),
+ TDCPUInt64($D7934E7B20DF87EF), TDCPUInt64($E35503B61A3E86E5),
+ TDCPUInt64($CAE321FBC819D504), TDCPUInt64($129A50B3AC60BFA6),
+ TDCPUInt64($CD5E68EA7E9FB6C3), TDCPUInt64($B01C90199483B1C7),
+ TDCPUInt64($3DE93CD5C295376C), TDCPUInt64($AED52EDF2AB9AD13),
+ TDCPUInt64($2E60F512C0A07884), TDCPUInt64($BC3D86A3E36210C9),
+ TDCPUInt64($35269D9B163951CE), TDCPUInt64($0C7D6E2AD0CDB5FA),
+ TDCPUInt64($59E86297D87F5733), TDCPUInt64($298EF221898DB0E7),
+ TDCPUInt64($55000029D1A5AA7E), TDCPUInt64($8BC08AE1B5061B45),
+ TDCPUInt64($C2C31C2B6C92703A), TDCPUInt64($94CC596BAF25EF42),
+ TDCPUInt64($0A1D73DB22540456), TDCPUInt64($04B6A0F9D9C4179A),
+ TDCPUInt64($EFFDAFA2AE3D3C60), TDCPUInt64($F7C8075BB49496C4),
+ TDCPUInt64($9CC5C7141D1CD4E3), TDCPUInt64($78BD1638218E5534),
+ TDCPUInt64($B2F11568F850246A), TDCPUInt64($EDFABCFA9502BC29),
+ TDCPUInt64($796CE5F2DA23051B), TDCPUInt64($AAE128B0DC93537C),
+ TDCPUInt64($3A493DA0EE4B29AE), TDCPUInt64($B5DF6B2C416895D7),
+ TDCPUInt64($FCABBD25122D7F37), TDCPUInt64($70810B58105DC4B1),
+ TDCPUInt64($E10FDD37F7882A90), TDCPUInt64($524DCAB5518A3F5C),
+ TDCPUInt64($3C9E85878451255B), TDCPUInt64($4029828119BD34E2),
+ TDCPUInt64($74A05B6F5D3CECCB), TDCPUInt64($B610021542E13ECA),
+ TDCPUInt64($0FF979D12F59E2AC), TDCPUInt64($6037DA27E4F9CC50),
+ TDCPUInt64($5E92975A0DF1847D), TDCPUInt64($D66DE190D3E623FE),
+ TDCPUInt64($5032D6B87B568048), TDCPUInt64($9A36B7CE8235216E),
+ TDCPUInt64($80272A7A24F64B4A), TDCPUInt64($93EFED8B8C6916F7),
+ TDCPUInt64($37DDBFF44CCE1555), TDCPUInt64($4B95DB5D4B99BD25),
+ TDCPUInt64($92D3FDA169812FC0), TDCPUInt64($FB1A4A9A90660BB6),
+ TDCPUInt64($730C196946A4B9B2), TDCPUInt64($81E289AA7F49DA68),
+ TDCPUInt64($64669A0F83B1A05F), TDCPUInt64($27B3FF7D9644F48B),
+ TDCPUInt64($CC6B615C8DB675B3), TDCPUInt64($674F20B9BCEBBE95),
+ TDCPUInt64($6F31238275655982), TDCPUInt64($5AE488713E45CF05),
+ TDCPUInt64($BF619F9954C21157), TDCPUInt64($EABAC46040A8EAE9),
+ TDCPUInt64($454C6FE9F2C0C1CD), TDCPUInt64($419CF6496412691C),
+ TDCPUInt64($D3DC3BEF265B0F70), TDCPUInt64($6D0E60F5C3578A9E) );
+
+ t4: array[0..255] of TDCPUInt64= (
+ TDCPUInt64($5B0E608526323C55), TDCPUInt64($1A46C1A9FA1B59F5),
+ TDCPUInt64($A9E245A17C4C8FFA), TDCPUInt64($65CA5159DB2955D7),
+ TDCPUInt64($05DB0A76CE35AFC2), TDCPUInt64($81EAC77EA9113D45),
+ TDCPUInt64($528EF88AB6AC0A0D), TDCPUInt64($A09EA253597BE3FF),
+ TDCPUInt64($430DDFB3AC48CD56), TDCPUInt64($C4B3A67AF45CE46F),
+ TDCPUInt64($4ECECFD8FBE2D05E), TDCPUInt64($3EF56F10B39935F0),
+ TDCPUInt64($0B22D6829CD619C6), TDCPUInt64($17FD460A74DF2069),
+ TDCPUInt64($6CF8CC8E8510ED40), TDCPUInt64($D6C824BF3A6ECAA7),
+ TDCPUInt64($61243D581A817049), TDCPUInt64($048BACB6BBC163A2),
+ TDCPUInt64($D9A38AC27D44CC32), TDCPUInt64($7FDDFF5BAAF410AB),
+ TDCPUInt64($AD6D495AA804824B), TDCPUInt64($E1A6A74F2D8C9F94),
+ TDCPUInt64($D4F7851235DEE8E3), TDCPUInt64($FD4B7F886540D893),
+ TDCPUInt64($247C20042AA4BFDA), TDCPUInt64($096EA1C517D1327C),
+ TDCPUInt64($D56966B4361A6685), TDCPUInt64($277DA5C31221057D),
+ TDCPUInt64($94D59893A43ACFF7), TDCPUInt64($64F0C51CCDC02281),
+ TDCPUInt64($3D33BCC4FF6189DB), TDCPUInt64($E005CB184CE66AF1),
+ TDCPUInt64($FF5CCD1D1DB99BEA), TDCPUInt64($B0B854A7FE42980F),
+ TDCPUInt64($7BD46A6A718D4B9F), TDCPUInt64($D10FA8CC22A5FD8C),
+ TDCPUInt64($D31484952BE4BD31), TDCPUInt64($C7FA975FCB243847),
+ TDCPUInt64($4886ED1E5846C407), TDCPUInt64($28CDDB791EB70B04),
+ TDCPUInt64($C2B00BE2F573417F), TDCPUInt64($5C9590452180F877),
+ TDCPUInt64($7A6BDDFFF370EB00), TDCPUInt64($CE509E38D6D9D6A4),
+ TDCPUInt64($EBEB0F00647FA702), TDCPUInt64($1DCC06CF76606F06),
+ TDCPUInt64($E4D9F28BA286FF0A), TDCPUInt64($D85A305DC918C262),
+ TDCPUInt64($475B1D8732225F54), TDCPUInt64($2D4FB51668CCB5FE),
+ TDCPUInt64($A679B9D9D72BBA20), TDCPUInt64($53841C0D912D43A5),
+ TDCPUInt64($3B7EAA48BF12A4E8), TDCPUInt64($781E0E47F22F1DDF),
+ TDCPUInt64($EFF20CE60AB50973), TDCPUInt64($20D261D19DFFB742),
+ TDCPUInt64($16A12B03062A2E39), TDCPUInt64($1960EB2239650495),
+ TDCPUInt64($251C16FED50EB8B8), TDCPUInt64($9AC0C330F826016E),
+ TDCPUInt64($ED152665953E7671), TDCPUInt64($02D63194A6369570),
+ TDCPUInt64($5074F08394B1C987), TDCPUInt64($70BA598C90B25CE1),
+ TDCPUInt64($794A15810B9742F6), TDCPUInt64($0D5925E9FCAF8C6C),
+ TDCPUInt64($3067716CD868744E), TDCPUInt64($910AB077E8D7731B),
+ TDCPUInt64($6A61BBDB5AC42F61), TDCPUInt64($93513EFBF0851567),
+ TDCPUInt64($F494724B9E83E9D5), TDCPUInt64($E887E1985C09648D),
+ TDCPUInt64($34B1D3C675370CFD), TDCPUInt64($DC35E433BC0D255D),
+ TDCPUInt64($D0AAB84234131BE0), TDCPUInt64($08042A50B48B7EAF),
+ TDCPUInt64($9997C4EE44A3AB35), TDCPUInt64($829A7B49201799D0),
+ TDCPUInt64($263B8307B7C54441), TDCPUInt64($752F95F4FD6A6CA6),
+ TDCPUInt64($927217402C08C6E5), TDCPUInt64($2A8AB754A795D9EE),
+ TDCPUInt64($A442F7552F72943D), TDCPUInt64($2C31334E19781208),
+ TDCPUInt64($4FA98D7CEAEE6291), TDCPUInt64($55C3862F665DB309),
+ TDCPUInt64($BD0610175D53B1F3), TDCPUInt64($46FE6CB840413F27),
+ TDCPUInt64($3FE03792DF0CFA59), TDCPUInt64($CFE700372EB85E8F),
+ TDCPUInt64($A7BE29E7ADBCE118), TDCPUInt64($E544EE5CDE8431DD),
+ TDCPUInt64($8A781B1B41F1873E), TDCPUInt64($A5C94C78A0D2F0E7),
+ TDCPUInt64($39412E2877B60728), TDCPUInt64($A1265EF3AFC9A62C),
+ TDCPUInt64($BCC2770C6A2506C5), TDCPUInt64($3AB66DD5DCE1CE12),
+ TDCPUInt64($E65499D04A675B37), TDCPUInt64($7D8F523481BFD216),
+ TDCPUInt64($0F6F64FCEC15F389), TDCPUInt64($74EFBE618B5B13C8),
+ TDCPUInt64($ACDC82B714273E1D), TDCPUInt64($DD40BFE003199D17),
+ TDCPUInt64($37E99257E7E061F8), TDCPUInt64($FA52626904775AAA),
+ TDCPUInt64($8BBBF63A463D56F9), TDCPUInt64($F0013F1543A26E64),
+ TDCPUInt64($A8307E9F879EC898), TDCPUInt64($CC4C27A4150177CC),
+ TDCPUInt64($1B432F2CCA1D3348), TDCPUInt64($DE1D1F8F9F6FA013),
+ TDCPUInt64($606602A047A7DDD6), TDCPUInt64($D237AB64CC1CB2C7),
+ TDCPUInt64($9B938E7225FCD1D3), TDCPUInt64($EC4E03708E0FF476),
+ TDCPUInt64($FEB2FBDA3D03C12D), TDCPUInt64($AE0BCED2EE43889A),
+ TDCPUInt64($22CB8923EBFB4F43), TDCPUInt64($69360D013CF7396D),
+ TDCPUInt64($855E3602D2D4E022), TDCPUInt64($073805BAD01F784C),
+ TDCPUInt64($33E17A133852F546), TDCPUInt64($DF4874058AC7B638),
+ TDCPUInt64($BA92B29C678AA14A), TDCPUInt64($0CE89FC76CFAADCD),
+ TDCPUInt64($5F9D4E0908339E34), TDCPUInt64($F1AFE9291F5923B9),
+ TDCPUInt64($6E3480F60F4A265F), TDCPUInt64($EEBF3A2AB29B841C),
+ TDCPUInt64($E21938A88F91B4AD), TDCPUInt64($57DFEFF845C6D3C3),
+ TDCPUInt64($2F006B0BF62CAAF2), TDCPUInt64($62F479EF6F75EE78),
+ TDCPUInt64($11A55AD41C8916A9), TDCPUInt64($F229D29084FED453),
+ TDCPUInt64($42F1C27B16B000E6), TDCPUInt64($2B1F76749823C074),
+ TDCPUInt64($4B76ECA3C2745360), TDCPUInt64($8C98F463B91691BD),
+ TDCPUInt64($14BCC93CF1ADE66A), TDCPUInt64($8885213E6D458397),
+ TDCPUInt64($8E177DF0274D4711), TDCPUInt64($B49B73B5503F2951),
+ TDCPUInt64($10168168C3F96B6B), TDCPUInt64($0E3D963B63CAB0AE),
+ TDCPUInt64($8DFC4B5655A1DB14), TDCPUInt64($F789F1356E14DE5C),
+ TDCPUInt64($683E68AF4E51DAC1), TDCPUInt64($C9A84F9D8D4B0FD9),
+ TDCPUInt64($3691E03F52A0F9D1), TDCPUInt64($5ED86E46E1878E80),
+ TDCPUInt64($3C711A0E99D07150), TDCPUInt64($5A0865B20C4E9310),
+ TDCPUInt64($56FBFC1FE4F0682E), TDCPUInt64($EA8D5DE3105EDF9B),
+ TDCPUInt64($71ABFDB12379187A), TDCPUInt64($2EB99DE1BEE77B9C),
+ TDCPUInt64($21ECC0EA33CF4523), TDCPUInt64($59A4D7521805C7A1),
+ TDCPUInt64($3896F5EB56AE7C72), TDCPUInt64($AA638F3DB18F75DC),
+ TDCPUInt64($9F39358DABE9808E), TDCPUInt64($B7DEFA91C00B72AC),
+ TDCPUInt64($6B5541FD62492D92), TDCPUInt64($6DC6DEE8F92E4D5B),
+ TDCPUInt64($353F57ABC4BEEA7E), TDCPUInt64($735769D6DA5690CE),
+ TDCPUInt64($0A234AA642391484), TDCPUInt64($F6F9508028F80D9D),
+ TDCPUInt64($B8E319A27AB3F215), TDCPUInt64($31AD9C1151341A4D),
+ TDCPUInt64($773C22A57BEF5805), TDCPUInt64($45C7561A07968633),
+ TDCPUInt64($F913DA9E249DBE36), TDCPUInt64($DA652D9B78A64C68),
+ TDCPUInt64($4C27A97F3BC334EF), TDCPUInt64($76621220E66B17F4),
+ TDCPUInt64($967743899ACD7D0B), TDCPUInt64($F3EE5BCAE0ED6782),
+ TDCPUInt64($409F753600C879FC), TDCPUInt64($06D09A39B5926DB6),
+ TDCPUInt64($6F83AEB0317AC588), TDCPUInt64($01E6CA4A86381F21),
+ TDCPUInt64($66FF3462D19F3025), TDCPUInt64($72207C24DDFD3BFB),
+ TDCPUInt64($4AF6B6D3E2ECE2EB), TDCPUInt64($9C994DBEC7EA08DE),
+ TDCPUInt64($49ACE597B09A8BC4), TDCPUInt64($B38C4766CF0797BA),
+ TDCPUInt64($131B9373C57C2A75), TDCPUInt64($B1822CCE61931E58),
+ TDCPUInt64($9D7555B909BA1C0C), TDCPUInt64($127FAFDD937D11D2),
+ TDCPUInt64($29DA3BADC66D92E4), TDCPUInt64($A2C1D57154C2ECBC),
+ TDCPUInt64($58C5134D82F6FE24), TDCPUInt64($1C3AE3515B62274F),
+ TDCPUInt64($E907C82E01CB8126), TDCPUInt64($F8ED091913E37FCB),
+ TDCPUInt64($3249D8F9C80046C9), TDCPUInt64($80CF9BEDE388FB63),
+ TDCPUInt64($1881539A116CF19E), TDCPUInt64($5103F3F76BD52457),
+ TDCPUInt64($15B7E6F5AE47F7A8), TDCPUInt64($DBD7C6DED47E9CCF),
+ TDCPUInt64($44E55C410228BB1A), TDCPUInt64($B647D4255EDB4E99),
+ TDCPUInt64($5D11882BB8AAFC30), TDCPUInt64($F5098BBB29D3212A),
+ TDCPUInt64($8FB5EA14E90296B3), TDCPUInt64($677B942157DD025A),
+ TDCPUInt64($FB58E7C0A390ACB5), TDCPUInt64($89D3674C83BD4A01),
+ TDCPUInt64($9E2DA4DF4BF3B93B), TDCPUInt64($FCC41E328CAB4829),
+ TDCPUInt64($03F38C96BA582C52), TDCPUInt64($CAD1BDBD7FD85DB2),
+ TDCPUInt64($BBB442C16082AE83), TDCPUInt64($B95FE86BA5DA9AB0),
+ TDCPUInt64($B22E04673771A93F), TDCPUInt64($845358C9493152D8),
+ TDCPUInt64($BE2A488697B4541E), TDCPUInt64($95A2DC2DD38E6966),
+ TDCPUInt64($C02C11AC923C852B), TDCPUInt64($2388B1990DF2A87B),
+ TDCPUInt64($7C8008FA1B4F37BE), TDCPUInt64($1F70D0C84D54E503),
+ TDCPUInt64($5490ADEC7ECE57D4), TDCPUInt64($002B3C27D9063A3A),
+ TDCPUInt64($7EAEA3848030A2BF), TDCPUInt64($C602326DED2003C0),
+ TDCPUInt64($83A7287D69A94086), TDCPUInt64($C57A5FCB30F57A8A),
+ TDCPUInt64($B56844E479EBE779), TDCPUInt64($A373B40F05DCBCE9),
+ TDCPUInt64($D71A786E88570EE2), TDCPUInt64($879CBACDBDE8F6A0),
+ TDCPUInt64($976AD1BCC164A32F), TDCPUInt64($AB21E25E9666D78B),
+ TDCPUInt64($901063AAE5E5C33C), TDCPUInt64($9818B34448698D90),
+ TDCPUInt64($E36487AE3E1E8ABB), TDCPUInt64($AFBDF931893BDCB4),
+ TDCPUInt64($6345A0DC5FBBD519), TDCPUInt64($8628FE269B9465CA),
+ TDCPUInt64($1E5D01603F9C51EC), TDCPUInt64($4DE44006A15049B7),
+ TDCPUInt64($BF6C70E5F776CBB1), TDCPUInt64($411218F2EF552BED),
+ TDCPUInt64($CB0C0708705A36A3), TDCPUInt64($E74D14754F986044),
+ TDCPUInt64($CD56D9430EA8280E), TDCPUInt64($C12591D7535F5065),
+ TDCPUInt64($C83223F1720AEF96), TDCPUInt64($C3A0396F7363A51F) );
diff --git a/Hashes/DCPtiger.pas b/Hashes/DCPtiger.pas
index cba909b..615e620 100644
--- a/Hashes/DCPtiger.pas
+++ b/Hashes/DCPtiger.pas
@@ -31,9 +31,9 @@ interface
type
TDCP_tiger= class(TDCP_hash)
protected
- Len: int64;
+ Len: TDCPUInt64;
Index: DWord;
- CurrentHash: array[0..2] of int64;
+ CurrentHash: array[0..2] of TDCPUInt64;
HashBuffer: array[0..63] of byte;
procedure Compress;
public
@@ -56,8 +56,8 @@ implementation
procedure TDCP_tiger.Compress;
var
- a, b, c, aa, bb, cc: int64;
- x: array[0..7] of int64;
+ a, b, c, aa, bb, cc: TDCPUInt64;
+ x: array[0..7] of TDCPUInt64;
begin
a:= CurrentHash[0]; aa:= a;
b:= CurrentHash[1]; bb:= b;
@@ -218,13 +218,13 @@ class function TDCP_tiger.GetAlgorithm: string;
class function TDCP_tiger.SelfTest: boolean;
const
- Test1Out: array[0..2] of int64=
- ($87FB2A9083851CF7,$470D2CF810E6DF9E,$B586445034A5A386);
- Test2Out: array[0..2] of int64=
- ($0C410A042968868A,$1671DA5A3FD29A72,$5EC1E457D3CDB303);
+ Test1Out: array[0..2] of TDCPUInt64 =
+ (TDCPUInt64($87FB2A9083851CF7), TDCPUInt64($470D2CF810E6DF9E), TDCPUInt64($B586445034A5A386));
+ Test2Out: array[0..2] of TDCPUInt64=
+ (TDCPUInt64($0C410A042968868A), TDCPUInt64($1671DA5A3FD29A72), TDCPUInt64($5EC1E457D3CDB303));
var
TestHash: TDCP_tiger;
- TestOut: array[0..2] of int64;
+ TestOut: array[0..2] of TDCPUInt64;
begin
TestHash:= TDCP_tiger.Create(nil);
TestHash.Init;
@@ -242,9 +242,9 @@ procedure TDCP_tiger.Init;
begin
Burn;
fInitialized:= true;
- CurrentHash[0]:= $0123456789ABCDEF;
- CurrentHash[1]:= $FEDCBA9876543210;
- CurrentHash[2]:= $F096A5B4C3B2E187;
+ CurrentHash[0]:= TDCPUInt64($0123456789ABCDEF);
+ CurrentHash[1]:= TDCPUInt64($FEDCBA9876543210);
+ CurrentHash[2]:= TDCPUInt64($F096A5B4C3B2E187);
end;
procedure TDCP_tiger.Burn;
@@ -291,7 +291,7 @@ procedure TDCP_tiger.Final(var Digest);
HashBuffer[Index]:= $01;
if Index>= 56 then
Compress;
- Pint64(@HashBuffer[56])^:= Len;
+ PDCPUInt64(@HashBuffer[56])^:= Len;
Compress;
Move(CurrentHash,Digest,Sizeof(CurrentHash));
Burn;