Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   DEC Design Frage (SHA3) (https://www.delphipraxis.net/207894-dec-design-frage-sha3.html)

TurboMagic 14. Mai 2021 18:39

AW: DEC Design Frage (SHA3)
 
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

TurboMagic 14. Mai 2021 19:18

AW: DEC Design Frage (SHA3)
 
Im Entwicklungszweig ist jetzt übrigens (das Unit Test Problem besteht weiterhin) der Start
einer neuen Zwischenbasisklasse für bitweise Hashes.

Michael II 14. Mai 2021 19:42

AW: DEC Design Frage (SHA3)
 
Zitat:

Zitat von TurboMagic (Beitrag 1489467)
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;

TurboMagic 14. Mai 2021 20:21

AW: DEC Design Frage (SHA3)
 
Danke!
Habe das übernommen und jetzt passt das!

Meine Änderungen sind übrigens im Entwicklugnszweig.

und ja: richtig Schlafen hilft oft! ;-)

Grüße
TurboMagic

Michael II 15. Mai 2021 13:36

AW: DEC Design Frage (SHA3)
 
Punkto Speed.

Hast du dies hier mal angeschaut:

https://www.delphitools.info/2016/04...tation-kernel/

oder ist es vielleicht bereits eingebaut (?).

TurboMagic 15. Mai 2021 16:00

AW: DEC Design Frage (SHA3)
 
Hallo,

1. Ich habe jetzt bis auf einen Unit Test den ich mir noch anschauen muss
(Zeit läuft mal wieder weg) die bitweise Geschichte mal eingebaut.
Man muss dazu FinalBitLength auf die Bitzahl des letzten Byte setzen
und als Größe, falls ein solcher Parameter exisitiert,die Byteanzahl
inkl. des unvollständigen letzten Byte.

2. Zum Thema Geschwindigkeit: darum hab' ich mich noch kein bisschen
gekümmert. Zuerst muss mal die gerade in Arbeit befindliche Integration
funktionieren. Dann können wir zusammen auch das andere angehen.

3. Der bisherigen Integration fehlt auch noch die Umsetzung einiger
weiterer Testvektoren als Unittests. Das kommt schrittweise auch noch.

Grüße
TurboMagic

Michael II 15. Mai 2021 22:30

AW: DEC Design Frage (SHA3)
 
Wenn du richtig viel Speed willst, baust du dir eh SHA3-Hardware ;-). [Sehr wahrscheinlich gibt es viel schnellere, als jene, welche man im Netz findet. Falls jemand hier beim BND o.ä. arbeitet: Wie schnell sind eure Lösungen?]

Auf
https://blogs.embarcadero.com/powerf...s-development/

wird
https://github.com/Xor-el/HashLib4Pascal

Ich nehme mal an, dass du das nicht auch bist. Mit diesem Paket könntest du automatisiert Testvektoren durchrechnen lassen und mit deinen Werten vergleichen. (Viele Vektoren musst du ja nicht rechnen lassen.)

Der Download von Herrn Grange (siehe #25 - der mit dem schnellen Absorb) klappte heute nicht, die haben genau heute "maintenance".

Deine aktuelle SHA3 hat mehr Durchsatz als die oben verlinkte.

Die oben verlinkte SHA3_224 Throughput: 34.10 MB/s with Blocks of 64 KB
Deine: 52MB/s

SHA3_256 Throughput: 36.25 MB/s with Blocks of 64 KB
Deine: 52MB/s

SHA3_512 Throughput: 19.98 MB/s with Blocks of 64 KB
Deine: 28MB/s

himitsu 15. Mai 2021 23:28

AW: DEC Design Frage (SHA3)
 
DEC selber, das ursprüngliche wurde von "einem" schlauen Typen (negaH / Hagen Reddmann) privat entwickelt, der aber vor ganzen eine Weile mit Delphi aufhörte. :cry:
Und so weit ich weiß, waren seine Implementationen oft die Schnellsten, von einem Privat-Entwickler. (nur ein paar kommerzielle/staatliche professionelle Entwicklergruppen waren teilweise etwas schneller)

Michael II 16. Mai 2021 08:49

AW: DEC Design Frage (SHA3)
 
Zitat:

Zitat von himitsu (Beitrag 1489548)
DEC selber, das ursprüngliche wurde von "einem" schlauen Typen privat entwickelt, der aber vor eine Weile verstarb. :cry:
Und so weit ich weiß, waren seine Implementationen oft die Schnellsten, von einem Privat-Entwickler. (nur ein paar kommerzielle/staatliche professionelle Entwicklergruppen waren teilweise etwas schneller)

Ja ich weiss - ich sollte den Urheber* natürlich unbedingt auch erwähnen.
Der Link bei #25 führt zu einer Webseite (*Wolfgang Erhardts DEC wird erwähnt) mit Permutationscode von Eric Grange, welcher offenbar schneller ist als DECHash.THash_SHA3Base.KeccakPermutation(var state: TState_L);

Allgemein und nicht speziell für diesen Code: Kennst du Software, welche einfachen Code wie unter DECHash.THash_SHA3Base.KeccakPermutation(var state: TState_L); automatisch analysiert und punkto Speed optimieren kann? (abhängig von der Hardware-Umgebung, vom möglichen Input,...) Und schreib jetzt nicht Compiler ;-))

TurboMagic 16. Mai 2021 09:00

AW: DEC Design Frage (SHA3)
 
Hallo,

1. Der Benchmark bezieht sich auf diese hier, oder?
https://github.com/Xor-el/HashLib4Pascal

2. An der bin ich nicht beteiligt, die enthält aber ein paar Algorithmen (ich rede jetzt nicht
von den nicht kryptographischen) die in DEC noch fehlen. Aber eins nach dem anderen.

3. Der ursprüngliche Autor der DEC war Haagen Redmann. Ist der gestorben?
Der hatte irgendwann einfach kein Interesse mehr daran. Die DEC ging dan auf Assertor
(Frederik Winkelsdorf, Freelancer aber leider nicht mehr im Delphi Umfeld) über und
dann bin ich eingestiegen und habe nauch einiger Zeit der "Betreuung" meines Tuns durch
Frederik die DEC dann ganz übernommen, freue mich aber genre über weitere unterstützer,
da auch meine Zeit und Kenntnisse endlich sind.

4. Der Autor der eingebauten SHA3 Lösung war der tatsächlich gestorbene Wolfgang Erhardt.

So und ich mach mich jetzt an ein paar Formatierungsverbesserungen und in der SHA3Base
sind glaube ich auch noch ein paar Sachen public die eher private/protected sein sollten...

Grüße
TurboMagic


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:39 Uhr.
Seite 3 von 5     123 45      

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