Browse Source

Merge downstream.

Herman Schoenfeld 6 years ago
parent
commit
6509d5bf79
35 changed files with 488 additions and 358 deletions
  1. 1 0
      src/gui/wizards/operations/UWIZOperationFee_Custom.pas
  2. 10 5
      src/libraries/hashlib4pascal/HashLib.inc
  3. 11 5
      src/libraries/hashlib4pascal/HashLibHelper.inc
  4. 1 1
      src/libraries/hashlib4pascal/HlpAP.pas
  5. 1 1
      src/libraries/hashlib4pascal/HlpAdler32.pas
  6. 1 1
      src/libraries/hashlib4pascal/HlpBKDR.pas
  7. 1 1
      src/libraries/hashlib4pascal/HlpBernstein.pas
  8. 1 1
      src/libraries/hashlib4pascal/HlpBernstein1.pas
  9. 26 33
      src/libraries/hashlib4pascal/HlpBits.pas
  10. 1 1
      src/libraries/hashlib4pascal/HlpCRC16.pas
  11. 1 1
      src/libraries/hashlib4pascal/HlpCRC32.pas
  12. 1 1
      src/libraries/hashlib4pascal/HlpCRC64.pas
  13. 1 1
      src/libraries/hashlib4pascal/HlpDJB.pas
  14. 1 1
      src/libraries/hashlib4pascal/HlpELF.pas
  15. 1 1
      src/libraries/hashlib4pascal/HlpFNV.pas
  16. 1 1
      src/libraries/hashlib4pascal/HlpFNV1a.pas
  17. 1 1
      src/libraries/hashlib4pascal/HlpFNV1a64.pas
  18. 1 1
      src/libraries/hashlib4pascal/HlpFNV64.pas
  19. 43 18
      src/libraries/hashlib4pascal/HlpHashFactory.pas
  20. 2 0
      src/libraries/hashlib4pascal/HlpHashRounds.pas
  21. 2 0
      src/libraries/hashlib4pascal/HlpHashSize.pas
  22. 2 2
      src/libraries/hashlib4pascal/HlpICRC.pas
  23. 3 3
      src/libraries/hashlib4pascal/HlpIHashInfo.pas
  24. 1 1
      src/libraries/hashlib4pascal/HlpJS.pas
  25. 9 6
      src/libraries/hashlib4pascal/HlpNullDigest.pas
  26. 1 1
      src/libraries/hashlib4pascal/HlpOneAtTime.pas
  27. 1 1
      src/libraries/hashlib4pascal/HlpPJW.pas
  28. 1 1
      src/libraries/hashlib4pascal/HlpRS.pas
  29. 1 1
      src/libraries/hashlib4pascal/HlpRotating.pas
  30. 1 1
      src/libraries/hashlib4pascal/HlpSDBM.pas
  31. 41 27
      src/libraries/hashlib4pascal/HlpSHA2_512Base.pas
  32. 315 236
      src/libraries/hashlib4pascal/HlpSHA3.pas
  33. 1 1
      src/libraries/hashlib4pascal/HlpShiftAndXor.pas
  34. 1 1
      src/libraries/hashlib4pascal/HlpXXHash32.pas
  35. 1 1
      src/libraries/hashlib4pascal/HlpXXHash64.pas

+ 1 - 0
src/gui/wizards/operations/UWIZOperationFee_Custom.pas

@@ -97,6 +97,7 @@ end;
 
 
 function TWIZOperationFee_Custom.Validate(out message: ansistring): boolean;
 function TWIZOperationFee_Custom.Validate(out message: ansistring): boolean;
 begin
 begin
+  Result := True;
   if (Length(Model.Account.SelectedAccounts) > 1) AND (Fee = 0) then begin
   if (Length(Model.Account.SelectedAccounts) > 1) AND (Fee = 0) then begin
     message := 'Zero fees only allowed for a single operation.';
     message := 'Zero fees only allowed for a single operation.';
     Exit(false);
     Exit(false);

+ 10 - 5
src/libraries/hashlib4pascal/HashLib.inc

@@ -1,9 +1,14 @@
-{ *********************************************************** }
-{ *                     HashLib Library                     * }
-{ *      Copyright (c) Ugochukwu Mmaduekwe 2016 - 2018      * }
-{ *********************************************************** }
+{ *********************************************************************************** }
+{ *                                 HashLib Library                                 * }
+{ *                  Copyright (c) 2016 - 2018 Ugochukwu Mmaduekwe                  * }
+{ *                 Github Repository <https://github.com/Xor-el>                   * }
 
 
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
+{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
+{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
+
+{ * ******************************************************************************* * }
+
+(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
 
 
 
 
  {$DEFINE DELPHI}
  {$DEFINE DELPHI}

+ 11 - 5
src/libraries/hashlib4pascal/HashLibHelper.inc

@@ -1,9 +1,15 @@
-{ *********************************************************** }
-{ *                     HashLib Library                     * }
-{ *      Copyright (c) Ugochukwu Mmaduekwe 2016 - 2018      * }
-{ *********************************************************** }
+{ *********************************************************************************** }
+{ *                                 HashLib Library                                 * }
+{ *                  Copyright (c) 2016 - 2018 Ugochukwu Mmaduekwe                  * }
+{ *                 Github Repository <https://github.com/Xor-el>                   * }
+
+{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
+{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
+
+{ * ******************************************************************************* * }
+
+(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
 
 
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
 
 
 {$MACRO ON}
 {$MACRO ON}
 {$IFDEF ENDIAN_BIG}
 {$IFDEF ENDIAN_BIG}

+ 1 - 1
src/libraries/hashlib4pascal/HlpAP.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TAP = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TAP = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpAdler32.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TAdler32 = class sealed(THash, IChecksum, IBlockHash, IHash32,
+  TAdler32 = class sealed(THash, IChecksum, IHash32,
     ITransformBlock)
     ITransformBlock)
 
 
   strict private
   strict private

+ 1 - 1
src/libraries/hashlib4pascal/HlpBKDR.pas

@@ -14,7 +14,7 @@ uses
 
 
 type
 type
 
 
-  TBKDR = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TBKDR = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpBernstein.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TBernstein = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TBernstein = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpBernstein1.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TBernstein1 = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TBernstein1 = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 26 - 33
src/libraries/hashlib4pascal/HlpBits.pas

@@ -29,21 +29,28 @@ type
     /// <summary>
     /// <summary>
     /// Calculates Arithmetic shift right.
     /// Calculates Arithmetic shift right.
     /// </summary>
     /// </summary>
-    /// <param name="value">Int32 value to compute 'Asr' on.</param>
-    /// <param name="ShiftBits">Integer, number of bits to shift value to.</param>
+    /// <param name="AValue">Int32 value to compute 'Asr' on.</param>
+    /// <param name="AShiftBits">Byte, number of bits to shift value to.</param>
     /// <returns>Shifted value.</returns>
     /// <returns>Shifted value.</returns>
+    /// <remarks>
+    /// Emulated Implementation was gotten from FreePascal sources
+    /// </remarks>
 
 
-    class function Asr32(Value: Int32; ShiftBits: Int32): Int32; static; inline;
+    class function Asr32(AValue: Int32; AShiftBits: Byte): Int32;
+      static; inline;
 
 
     /// <summary>
     /// <summary>
     /// Calculates Arithmetic shift right.
     /// Calculates Arithmetic shift right.
     /// </summary>
     /// </summary>
-    /// <param name="value">Int64 value to compute 'Asr' on.</param>
-    /// <param name="ShiftBits">Integer, number of bits to shift value to.</param>
+    /// <param name="AValue">Int64 value to compute 'Asr' on.</param>
+    /// <param name="AShiftBits">Byte, number of bits to shift value to.</param>
     /// <returns>Shifted value.</returns>
     /// <returns>Shifted value.</returns>
-    /// Implementation was found here <see cref="https://github.com/Spelt/ZXing.Delphi/blob/master/Lib/Classes/Common/MathUtils.pas" />
+    /// <remarks>
+    /// Emulated Implementation was gotten from FreePascal sources
+    /// </remarks>
 
 
-    class function Asr64(Value: Int64; ShiftBits: Int32): Int64; static; inline;
+    class function Asr64(AValue: Int64; AShiftBits: Byte): Int64;
+      static; inline;
 
 
     class function RotateLeft8(a_value: Byte; a_n: Int32): Byte; static; inline;
     class function RotateLeft8(a_value: Byte; a_n: Int32): Byte; static; inline;
     class function RotateLeft32(a_value: UInt32; a_n: Int32): UInt32;
     class function RotateLeft32(a_value: UInt32; a_n: Int32): UInt32;
@@ -142,42 +149,28 @@ begin
 {$ENDIF FPC}
 {$ENDIF FPC}
 end;
 end;
 
 
-class function TBits.Asr32(Value: Int32; ShiftBits: Int32): Int32;
+class function TBits.Asr32(AValue: Int32; AShiftBits: Byte): Int32;
 
 
 begin
 begin
 {$IFDEF FPC}
 {$IFDEF FPC}
-  Result := SarLongInt(Value, ShiftBits);
+  Result := SarLongInt(AValue, AShiftBits);
 {$ELSE}
 {$ELSE}
-  Result := Value shr ShiftBits;
-  if (Value and $80000000) > 0 then
-  begin
-    // if you don't want to cast ($FFFFFFFF) to an Int32,
-    // simply replace it with (-1) to avoid range check error.
-    Result := Result or (Int32($FFFFFFFF) shl (32 - ShiftBits));
-  end;
-
-  /// ++++++ Alternative Variant ++++++ ///
-
-  // Result := (Value shr ShiftBits) or ((0 - ((Value shr 31) and 1)) shl
-  // (32 - ShiftBits));
+  Result := Int32(UInt32(UInt32(UInt32(AValue) shr (AShiftBits and 31)) or
+    (UInt32(Int32(UInt32(0 - UInt32(UInt32(AValue) shr 31)) and
+    UInt32(Int32(0 - (Ord((AShiftBits and 31) <> 0) { and 1 } )))))
+    shl (32 - (AShiftBits and 31)))));
 {$ENDIF FPC}
 {$ENDIF FPC}
 end;
 end;
 
 
-class function TBits.Asr64(Value: Int64; ShiftBits: Int32): Int64;
+class function TBits.Asr64(AValue: Int64; AShiftBits: Byte): Int64;
 begin
 begin
 {$IFDEF FPC}
 {$IFDEF FPC}
-  Result := SarInt64(Value, ShiftBits);
+  Result := SarInt64(AValue, AShiftBits);
 {$ELSE}
 {$ELSE}
-  Result := Value shr ShiftBits;
-  if (Value and $8000000000000000) > 0 then
-  begin
-    Result := Result or ($FFFFFFFFFFFFFFFF shl (64 - ShiftBits));
-  end;
-
-  /// ++++++ Alternative Variant ++++++ ///
-
-  // Result := (Value shr ShiftBits) or ((0 - ((Value shr 63) and 1)) shl
-  // (64 - ShiftBits));
+  Result := Int64(UInt64(UInt64(UInt64(AValue) shr (AShiftBits and 63)) or
+    (UInt64(Int64(UInt64(0 - UInt64(UInt64(AValue) shr 63)) and
+    UInt64(Int64(0 - (Ord((AShiftBits and 63) <> 0) { and 1 } )))))
+    shl (64 - (AShiftBits and 63)))));
 {$ENDIF FPC}
 {$ENDIF FPC}
 end;
 end;
 
 

+ 1 - 1
src/libraries/hashlib4pascal/HlpCRC16.pas

@@ -24,7 +24,7 @@ type
 
 
   end;
   end;
 
 
-  TCRC16 = class(THash, IChecksum, IBlockHash, IHash16, ITransformBlock)
+  TCRC16 = class(THash, IChecksum, IHash16, ITransformBlock)
 
 
   strict private
   strict private
 
 

+ 1 - 1
src/libraries/hashlib4pascal/HlpCRC32.pas

@@ -26,7 +26,7 @@ type
 
 
   end;
   end;
 
 
-  TCRC32 = class(THash, IChecksum, IBlockHash, IHash32, ITransformBlock)
+  TCRC32 = class(THash, IChecksum, IHash32, ITransformBlock)
 
 
   strict private
   strict private
 
 

+ 1 - 1
src/libraries/hashlib4pascal/HlpCRC64.pas

@@ -24,7 +24,7 @@ type
 
 
   end;
   end;
 
 
-  TCRC64 = class(THash, IChecksum, IBlockHash, IHash64, ITransformBlock)
+  TCRC64 = class(THash, IChecksum, IHash64, ITransformBlock)
 
 
   strict private
   strict private
 
 

+ 1 - 1
src/libraries/hashlib4pascal/HlpDJB.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TDJB = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TDJB = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpELF.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TELF = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TELF = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpFNV.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TFNV = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TFNV = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpFNV1a.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TFNV1a = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TFNV1a = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpFNV1a64.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TFNV1a64 = class sealed(THash, IHash64, IBlockHash, ITransformBlock)
+  TFNV1a64 = class sealed(THash, IHash64, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt64;
     Fm_hash: UInt64;

+ 1 - 1
src/libraries/hashlib4pascal/HlpFNV64.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TFNV64 = class sealed(THash, IHash64, IBlockHash, ITransformBlock)
+  TFNV64 = class sealed(THash, IHash64, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt64;
     Fm_hash: UInt64;

+ 43 - 18
src/libraries/hashlib4pascal/HlpHashFactory.pas

@@ -370,6 +370,11 @@ type
       class function CreateSHA3_384(): IHash; static;
       class function CreateSHA3_384(): IHash; static;
       class function CreateSHA3_512(): IHash; static;
       class function CreateSHA3_512(): IHash; static;
 
 
+      class function CreateKeccak_224(): IHash; static;
+      class function CreateKeccak_256(): IHash; static;
+      class function CreateKeccak_384(): IHash; static;
+      class function CreateKeccak_512(): IHash; static;
+
       class function CreateBlake2B(const config: IBlake2BConfig = Nil)
       class function CreateBlake2B(const config: IBlake2BConfig = Nil)
         : IHash; static;
         : IHash; static;
 
 
@@ -684,49 +689,49 @@ class function THashFactory.TCrypto.CreateHaval(a_rounds: THashRounds;
   a_hash_size: THashSize): IHash;
   a_hash_size: THashSize): IHash;
 begin
 begin
   case a_rounds of
   case a_rounds of
-    hrRounds3:
+    THashRounds.hrRounds3:
       case a_hash_size of
       case a_hash_size of
-        hsHashSize128:
+        THashSize.hsHashSize128:
           Result := CreateHaval_3_128();
           Result := CreateHaval_3_128();
-        hsHashSize160:
+        THashSize.hsHashSize160:
           Result := CreateHaval_3_160();
           Result := CreateHaval_3_160();
-        hsHashSize192:
+        THashSize.hsHashSize192:
           Result := CreateHaval_3_192();
           Result := CreateHaval_3_192();
-        hsHashSize224:
+        THashSize.hsHashSize224:
           Result := CreateHaval_3_224();
           Result := CreateHaval_3_224();
-        hsHashSize256:
+        THashSize.hsHashSize256:
           Result := CreateHaval_3_256();
           Result := CreateHaval_3_256();
       else
       else
         raise EArgumentHashLibException.CreateRes(@SInvalidHavalHashSize);
         raise EArgumentHashLibException.CreateRes(@SInvalidHavalHashSize);
       end;
       end;
 
 
-    hrRounds4:
+    THashRounds.hrRounds4:
       case a_hash_size of
       case a_hash_size of
-        hsHashSize128:
+        THashSize.hsHashSize128:
           Result := CreateHaval_4_128();
           Result := CreateHaval_4_128();
-        hsHashSize160:
+        THashSize.hsHashSize160:
           Result := CreateHaval_4_160();
           Result := CreateHaval_4_160();
-        hsHashSize192:
+        THashSize.hsHashSize192:
           Result := CreateHaval_4_192();
           Result := CreateHaval_4_192();
-        hsHashSize224:
+        THashSize.hsHashSize224:
           Result := CreateHaval_4_224();
           Result := CreateHaval_4_224();
-        hsHashSize256:
+        THashSize.hsHashSize256:
           Result := CreateHaval_4_256();
           Result := CreateHaval_4_256();
       else
       else
         raise EArgumentHashLibException.CreateRes(@SInvalidHavalHashSize);
         raise EArgumentHashLibException.CreateRes(@SInvalidHavalHashSize);
       end;
       end;
 
 
-    hrRounds5:
+    THashRounds.hrRounds5:
       case a_hash_size of
       case a_hash_size of
-        hsHashSize128:
+        THashSize.hsHashSize128:
           Result := CreateHaval_5_128();
           Result := CreateHaval_5_128();
-        hsHashSize160:
+        THashSize.hsHashSize160:
           Result := CreateHaval_5_160();
           Result := CreateHaval_5_160();
-        hsHashSize192:
+        THashSize.hsHashSize192:
           Result := CreateHaval_5_192();
           Result := CreateHaval_5_192();
-        hsHashSize224:
+        THashSize.hsHashSize224:
           Result := CreateHaval_5_224();
           Result := CreateHaval_5_224();
-        hsHashSize256:
+        THashSize.hsHashSize256:
           Result := CreateHaval_5_256();
           Result := CreateHaval_5_256();
       else
       else
         raise EArgumentHashLibException.CreateRes(@SInvalidHavalHashSize);
         raise EArgumentHashLibException.CreateRes(@SInvalidHavalHashSize);
@@ -927,6 +932,26 @@ begin
   Result := TSHA3_512.Create();
   Result := TSHA3_512.Create();
 end;
 end;
 
 
+class function THashFactory.TCrypto.CreateKeccak_224: IHash;
+begin
+  Result := TKeccak_224.Create();
+end;
+
+class function THashFactory.TCrypto.CreateKeccak_256: IHash;
+begin
+  Result := TKeccak_256.Create();
+end;
+
+class function THashFactory.TCrypto.CreateKeccak_384: IHash;
+begin
+  Result := TKeccak_384.Create();
+end;
+
+class function THashFactory.TCrypto.CreateKeccak_512: IHash;
+begin
+  Result := TKeccak_512.Create();
+end;
+
 class function THashFactory.TCrypto.CreateBlake2B(const config
 class function THashFactory.TCrypto.CreateBlake2B(const config
   : IBlake2BConfig): IHash;
   : IBlake2BConfig): IHash;
 begin
 begin

+ 2 - 0
src/libraries/hashlib4pascal/HlpHashRounds.pas

@@ -5,7 +5,9 @@ unit HlpHashRounds;
 interface
 interface
 
 
 type
 type
+{$SCOPEDENUMS ON}
   THashRounds = (hrRounds3 = 3, hrRounds4 = 4, hrRounds5 = 5, hrRounds8 = 8);
   THashRounds = (hrRounds3 = 3, hrRounds4 = 4, hrRounds5 = 5, hrRounds8 = 8);
+{$SCOPEDENUMS OFF}
 
 
 implementation
 implementation
 
 

+ 2 - 0
src/libraries/hashlib4pascal/HlpHashSize.pas

@@ -5,9 +5,11 @@ unit HlpHashSize;
 interface
 interface
 
 
 type
 type
+{$SCOPEDENUMS ON}
   THashSize = (hsHashSize128 = 16, hsHashSize160 = 20, hsHashSize192 = 24,
   THashSize = (hsHashSize128 = 16, hsHashSize160 = 20, hsHashSize192 = 24,
     hsHashSize224 = 28, hsHashSize256 = 32, hsHashSize384 = 48,
     hsHashSize224 = 28, hsHashSize256 = 32, hsHashSize384 = 48,
     hsHashSize512 = 64);
     hsHashSize512 = 64);
+{$SCOPEDENUMS OFF}
 
 
 implementation
 implementation
 
 

+ 2 - 2
src/libraries/hashlib4pascal/HlpICRC.pas

@@ -5,12 +5,12 @@ unit HlpICRC;
 interface
 interface
 
 
 uses
 uses
-  HlpIHash,
+  HlpIHashInfo,
   HlpHashLibTypes;
   HlpHashLibTypes;
 
 
 type
 type
 
 
-  ICRC = Interface(IHash)
+  ICRC = Interface(IChecksum)
     ['{44A105E5-6716-43C0-BE69-AE80F87FDC39}']
     ['{44A105E5-6716-43C0-BE69-AE80F87FDC39}']
 
 
     function GetNames: THashLibStringArray;
     function GetNames: THashLibStringArray;

+ 3 - 3
src/libraries/hashlib4pascal/HlpIHashInfo.pas

@@ -16,7 +16,7 @@ type
     ['{0C375CFF-B379-41B8-955F-A32E22991651}']
     ['{0C375CFF-B379-41B8-955F-A32E22991651}']
   end;
   end;
 
 
-  IBlockHash = Interface(IHash)
+  IBlockHash = Interface(IInterface)
     ['{3B9A2D29-AC4E-44E4-92B1-6AF9A64DFF0A}']
     ['{3B9A2D29-AC4E-44E4-92B1-6AF9A64DFF0A}']
   end;
   end;
 
 
@@ -24,11 +24,11 @@ type
     ['{7C7E8B14-DBC7-44A3-BB7C-B24E0BFAA09C}']
     ['{7C7E8B14-DBC7-44A3-BB7C-B24E0BFAA09C}']
   end;
   end;
 
 
-  IChecksum = Interface(IInterface)
+  IChecksum = Interface(IHash)
     ['{EF0885C5-D331-44D8-89CA-05409E20F76E}']
     ['{EF0885C5-D331-44D8-89CA-05409E20F76E}']
   end;
   end;
 
 
-  ICrypto = Interface(IBlockHash)
+  ICrypto = Interface(IHash)
     ['{5C669048-644C-4E96-B411-9FEA603D7086}']
     ['{5C669048-644C-4E96-B411-9FEA603D7086}']
   end;
   end;
 
 

+ 1 - 1
src/libraries/hashlib4pascal/HlpJS.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TJS = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TJS = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 9 - 6
src/libraries/hashlib4pascal/HlpNullDigest.pas

@@ -15,7 +15,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TNullDigest = class sealed(THash, IBlockHash, ITransformBlock)
+  TNullDigest = class sealed(THash, ITransformBlock)
   strict private
   strict private
   var
   var
     FbOut: TMemoryStream;
     FbOut: TMemoryStream;
@@ -76,11 +76,14 @@ function TNullDigest.TransformFinal: IHashResult;
 var
 var
   res: THashLibByteArray;
   res: THashLibByteArray;
 begin
 begin
-  FbOut.Position := 0;
-  System.SetLength(res, FbOut.Size);
-  FbOut.Read(res[0], FbOut.Size);
-  result := THashResult.Create(res);
-  Initialize();
+  try
+    FbOut.Position := 0;
+    System.SetLength(res, FbOut.Size);
+    FbOut.Read(res[0], FbOut.Size);
+    result := THashResult.Create(res);
+  finally
+    Initialize();
+  end;
 end;
 end;
 
 
 end.
 end.

+ 1 - 1
src/libraries/hashlib4pascal/HlpOneAtTime.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TOneAtTime = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TOneAtTime = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpPJW.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TPJW = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TPJW = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpRS.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TRS = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TRS = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash, Fm_a: UInt32;
     Fm_hash, Fm_a: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpRotating.pas

@@ -14,7 +14,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TRotating = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TRotating = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpSDBM.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TSDBM = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TSDBM = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 41 - 27
src/libraries/hashlib4pascal/HlpSHA2_512Base.pas

@@ -25,33 +25,47 @@ type
 {$REGION 'Consts'}
 {$REGION 'Consts'}
   const
   const
 
 
-    s_K: array [0 .. 79] of UInt64 = ($428A2F98D728AE22, $7137449123EF65CD,
-      $B5C0FBCFEC4D3B2F, $E9B5DBA58189DBBC, $3956C25BF348B538,
-      $59F111F1B605D019, $923F82A4AF194F9B, $AB1C5ED5DA6D8118,
-      $D807AA98A3030242, $12835B0145706FBE, $243185BE4EE4B28C,
-      $550C7DC3D5FFB4E2, $72BE5D74F27B896F, $80DEB1FE3B1696B1,
-      $9BDC06A725C71235, $C19BF174CF692694, $E49B69C19EF14AD2,
-      $EFBE4786384F25E3, $0FC19DC68B8CD5B5, $240CA1CC77AC9C65,
-      $2DE92C6F592B0275, $4A7484AA6EA6E483, $5CB0A9DCBD41FBD4,
-      $76F988DA831153B5, $983E5152EE66DFAB, $A831C66D2DB43210,
-      $B00327C898FB213F, $BF597FC7BEEF0EE4, $C6E00BF33DA88FC2,
-      $D5A79147930AA725, $06CA6351E003826F, $142929670A0E6E70,
-      $27B70A8546D22FFC, $2E1B21385C26C926, $4D2C6DFC5AC42AED,
-      $53380D139D95B3DF, $650A73548BAF63DE, $766A0ABB3C77B2A8,
-      $81C2C92E47EDAEE6, $92722C851482353B, $A2BFE8A14CF10364,
-      $A81A664BBC423001, $C24B8B70D0F89791, $C76C51A30654BE30,
-      $D192E819D6EF5218, $D69906245565A910, $F40E35855771202A,
-      $106AA07032BBD1B8, $19A4C116B8D2D0C8, $1E376C085141AB53,
-      $2748774CDF8EEB99, $34B0BCB5E19B48A8, $391C0CB3C5C95A63,
-      $4ED8AA4AE3418ACB, $5B9CCA4F7763E373, $682E6FF3D6B2B8A3,
-      $748F82EE5DEFB2FC, $78A5636F43172F60, $84C87814A1F0AB72,
-      $8CC702081A6439EC, $90BEFFFA23631E28, $A4506CEBDE82BDE9,
-      $BEF9A3F7B2C67915, $C67178F2E372532B, $CA273ECEEA26619C,
-      $D186B8C721C0C207, $EADA7DD6CDE0EB1E, $F57D4F7FEE6ED178,
-      $06F067AA72176FBA, $0A637DC5A2C898A6, $113F9804BEF90DAE,
-      $1B710B35131C471B, $28DB77F523047D84, $32CAAB7B40C72493,
-      $3C9EBE0A15C9BEBC, $431D67C49C100D4C, $4CC5D4BECB3E42B6,
-      $597F299CFC657E2A, $5FCB6FAB3AD6FAEC, $6C44198C4A475817);
+    s_K: array [0 .. 79] of UInt64 = (UInt64($428A2F98D728AE22),
+      UInt64($7137449123EF65CD), UInt64($B5C0FBCFEC4D3B2F),
+      UInt64($E9B5DBA58189DBBC), UInt64($3956C25BF348B538),
+      UInt64($59F111F1B605D019), UInt64($923F82A4AF194F9B),
+      UInt64($AB1C5ED5DA6D8118), UInt64($D807AA98A3030242),
+      UInt64($12835B0145706FBE), UInt64($243185BE4EE4B28C),
+      UInt64($550C7DC3D5FFB4E2), UInt64($72BE5D74F27B896F),
+      UInt64($80DEB1FE3B1696B1), UInt64($9BDC06A725C71235),
+      UInt64($C19BF174CF692694), UInt64($E49B69C19EF14AD2),
+      UInt64($EFBE4786384F25E3), UInt64($0FC19DC68B8CD5B5),
+      UInt64($240CA1CC77AC9C65), UInt64($2DE92C6F592B0275),
+      UInt64($4A7484AA6EA6E483), UInt64($5CB0A9DCBD41FBD4),
+      UInt64($76F988DA831153B5), UInt64($983E5152EE66DFAB),
+      UInt64($A831C66D2DB43210), UInt64($B00327C898FB213F),
+      UInt64($BF597FC7BEEF0EE4), UInt64($C6E00BF33DA88FC2),
+      UInt64($D5A79147930AA725), UInt64($06CA6351E003826F),
+      UInt64($142929670A0E6E70), UInt64($27B70A8546D22FFC),
+      UInt64($2E1B21385C26C926), UInt64($4D2C6DFC5AC42AED),
+      UInt64($53380D139D95B3DF), UInt64($650A73548BAF63DE),
+      UInt64($766A0ABB3C77B2A8), UInt64($81C2C92E47EDAEE6),
+      UInt64($92722C851482353B), UInt64($A2BFE8A14CF10364),
+      UInt64($A81A664BBC423001), UInt64($C24B8B70D0F89791),
+      UInt64($C76C51A30654BE30), UInt64($D192E819D6EF5218),
+      UInt64($D69906245565A910), UInt64($F40E35855771202A),
+      UInt64($106AA07032BBD1B8), UInt64($19A4C116B8D2D0C8),
+      UInt64($1E376C085141AB53), UInt64($2748774CDF8EEB99),
+      UInt64($34B0BCB5E19B48A8), UInt64($391C0CB3C5C95A63),
+      UInt64($4ED8AA4AE3418ACB), UInt64($5B9CCA4F7763E373),
+      UInt64($682E6FF3D6B2B8A3), UInt64($748F82EE5DEFB2FC),
+      UInt64($78A5636F43172F60), UInt64($84C87814A1F0AB72),
+      UInt64($8CC702081A6439EC), UInt64($90BEFFFA23631E28),
+      UInt64($A4506CEBDE82BDE9), UInt64($BEF9A3F7B2C67915),
+      UInt64($C67178F2E372532B), UInt64($CA273ECEEA26619C),
+      UInt64($D186B8C721C0C207), UInt64($EADA7DD6CDE0EB1E),
+      UInt64($F57D4F7FEE6ED178), UInt64($06F067AA72176FBA),
+      UInt64($0A637DC5A2C898A6), UInt64($113F9804BEF90DAE),
+      UInt64($1B710B35131C471B), UInt64($28DB77F523047D84),
+      UInt64($32CAAB7B40C72493), UInt64($3C9EBE0A15C9BEBC),
+      UInt64($431D67C49C100D4C), UInt64($4CC5D4BECB3E42B6),
+      UInt64($597F299CFC657E2A), UInt64($5FCB6FAB3AD6FAEC),
+      UInt64($6C44198C4A475817));
 
 
 {$ENDREGION}
 {$ENDREGION}
 {$ENDIF USE_UNROLLED_VARIANT}
 {$ENDIF USE_UNROLLED_VARIANT}

File diff suppressed because it is too large
+ 315 - 236
src/libraries/hashlib4pascal/HlpSHA3.pas


+ 1 - 1
src/libraries/hashlib4pascal/HlpShiftAndXor.pas

@@ -13,7 +13,7 @@ uses
   HlpIHashResult;
   HlpIHashResult;
 
 
 type
 type
-  TShiftAndXor = class sealed(THash, IHash32, IBlockHash, ITransformBlock)
+  TShiftAndXor = class sealed(THash, IHash32, ITransformBlock)
   strict private
   strict private
 
 
     Fm_hash: UInt32;
     Fm_hash: UInt32;

+ 1 - 1
src/libraries/hashlib4pascal/HlpXXHash32.pas

@@ -20,7 +20,7 @@ resourcestring
 
 
 type
 type
 
 
-  TXXHash32 = class sealed(THash, IHash32, IBlockHash, IHashWithKey,
+  TXXHash32 = class sealed(THash, IHash32, IHashWithKey,
     ITransformBlock)
     ITransformBlock)
 
 
   strict private
   strict private

+ 1 - 1
src/libraries/hashlib4pascal/HlpXXHash64.pas

@@ -20,7 +20,7 @@ resourcestring
 
 
 type
 type
 
 
-  TXXHash64 = class sealed(THash, IHash64, IBlockHash, IHashWithKey,
+  TXXHash64 = class sealed(THash, IHash64, IHashWithKey,
     ITransformBlock)
     ITransformBlock)
 
 
   strict private
   strict private

Some files were not shown because too many files changed in this diff