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 2 von 5     12 34     Letzte »    
Michael II

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 11:02
Hallo TM

ich habe in der vergangenen Nacht deine DEC geladen, getestet und dann gesehen, dass in deiner Schleife der Data-Pointer nicht angepasst wird. absorb() liest deshalb immer die ersten Bytes der Nachricht und liefert falsche Resultate (ausser bei N=xxxxxxxxx.xxxxxxxxx, x=0..255)

Bei deinem Test mit der Nachricht for var i := 1 to 200 do s := s + #$A3; fällt das Problem nicht auf, da absorb() immer nur #$A3 liest. Dein absorb() in der Schleife las halt bei jedem Durchlauf die ersten Bytes anstatt korrekt der Reihe nach irgendwann alle.

So sollte es funktionieren (Code unten). Du oder irgendwer hier im Forum können das sicher schöner schreiben . V.a. aber nicht nur Englischer und so...

Ich habe hier unten im Code eine Variable prorunde eingebaut. Das war nur zum Testen der Funktionsweise von absorb(N,x). (Ein Kontentheoretiker hat uns mal während einer Woche besucht und jene mathematische Probleme aufgezählt, für welche 17 die Lösung ist. Wenn man also mal nicht weiter weiss, dann ist 17....).
absorb(N,x) ist so geschrieben, dass du für prorunde irgend einen positiven Wert <= maxint div 8 wählen kannst. Ein hoher Wert macht natürlich Sinn.

Delphi-Quellcode:
procedure THash_SHA3Base.Calc(const Data; DataSize: Integer);
var prorunde, absorb_byte : 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 := 17;
    while ( DataSize > 0 ) do
    begin
      absorb_byte := DataSize;
      if absorb_byte > prorunde then absorb_byte := prorunde;
      Absorb( @p[gelesen], absorb_byte*8);
      inc( gelesen, absorb_byte );
      dec( DataSize, absorb_byte );
    end;
  end
  else
    FinalStep;
end;
Ich habe die Funktion getestet mit drei SHA3-224 Onlinerechnern; scheint OK zu sein.
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 11: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).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 11: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 11:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DEC Design Frage (SHA3)

  Alt 14. Mai 2021, 11: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

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

AW: DEC Design Frage (SHA3)

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

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.071 Beiträge
 
Delphi 12 Athens
 
#17

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Michael II

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

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
2.942 Beiträge
 
Delphi 12 Athens
 
#19

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
760 Beiträge
 
Delphi 11 Alexandria
 
#20

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
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 01:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz