Browse Source

* fixed md2/md4/md5 for big endian systems (mdtest now passes on ppc)

git-svn-id: trunk@10750 -
Jonas Maebe 17 years ago
parent
commit
e9c91fbba1
1 changed files with 6 additions and 2 deletions
  1. 6 2
      packages/hash/src/md5.pp

+ 6 - 2
packages/hash/src/md5.pp

@@ -448,7 +448,11 @@ end;
 
 
 procedure MDFinal(var Context: TMDContext; var Digest: TMDDigest);
 procedure MDFinal(var Context: TMDContext; var Digest: TMDDigest);
 const
 const
+{$ifdef FPC_BIG_ENDIAN}
+  PADDING_MD45: array[0..15] of Cardinal = ($80000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+{$else FPC_BIG_ENDIAN}
   PADDING_MD45: array[0..15] of Cardinal = ($80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
   PADDING_MD45: array[0..15] of Cardinal = ($80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+{$endif FPC_BIG_ENDIAN}
 var
 var
   Length: QWord;
   Length: QWord;
   Pads: Cardinal;
   Pads: Cardinal;
@@ -468,7 +472,7 @@ begin
         MDUpdate(Context, PADDING_MD45, Pads);
         MDUpdate(Context, PADDING_MD45, Pads);
 
 
         // 3. Append length of the stream
         // 3. Append length of the stream
-        Invert(@Length, @Length, 8);
+        Length := NtoLE(Length);
         MDUpdate(Context, Length, 8);
         MDUpdate(Context, Length, 8);
 
 
         // 4. Invert state to digest
         // 4. Invert state to digest
@@ -478,7 +482,7 @@ begin
     MD_VERSION_2:
     MD_VERSION_2:
       begin
       begin
         Pads := 16 - Context.BufCnt;
         Pads := 16 - Context.BufCnt;
-        Length := Pads;
+        Length := NtoLE(QWord(Pads));
         while Pads > 0 do
         while Pads > 0 do
         begin
         begin
           MDUpdate(Context, Length, 1);
           MDUpdate(Context, Length, 1);