HlpNullDigest.pas 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. unit HlpNullDigest;
  2. {$I HashLib.inc}
  3. interface
  4. uses
  5. Classes,
  6. SysUtils,
  7. HlpHashLibTypes,
  8. HlpHash,
  9. HlpIHash,
  10. HlpIHashInfo,
  11. HlpHashResult,
  12. HlpIHashResult;
  13. type
  14. TNullDigest = class sealed(THash, IBlockHash, ITransformBlock)
  15. strict private
  16. var
  17. FbOut: TMemoryStream;
  18. public
  19. constructor Create();
  20. destructor Destroy(); override;
  21. procedure Initialize(); override;
  22. procedure TransformBytes(const a_data: THashLibByteArray;
  23. a_index, a_length: Int32); override;
  24. function TransformFinal(): IHashResult; override;
  25. function Clone(): IHash; override;
  26. end;
  27. implementation
  28. { TNullDigest }
  29. function TNullDigest.Clone(): IHash;
  30. var
  31. HashInstance: TNullDigest;
  32. begin
  33. HashInstance := TNullDigest.Create();
  34. FbOut.Position := 0;
  35. HashInstance.FbOut.CopyFrom(FbOut, FbOut.Size);
  36. result := HashInstance as IHash;
  37. result.BufferSize := BufferSize;
  38. end;
  39. constructor TNullDigest.Create;
  40. begin
  41. Inherited Create(-1, -1); // Dummy State
  42. FbOut := TMemoryStream.Create();
  43. end;
  44. destructor TNullDigest.Destroy;
  45. begin
  46. FbOut.Free;
  47. inherited Destroy;
  48. end;
  49. procedure TNullDigest.Initialize;
  50. begin
  51. FbOut.Position := 0;
  52. FbOut.Size := 0;
  53. HashSize := 0;
  54. BlockSize := 0;
  55. end;
  56. procedure TNullDigest.TransformBytes(const a_data: THashLibByteArray;
  57. a_index, a_length: Int32);
  58. begin
  59. FbOut.Write(a_data[a_index], a_length);
  60. HashSize := Int32(FbOut.Size);
  61. end;
  62. function TNullDigest.TransformFinal: IHashResult;
  63. var
  64. res: THashLibByteArray;
  65. begin
  66. FbOut.Position := 0;
  67. System.SetLength(res, FbOut.Size);
  68. FbOut.Read(res[0], FbOut.Size);
  69. result := THashResult.Create(res);
  70. Initialize();
  71. end;
  72. end.