mdtest.pas 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. {
  2. This file is part of the Free Pascal packages.
  3. Copyright (c) 1999-2014 by the Free Pascal development team
  4. Tests MD2, MD4 and MD5 hashes.
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. program mdtest;
  12. {$mode objfpc}{$h+}
  13. uses
  14. SysUtils, md5;
  15. const
  16. Suite: array[1..7] of string = (
  17. '',
  18. 'a',
  19. 'abc',
  20. 'message digest',
  21. 'abcdefghijklmnopqrstuvwxyz',
  22. 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
  23. '12345678901234567890123456789012345678901234567890123456789012345678901234567890'
  24. );
  25. Results: array[TMDVersion, Low(Suite)..High(Suite)] of string = (
  26. // MD_VERSION_2
  27. ('8350e5a3e24c153df2275c9f80692773',
  28. '32ec01ec4a6dac72c0ab96fb34c0b5d1',
  29. 'da853b0d3f88d99b30283a69e6ded6bb',
  30. 'ab4f496bfb2a530b219ff33031fe06b0',
  31. '4e8ddff3650292ab5a4108c3aa47940b',
  32. 'da33def2a42df13975352846c30338cd',
  33. 'd5976f79d83d3a0dc9806c3c66f3efd8'),
  34. // MD_VERSION_4
  35. ('31d6cfe0d16ae931b73c59d7e0c089c0',
  36. 'bde52cb31de33e46245e05fbdbd6fb24',
  37. 'a448017aaf21d8525fc10ae87aa6729d',
  38. 'd9130a8164549fe818874806e1c7014b',
  39. 'd79e1c308aa5bbcdeea8ed63df412da9',
  40. '043f8582f241db351ce627e153e7f0e4',
  41. 'e33b4ddc9c38f2199c3e7b164fcc0536'),
  42. // MD_VERSION_5
  43. ('d41d8cd98f00b204e9800998ecf8427e',
  44. '0cc175b9c0f1b6a831c399e269772661',
  45. '900150983cd24fb0d6963f7d28e17f72',
  46. 'f96b697d7cb7938d525a2f31aaf161d0',
  47. 'c3fcd3d76192e4007dfb496cca67e13b',
  48. 'd174ab98d277d9f5a5611c2c9f419d9f',
  49. '57edf4a22be3c955ac49da2e2107b67a')
  50. );
  51. function performTest(const Ver: TMDVersion; const Verbose: boolean): boolean;
  52. // Runs test and returns success or failure
  53. var
  54. I: Integer;
  55. S: String;
  56. begin
  57. result := false;
  58. for I := Low(Suite) to High(Suite) do
  59. begin
  60. S := LowerCase(MDPrint(MDString(Suite[I], Ver)));
  61. if S = Results[Ver, I] then
  62. result := true;
  63. if Verbose then WriteLn(' "', Suite[I], '" = ', S);
  64. end;
  65. end;
  66. var
  67. i: integer;
  68. begin
  69. i:=0;
  70. Writeln('Executing RFC 1319 test suite ...');
  71. if performTest(MD_VERSION_2,true) then
  72. Write('RFC 1319 test suite passed ')
  73. else
  74. begin
  75. Write('RFC 1319 test suite failed ');
  76. i:=i or 1;
  77. end;
  78. Writeln;
  79. Writeln;
  80. Writeln('Executing RFC 1320 test suite ...');
  81. if performTest(MD_VERSION_4,true) then
  82. Write('RFC 1320 test suite passed ')
  83. else
  84. begin
  85. Write('RFC 1320 test suite failed ');
  86. i:=i or 2;
  87. end;
  88. Writeln;
  89. Writeln;
  90. Writeln('Executing RFC 1321 test suite ...');
  91. if performTest(MD_VERSION_5,true) then
  92. Write('RFC 1321 test suite passed ')
  93. else
  94. begin
  95. Write('RFC 1321 test suite failed ');
  96. i:=i or 4;
  97. end;
  98. Writeln;
  99. Writeln;
  100. halt(i); //halt with error code 0 if everything ok
  101. end.