IdTestHMACSHA1.pas 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. unit IdTestHMACSHA1;
  2. interface
  3. uses
  4. IdHMACSHA1, IdSys, IdObjs, IdGlobal;
  5. type
  6. TIdTestHMACSHA1 = class(TIdPersistent)
  7. private
  8. FHash: TIdHMACSHA1;
  9. function GenerateByteArray(AValue: Byte; ACount: Integer) : TIdBytes;
  10. public
  11. constructor Create; virtual;
  12. destructor Destroy; override;
  13. published
  14. procedure TestIETF1;
  15. procedure TestIETF2;
  16. procedure TestIETF3;
  17. procedure TestIETF4;
  18. procedure TestIETF5;
  19. procedure TestIETF6;
  20. procedure TestIETF7;
  21. end;
  22. implementation
  23. { TIdTestHMACSHA1 }
  24. constructor TIdTestHMACSHA1.Create;
  25. begin
  26. inherited;
  27. FHash := TIdHMACSHA1.Create;
  28. end;
  29. destructor TIdTestHMACSHA1.Destroy;
  30. begin
  31. Sys.FreeAndNil(FHash);
  32. inherited;
  33. end;
  34. function TIdTestHMACSHA1.GenerateByteArray(AValue: Byte;
  35. ACount: Integer): TIdBytes;
  36. var
  37. I: Integer;
  38. TempBuffer: TIdBytes;
  39. begin
  40. SetLength(TempBuffer, ACount);
  41. for I := 0 to ACount - 1 do
  42. begin
  43. TempBuffer[I] := AValue;
  44. end;
  45. Result := TempBuffer;
  46. SetLength(TempBuffer, 0);
  47. end;
  48. procedure TIdTestHMACSHA1.TestIETF2;
  49. begin
  50. FHash.Key := ToBytes('Jefe');
  51. Assert(Sys.LowerCase(ToHex(FHash.HashValue(ToBytes('what do ya want for nothing?')))) = 'effcdf6ae5eb2fa2d27416d5f184df9c259a7c79');
  52. end;
  53. procedure TIdTestHMACSHA1.TestIETF3;
  54. var
  55. TempBuf: TIdBytes;
  56. begin
  57. FHash.Key := GenerateByteArray($AA, 20);
  58. TempBuf := GenerateByteArray($DD, 50);
  59. Assert(Sys.LowerCase(ToHex(FHash.HashValue(TempBuf))) = '125d7342b9ac11cd91a39af48aa17b4f63f175d3');
  60. end;
  61. procedure TIdTestHMACSHA1.TestIETF1;
  62. begin
  63. FHash.Key := GenerateByteArray($0B, 20);
  64. Assert(Sys.LowerCase(ToHex(FHash.HashValue(ToBytes('Hi There')))) = 'b617318655057264e28bc0b6fb378c8ef146be00');
  65. end;
  66. procedure TIdTestHMACSHA1.TestIETF6;
  67. begin
  68. FHash.Key := GenerateByteArray($AA, 80);
  69. Assert(Sys.LowerCase(ToHex(FHash.HashValue(ToBytes('Test Using Larger Than Block-Size Key - Hash Key First')))) = 'aa4ae5e15272d00e95705637ce8a3b55ed402112');
  70. end;
  71. procedure TIdTestHMACSHA1.TestIETF7;
  72. var
  73. FData: TIdBytes;
  74. begin
  75. FHash.Key := GenerateByteArray($AA, 80);
  76. FData := ToBytes('Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data');
  77. Assert(Sys.LowerCase(ToHex(FHash.HashValue(FData))) = 'e8e99d0f45237d786d6bbaa7965c7808bbff1a91');
  78. end;
  79. procedure TIdTestHMACSHA1.TestIETF4;
  80. var
  81. LByteArray: TIdBytes;
  82. begin
  83. SetLength(LByteArray, 25);
  84. LByteArray[0] := $01;
  85. LByteArray[1] := $02;
  86. LByteArray[2] := $03;
  87. LByteArray[3] := $04;
  88. LByteArray[4] := $05;
  89. LByteArray[5] := $06;
  90. LByteArray[6] := $07;
  91. LByteArray[7] := $08;
  92. LByteArray[8] := $09;
  93. LByteArray[9] := $0A;
  94. LByteArray[10] := $0B;
  95. LByteArray[11] := $0C;
  96. LByteArray[12] := $0D;
  97. LByteArray[13] := $0E;
  98. LByteArray[14] := $0F;
  99. LByteArray[15] := $10;
  100. LByteArray[16] := $11;
  101. LByteArray[17] := $12;
  102. LByteArray[18] := $13;
  103. LByteArray[19] := $14;
  104. LByteArray[20] := $15;
  105. LByteArray[21] := $16;
  106. LByteArray[22] := $17;
  107. LByteArray[23] := $18;
  108. LByteArray[24] := $19;
  109. FHash.Key := LByteArray;
  110. Assert(Sys.LowerCase(ToHex(FHash.HashValue(GenerateByteArray($CD, 50)))) = '4c9007f4026250c6bc8414f9bf50c86c2d7235da');
  111. end;
  112. procedure TIdTestHMACSHA1.TestIETF5;
  113. var
  114. LByteArray: TIdBytes;
  115. begin
  116. FHash.Key := GenerateByteArray($0C, 20);
  117. LByteArray := ToBytes('Test With Truncation');
  118. LByteArray := FHash.HashValue(LByteArray);
  119. Assert(Sys.LowerCase(ToHex(LByteArray)) = '4c1a03424b55e07fe7f27be1d58bb9324a9a5a04');
  120. LByteArray := ToBytes('Test With Truncation');
  121. LByteArray := FHash.HashValue(LByteArray, 12);
  122. Assert(Sys.LowerCase(ToHex(LByteArray)) = '4c1a03424b55e07fe7f27be1');
  123. end;
  124. end.