Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#7

AW: Frage zu DEC Hash "Tiger"

  Alt 21. Jun 2018, 18:30
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.
  Mit Zitat antworten Zitat