X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/85ef2ce64f0cc31a063fccea69fdcc7281d51548..HEAD:/fastmd5.pas?ds=inline

diff --git a/fastmd5.pas b/fastmd5.pas
index f0481a9..ad19876 100644
--- a/fastmd5.pas
+++ b/fastmd5.pas
@@ -8,7 +8,7 @@ unit fastmd5;
 {
 pascal implementation of MD5
 
-written by Bas Steendijk - steendijk@xs4all.nl
+written by Bas Steendijk
 
 based on RFC1321 - The MD5 Message-Digest Algorithm
 
@@ -39,7 +39,7 @@ type
 {$i uint32.inc}
 
 type
-  dvar=array[0..0] of byte;
+  dvar=array[0..65535] of byte;
   Tmd5state=record
     buf:array[0..63] of byte;
     H:array[0..3] of uint32;
@@ -55,13 +55,15 @@ procedure md5finish(var state:tmd5state;var result);
 
 procedure getmd5(const data;len:longint;var result);
 
-function md5tostr(const md5:tmd5):string;
+function md5tostr(const md5:tmd5):ansistring;
+
+function md5selftest:boolean;
 
 implementation
 
-function inttohex(val,bits:integer):string;
+function inttohex(val,bits:integer):ansistring;
 const
-  hexchar:array[0..15] of char='0123456789abcdef';
+  hexchar:array[0..15] of ansichar='0123456789abcdef';
 begin
   inttohex := hexchar[val shr 4]+hexchar[val and $f];
 end;
@@ -211,7 +213,7 @@ begin
   b := state.msglen and 63;
 
   inc(state.msglen,len);
-  while (state.msglen > $20000000) do begin
+  while (state.msglen >= $20000000) do begin
     dec(state.msglen,$20000000);
     inc(state.msglenhi);
   end;
@@ -284,14 +286,28 @@ begin
   md5finish(t,result);
 end;
 
-function md5tostr(const md5:tmd5):string;
+function md5tostr(const md5:tmd5):ansistring;
 var
   a:integer;
-  s:string;
+  s:ansistring;
 begin
   s := '';
   for a := 0 to 15 do s := s + inttohex(md5[a],2);
   md5tostr := s;
 end;
 
+function md5selftest;
+const
+  teststring:ansistring='The quick brown fox jumps over the lazy dog';
+  testresult:array[0..15] of byte=($9e,$10,$7d,$9d,$37,$2b,$b6,$82,$6b,$d8,$1d,$35,$42,$a4,$19,$d6);
+var
+  h:tmd5;
+  a:integer;
+begin
+  getmd5(teststring[1],length(teststring),h);
+  result := true;
+  for a := 0 to 15 do if h[a] <> ord(testresult[a]) then result := false;
+end;
+
+
 end.