AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DEC Design Frage (SHA3)

Ein Thema von TurboMagic · begonnen am 12. Mai 2021 · letzter Beitrag vom 22. Mai 2021
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.023 Beiträge
 
Delphi 12 Athens
 
#1

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 13:12

Zitat:
Delphi-Quellcode:
for var i := 1 to 200 do
      s := s + #$A3;
Joar, für den Test wäre es bestimmt besser, hier nicht mit dem Selben, sondern mit unterschiedlichen/gemischten Zeichen zu arbeiten. (s := s + Char(i + 35); )
Sag' das Mal dem NIST, die haben diesen dusseligen Testvektor
so definiert...

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#2

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 13:15
Na das ist ja blöd. So bekommt man doch nicht mit, wenn man irgendwo 'nen Offset falsch/vergessen hat.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
771 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 14:26
Nur für himitsu .

Delphi-Quellcode:
function min(const a,b : integer):integer;inline;
begin
  if a<b then Result := a else Result := b;
end;

procedure THash_SHA3Base.Calc(const Data; DataSize: Integer);
var prorunde, absorbiere_bytes : integer;
    gelesen : integer;
    p : PByte;

begin
  // due to the way the inherited calc is constructed it must not be called here!
  if (DataSize > 0) then
  begin
    p := Pointer(@Data);
    gelesen := 0;
    prorunde := maxint div 8;
    while ( gelesen < DataSize ) do
    begin
      absorbiere_bytes := min( DataSize-gelesen, prorunde );
      Absorb( @p[gelesen], absorbiere_bytes*8);
      inc( gelesen, absorbiere_bytes );
    end;
  end
  else
    FinalStep;
end;
Michael Gasser
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.023 Beiträge
 
Delphi 12 Athens
 
#4

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 17:30
Na das ist ja blöd. So bekommt man doch nicht mit, wenn man irgendwo 'nen Offset falsch/vergessen hat.
Ich sag' ja, du sollst denen Sagen, dass Sie Mist publizieren.
Alle Testvektoren (zumindest die für 1600 Bit, die anderen aber
glaube ich auch) aller SHA3 Varianten sind so von denen publiziert.

Ach ja, die neue SHA3 Umsetzung hat lt. Michael noch einen Bug.
Der schlägt nur unter gewissen Randbedingungen zu.
Den beseitige ich später.

"Dieser Bug tritt auf, wenn für die Länge t der Nachricht N gilt
t mod MaxRoundSize liegt in [1...BlockSize-1]."

Falls jemand einen Testvektor zur Hand hat würde ich den in die
Unittests einbauen.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
771 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 17:51
Mein Testvektor.

Delphi-Quellcode:
var
  s : RawByteString;
...
   for var i := 1 to 10 do
      s := s + 'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823';
   s := s + 'TurboMagic';
// Rechnen
    writeln( s = 'f7fc914c8fe4827d866b02df2459840260f4adb0db4deb9fa661756c' );
Diese Seiten könnten helfen, falls jemand hilft beim Überprüfen deiner DEC:
https://emn178.github.io/online-tools/sha3_224.html
https://md5calc.com/hash
https://codebeautify.org/sha3-224-hash-generator


Am besten holst du dir eines der unter #2 gelinkten Pakete:
https://keccak.team/software.html

Dann kannst du automatisiert Hashes erzeugen und mit deiner DEC gegenchecken lassen.
Michael Gasser
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.023 Beiträge
 
Delphi 12 Athens
 
#6

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 19:39
Seltsam.
Habe den Code jetzt korrigiert, die bisherigen Unittests laufen auch sauber durch.
Sieht jetzt so aus:

Delphi-Quellcode:
procedure THash_SHA3Base.Calc(const Data; DataSize: Integer);
var
  DataPtr : PByte;
  RoundSize : UInt32;
const
  // Maximum number of bytes one can process in one round
  MaxRoundSize = MaxInt div 8;
begin
  // due to the way the inherited calc is constructed it must not be called here!
  if (DataSize > 0) then
  begin
    DataPtr := PByte(@Data);

    while (UInt32(DataSize) > 0) do
    begin
      RoundSize := DataSize;
      if (RoundSize > MaxRoundSize) then
        RoundSize := MaxRoundSize;

      Absorb(DataPtr, RoundSize * 8);
      Dec(DataSize, RoundSize);
      Inc(DataPtr, RoundSize);
    end;
  end
  else
    FinalStep;
end;
Nur, dein neuer Testvektor liefert ein anderes Ergebnis als das von dir gepostete.
Hier der AUszug aus der SHA3_224.SetUp Methode mit dem neuen Vektor. Der Wert für
ExpectedOutputUTFStrTest stimmt nicht, solange aber schon für ExpectedOutput was
falsches raus kommt brauche ich den noch nicht anzupassen.

Delphi-Quellcode:
  lDataRow := FTestData.AddRow;
  lDataRow.ExpectedOutput := 'f7fc914c8fe4827d866b02df2459840260f4adb0db4deb9fa661756c';
  lDataRow.ExpectedOutputUTFStrTest := '0f1ad8cd5a85fe68319b67427e1f0b685498bc246a81a1f595c89e4e';
  lDataRow.AddInputVector(RawByteString('e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823' +
                                        'TurboMagic'));
Meldung von DUnit:
"TestCalcRawByteString: ETestFailure
at $006D7C6D
Index: 3 - expected: <f7fc914c8fe4827d866b02df2459840260f4adb0db4deb9fa 661756c>
but was: <f912f9fcba30ec218d9fc4b682a5ac3457635be038d08a8af 5f44241>"

Was läuft da falsch?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.023 Beiträge
 
Delphi 12 Athens
 
#7

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 20:18
Im Entwicklungszweig ist jetzt übrigens (das Unit Test Problem besteht weiterhin) der Start
einer neuen Zwischenbasisklasse für bitweise Hashes.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
771 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 20:42
Seltsam.
Habe den Code jetzt korrigiert, die bisherigen Unittests laufen auch sauber durch.
Sieht jetzt so aus:

Meldung von DUnit:
"TestCalcRawByteString: ETestFailure
at $006D7C6D
Index: 3 - expected: <f7fc914c8fe4827d866b02df2459840260f4adb0db4deb9fa 661756c>
but was: <f912f9fcba30ec218d9fc4b682a5ac3457635be038d08a8af 5f44241>"

Was läuft da falsch?

Grüße
TurboMagic
Sorry TM..

Du fragst, was falsch läuft... ? Ich laufe falsch. Ich sollte mehr schlafen und weniger posten - oder wenn doch, dann nur vollständigen Code und nicht Auszüge.

Ich habe deine neuste Version gerade jetzt geladen. Auch meine Testnachricht wird von deiner Funktion korrekt "gehasht".
(Ich sehe gerade, dass in der soeben heruntergeladenen DEC von github immer noch die alte procedure THash_SHA3Base.Calc() drin ist. Hab's soeben mit deiner hier geposteten laufen lassen - auch ok.)

Das s := s+s+s ging verloren. So sieht's aus:

Delphi-Quellcode:
uses
  System.SysUtils,
  DECFormat,
  DECHash;

var
  s : RawByteString;
  WE : THash_SHA3_224;
begin
  WE := THash_SHA3_224.Create;
  try
    WriteLn('SHA3 224 Test');
    s := '';

   for var i := 1 to 10 do
      s := s + 'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823';
   s := s + 'TurboMagic';
   s := s + s + s;

   writeln( length(s).ToString );
   writeln( s );
    s := WE.CalcString(s, TFormat_HexL);
    WriteLn(s);
    writeln( s = 'f7fc914c8fe4827d866b02df2459840260f4adb0db4deb9fa661756c' );
  finally
    WE.Free;
  end;

  ReadLn;
Michael Gasser

Geändert von Michael II (14. Mai 2021 um 20:56 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.023 Beiträge
 
Delphi 12 Athens
 
#9

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 21:21
Danke!
Habe das übernommen und jetzt passt das!

Meine Änderungen sind übrigens im Entwicklugnszweig.

und ja: richtig Schlafen hilft oft!

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz