Browse Source

performance optimizations in HashLib4Pascal

Ugochukwu Mmaduekwe 7 years ago
parent
commit
db7ec72a3b
55 changed files with 347 additions and 352 deletions
  1. 2 2
      src/libraries/hashlib4pascal/HlpAP.pas
  2. 2 2
      src/libraries/hashlib4pascal/HlpAdler32.pas
  3. 2 2
      src/libraries/hashlib4pascal/HlpBKDR.pas
  4. 2 2
      src/libraries/hashlib4pascal/HlpBernstein.pas
  5. 2 2
      src/libraries/hashlib4pascal/HlpBernstein1.pas
  6. 36 87
      src/libraries/hashlib4pascal/HlpBitConverter.pas
  7. 15 12
      src/libraries/hashlib4pascal/HlpBlake2B.pas
  8. 8 7
      src/libraries/hashlib4pascal/HlpBlake2BConfig.pas
  9. 18 16
      src/libraries/hashlib4pascal/HlpBlake2BIvBuilder.pas
  10. 1 0
      src/libraries/hashlib4pascal/HlpBlake2BTreeConfig.pas
  11. 15 12
      src/libraries/hashlib4pascal/HlpBlake2S.pas
  12. 8 7
      src/libraries/hashlib4pascal/HlpBlake2SConfig.pas
  13. 16 14
      src/libraries/hashlib4pascal/HlpBlake2SIvBuilder.pas
  14. 1 0
      src/libraries/hashlib4pascal/HlpBlake2STreeConfig.pas
  15. 8 8
      src/libraries/hashlib4pascal/HlpCRC.pas
  16. 4 4
      src/libraries/hashlib4pascal/HlpCRC16.pas
  17. 4 4
      src/libraries/hashlib4pascal/HlpCRC32.pas
  18. 4 4
      src/libraries/hashlib4pascal/HlpCRC64.pas
  19. 17 14
      src/libraries/hashlib4pascal/HlpConverters.pas
  20. 2 2
      src/libraries/hashlib4pascal/HlpDJB.pas
  21. 2 2
      src/libraries/hashlib4pascal/HlpELF.pas
  22. 2 2
      src/libraries/hashlib4pascal/HlpFNV.pas
  23. 2 2
      src/libraries/hashlib4pascal/HlpFNV1a.pas
  24. 2 2
      src/libraries/hashlib4pascal/HlpFNV1a64.pas
  25. 2 2
      src/libraries/hashlib4pascal/HlpFNV64.pas
  26. 19 18
      src/libraries/hashlib4pascal/HlpGOST3411_2012.pas
  27. 7 7
      src/libraries/hashlib4pascal/HlpHMACNotBuildInAdapter.pas
  28. 18 13
      src/libraries/hashlib4pascal/HlpHash.pas
  29. 2 2
      src/libraries/hashlib4pascal/HlpHashCryptoNotBuildIn.pas
  30. 26 20
      src/libraries/hashlib4pascal/HlpHashFactory.pas
  31. 14 8
      src/libraries/hashlib4pascal/HlpHashResult.pas
  32. 3 3
      src/libraries/hashlib4pascal/HlpIBlake2BConfig.pas
  33. 3 3
      src/libraries/hashlib4pascal/HlpIBlake2SConfig.pas
  34. 7 7
      src/libraries/hashlib4pascal/HlpIHash.pas
  35. 1 1
      src/libraries/hashlib4pascal/HlpIHashInfo.pas
  36. 1 1
      src/libraries/hashlib4pascal/HlpIHashResult.pas
  37. 2 2
      src/libraries/hashlib4pascal/HlpJS.pas
  38. 7 6
      src/libraries/hashlib4pascal/HlpMultipleTransformNonBlock.pas
  39. 4 4
      src/libraries/hashlib4pascal/HlpMurmur2.pas
  40. 2 2
      src/libraries/hashlib4pascal/HlpMurmur2_64.pas
  41. 4 4
      src/libraries/hashlib4pascal/HlpMurmurHash3_x64_128.pas
  42. 4 4
      src/libraries/hashlib4pascal/HlpMurmurHash3_x86_128.pas
  43. 16 5
      src/libraries/hashlib4pascal/HlpMurmurHash3_x86_32.pas
  44. 2 2
      src/libraries/hashlib4pascal/HlpNullDigest.pas
  45. 0 1
      src/libraries/hashlib4pascal/HlpNullable.pas
  46. 2 2
      src/libraries/hashlib4pascal/HlpOneAtTime.pas
  47. 4 4
      src/libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas
  48. 2 2
      src/libraries/hashlib4pascal/HlpPJW.pas
  49. 2 2
      src/libraries/hashlib4pascal/HlpRS.pas
  50. 2 2
      src/libraries/hashlib4pascal/HlpRotating.pas
  51. 2 2
      src/libraries/hashlib4pascal/HlpSDBM.pas
  52. 2 2
      src/libraries/hashlib4pascal/HlpShiftAndXor.pas
  53. 4 4
      src/libraries/hashlib4pascal/HlpSipHash.pas
  54. 4 4
      src/libraries/hashlib4pascal/HlpXXHash32.pas
  55. 4 4
      src/libraries/hashlib4pascal/HlpXXHash64.pas

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

@@ -21,7 +21,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
 
@@ -42,7 +42,7 @@ begin
   Fm_index := 0;
 end;
 
-procedure TAP.TransformBytes(a_data: THashLibByteArray;
+procedure TAP.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -25,7 +25,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal: IHashResult; override;
 
@@ -47,7 +47,7 @@ begin
   Fm_b := 0;
 end;
 
-procedure TAdler32.TransformBytes(a_data: THashLibByteArray;
+procedure TAdler32.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i, n: Int32;

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

@@ -24,7 +24,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -43,7 +43,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TBKDR.TransformBytes(a_data: THashLibByteArray;
+procedure TBKDR.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 5381;
 end;
 
-procedure TBernstein.TransformBytes(a_data: THashLibByteArray;
+procedure TBernstein.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 5381;
 end;
 
-procedure TBernstein1.TransformBytes(a_data: THashLibByteArray;
+procedure TBernstein1.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

+ 36 - 87
src/libraries/hashlib4pascal/HlpBitConverter.pas

@@ -53,38 +53,34 @@ type
 
     { ==================================================================== }
 
-    class function ToBoolean(value: THashLibByteArray; StartIndex: Int32)
+    class function ToBoolean(const value: THashLibByteArray; StartIndex: Int32)
       : Boolean; static; inline;
-    class function ToChar(value: THashLibByteArray; StartIndex: Int32): Char;
-      static; inline;
-    class function ToDouble(value: THashLibByteArray; StartIndex: Int32)
+    class function ToChar(const value: THashLibByteArray; StartIndex: Int32)
+      : Char; static; inline;
+    class function ToDouble(const value: THashLibByteArray; StartIndex: Int32)
       : Double; static; inline;
-    class function ToInt16(value: THashLibByteArray; StartIndex: Int32): Int16;
-      static; inline;
-    class function ToInt32(value: THashLibByteArray; StartIndex: Int32): Int32;
-      static; inline;
-    class function ToInt64(value: THashLibByteArray; StartIndex: Int32): Int64;
-      static; inline;
-    class function ToSingle(value: THashLibByteArray; StartIndex: Int32)
+    class function ToInt16(const value: THashLibByteArray; StartIndex: Int32)
+      : Int16; static; inline;
+    class function ToInt32(const value: THashLibByteArray; StartIndex: Int32)
+      : Int32; static; inline;
+    class function ToInt64(const value: THashLibByteArray; StartIndex: Int32)
+      : Int64; static; inline;
+    class function ToSingle(const value: THashLibByteArray; StartIndex: Int32)
       : Single; static; inline;
-    class function ToString(value: THashLibByteArray): String; reintroduce;
-      overload; static;
-    class function ToString(value: THashLibByteArray; StartIndex: Int32)
+    class function ToString(const value: THashLibByteArray): String;
+      reintroduce; overload; static;
+    class function ToString(const value: THashLibByteArray; StartIndex: Int32)
       : String; reintroduce; overload; static;
-    class function ToString(value: THashLibByteArray;
+    class function ToString(const value: THashLibByteArray;
       StartIndex, &Length: Int32): String; reintroduce; overload; static;
-    class function ToUInt8(value: THashLibByteArray; StartIndex: Int32): UInt8;
-      static; inline;
-    class function ToUInt16(value: THashLibByteArray; StartIndex: Int32)
+    class function ToUInt8(const value: THashLibByteArray; StartIndex: Int32)
+      : UInt8; static; inline;
+    class function ToUInt16(const value: THashLibByteArray; StartIndex: Int32)
       : UInt16; static; inline;
-    class function ToUInt32(value: THashLibByteArray; StartIndex: Int32)
-      : UInt32; overload; static; inline;
-    class function ToUInt32(value: PByte; StartIndex: Int32): UInt32; overload;
-      static; inline;
-    class function ToUInt64(value: THashLibByteArray; StartIndex: Int32)
-      : UInt64; overload; static; inline;
-    class function ToUInt64(value: PByte; StartIndex: Int32): UInt64; overload;
-      static; inline;
+    class function ToUInt32(const value: THashLibByteArray; StartIndex: Int32)
+      : UInt32; static; inline;
+    class function ToUInt64(const value: THashLibByteArray; StartIndex: Int32)
+      : UInt64; static; inline;
 
   end;
 
@@ -224,7 +220,7 @@ end;
 
 { ==================================================================== }
 
-class function TBitConverter.ToBoolean(value: THashLibByteArray;
+class function TBitConverter.ToBoolean(const value: THashLibByteArray;
   StartIndex: Int32): Boolean;
 begin
   // result := PBoolean(@value[StartIndex])^;
@@ -232,7 +228,7 @@ begin
 
 end;
 
-class function TBitConverter.ToChar(value: THashLibByteArray;
+class function TBitConverter.ToChar(const value: THashLibByteArray;
   StartIndex: Int32): Char;
 begin
   // System.Move(value[StartIndex], result, System.SizeOf(result));
@@ -251,7 +247,7 @@ begin
 
 end;
 
-class function TBitConverter.ToDouble(value: THashLibByteArray;
+class function TBitConverter.ToDouble(const value: THashLibByteArray;
   StartIndex: Int32): Double;
 var
   i1, i2: Int32;
@@ -283,7 +279,7 @@ begin
 
 end;
 
-class function TBitConverter.ToInt16(value: THashLibByteArray;
+class function TBitConverter.ToInt16(const value: THashLibByteArray;
   StartIndex: Int32): Int16;
 begin
 
@@ -303,7 +299,7 @@ begin
 
 end;
 
-class function TBitConverter.ToInt32(value: THashLibByteArray;
+class function TBitConverter.ToInt32(const value: THashLibByteArray;
   StartIndex: Int32): Int32;
 begin
   // System.Move(value[StartIndex], result, System.SizeOf(result));
@@ -324,7 +320,7 @@ begin
 
 end;
 
-class function TBitConverter.ToInt64(value: THashLibByteArray;
+class function TBitConverter.ToInt64(const value: THashLibByteArray;
   StartIndex: Int32): Int64;
 var
   i1, i2: Int32;
@@ -351,7 +347,7 @@ begin
   end;
 end;
 
-class function TBitConverter.ToSingle(value: THashLibByteArray;
+class function TBitConverter.ToSingle(const value: THashLibByteArray;
   StartIndex: Int32): Single;
 var
   val: Int32;
@@ -374,7 +370,7 @@ begin
 
 end;
 
-class function TBitConverter.ToString(value: THashLibByteArray): String;
+class function TBitConverter.ToString(const value: THashLibByteArray): String;
 var
   LowVal: Int32;
 begin
@@ -387,13 +383,13 @@ begin
   result := ToString(value, LowVal);
 end;
 
-class function TBitConverter.ToString(value: THashLibByteArray;
+class function TBitConverter.ToString(const value: THashLibByteArray;
   StartIndex: Int32): String;
 begin
   result := ToString(value, StartIndex, System.Length(value) - StartIndex);
 end;
 
-class function TBitConverter.ToString(value: THashLibByteArray;
+class function TBitConverter.ToString(const value: THashLibByteArray;
   StartIndex, &Length: Int32): String;
 
 var
@@ -432,14 +428,14 @@ begin
 
 end;
 
-class function TBitConverter.ToUInt8(value: THashLibByteArray;
+class function TBitConverter.ToUInt8(const value: THashLibByteArray;
   StartIndex: Int32): UInt8;
 begin
   // result := PByte(@value[StartIndex])^;
   System.Move(value[StartIndex], result, System.SizeOf(result));
 end;
 
-class function TBitConverter.ToUInt16(value: THashLibByteArray;
+class function TBitConverter.ToUInt16(const value: THashLibByteArray;
   StartIndex: Int32): UInt16;
 begin
   // System.Move(value[StartIndex], result, System.SizeOf(result));
@@ -457,7 +453,7 @@ begin
   end;
 end;
 
-class function TBitConverter.ToUInt32(value: THashLibByteArray;
+class function TBitConverter.ToUInt32(const value: THashLibByteArray;
   StartIndex: Int32): UInt32;
 begin
   // System.Move(value[StartIndex], result, System.SizeOf(result));
@@ -478,27 +474,7 @@ begin
   end;
 end;
 
-class function TBitConverter.ToUInt32(value: PByte; StartIndex: Int32): UInt32;
-begin
-
-  if (IsLittleEndian) then
-  begin
-    result := UInt32(value[StartIndex] or (value[StartIndex + 1] shl 8) or
-      (value[StartIndex + 2] shl 16) or (value[StartIndex + 3] shl 24));
-    Exit;
-  end
-  else
-  begin
-
-    result := UInt32((value[StartIndex] shl 24) or
-      (value[StartIndex + 1] shl 16) or (value[StartIndex + 2] shl 8) or
-      (value[StartIndex + 3]));
-    Exit;
-  end;
-
-end;
-
-class function TBitConverter.ToUInt64(value: THashLibByteArray;
+class function TBitConverter.ToUInt64(const value: THashLibByteArray;
   StartIndex: Int32): UInt64;
 var
   i1, i2: Int32;
@@ -528,31 +504,4 @@ begin
 
 end;
 
-class function TBitConverter.ToUInt64(value: PByte; StartIndex: Int32): UInt64;
-var
-  i1, i2: Int32;
-begin
-
-  if (IsLittleEndian) then
-  begin
-    i1 := value[StartIndex] or (value[StartIndex + 1] shl 8) or
-      (value[StartIndex + 2] shl 16) or (value[StartIndex + 3] shl 24);
-    i2 := (value[StartIndex + 4]) or (value[StartIndex + 5] shl 8) or
-      (value[StartIndex + 6] shl 16) or (value[StartIndex + 7] shl 24);
-    result := UInt64(UInt32(i1) or (Int64(i2) shl 32));
-    Exit;
-  end
-  else
-  begin
-
-    i1 := (value[StartIndex] shl 24) or (value[StartIndex + 1] shl 16) or
-      (value[StartIndex + 2] shl 8) or (value[StartIndex + 3]);
-    i2 := (value[StartIndex + 4] shl 24) or (value[StartIndex + 5] shl 16) or
-      (value[StartIndex + 6] shl 8) or (value[StartIndex + 7]);
-    result := UInt64(UInt32(i2) or (Int64(i1) shl 32));
-    Exit;
-  end;
-
-end;
-
 end.

+ 15 - 12
src/libraries/hashlib4pascal/HlpBlake2B.pas

@@ -93,9 +93,9 @@ type
 
   public
     constructor Create(); overload;
-    constructor Create(config: IBlake2BConfig); overload;
+    constructor Create(const config: IBlake2BConfig); overload;
     procedure Initialize; override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_data_length: Int32); override;
     function TransformFinal: IHashResult; override;
 
@@ -112,7 +112,7 @@ end;
 
 constructor TBlake2B.Create();
 begin
-  Create(TBlake2BConfig.Create());
+  Create(TBlake2BConfig.Create() as IBlake2BConfig);
 end;
 
 {$IFNDEF USE_UNROLLED_VARIANT}
@@ -1596,27 +1596,30 @@ begin
 {$ENDIF USE_UNROLLED_VARIANT}
 end;
 
-constructor TBlake2B.Create(config: IBlake2BConfig);
+constructor TBlake2B.Create(const config: IBlake2BConfig);
+var
+  Lconfig: IBlake2BConfig;
 begin
 
+  Lconfig := config;
   FBlockSize := BlockSizeInBytes;
 
-  if (config = Nil) then
+  if (Lconfig = Nil) then
   begin
-    config := FDefaultConfig;
+    Lconfig := FDefaultConfig;
   end;
 
-  FrawConfig := TBlake2BIvBuilder.ConfigB(config, Nil);
-  if ((config.Key <> Nil) and (System.Length(config.Key) <> 0)) then
+  FrawConfig := TBlake2BIvBuilder.ConfigB(Lconfig, Nil);
+  if ((Lconfig.Key <> Nil) and (System.Length(Lconfig.Key) <> 0)) then
   begin
 
-    FKey := System.Copy(config.Key, System.Low(config.Key),
-      System.Length(config.Key));
+    FKey := System.Copy(Lconfig.Key, System.Low(Lconfig.Key),
+      System.Length(Lconfig.Key));
 
     System.SetLength(FKey, FBlockSize);
 
   end;
-  FHashSize := config.HashSize;
+  FHashSize := Lconfig.HashSize;
 
   System.SetLength(Fm_state, 8);
 
@@ -1684,7 +1687,7 @@ begin
 
 end;
 
-procedure TBlake2B.TransformBytes(a_data: THashLibByteArray;
+procedure TBlake2B.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_data_length: Int32);
 var
   offset, bufferRemaining: Int32;

+ 8 - 7
src/libraries/hashlib4pascal/HlpBlake2BConfig.pas

@@ -25,13 +25,13 @@ type
     FPersonalisation, FSalt, FKey: THashLibByteArray;
 
     function GetPersonalisation: THashLibByteArray; inline;
-    procedure SetPersonalisation(value: THashLibByteArray); inline;
+    procedure SetPersonalisation(const value: THashLibByteArray); inline;
 
     function GetSalt: THashLibByteArray; inline;
-    procedure SetSalt(value: THashLibByteArray); inline;
+    procedure SetSalt(const value: THashLibByteArray); inline;
 
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
     function GetHashSize: Int32; inline;
     procedure SetHashSize(value: Int32); inline;
@@ -75,24 +75,25 @@ begin
   FHashSize := value;
 end;
 
-procedure TBlake2BConfig.SetKey(value: THashLibByteArray);
+procedure TBlake2BConfig.SetKey(const value: THashLibByteArray);
 begin
   FKey := value;
 end;
 
-procedure TBlake2BConfig.SetPersonalisation(value: THashLibByteArray);
+procedure TBlake2BConfig.SetPersonalisation(const value: THashLibByteArray);
 begin
   FPersonalisation := value;
 end;
 
-procedure TBlake2BConfig.SetSalt(value: THashLibByteArray);
+procedure TBlake2BConfig.SetSalt(const value: THashLibByteArray);
 begin
   FSalt := value;
 end;
 
 constructor TBlake2BConfig.Create(AHashSize: THashSize);
 begin
-  if not (Int32(AHashSize) in [20, 32, 48, 64]) then
+  Inherited Create();
+  if not(Int32(AHashSize) in [20, 32, 48, 64]) then
   begin
     raise EArgumentHashLibException.CreateRes(@SInvalidHashSize);
   end;

+ 18 - 16
src/libraries/hashlib4pascal/HlpBlake2BIvBuilder.pas

@@ -30,11 +30,11 @@ type
     class constructor Blake2BIvBuilder();
 
   public
-    class function ConfigB(config: IBlake2BConfig;
-      treeConfig: IBlake2BTreeConfig): THashLibUInt64Array; static;
+    class function ConfigB(const config: IBlake2BConfig;
+      const treeConfig: IBlake2BTreeConfig): THashLibUInt64Array; static;
 
-    class procedure ConfigBSetNode(rawConfig: THashLibUInt64Array; depth: Byte;
-      nodeOffset: UInt64); static; inline;
+    class procedure ConfigBSetNode(const rawConfig: THashLibUInt64Array;
+      depth: Byte; nodeOffset: UInt64); static; inline;
 
   end;
 
@@ -51,16 +51,18 @@ begin
   FSequentialTreeConfig.MaxHeight := 1;
 end;
 
-class function TBlake2BIvBuilder.ConfigB(config: IBlake2BConfig;
-  treeConfig: IBlake2BTreeConfig): THashLibUInt64Array;
+class function TBlake2BIvBuilder.ConfigB(const config: IBlake2BConfig;
+  const treeConfig: IBlake2BTreeConfig): THashLibUInt64Array;
 var
   isSequential: Boolean;
+  LtreeConfig: IBlake2BTreeConfig;
   rawConfig: THashLibUInt64Array;
 begin
-  isSequential := treeConfig = Nil;
+  LtreeConfig := treeConfig;
+  isSequential := LtreeConfig = Nil;
   if (isSequential) then
   begin
-    treeConfig := FSequentialTreeConfig;
+    LtreeConfig := FSequentialTreeConfig;
   end;
   System.SetLength(rawConfig, 8);
 
@@ -84,22 +86,22 @@ begin
   end;
 
   // FanOut
-  rawConfig[0] := rawConfig[0] or (UInt32(treeConfig.FanOut) shl 16);
+  rawConfig[0] := rawConfig[0] or (UInt32(LtreeConfig.FanOut) shl 16);
   // Depth
-  rawConfig[0] := rawConfig[0] or (UInt32(treeConfig.MaxHeight) shl 24);
+  rawConfig[0] := rawConfig[0] or (UInt32(LtreeConfig.MaxHeight) shl 24);
   // Leaf length
   rawConfig[0] := rawConfig[0] or
-    ((UInt64(UInt32(treeConfig.LeafSize))) shl 32);
+    ((UInt64(UInt32(LtreeConfig.LeafSize))) shl 32);
 
   // Inner length
-  if ((not isSequential) and ((treeConfig.IntermediateHashSize <= 0) or
-    (treeConfig.IntermediateHashSize > 64))) then
+  if ((not isSequential) and ((LtreeConfig.IntermediateHashSize <= 0) or
+    (LtreeConfig.IntermediateHashSize > 64))) then
   begin
     raise EArgumentOutOfRangeHashLibException.Create
       ('treeConfig.TreeIntermediateHashSize');
   end;
   rawConfig[2] := rawConfig[2] or
-    (UInt32(treeConfig.IntermediateHashSize) shl 8);
+    (UInt32(LtreeConfig.IntermediateHashSize) shl 8);
 
   // Salt
   if (config.Salt <> Nil) then
@@ -129,8 +131,8 @@ begin
   result := rawConfig;
 end;
 
-class procedure TBlake2BIvBuilder.ConfigBSetNode(rawConfig: THashLibUInt64Array;
-  depth: Byte; nodeOffset: UInt64);
+class procedure TBlake2BIvBuilder.ConfigBSetNode(const rawConfig
+  : THashLibUInt64Array; depth: Byte; nodeOffset: UInt64);
 begin
   rawConfig[1] := nodeOffset;
   rawConfig[2] := (rawConfig[2] and (not UInt64($FF))) or depth;

+ 1 - 0
src/libraries/hashlib4pascal/HlpBlake2BTreeConfig.pas

@@ -94,6 +94,7 @@ end;
 
 constructor TBlake2BTreeConfig.Create;
 begin
+  Inherited Create();
   IntermediateHashSize := 64;
 end;
 

+ 15 - 12
src/libraries/hashlib4pascal/HlpBlake2S.pas

@@ -93,9 +93,9 @@ type
 
   public
     constructor Create(); overload;
-    constructor Create(config: IBlake2SConfig); overload;
+    constructor Create(const config: IBlake2SConfig); overload;
     procedure Initialize; override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_data_length: Int32); override;
     function TransformFinal: IHashResult; override;
 
@@ -112,7 +112,7 @@ end;
 
 constructor TBlake2S.Create();
 begin
-  Create(TBlake2SConfig.Create());
+  Create(TBlake2SConfig.Create() as IBlake2SConfig);
 end;
 
 {$IFNDEF USE_UNROLLED_VARIANT}
@@ -1377,27 +1377,30 @@ begin
 {$ENDIF USE_UNROLLED_VARIANT}
 end;
 
-constructor TBlake2S.Create(config: IBlake2SConfig);
+constructor TBlake2S.Create(const config: IBlake2SConfig);
+var
+  Lconfig: IBlake2SConfig;
 begin
 
+  Lconfig := config;
   FBlockSize := BlockSizeInBytes;
 
-  if (config = Nil) then
+  if (Lconfig = Nil) then
   begin
-    config := FDefaultConfig;
+    Lconfig := FDefaultConfig;
   end;
 
-  FrawConfig := TBlake2SIvBuilder.ConfigS(config, Nil);
-  if ((config.Key <> Nil) and (System.Length(config.Key) <> 0)) then
+  FrawConfig := TBlake2SIvBuilder.ConfigS(Lconfig, Nil);
+  if ((Lconfig.Key <> Nil) and (System.Length(Lconfig.Key) <> 0)) then
   begin
 
-    FKey := System.Copy(config.Key, System.Low(config.Key),
-      System.Length(config.Key));
+    FKey := System.Copy(Lconfig.Key, System.Low(Lconfig.Key),
+      System.Length(Lconfig.Key));
 
     System.SetLength(FKey, FBlockSize);
 
   end;
-  FHashSize := config.HashSize;
+  FHashSize := Lconfig.HashSize;
 
   System.SetLength(Fm_state, 8);
 
@@ -1465,7 +1468,7 @@ begin
 
 end;
 
-procedure TBlake2S.TransformBytes(a_data: THashLibByteArray;
+procedure TBlake2S.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_data_length: Int32);
 var
   offset, bufferRemaining: Int32;

+ 8 - 7
src/libraries/hashlib4pascal/HlpBlake2SConfig.pas

@@ -25,13 +25,13 @@ type
     FPersonalisation, FSalt, FKey: THashLibByteArray;
 
     function GetPersonalisation: THashLibByteArray; inline;
-    procedure SetPersonalisation(value: THashLibByteArray); inline;
+    procedure SetPersonalisation(const value: THashLibByteArray); inline;
 
     function GetSalt: THashLibByteArray; inline;
-    procedure SetSalt(value: THashLibByteArray); inline;
+    procedure SetSalt(const value: THashLibByteArray); inline;
 
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
     function GetHashSize: Int32; inline;
     procedure SetHashSize(value: Int32); inline;
@@ -75,24 +75,25 @@ begin
   FHashSize := value;
 end;
 
-procedure TBlake2SConfig.SetKey(value: THashLibByteArray);
+procedure TBlake2SConfig.SetKey(const value: THashLibByteArray);
 begin
   FKey := value;
 end;
 
-procedure TBlake2SConfig.SetPersonalisation(value: THashLibByteArray);
+procedure TBlake2SConfig.SetPersonalisation(const value: THashLibByteArray);
 begin
   FPersonalisation := value;
 end;
 
-procedure TBlake2SConfig.SetSalt(value: THashLibByteArray);
+procedure TBlake2SConfig.SetSalt(const value: THashLibByteArray);
 begin
   FSalt := value;
 end;
 
 constructor TBlake2SConfig.Create(AHashSize: THashSize);
 begin
-  if not (Int32(AHashSize) in [16, 20, 28, 32]) then
+  Inherited Create();
+  if not(Int32(AHashSize) in [16, 20, 28, 32]) then
   begin
     raise EArgumentHashLibException.CreateRes(@SInvalidHashSize);
   end;

+ 16 - 14
src/libraries/hashlib4pascal/HlpBlake2SIvBuilder.pas

@@ -29,10 +29,10 @@ type
     class constructor Blake2SIvBuilder();
 
   public
-    class function ConfigS(config: IBlake2SConfig;
-      treeConfig: IBlake2STreeConfig): THashLibUInt32Array; static;
+    class function ConfigS(const config: IBlake2SConfig;
+      const treeConfig: IBlake2STreeConfig): THashLibUInt32Array; static;
 
-    // class procedure ConfigSSetNode(rawConfig: THashLibUInt32Array; depth: Byte;
+    // class procedure ConfigSSetNode(const rawConfig: THashLibUInt32Array; depth: Byte;
     // nodeOffset: UInt32); static; inline;
 
   end;
@@ -50,16 +50,18 @@ begin
   FSequentialTreeConfig.MaxHeight := 1;
 end;
 
-class function TBlake2SIvBuilder.ConfigS(config: IBlake2SConfig;
-  treeConfig: IBlake2STreeConfig): THashLibUInt32Array;
+class function TBlake2SIvBuilder.ConfigS(const config: IBlake2SConfig;
+  const treeConfig: IBlake2STreeConfig): THashLibUInt32Array;
 var
   isSequential: Boolean;
   rawConfig: THashLibUInt32Array;
+  LtreeConfig: IBlake2STreeConfig;
 begin
-  isSequential := treeConfig = Nil;
+  LtreeConfig := treeConfig;
+  isSequential := LtreeConfig = Nil;
   if (isSequential) then
   begin
-    treeConfig := FSequentialTreeConfig;
+    LtreeConfig := FSequentialTreeConfig;
   end;
   System.SetLength(rawConfig, 8);
 
@@ -82,22 +84,22 @@ begin
   end;
 
   // FanOut
-  rawConfig[0] := rawConfig[0] or (UInt32(treeConfig.FanOut) shl 16);
+  rawConfig[0] := rawConfig[0] or (UInt32(LtreeConfig.FanOut) shl 16);
   // Depth
-  rawConfig[0] := rawConfig[0] or (UInt32(treeConfig.MaxHeight) shl 24);
+  rawConfig[0] := rawConfig[0] or (UInt32(LtreeConfig.MaxHeight) shl 24);
   // Leaf length
   rawConfig[0] := rawConfig[0] or
-    ((UInt64(UInt32(treeConfig.LeafSize))) shl 32);
+    ((UInt64(UInt32(LtreeConfig.LeafSize))) shl 32);
 
   // Inner length
-  if ((not isSequential) and ((treeConfig.IntermediateHashSize <= 0) or
-    (treeConfig.IntermediateHashSize > 32))) then
+  if ((not isSequential) and ((LtreeConfig.IntermediateHashSize <= 0) or
+    (LtreeConfig.IntermediateHashSize > 32))) then
   begin
     raise EArgumentOutOfRangeHashLibException.Create
       ('treeConfig.TreeIntermediateHashSize');
   end;
   rawConfig[2] := rawConfig[2] or
-    (UInt32(treeConfig.IntermediateHashSize) shl 8);
+    (UInt32(LtreeConfig.IntermediateHashSize) shl 8);
 
   // Salt
   if (config.Salt <> Nil) then
@@ -127,7 +129,7 @@ begin
   result := rawConfig;
 end;
 
-// class procedure TBlake2SIvBuilder.ConfigSSetNode(rawConfig: THashLibUInt32Array;
+// class procedure TBlake2SIvBuilder.ConfigSSetNode(const rawConfig: THashLibUInt32Array;
 // depth: Byte; nodeOffset: UInt32);
 // begin
 // rawConfig[1] := nodeOffset;

+ 1 - 0
src/libraries/hashlib4pascal/HlpBlake2STreeConfig.pas

@@ -94,6 +94,7 @@ end;
 
 constructor TBlake2STreeConfig.Create;
 begin
+  Inherited Create();
   IntermediateHashSize := 32;
 end;
 

+ 8 - 8
src/libraries/hashlib4pascal/HlpCRC.pas

@@ -556,7 +556,7 @@ type
     Delta = Int32(7);
 
     function GetNames: THashLibStringArray; inline;
-    procedure SetNames(value: THashLibStringArray); inline;
+    procedure SetNames(const value: THashLibStringArray); inline;
     function GetWidth: Int32; inline;
     procedure SetWidth(value: Int32); inline;
     function GetPolynomial: UInt64; inline;
@@ -595,10 +595,10 @@ type
 
     constructor Create(_Width: Int32; _poly, _Init: UInt64;
       _refIn, _refOut: Boolean; _XorOut, _check: UInt64;
-      _Names: THashLibStringArray);
+      const _Names: THashLibStringArray);
 
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
 
@@ -660,7 +660,7 @@ begin
   FInit := value;
 end;
 
-procedure TCRC.SetNames(value: THashLibStringArray);
+procedure TCRC.SetNames(const value: THashLibStringArray);
 begin
   FNames := value;
 end;
@@ -763,7 +763,7 @@ end;
 
 constructor TCRC.Create(_Width: Int32; _poly, _Init: UInt64;
   _refIn, _refOut: Boolean; _XorOut, _check: UInt64;
-  _Names: THashLibStringArray);
+  const _Names: THashLibStringArray);
 begin
 
   FIsTableGenerated := False;
@@ -1215,8 +1215,8 @@ begin
         THashLibStringArray.Create('CRC-64', 'CRC-64/ECMA-182'));
 
     TCRCStandard.CRC64_GOISO:
-      result := TCRC.Create(64, $000000000000001B, UInt64($FFFFFFFFFFFFFFFF), True,
-        True, UInt64($FFFFFFFFFFFFFFFF), UInt64($B90956C775A41001),
+      result := TCRC.Create(64, $000000000000001B, UInt64($FFFFFFFFFFFFFFFF),
+        True, True, UInt64($FFFFFFFFFFFFFFFF), UInt64($B90956C775A41001),
         THashLibStringArray.Create('CRC-64/GO-ISO'));
 
     TCRCStandard.CRC64_WE:
@@ -1318,7 +1318,7 @@ begin
   end;
 end;
 
-procedure TCRC.TransformBytes(a_data: THashLibByteArray;
+procedure TCRC.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -32,10 +32,10 @@ type
 
   public
     constructor Create(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-      _XorOut, _check: UInt64; _Names: THashLibStringArray);
+      _XorOut, _check: UInt64; const _Names: THashLibStringArray);
 
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
 
@@ -53,7 +53,7 @@ implementation
 { TCRC16 }
 
 constructor TCRC16.Create(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-  _XorOut, _check: UInt64; _Names: THashLibStringArray);
+  _XorOut, _check: UInt64; const _Names: THashLibStringArray);
 begin
   Inherited Create(2, 1);
   FCRCAlgorithm := TCRC.Create(16, _poly, _Init, _refIn, _refOut, _XorOut,
@@ -65,7 +65,7 @@ begin
   FCRCAlgorithm.Initialize;
 end;
 
-procedure TCRC16.TransformBytes(a_data: THashLibByteArray;
+procedure TCRC16.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 begin
   FCRCAlgorithm.TransformBytes(a_data, a_index, a_length);

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

@@ -35,10 +35,10 @@ type
   public
 
     constructor Create(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-      _XorOut, _check: UInt64; _Names: THashLibStringArray);
+      _XorOut, _check: UInt64; const _Names: THashLibStringArray);
 
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
 
@@ -63,7 +63,7 @@ implementation
 { TCRC32 }
 
 constructor TCRC32.Create(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-  _XorOut, _check: UInt64; _Names: THashLibStringArray);
+  _XorOut, _check: UInt64; const _Names: THashLibStringArray);
 begin
   Inherited Create(4, 1);
   FCRCAlgorithm := TCRC.Create(32, _poly, _Init, _refIn, _refOut, _XorOut,
@@ -75,7 +75,7 @@ begin
   FCRCAlgorithm.Initialize;
 end;
 
-procedure TCRC32.TransformBytes(a_data: THashLibByteArray;
+procedure TCRC32.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 begin
   FCRCAlgorithm.TransformBytes(a_data, a_index, a_length);

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

@@ -32,10 +32,10 @@ type
 
   public
     constructor Create(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-      _XorOut, _check: UInt64; _Names: THashLibStringArray);
+      _XorOut, _check: UInt64; const _Names: THashLibStringArray);
 
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
 
@@ -53,7 +53,7 @@ implementation
 { TCRC64 }
 
 constructor TCRC64.Create(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-  _XorOut, _check: UInt64; _Names: THashLibStringArray);
+  _XorOut, _check: UInt64; const _Names: THashLibStringArray);
 begin
   Inherited Create(8, 1);
   FCRCAlgorithm := TCRC.Create(64, _poly, _Init, _refIn, _refOut, _XorOut,
@@ -65,7 +65,7 @@ begin
   FCRCAlgorithm.Initialize;
 end;
 
-procedure TCRC64.TransformBytes(a_data: THashLibByteArray;
+procedure TCRC64.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 begin
   FCRCAlgorithm.TransformBytes(a_data, a_index, a_length);

+ 17 - 14
src/libraries/hashlib4pascal/HlpConverters.pas

@@ -29,7 +29,7 @@ type
       : THashLibStringArray; static;
 
 {$IFDEF DEBUG}
-    class procedure Check(a_in: THashLibByteArray;
+    class procedure Check(const a_in: THashLibByteArray;
       a_in_size, a_out_size: Int32); overload; static;
 {$ENDIF DEBUG}
     class procedure swap_copy_str_to_u32(src: Pointer; src_index: Int32;
@@ -85,12 +85,12 @@ type
       a_index: Int32); overload; static; inline;
 
     class function ConvertStringToBytes(const a_in: String;
-      a_encoding: TEncoding): THashLibByteArray; overload; static;
+      const a_encoding: TEncoding): THashLibByteArray; overload; static;
 
-    class function ConvertHexStringToBytes(a_in: String): THashLibByteArray;
-      static; inline;
+    class function ConvertHexStringToBytes(const a_in: String)
+      : THashLibByteArray; static; inline;
 
-    class function ConvertBytesToHexString(a_in: THashLibByteArray;
+    class function ConvertBytesToHexString(const a_in: THashLibByteArray;
       a_group: Boolean): String; static;
 
   end;
@@ -101,7 +101,7 @@ implementation
 
 {$IFDEF DEBUG}
 
-class procedure TConverters.Check(a_in: THashLibByteArray;
+class procedure TConverters.Check(const a_in: THashLibByteArray;
   a_in_size, a_out_size: Int32);
 begin
   System.Assert(((System.length(a_in) * a_in_size) mod a_out_size) = 0);
@@ -338,8 +338,8 @@ begin
   a_out[a_index + 7] := Byte(a_in);
 end;
 
-class function TConverters.ConvertBytesToHexString(a_in: THashLibByteArray;
-  a_group: Boolean): String;
+class function TConverters.ConvertBytesToHexString
+  (const a_in: THashLibByteArray; a_group: Boolean): String;
 var
   I: Int32;
   hex, workstring: String;
@@ -388,21 +388,24 @@ begin
   result := hex;
 end;
 
-class function TConverters.ConvertHexStringToBytes(a_in: String)
+class function TConverters.ConvertHexStringToBytes(const a_in: String)
   : THashLibByteArray;
+var
+  l_in: String;
 begin
-  a_in := StringReplace(a_in, '-', '', [rfIgnoreCase, rfReplaceAll]);
+  l_in := a_in;
+  l_in := StringReplace(l_in, '-', '', [rfIgnoreCase, rfReplaceAll]);
 
 {$IFDEF DEBUG}
-  System.Assert(System.length(a_in) and 1 = 0);
+  System.Assert(System.length(l_in) and 1 = 0);
 {$ENDIF DEBUG}
-  System.SetLength(result, System.length(a_in) shr 1);
-  HexToBin(PChar(a_in), @result[0], System.length(result));
+  System.SetLength(result, System.length(l_in) shr 1);
+  HexToBin(PChar(l_in), @result[0], System.length(result));
 
 end;
 
 class function TConverters.ConvertStringToBytes(const a_in: String;
-  a_encoding: TEncoding): THashLibByteArray;
+  const a_encoding: TEncoding): THashLibByteArray;
 begin
 
   if a_encoding = Nil then

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 5381;
 end;
 
-procedure TDJB.TransformBytes(a_data: THashLibByteArray;
+procedure TDJB.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -39,7 +39,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TELF.TransformBytes(a_data: THashLibByteArray;
+procedure TELF.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TFNV.TransformBytes(a_data: THashLibByteArray;
+procedure TFNV.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 2166136261;
 end;
 
-procedure TFNV1a.TransformBytes(a_data: THashLibByteArray;
+procedure TFNV1a.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 14695981039346656037;
 end;
 
-procedure TFNV1a64.TransformBytes(a_data: THashLibByteArray;
+procedure TFNV1a64.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TFNV64.TransformBytes(a_data: THashLibByteArray;
+procedure TFNV64.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

+ 19 - 18
src/libraries/hashlib4pascal/HlpGOST3411_2012.pas

@@ -26,22 +26,22 @@ type
     FbOff: Int32;
 
     procedure InternalUpdate(input: Byte); inline;
-    procedure xor512(A, B: THashLibByteArray); inline;
-    procedure E(K, a_m: THashLibByteArray);
-    procedure F(V: THashLibByteArray);
-    procedure g_N(a_h, a_N, a_m: THashLibByteArray); inline;
-    procedure addMod512(A: THashLibByteArray; num: Int32); overload;
-    procedure addMod512(A, B: THashLibByteArray); overload;
-    procedure reverse(src, dst: THashLibByteArray);
+    procedure xor512(const A, B: THashLibByteArray); inline;
+    procedure E(const K, a_m: THashLibByteArray);
+    procedure F(const V: THashLibByteArray);
+    procedure g_N(const a_h, a_N, a_m: THashLibByteArray); inline;
+    procedure addMod512(const A: THashLibByteArray; num: Int32); overload;
+    procedure addMod512(const A, B: THashLibByteArray); overload;
+    procedure reverse(const src, dst: THashLibByteArray);
 
     class constructor GOST3411_2012();
 
   strict protected
-    constructor Create(a_hash_size: Int32; IV: THashLibByteArray);
+    constructor Create(a_hash_size: Int32; const IV: THashLibByteArray);
 
   public
     procedure Initialize; override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_data_length: Int32); override;
     function TransformFinal: IHashResult; override;
 
@@ -78,7 +78,7 @@ implementation
 
 { TGOST3411_2012Base }
 
-procedure TGOST3411_2012.xor512(A, B: THashLibByteArray);
+procedure TGOST3411_2012.xor512(const A, B: THashLibByteArray);
 var
   i: Integer;
 begin
@@ -88,7 +88,7 @@ begin
   end;
 end;
 
-procedure TGOST3411_2012.addMod512(A: THashLibByteArray; num: Int32);
+procedure TGOST3411_2012.addMod512(const A: THashLibByteArray; num: Int32);
 var
   c, i: Int32;
 begin
@@ -109,7 +109,7 @@ begin
 
 end;
 
-procedure TGOST3411_2012.addMod512(A, B: THashLibByteArray);
+procedure TGOST3411_2012.addMod512(const A, B: THashLibByteArray);
 var
   i, c: Int32;
 begin
@@ -124,7 +124,8 @@ begin
   end;
 end;
 
-constructor TGOST3411_2012.Create(a_hash_size: Int32; IV: THashLibByteArray);
+constructor TGOST3411_2012.Create(a_hash_size: Int32;
+  const IV: THashLibByteArray);
 begin
   Inherited Create(a_hash_size, 64);
   System.SetLength(FIV, 64);
@@ -144,7 +145,7 @@ begin
   System.Move(IV[0], Fh[0], 64 * System.SizeOf(Byte));
 end;
 
-procedure TGOST3411_2012.E(K, a_m: THashLibByteArray);
+procedure TGOST3411_2012.E(const K, a_m: THashLibByteArray);
 var
   i: Int32;
 begin
@@ -163,7 +164,7 @@ begin
   xor512(K, FKi);
 end;
 
-procedure TGOST3411_2012.F(V: THashLibByteArray);
+procedure TGOST3411_2012.F(const V: THashLibByteArray);
 var
   res: array [0 .. 7] of UInt64;
   r: UInt64;
@@ -1509,7 +1510,7 @@ begin
 {$ENDREGION}
 end;
 
-procedure TGOST3411_2012.g_N(a_h, a_N, a_m: THashLibByteArray);
+procedure TGOST3411_2012.g_N(const a_h, a_N, a_m: THashLibByteArray);
 begin
   System.Move(a_h[0], Ftmp[0], 64 * System.SizeOf(Byte));
 
@@ -1546,7 +1547,7 @@ begin
   end;
 end;
 
-procedure TGOST3411_2012.reverse(src, dst: THashLibByteArray);
+procedure TGOST3411_2012.reverse(const src, dst: THashLibByteArray);
 var
   len, i: Int32;
 begin
@@ -1557,7 +1558,7 @@ begin
   end;
 end;
 
-procedure TGOST3411_2012.TransformBytes(a_data: THashLibByteArray;
+procedure TGOST3411_2012.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_data_length: Int32);
 begin
   while ((FbOff <> 64) and (a_data_length > 0)) do

+ 7 - 7
src/libraries/hashlib4pascal/HlpHMACNotBuildInAdapter.pas

@@ -32,17 +32,17 @@ type
 
     function GetName: String; override;
 
-    function GetKey(): THashLibByteArray; virtual;
+    function GetKey(): THashLibByteArray;
     function GetKeyLength(): TNullableInteger;
-    procedure SetKey(value: THashLibByteArray); virtual;
+    procedure SetKey(const value: THashLibByteArray);
     procedure UpdatePads();
 
   public
 
-    constructor Create(a_underlyingHash: IHash);
+    constructor Create(const a_underlyingHash: IHash);
     procedure Initialize(); override;
     function TransformFinal(): IHashResult; override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     property Key: THashLibByteArray read GetKey write SetKey;
     property Name: String read GetName;
@@ -54,7 +54,7 @@ implementation
 
 { THMACNotBuildInAdapter }
 
-constructor THMACNotBuildInAdapter.Create(a_underlyingHash: IHash);
+constructor THMACNotBuildInAdapter.Create(const a_underlyingHash: IHash);
 begin
   Inherited Create(a_underlyingHash.HashSize, a_underlyingHash.BlockSize);
   Fm_hash := a_underlyingHash;
@@ -74,7 +74,7 @@ begin
   result := Nil;
 end;
 
-procedure THMACNotBuildInAdapter.SetKey(value: THashLibByteArray);
+procedure THMACNotBuildInAdapter.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -132,7 +132,7 @@ begin
 
 end;
 
-procedure THMACNotBuildInAdapter.TransformBytes(a_data: THashLibByteArray;
+procedure THMACNotBuildInAdapter.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 begin
 {$IFDEF DEBUG}

+ 18 - 13
src/libraries/hashlib4pascal/HlpHash.pas

@@ -56,20 +56,22 @@ type
     property HashSize: Int32 read GetHashSize write SetHashSize;
     function ComputeString(const a_data: String; a_encoding: TEncoding)
       : IHashResult; virtual;
-    function ComputeBytes(a_data: THashLibByteArray): IHashResult; virtual;
+    function ComputeBytes(const a_data: THashLibByteArray)
+      : IHashResult; virtual;
     function ComputeUntyped(const a_data; a_length: Int64): IHashResult;
-    function ComputeStream(a_stream: TStream; a_length: Int64 = -1)
+    function ComputeStream(const a_stream: TStream; a_length: Int64 = -1)
       : IHashResult;
     function ComputeFile(const a_file_name: String; a_from: Int64 = 0;
       a_length: Int64 = -1): IHashResult;
-    procedure TransformString(const a_data: String; a_encoding: TEncoding);
-    procedure TransformBytes(a_data: THashLibByteArray); overload;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformString(const a_data: String;
+      const a_encoding: TEncoding);
+    procedure TransformBytes(const a_data: THashLibByteArray); overload;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index: Int32); overload;
-    procedure TransformBytes(a_data: THashLibByteArray; a_index: Int32;
+    procedure TransformBytes(const a_data: THashLibByteArray; a_index: Int32;
       a_length: Int32); overload; virtual; abstract;
     procedure TransformUntyped(const a_data; a_length: Int64);
-    procedure TransformStream(a_stream: TStream; a_length: Int64 = -1);
+    procedure TransformStream(const a_stream: TStream; a_length: Int64 = -1);
     procedure TransformFile(const a_file_name: String; a_from: Int64 = 0;
       a_length: Int64 = -1);
     procedure Initialize(); virtual; abstract;
@@ -84,6 +86,7 @@ implementation
 
 constructor THash.Create(a_hash_size, a_block_size: Int32);
 begin
+  Inherited Create();
 {$IFDEF DEBUG}
   System.Assert((a_block_size > 0) or (a_block_size = -1));
   System.Assert((a_hash_size > 0) or (a_hash_size = -1));
@@ -209,7 +212,8 @@ begin
   end;
 end;
 
-function THash.ComputeStream(a_stream: TStream; a_length: Int64): IHashResult;
+function THash.ComputeStream(const a_stream: TStream; a_length: Int64)
+  : IHashResult;
 begin
   Initialize();
   TransformStream(a_stream, a_length);
@@ -226,7 +230,7 @@ begin
 
 end;
 
-function THash.ComputeBytes(a_data: THashLibByteArray): IHashResult;
+function THash.ComputeBytes(const a_data: THashLibByteArray): IHashResult;
 begin
   Initialize();
   TransformBytes(a_data);
@@ -234,17 +238,18 @@ begin
 
 end;
 
-procedure THash.TransformString(const a_data: String; a_encoding: TEncoding);
+procedure THash.TransformString(const a_data: String;
+  const a_encoding: TEncoding);
 begin
   TransformBytes(TConverters.ConvertStringToBytes(a_data, a_encoding));
 end;
 
-procedure THash.TransformBytes(a_data: THashLibByteArray);
+procedure THash.TransformBytes(const a_data: THashLibByteArray);
 begin
   TransformBytes(a_data, 0, System.Length(a_data));
 end;
 
-procedure THash.TransformBytes(a_data: THashLibByteArray; a_index: Int32);
+procedure THash.TransformBytes(const a_data: THashLibByteArray; a_index: Int32);
 var
   &Length: Int32;
 begin
@@ -259,7 +264,7 @@ begin
   TransformBytes(a_data, a_index, Length);
 end;
 
-procedure THash.TransformStream(a_stream: TStream; a_length: Int64);
+procedure THash.TransformStream(const a_stream: TStream; a_length: Int64);
 var
   data: THashLibByteArray;
   readed, LBufferSize: Int32;

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

@@ -28,7 +28,7 @@ type
   public
     constructor Create(a_hash_size, a_block_size: Int32;
       a_buffer_size: Int32 = -1);
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     procedure Initialize(); override;
     function TransformFinal(): IHashResult; override;
@@ -65,7 +65,7 @@ begin
   TransformBlock(PByte(Fm_buffer.GetBytes()), Fm_buffer.Length, 0);
 end;
 
-procedure TBlockHash.TransformBytes(a_data: THashLibByteArray;
+procedure TBlockHash.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   ptr_a_data: PByte;

+ 26 - 20
src/libraries/hashlib4pascal/HlpHashFactory.pas

@@ -118,18 +118,21 @@ type
 
       class function CreateCRC(_Width: Int32; _poly, _Init: UInt64;
         _refIn, _refOut: Boolean; _XorOut, _check: UInt64;
-        _Names: THashLibStringArray): IHash; overload; static;
+        const _Names: THashLibStringArray): IHash; overload; static;
 
       class function CreateCRC(_value: TCRCStandard): IHash; overload; static;
 
       class function CreateCRC16(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-        _XorOut, _check: UInt64; _Names: THashLibStringArray): IHash; static;
+        _XorOut, _check: UInt64; const _Names: THashLibStringArray)
+        : IHash; static;
 
       class function CreateCRC32(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-        _XorOut, _check: UInt64; _Names: THashLibStringArray): IHash; static;
+        _XorOut, _check: UInt64; const _Names: THashLibStringArray)
+        : IHash; static;
 
       class function CreateCRC64(_poly, _Init: UInt64; _refIn, _refOut: Boolean;
-        _XorOut, _check: UInt64; _Names: THashLibStringArray): IHash; static;
+        _XorOut, _check: UInt64; const _Names: THashLibStringArray)
+        : IHash; static;
 
       /// <summary>
       /// BUYPASS, polynomial = $8005
@@ -367,14 +370,16 @@ type
       class function CreateSHA3_384(): IHash; static;
       class function CreateSHA3_512(): IHash; static;
 
-      class function CreateBlake2B(config: IBlake2BConfig = Nil): IHash; static;
+      class function CreateBlake2B(const config: IBlake2BConfig = Nil)
+        : IHash; static;
 
       class function CreateBlake2B_160(): IHash; static;
       class function CreateBlake2B_256(): IHash; static;
       class function CreateBlake2B_384(): IHash; static;
       class function CreateBlake2B_512(): IHash; static;
 
-      class function CreateBlake2S(config: IBlake2SConfig = Nil): IHash; static;
+      class function CreateBlake2S(const config: IBlake2SConfig = Nil)
+        : IHash; static;
 
       class function CreateBlake2S_128(): IHash; static;
       class function CreateBlake2S_160(): IHash; static;
@@ -390,7 +395,7 @@ type
 
     public
 
-      class function CreateHMAC(a_hash: IHash): IHMAC; static;
+      class function CreateHMAC(const a_hash: IHash): IHMAC; static;
 
     end;
 
@@ -416,8 +421,8 @@ type
       /// <exception cref="EArgumentNilHashLibException">The password, salt or algorithm is Nil.</exception>
       /// <exception cref="EArgumentHashLibException">The iteration is less than 1.</exception>
 
-      class function CreatePBKDF2_HMAC(a_hash: IHash;
-        a_password, a_salt: THashLibByteArray; a_iterations: UInt32)
+      class function CreatePBKDF2_HMAC(const a_hash: IHash;
+        const a_password, a_salt: THashLibByteArray; a_iterations: UInt32)
         : IPBKDF2_HMAC; static;
 
     end;
@@ -437,7 +442,7 @@ end;
 
 class function THashFactory.TChecksum.CreateCRC(_Width: Int32;
   _poly, _Init: UInt64; _refIn, _refOut: Boolean; _XorOut, _check: UInt64;
-  _Names: THashLibStringArray): IHash;
+  const _Names: THashLibStringArray): IHash;
 begin
   Result := TCRC.Create(_Width, _poly, _Init, _refIn, _refOut, _XorOut,
     _check, _Names);
@@ -450,7 +455,7 @@ end;
 
 class function THashFactory.TChecksum.CreateCRC16(_poly, _Init: UInt64;
   _refIn, _refOut: Boolean; _XorOut, _check: UInt64;
-  _Names: THashLibStringArray): IHash;
+  const _Names: THashLibStringArray): IHash;
 begin
   Result := TCRC16.Create(_poly, _Init, _refIn, _refOut, _XorOut,
     _check, _Names);
@@ -463,7 +468,7 @@ end;
 
 class function THashFactory.TChecksum.CreateCRC32(_poly, _Init: UInt64;
   _refIn, _refOut: Boolean; _XorOut, _check: UInt64;
-  _Names: THashLibStringArray): IHash;
+  const _Names: THashLibStringArray): IHash;
 begin
   Result := TCRC32.Create(_poly, _Init, _refIn, _refOut, _XorOut,
     _check, _Names);
@@ -481,7 +486,7 @@ end;
 
 class function THashFactory.TChecksum.CreateCRC64(_poly, _Init: UInt64;
   _refIn, _refOut: Boolean; _XorOut, _check: UInt64;
-  _Names: THashLibStringArray): IHash;
+  const _Names: THashLibStringArray): IHash;
 begin
   Result := TCRC64.Create(_poly, _Init, _refIn, _refOut, _XorOut,
     _check, _Names);
@@ -922,8 +927,8 @@ begin
   Result := TSHA3_512.Create();
 end;
 
-class function THashFactory.TCrypto.CreateBlake2B
-  (config: IBlake2BConfig): IHash;
+class function THashFactory.TCrypto.CreateBlake2B(const config
+  : IBlake2BConfig): IHash;
 begin
   if config = Nil then
   begin
@@ -959,8 +964,8 @@ begin
     (TBlake2BConfig.Create(THashSize.hsHashSize512));
 end;
 
-class function THashFactory.TCrypto.CreateBlake2S
-  (config: IBlake2SConfig): IHash;
+class function THashFactory.TCrypto.CreateBlake2S(const config
+  : IBlake2SConfig): IHash;
 begin
   if config = Nil then
   begin
@@ -1139,7 +1144,7 @@ end;
 
 { THashFactory.THMAC }
 
-class function THashFactory.THMAC.CreateHMAC(a_hash: IHash): IHMAC;
+class function THashFactory.THMAC.CreateHMAC(const a_hash: IHash): IHMAC;
 begin
 
   if Supports(a_hash, IHMAC) then
@@ -1157,8 +1162,9 @@ end;
 
 { TKDF.TPBKDF2_HMAC }
 
-class function TKDF.TPBKDF2_HMAC.CreatePBKDF2_HMAC(a_hash: IHash;
-  a_password, a_salt: THashLibByteArray; a_iterations: UInt32): IPBKDF2_HMAC;
+class function TKDF.TPBKDF2_HMAC.CreatePBKDF2_HMAC(const a_hash: IHash;
+  const a_password, a_salt: THashLibByteArray; a_iterations: UInt32)
+  : IPBKDF2_HMAC;
 begin
 
   if not(System.Assigned(a_hash)) then

+ 14 - 8
src/libraries/hashlib4pascal/HlpHashResult.pas

@@ -48,7 +48,8 @@ type
 
     Fm_hash: THashLibByteArray;
 
-    class function SlowEquals(a_ar1, a_ar2: THashLibByteArray): Boolean; static;
+    class function SlowEquals(const a_ar1, a_ar2: THashLibByteArray)
+      : Boolean; static;
 
   public
 
@@ -57,7 +58,7 @@ type
     constructor Create(a_hash: UInt16); overload;
     constructor Create(a_hash: UInt32); overload;
     constructor Create(a_hash: UInt64); overload;
-    constructor Create(a_hash: THashLibByteArray); overload;
+    constructor Create(const a_hash: THashLibByteArray); overload;
 
     function GetBytes(): THashLibByteArray;
     function GetUInt8(): UInt8;
@@ -66,7 +67,7 @@ type
     function GetInt32(): Int32;
     function GetUInt64(): UInt64;
     function ToString(a_group: Boolean = false): String; reintroduce;
-    function Equals(a_hashResult: IHashResult): Boolean; reintroduce;
+    function Equals(const a_hashResult: IHashResult): Boolean; reintroduce;
     function GetHashCode(): {$IFDEF DELPHI}Int32; {$ELSE}PtrInt;
 {$ENDIF DELPHI}override;
 
@@ -78,41 +79,45 @@ implementation
 
 constructor THashResult.Create(a_hash: UInt64);
 begin
-
+  Inherited Create();
   Fm_hash := THashLibByteArray.Create(Byte(a_hash shr 56), Byte(a_hash shr 48),
     Byte(a_hash shr 40), Byte(a_hash shr 32), Byte(a_hash shr 24),
     Byte(a_hash shr 16), Byte(a_hash shr 8), Byte(a_hash));
 end;
 
-constructor THashResult.Create(a_hash: THashLibByteArray);
+constructor THashResult.Create(const a_hash: THashLibByteArray);
 begin
+  Inherited Create();
   Fm_hash := a_hash;
 end;
 
 constructor THashResult.Create(a_hash: UInt32);
 begin
+  Inherited Create();
   Fm_hash := THashLibByteArray.Create(Byte(a_hash shr 24), Byte(a_hash shr 16),
     Byte(a_hash shr 8), Byte(a_hash));
 end;
 
 constructor THashResult.Create(a_hash: UInt8);
 begin
+  Inherited Create();
   Fm_hash := THashLibByteArray.Create(a_hash);
 end;
 
 constructor THashResult.Create(a_hash: UInt16);
 begin
+  Inherited Create();
   Fm_hash := THashLibByteArray.Create(Byte(a_hash shr 8), Byte(a_hash));
 end;
 
 constructor THashResult.Create(a_hash: Int32);
 begin
+  Inherited Create();
   Fm_hash := THashLibByteArray.Create(Byte(TBits.Asr32(a_hash, 24)),
     Byte(TBits.Asr32(a_hash, 16)), Byte(TBits.Asr32(a_hash, 8)), Byte(a_hash));
 end;
 
-function THashResult.Equals(a_hashResult: IHashResult): Boolean;
-
+function THashResult.Equals(const a_hashResult: IHashResult): Boolean;
 begin
   result := THashResult.SlowEquals(a_hashResult.GetBytes(), Fm_hash);
 end;
@@ -245,7 +250,8 @@ end;
 
 {$B+}
 
-class function THashResult.SlowEquals(a_ar1, a_ar2: THashLibByteArray): Boolean;
+class function THashResult.SlowEquals(const a_ar1,
+  a_ar2: THashLibByteArray): Boolean;
 var
   I: Int32;
   diff: UInt32;

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

@@ -11,14 +11,14 @@ type
   IBlake2BConfig = interface(IInterface)
     ['{176861A3-B06E-4CA3-A1BB-DDEAFF40BFE1}']
     function GetPersonalisation: THashLibByteArray;
-    procedure SetPersonalisation(value: THashLibByteArray);
+    procedure SetPersonalisation(const value: THashLibByteArray);
     property Personalisation: THashLibByteArray read GetPersonalisation
       write SetPersonalisation;
     function GetSalt: THashLibByteArray;
-    procedure SetSalt(value: THashLibByteArray);
+    procedure SetSalt(const value: THashLibByteArray);
     property Salt: THashLibByteArray read GetSalt write SetSalt;
     function GetKey: THashLibByteArray;
-    procedure SetKey(value: THashLibByteArray);
+    procedure SetKey(const value: THashLibByteArray);
     property Key: THashLibByteArray read GetKey write SetKey;
     function GetHashSize: Int32;
     procedure SetHashSize(value: Int32);

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

@@ -11,14 +11,14 @@ type
   IBlake2SConfig = interface(IInterface)
     ['{C78DE94A-0290-467D-BE26-D0AD1639076C}']
     function GetPersonalisation: THashLibByteArray;
-    procedure SetPersonalisation(value: THashLibByteArray);
+    procedure SetPersonalisation(const value: THashLibByteArray);
     property Personalisation: THashLibByteArray read GetPersonalisation
       write SetPersonalisation;
     function GetSalt: THashLibByteArray;
-    procedure SetSalt(value: THashLibByteArray);
+    procedure SetSalt(const value: THashLibByteArray);
     property Salt: THashLibByteArray read GetSalt write SetSalt;
     function GetKey: THashLibByteArray;
-    procedure SetKey(value: THashLibByteArray);
+    procedure SetKey(const value: THashLibByteArray);
     property Key: THashLibByteArray read GetKey write SetKey;
     function GetHashSize: Int32;
     procedure SetHashSize(value: Int32);

+ 7 - 7
src/libraries/hashlib4pascal/HlpIHash.pas

@@ -31,26 +31,26 @@ type
 
     function ComputeString(const a_data: String; a_encoding: TEncoding)
       : IHashResult;
-    function ComputeBytes(a_data: THashLibByteArray): IHashResult;
+    function ComputeBytes(const a_data: THashLibByteArray): IHashResult;
     function ComputeUntyped(const a_data; a_length: Int64): IHashResult;
-    function ComputeStream(a_stream: TStream; a_length: Int64 = -1)
+    function ComputeStream(const a_stream: TStream; a_length: Int64 = -1)
       : IHashResult;
     function ComputeFile(const a_file_name: String; a_from: Int64 = 0;
       a_length: Int64 = -1): IHashResult;
 
     procedure Initialize();
 
-    procedure TransformBytes(a_data: THashLibByteArray); overload;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray); overload;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index: Int32); overload;
-    procedure TransformBytes(a_data: THashLibByteArray; a_index: Int32;
+    procedure TransformBytes(const a_data: THashLibByteArray; a_index: Int32;
       a_length: Int32); overload;
     procedure TransformUntyped(const a_data; a_length: Int64);
 
     function TransformFinal(): IHashResult;
 
-    procedure TransformString(const a_data: String; a_encoding: TEncoding);
-    procedure TransformStream(a_stream: TStream; a_length: Int64 = -1);
+    procedure TransformString(const a_data: String; const a_encoding: TEncoding);
+    procedure TransformStream(const a_stream: TStream; a_length: Int64 = -1);
     procedure TransformFile(const a_file_name: String; a_from: Int64 = 0;
       a_length: Int64 = -1);
 

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

@@ -40,7 +40,7 @@ type
     ['{DD5E0FE4-3573-4051-B7CF-F23BABE982D8}']
 
     function GetKey(): THashLibByteArray;
-    procedure SetKey(value: THashLibByteArray);
+    procedure SetKey(const value: THashLibByteArray);
     property Key: THashLibByteArray read GetKey write SetKey;
     function GetKeyLength(): TNullableInteger;
     property KeyLength: TNullableInteger read GetKeyLength;

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

@@ -18,7 +18,7 @@ type
     function GetInt32(): Int32;
     function GetUInt64(): UInt64;
     function ToString(a_group: Boolean = false): String;
-    function Equals(a_hashResult: IHashResult): Boolean; overload;
+    function Equals(const a_hashResult: IHashResult): Boolean; overload;
     function GetHashCode(): {$IFDEF DELPHI}Int32; {$ELSE}PtrInt;
 {$ENDIF DELPHI}
   end;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 1315423911;
 end;
 
-procedure TJS.TransformBytes(a_data: THashLibByteArray;
+procedure TJS.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

+ 7 - 6
src/libraries/hashlib4pascal/HlpMultipleTransformNonBlock.pas

@@ -32,10 +32,11 @@ type
     constructor Create(a_hash_size, a_block_size: Int32);
     destructor Destroy; override;
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
-    function ComputeBytes(a_data: THashLibByteArray): IHashResult; override;
+    function ComputeBytes(const a_data: THashLibByteArray)
+      : IHashResult; override;
 
   end;
 
@@ -68,8 +69,8 @@ begin
   FBuffer.SetSize(0);
 end;
 
-procedure TMultipleTransformNonBlock.TransformBytes(a_data: THashLibByteArray;
-  a_index, a_length: Int32);
+procedure TMultipleTransformNonBlock.TransformBytes(const a_data
+  : THashLibByteArray; a_index, a_length: Int32);
 begin
 {$IFDEF DEBUG}
   System.Assert(a_index >= 0);
@@ -85,8 +86,8 @@ begin
   Initialize();
 end;
 
-function TMultipleTransformNonBlock.ComputeBytes(a_data: THashLibByteArray)
-  : IHashResult;
+function TMultipleTransformNonBlock.ComputeBytes(const a_data
+  : THashLibByteArray): IHashResult;
 begin
   Initialize();
   result := ComputeAggregatedBytes(a_data);

+ 4 - 4
src/libraries/hashlib4pascal/HlpMurmur2.pas

@@ -36,11 +36,11 @@ type
     M = UInt32($5BD1E995);
     R = Int32(24);
 
-    function InternalComputeBytes(a_data: THashLibByteArray): Int32;
+    function InternalComputeBytes(const a_data: THashLibByteArray): Int32;
     procedure TransformUInt32Fast(a_data: UInt32); inline;
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
   strict protected
     function ComputeAggregatedBytes(a_data: THashLibByteArray)
@@ -70,7 +70,7 @@ begin
   result := TConverters.ReadUInt32AsBytesLE(Fm_key);
 end;
 
-procedure TMurmur2.SetKey(value: THashLibByteArray);
+procedure TMurmur2.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -106,7 +106,7 @@ begin
   inherited Initialize();
 end;
 
-function TMurmur2.InternalComputeBytes(a_data: THashLibByteArray): Int32;
+function TMurmur2.InternalComputeBytes(const a_data: THashLibByteArray): Int32;
 var
   &length, current_index: Int32;
   k: UInt32;

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

@@ -42,7 +42,7 @@ type
 
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
   strict protected
     function ComputeAggregatedBytes(a_data: THashLibByteArray)
@@ -249,7 +249,7 @@ begin
 
 end;
 
-procedure TMurmur2_64.SetKey(value: THashLibByteArray);
+procedure TMurmur2_64.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin

+ 4 - 4
src/libraries/hashlib4pascal/HlpMurmurHash3_x64_128.pas

@@ -61,12 +61,12 @@ type
 {$ENDREGION}
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal: IHashResult; override;
     property KeyLength: TNullableInteger read GetKeyLength;
@@ -394,7 +394,7 @@ begin
 
 end;
 
-procedure TMurmurHash3_x64_128.SetKey(value: THashLibByteArray);
+procedure TMurmurHash3_x64_128.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -412,7 +412,7 @@ begin
   end;
 end;
 
-procedure TMurmurHash3_x64_128.TransformBytes(a_data: THashLibByteArray;
+procedure TMurmurHash3_x64_128.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   len, nBlocks, i, offset, lIdx: Int32;

+ 4 - 4
src/libraries/hashlib4pascal/HlpMurmurHash3_x86_128.pas

@@ -57,12 +57,12 @@ type
 {$ENDREGION}
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal: IHashResult; override;
     property KeyLength: TNullableInteger read GetKeyLength;
@@ -439,7 +439,7 @@ begin
 
 end;
 
-procedure TMurmurHash3_x86_128.SetKey(value: THashLibByteArray);
+procedure TMurmurHash3_x86_128.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -456,7 +456,7 @@ begin
   end;
 end;
 
-procedure TMurmurHash3_x86_128.TransformBytes(a_data: THashLibByteArray;
+procedure TMurmurHash3_x86_128.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   len, nBlocks, i, offset, lIdx: Int32;

+ 16 - 5
src/libraries/hashlib4pascal/HlpMurmurHash3_x86_32.pas

@@ -49,12 +49,12 @@ type
 
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal: IHashResult; override;
     property KeyLength: TNullableInteger read GetKeyLength;
@@ -172,7 +172,7 @@ begin
   result := TConverters.ReadUInt32AsBytesLE(Fm_key);
 end;
 
-procedure TMurmurHash3_x86_32.SetKey(value: THashLibByteArray);
+procedure TMurmurHash3_x86_32.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -199,7 +199,7 @@ begin
   Fm_idx := 0;
 end;
 
-procedure TMurmurHash3_x86_32.TransformBytes(a_data: THashLibByteArray;
+procedure TMurmurHash3_x86_32.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   len, nBlocks, i, offset: Int32;
@@ -279,9 +279,20 @@ begin
 end;
 
 function TMurmurHash3_x86_32.TransformFinal: IHashResult;
+var
+  tempBufByte: THashLibByteArray;
+  tempBufUInt32: THashLibUInt32Array;
 begin
   Finish();
-  result := THashResult.Create(Fm_h);
+
+  tempBufUInt32 := THashLibUInt32Array.Create(Fm_h);
+  System.SetLength(tempBufByte, System.Length(tempBufUInt32) *
+    System.SizeOf(UInt32));
+  TConverters.be32_copy(PCardinal(tempBufUInt32), 0, PByte(tempBufByte), 0,
+    System.Length(tempBufByte));
+
+  result := THashResult.Create(tempBufByte);
+
   Initialize();
 end;
 

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

@@ -23,7 +23,7 @@ type
     constructor Create();
     destructor Destroy(); override;
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -52,7 +52,7 @@ begin
   BlockSize := 0;
 end;
 
-procedure TNullDigest.TransformBytes(a_data: THashLibByteArray;
+procedure TNullDigest.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 begin
   FbOut.Write(a_data[a_index], a_length);

+ 0 - 1
src/libraries/hashlib4pascal/HlpNullable.pas

@@ -1,7 +1,6 @@
 unit HlpNullable;
 
 {$I HashLib.inc}
-
 { /*  The "Nullable Types" found in this Unit were extracted from
   https://github.com/jpluimers/Conferences/blob/master/2009/DelphiLive.2009/Nullable-types-in-Delphi-Win32/Delphi-generic/src/NullableTypes.pas
   with some little modifications by me. */ }

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -39,7 +39,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TOneAtTime.TransformBytes(a_data: THashLibByteArray;
+procedure TOneAtTime.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

+ 4 - 4
src/libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas

@@ -48,8 +48,8 @@ type
 
   public
 
-    constructor Create(a_underlyingHash: IHash;
-      a_password, a_salt: THashLibByteArray; a_iterations: UInt32);
+    constructor Create(const a_underlyingHash: IHash;
+      const a_password, a_salt: THashLibByteArray; a_iterations: UInt32);
 
     /// <summary>
     /// Returns the pseudo-random bytes for this object.
@@ -69,8 +69,8 @@ uses
 
 { TPBKDF2_HMACNotBuildInAdapter }
 
-constructor TPBKDF2_HMACNotBuildInAdapter.Create(a_underlyingHash: IHash;
-  a_password, a_salt: THashLibByteArray; a_iterations: UInt32);
+constructor TPBKDF2_HMACNotBuildInAdapter.Create(const a_underlyingHash: IHash;
+  const a_password, a_salt: THashLibByteArray; a_iterations: UInt32);
 begin
   Inherited Create();
   FHash := a_underlyingHash;

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

@@ -27,7 +27,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -46,7 +46,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TPJW.TransformBytes(a_data: THashLibByteArray;
+procedure TPJW.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -23,7 +23,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -43,7 +43,7 @@ begin
   Fm_a := 63689;
 end;
 
-procedure TRS.TransformBytes(a_data: THashLibByteArray;
+procedure TRS.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -21,7 +21,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -40,7 +40,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TRotating.TransformBytes(a_data: THashLibByteArray;
+procedure TRotating.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -39,7 +39,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TSDBM.TransformBytes(a_data: THashLibByteArray;
+procedure TSDBM.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

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

@@ -20,7 +20,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
   end;
@@ -39,7 +39,7 @@ begin
   Fm_hash := 0;
 end;
 
-procedure TShiftAndXor.TransformBytes(a_data: THashLibByteArray;
+procedure TShiftAndXor.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i: Int32;

+ 4 - 4
src/libraries/hashlib4pascal/HlpSipHash.pas

@@ -52,13 +52,13 @@ type
 
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray;
-    procedure SetKey(value: THashLibByteArray);
+    procedure SetKey(const value: THashLibByteArray);
 
   public
     constructor Create(a_compression_rounds: Int32 = 2;
       a_finalization_rounds: Int32 = 4);
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal: IHashResult; override;
     property KeyLength: TNullableInteger read GetKeyLength;
@@ -264,7 +264,7 @@ begin
 
 end;
 
-procedure TSipHash.SetKey(value: THashLibByteArray);
+procedure TSipHash.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -283,7 +283,7 @@ begin
   end;
 end;
 
-procedure TSipHash.TransformBytes(a_data: THashLibByteArray;
+procedure TSipHash.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   i, &length, iter, offset: Int32;

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

@@ -40,7 +40,7 @@ type
 
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
   type
 
@@ -60,7 +60,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
     property KeyLength: TNullableInteger read GetKeyLength;
@@ -102,7 +102,7 @@ begin
 
 end;
 
-procedure TXXHash32.SetKey(value: THashLibByteArray);
+procedure TXXHash32.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -117,7 +117,7 @@ begin
   end;
 end;
 
-procedure TXXHash32.TransformBytes(a_data: THashLibByteArray;
+procedure TXXHash32.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   v1, v2, v3, v4: UInt32;

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

@@ -48,7 +48,7 @@ type
 {$ENDIF FPC}
     function GetKeyLength(): TNullableInteger;
     function GetKey: THashLibByteArray; inline;
-    procedure SetKey(value: THashLibByteArray); inline;
+    procedure SetKey(const value: THashLibByteArray); inline;
 
   type
 
@@ -68,7 +68,7 @@ type
   public
     constructor Create();
     procedure Initialize(); override;
-    procedure TransformBytes(a_data: THashLibByteArray;
+    procedure TransformBytes(const a_data: THashLibByteArray;
       a_index, a_length: Int32); override;
     function TransformFinal(): IHashResult; override;
     property KeyLength: TNullableInteger read GetKeyLength;
@@ -110,7 +110,7 @@ begin
 
 end;
 
-procedure TXXHash64.SetKey(value: THashLibByteArray);
+procedure TXXHash64.SetKey(const value: THashLibByteArray);
 begin
   if (value = Nil) then
   begin
@@ -126,7 +126,7 @@ begin
   end;
 end;
 
-procedure TXXHash64.TransformBytes(a_data: THashLibByteArray;
+procedure TXXHash64.TransformBytes(const a_data: THashLibByteArray;
   a_index, a_length: Int32);
 var
   v1, v2, v3, v4: UInt64;