Egal ob ich Tiger.Rounds := 3; oder Tiger.Rounds := 4; setze, das Ergebnis ist bei mir immer
cfded0718598bca5dd9ebde4152bca4c28d24f67762a8816
Bringt mich jetzt also zu der Gretchenfrage: Was mache ich falsch?
Vielleicht solltet Ihr mal Eure Version abgleichen. Mit
DEC 5.2 dann ich Deine Beobachtung reproduzieren. Wenn man erst einmal den Assemblercode für Tiger auschaltet, sehe ich im Debugger
Delphi-Quellcode:
class function TDECHash.CalcBuffer(const Buffer; BufferSize: Integer; Format: TDECFormatClass): Binary;
begin
with Create do
try
Init;
Calc(Buffer, BufferSize);
Done;
Result := DigestStr(Format);
finally
Free;
end;
end;
procedure THash_Tiger.DoInit;
begin
SetRounds(FRounds);
if FPaddingByte = 0 then FPaddingByte := $01;
FDigest[0] := $89ABCDEF;
FDigest[1] := $01234567;
FDigest[2] := $76543210;
FDigest[3] := $FEDCBA98;
FDigest[4] := $C3B2E187;
FDigest[5] := $F096A5B4;
end;
procedure THash_Tiger.SetRounds(Value: Integer);
begin
//Hier is Value=0 und deshalb wird FRounds := 3 gesetzt
if (Value < 3) or (Value > 32) then Value := 3;
FRounds := Value;
end;
Keine Ahnung, warum Value=0 ist, ist halt OO
Writeln(Tiger.Rounds) gibt immer den richtigen gesetzten Wert. Aber vielleicht kann jemand mit OO-Erfahrung sofort erkennen, wo daß Problem liegt.