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
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 10:19
Zitat:
Delphi-Quellcode:
      absorb_bytes := DataSize;
      if absorb_bytes > prorunde then absorb_bytes := prorunde;
Also mathematisch ein
      absorb_bytes := Min(DataSize, {prorunde}BlockSize);


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); )
Aber nur um die Schleife zu ersetzen, Delphi-Referenz durchsuchenDupeString, Delphi-Referenz durchsuchenStringOfChar oder string.Create (Delphi-Referenz durchsuchenTStringHelper.Create).
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Mai 2021 um 10:26 Uhr)
  Mit Zitat antworten Zitat
Michael II

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 10:32
Zitat:
Delphi-Quellcode:
      absorb_bytes := DataSize;
      if absorb_bytes > prorunde then absorb_bytes := prorunde;
Also mathematisch ein
      absorb_bytes := Min(DataSize, {prorunde}BlockSize);

Genau.

Es ist und war mir voll bewusst, dass man eine min Funktion schreiben könnte (hatte ich sogar während dem Testen). Oder in DECHash die Unit Math einbinden kann. Ich bin kein Fan, von Funktionsaufrufen, wo's keine braucht. Wer hier mit Lesbarkeit argumentiert, muss sich eine Hirnbrille kaufen. Also besten Dank für deinen grandiosen Hinweis .

Blocksize (dein Code). Geht zwar auch (prorunde ist in [1 bis maxint div 8] frei wählbar, BlockSize hingegen ist in DECHash definiert und eine feste Grösse abhängig vom verwendeten Zustandsvektor (5 Worte zu l Bit (hier 6)) und von n (hier 224)).
Wenn du dir function THash_SHA3Base.Absorb(Data: Pointer; DatabitLen: Int32): Int32; anschaust ist BlockSize im Gegensatz zu meiner früheren Behauptung (als ich den Code noch nicht kannte) nicht Wert der Wahl.
Michael Gasser

Geändert von Michael II (14. Mai 2021 um 10:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 10:49
Keine Sorge, das ist eine Inline-Funktion, also der Compiler sollte den Aufruf entfernen.

System.Math.pas bindet auch kaum Code ein, außer einem SSE-Test und der SysUtils,
aber für die ordentliche Fehlerbehandlung sollte die SysUtils ja eh schon drin sein.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Mai 2021 um 10:51 Uhr)
  Mit Zitat antworten Zitat
Michael II

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 11:07
Jo... besten Dank. Ich deklariere - wenn ich auch mal kurze Hilfsfunktionen schreibe - auch inline, wo's sinnvoll ist.

Einen sonnigen Tag wünsche ich uns allen.
Michael Gasser
  Mit Zitat antworten Zitat
TurboMagic

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 12: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.501 Beiträge
 
Delphi 12 Athens
 
#6

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 12: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
776 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 13: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.091 Beiträge
 
Delphi 12 Athens
 
#8

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 16: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
776 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 16: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.091 Beiträge
 
Delphi 12 Athens
 
#10

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 18: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
Antwort Antwort
Seite 1 von 2  1 2      


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 02:50 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-2025 by Thomas Breitkreuz