CryptoTestHashes.Mod 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. MODULE CryptoTestHashes; (** AUTHOR "F.N."; PURPOSE "Hashes Test"; *)
  2. IMPORT
  3. Hashes := CryptoHashes, Utils := CryptoUtils, Kernel, Out := KernelLog;
  4. (* data: binary, exphash: hexadecimal *)
  5. PROCEDURE CheckHash( CONST modname, data, exphash: ARRAY OF CHAR );
  6. VAR
  7. temp: ARRAY 1024 OF CHAR;
  8. hash: ARRAY 128 OF CHAR;
  9. h: Hashes.Hash;
  10. BEGIN
  11. h := Hashes.NewHash( modname );
  12. h.Initialize;
  13. h.Update( data, 0, LEN( data )-1 );
  14. h.GetHash( hash, 0 );
  15. Out.Ln; Out.String( "************************************" );
  16. Out.Ln; Out.String( "Checking: " ); Out.String( h.name );
  17. Out.Ln; Out.String( "Value:" ); Out.Ln; Out.String( " '" ); Out.String( data ); Out.String( "'" );
  18. Out.Ln; Out.String( "Computed Hash:" ); Utils.PrintHex( hash, 0, h.size );
  19. Utils.Hex2Bin( exphash, 0, temp, 0, h.size );
  20. Out.Ln; Out.String( "Expected Hash:" ); Utils.PrintHex( temp, 0, h.size );
  21. END CheckHash;
  22. PROCEDURE MeasureTime( CONST modname: ARRAY OF CHAR );
  23. VAR
  24. c, i : LONGINT;
  25. milliTimer : Kernel.MilliTimer;
  26. buf: ARRAY 1024 OF CHAR;
  27. hash: ARRAY 1024 OF CHAR;
  28. h: Hashes.Hash;
  29. BEGIN
  30. h := Hashes.NewHash( modname );
  31. Out.Ln; Out.String( "************************************" );
  32. Out.Ln; Out.String( "Measuring: " ); Out.String( h.name ); Out.Ln;
  33. FOR i := 0 TO 999 DO buf[i] := 'a' END;
  34. Kernel.SetTimer(milliTimer, 0);
  35. FOR c := 1 TO 10 DO
  36. h.Initialize;
  37. FOR i := 1 TO 1000 DO h.Update( buf, 0, 1000 ) END;
  38. Out.Char( "." )
  39. END;
  40. h.GetHash( hash, 0 );
  41. Out.String( "hashed 10 MB in " ); Out.Int( Kernel.Elapsed(milliTimer), 0 ); Out.String( " msec" );
  42. Out.Ln;
  43. END MeasureTime;
  44. PROCEDURE TestMD5*;
  45. BEGIN
  46. CheckHash( "CryptoMD5", "", "D41D8CD98F00B204E9800998ECF8427E" );
  47. CheckHash( "CryptoMD5",
  48. "abc",
  49. "900150983CD24FB0D6963F7D28E17F72" );
  50. CheckHash( "CryptoMD5",
  51. "abcdefghijklmnopqrstuvwxyz",
  52. "C3FCD3D76192E4007DFB496CCA67E13B");
  53. MeasureTime( "CryptoMD5" );
  54. END TestMD5;
  55. PROCEDURE TestSHA1*;
  56. BEGIN
  57. CheckHash( "CryptoSHA1", "", "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709" );
  58. CheckHash( "CryptoSHA1", "abc", "A9993E364706816ABA3E25717850C26C9CD0D89D" );
  59. CheckHash( "CryptoSHA1",
  60. "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
  61. "84983E441C3BD26EBAAE4AA1F95129E5E54670F1");
  62. MeasureTime( "CryptoSHA1" );
  63. END TestSHA1;
  64. PROCEDURE TestSHA256*;
  65. BEGIN
  66. CheckHash( "CryptoSHA256",
  67. "abc",
  68. "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD" );
  69. CheckHash( "CryptoSHA256",
  70. "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
  71. "248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1" );
  72. MeasureTime( "CryptoSHA256" );
  73. END TestSHA256;
  74. PROCEDURE TestSHA3*;
  75. BEGIN
  76. CheckHash( "CryptoSHA3",
  77. "",
  78. "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a" );
  79. CheckHash( "CryptoSHA3",
  80. "abc",
  81. "3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532" );
  82. CheckHash( "CryptoSHA3",
  83. "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
  84. "41c0dba2a9d6240849100376a8235e2c82e1b9998a999e21db32dd97496d3376" );
  85. MeasureTime( "CryptoSHA3" );
  86. END TestSHA3;
  87. END CryptoTestHashes.
  88. SystemTools.Free
  89. CryptoTestHashes
  90. CryptoSHA3 CryptoKeccakSponge CryptoKeccakF1600
  91. CryptoMD5 CryptoSHA1 CryptoSHA256
  92. CryptoHashes
  93. ~
  94. CryptoTestHashes.TestMD5 ~
  95. CryptoTestHashes.TestSHA1 ~
  96. CryptoTestHashes.TestSHA256 ~
  97. CryptoTestHashes.TestSHA3 ~