Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen (https://www.delphipraxis.net/206559-hash-mit-wolfgang-erhardts-bibliotheken-zum-laufen-bekommen.html)

TurboMagic 6. Jan 2021 08:44

Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
Hallo,

ich habe vor ein paar Tagen begonnen die SHA3 Algorithmenfamilie unter
Verwendung des Codes von Wolfgang Erhardt's Bibliotheken zu DEC hinzuzufügen.

Jetzt ist sein Code halt gar nicht objektorientiert und ich kenne den Algorithmus
nur ungenügend etc.
Den Code hab' ich mal soweit mit kleineren Anpassungen (Formatierung, Objektorientierter
und Änderung von TP Datentypen in Delphi Datentypen) portiert, nur schlägt schon der
erste Unit Test fehl. Es kommt ein anderes Ergebnis raus.

Daher würde ich gerne parallel meinen Code und seine Bibliothek debuggen können.
Als ich neulich damit anfing, konnte ich sein Projekt aber nicht compilieren.
Dass ich in der Std.inc Include Datei (die gibt's da auch mehrfach mit leicht
unterschiedlicher Größe Yuck!) die aktuelle Delphi Version nachrüsten muss ok,
aber dass er keine Units findet auch wenn ich die Ordner wo diese drin sind zum
Such- und Bibliothekspfad hinzufüge?

=> Was muss ich alles tun um sein Hash-Demo Programm bzw. den Selbsttest den er drin hat
zum Laufen zu bekommen? Eine wirkliche dafür hilfreiche Doku hab' ich auch nicht gefunden.

Die Quelle von der ich alles bezogen habe ist diese:
https://github.com/chadilukito/www.wolfgang-ehrhardt.de

Grüße
TurboMagic

Klaus01 6. Jan 2021 10:11

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
.. die Datei t_hmsha3.pas nach t_hmsha3.dpr umbenannt.
Als std.inc -> {$i ..\..\misc\util\std.inc}

Suchpfad: Pfad zu \www.wolfgang-ehrhardt.de\src\crc-hash\crc_hash
Im Mem_Util zwei Zeilen (239, 291) auskommentiert.

Code:
HMAC-SHA3 tests -  (c) 2015-2016 W. Ehrhardt
Test case 1:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 2:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 3:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 4:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 5:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 6:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 6a:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 7:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 7a:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
Test case 8:
  HMAC-SHA3-224: TRUE
  HMAC-SHA3-256: TRUE
  HMAC-SHA3-384: TRUE
  HMAC-SHA3-512: TRUE
compiliert und läuft
Grüße
Klaus

TurboMagic 6. Jan 2021 10:26

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
Danke!
Werde ich in ein paar Minuten testen.

EdAdvokat 6. Jan 2021 15:12

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
zum Thema Hash SHA-3_512 habe ich mit Bezug auf W. Ehrhard nachfolgenden Beitrag gefunden:
https://www.delphipraxis.net/194851-...-ehrhardt.html
Das Konsolenprogramm läßt sich compilieren.
Delphi-Quellcode:
program t_dp_ex;
uses
  //system.hash,
  system.sysutils,
  btypes,
  mem_util,
  hash,
  sha3_512;

{$i std.inc}

{$ifdef APPCONS}
  {$apptype console}
{$endif}

{-----------------------------------------}
function CreateHash(aString:string):string;
var
  Context : THashContext;
  Digist : TSHA3_512Digest;
  //bytes : Array of Byte;
  size : Integer;
  Bytes : TBytes;

begin
  SHA3_512Init(Context);
  size := aString.Length * SizeOf(Char);
  Bytes := TEncoding.Default.GetBytes(aString);
  SHA3_512Update(Context,bytes,size);
  SHA3_512Final(Context,Digist);
  result := Base64Str(@Digist,sizeof(Digist));
end;

begin
  writeln(CreateHash('Passwort1234567890'));
  Readln;

TurboMagic 6. Jan 2021 21:07

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
Danke, habe es jetzt soweit am laufen, dass ich
damit arbeiten kann.

SHA3 Umsetzung in DEC wird aber noch etwas dauern.
Die Tests werden noch nicht bestanden.

EdAdvokat 7. Jan 2021 13:33

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
schau doch auch mal bei den cn-Packs vorbei (Examples\Crypt). Dort wird u. a. auch mit SHA3_224, SHA3_256, SHA3_384 und SHA3_512 operiert.

EdAdvokat 7. Jan 2021 16:50

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe mal eine kleine Demo für die Hash-SHA3_224 Funktion erstellt. Sie enthält sowohl die Möglichkeit der Verarbeitung von Dateien für einen HashS SHA3_224 als auch die Möglichkeit der Anwendung eines HMAC (Authentifizierungscode für verschlüsselte Hash-Nachrichten oder Hash-basierter Nachrichtenauthentifizierungscode).
Die anderen Varianten des SHA3_224...512 sind daraus leicht ableitbar.

TurboMagic 7. Jan 2021 17:40

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
Hallo,

tja, cn pack wer' ich mir wohl auch anschauen müssen.
Denn der SHA3 und auch wie er bei Wolfgang Erhardt umgesetzt ist (der kann aber evtl.
gar nicht anders) sind doch etwas sperrig. Ich komme da nur sehr zäh vorwärts und
muss außerdem die für die Hashes benutzte Unit Test Logik erweitern, die hat aber ein
anderer Mitstreiter mal kräftig "Interfacifiziert" und da muss ich erstmal durchblicken
wo ich da ansetzen muss/kann...

Mal gespannt, ob cn pack strukturell da besser zur DEC Architektur passt.
z.B. hab' ich gerade das Problem, dass ich beim SHA3 224 eine Blockgröße von 144 Byte
definiert habe und die Calc Routine da erstmal nur Blöcke mit mind. 144 Byte verarbeiten
will. Geht aber nicht, wenn der zu hashende String nur 3 Byte lang ist...

W.E. hat als längsten Teststring einen 200 Byte langen benutzt (zumindest im von mir
genutzten Programm, welches nicht das HMAC ist sondern nur SHA3) und multipliziert intern
mal die Länge mit 8. Ich hab' noch nicht nachgeschaut, wie er mit seiner Update Funktion
dann wirklich größere Datenmengen im MB/GB Bereich verarbeiten will...

Liege ich mit meiner Blockgröße von 144 Byte für den SHA3-224 evtl. falsch?
Wie wäre die dann richtig?

Grüße
TurboMagic

EdAdvokat 7. Jan 2021 18:52

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
ich glaube, da liegst du richtig mit 144 byte:
Delphi-Quellcode:
type
  TSHA3GeneralDigest = array[0..63] of Byte;

  TSHA3_224Digest = array[0..27] of Byte;

  TSHA3_256Digest = array[0..31] of Byte;

  TSHA3_384Digest = array[0..47] of Byte;

  TSHA3_512Digest = array[0..63] of Byte;

  TSHA3Context = packed record
    State: array[0..24] of Int64;
    Index: LongWord;
    DigestLen: LongWord;
    Round: LongWord;
    BlockLen: LongWord;
    Block: array[0..255] of Byte;
    Ipad: array[0..143] of Byte;     {!< HMAC: inner padding       }
    Opad: array[0..143] of Byte;     {!< HMAC: outer padding       }
  end;
an anderer Stelle:
Delphi-Quellcode:
SHA3_ROUNDS = 24;
  SHA3_STATE_LEN = 25;

  SHA3_224_OUTPUT_LENGTH_BYTE = 28;
  SHA3_256_OUTPUT_LENGTH_BYTE = 32;
  SHA3_384_OUTPUT_LENGTH_BYTE = 48;
  SHA3_512_OUTPUT_LENGTH_BYTE = 64;

  SHA3_224_BLOCK_SIZE_BYTE = 144;
  SHA3_256_BLOCK_SIZE_BYTE = 136;
  SHA3_384_BLOCK_SIZE_BYTE = 104;
  SHA3_512_BLOCK_SIZE_BYTE = 72;

  HMAC_SHA3_224_BLOCK_SIZE_BYTE = SHA3_224_BLOCK_SIZE_BYTE;
  HMAC_SHA3_256_BLOCK_SIZE_BYTE = SHA3_256_BLOCK_SIZE_BYTE;
  HMAC_SHA3_384_BLOCK_SIZE_BYTE = SHA3_384_BLOCK_SIZE_BYTE;
  HMAC_SHA3_512_BLOCK_SIZE_BYTE = SHA3_512_BLOCK_SIZE_BYTE;

  HMAC_SHA3_224_OUTPUT_LENGTH_BYTE = SHA3_224_OUTPUT_LENGTH_BYTE;
  HMAC_SHA3_256_OUTPUT_LENGTH_BYTE = SHA3_256_OUTPUT_LENGTH_BYTE;
  HMAC_SHA3_384_OUTPUT_LENGTH_BYTE = SHA3_384_OUTPUT_LENGTH_BYTE;
  HMAC_SHA3_512_OUTPUT_LENGTH_BYTE = SHA3_512_OUTPUT_LENGTH_BYTE;
Blöd ist nur, dass die Dateien leider nicht in engl. oder chinesisch vorliegen, sondern in einem mir unbekannten Format. Auch der Hinweis zur Übersetzung der Dateien
(TENU.BAT) ist nich wirklich hilfreich. Wenn es in chinesisch vorliegen würde, ginge es wirklich gut mit Deepl zu übersetzen - aber...
Die maßgebliche Datei cnSHA3.pas liegt der Demo bei. Nur die wird gebraucht.
Ich bin mal so kühn und empfehle eine Nachfrage bei den Autoren des CN-Packs (master At cnpack Dot org <> bzw. zjy At cnpack Dot org <>). Engisch sprechen die Jungs dort allemal.

mytbo 7. Jan 2021 21:17

AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
 
Ich weis nicht, ob euch die mORMot Crypto Unit bekannt ist. Dort findet sich zu SHA-3 unter anderem folgende Anmerkung:
Code:
  TSha3Algo = (SHA3_224, SHA3_256, SHA3_384, SHA3_512, SHAKE_128, SHAKE_256);
...
// - this implementation is based on Wolfgang Ehrhardt's and Eric Grange's,
// with our own manually optimized x64 assembly
Ist vielleicht einen Blick wert.

Bis bald...
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr.
Seite 1 von 2  1 2      

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