![]() |
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: ![]() Grüße TurboMagic |
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 \ ![]() Im Mem_Util zwei Zeilen (239, 291) auskommentiert.
Code:
compiliert und läuft
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 Grüße Klaus |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
Danke!
Werde ich in ein paar Minuten testen. |
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:
![]() 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; |
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. |
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.
|
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. |
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 |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
ich glaube, da liegst du richtig mit 144 byte:
Delphi-Quellcode:
an anderer Stelle:
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;
Delphi-Quellcode:
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
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; (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. |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
Ich weis nicht, ob euch die
![]()
Code:
Ist vielleicht einen Blick wert.
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 Bis bald... Thomas |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
Bei der ganzen Diskussion frage ich mich wie man testet ob eine Implementation wirklich korrekt ist.
Gibt es da eine globale Instanz im Internet, ala W3C, wogegen man es checken sollte ? |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
.. es gibt öffentlich zugängliche Testverktoren z.B. von NIST ->
![]() Grüße Klaus |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
Aha, sehr interessant, dankesehr.
NIST also ... |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
für wirkliche hardcore-user eine Empfehlung: Vorlesungen von Prof. Paar von der Ruhr-Uni Bochum zum Thema Hash-Funktionen und darüberhinaus eine Vorlesungsreihe Kryptologie:
Delphi-Quellcode:
https://www.youtube.com/watch?v=evx8gptqoro
|
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
Zu den Tests: wenn ein solcher Algorithmus zum öffentlichen Standard wurde gibt's normalerweise
von der Standardorganisation Testdaten. Beim NIST vermutlich auch kostenlos, bei ISO müsste man sich vermutlich den Standard kaufen. Wenn irgendwelche Wissenschaftler aus dem akademischen Bereich einen solchen ALgorithmus entwickeln schreiben sie i.d.R. ein Paper darüber und das enthält dann i.d.R: auch Testdatenm, da sie ja wollen, dass auch andere Personen einen Blick auf ihren Algorithmus werfen um etwaige Sicherheitsprobleme zu finden. Anders dürfte es bei Patent geschützten Algorithmen aussehen, was aber bei Softwarealgorithmen ohne wirkliche gekoppelte "physikalische" Auswirkung zumindest in der EU eh' ein heikles Thema ist... Da wird der Entwickler evtl. keine Testdaten bereit stellen, es sei denn er hat den Algorithmus zwar patentieren lassen, erlaubt aber eine öffentliche Nutzung. |
AW: Hash mit Wolfgang Erhardt's Bibliotheken zum Laufen bekommen
Zitat:
Schmeh, K.: Kryptografie: Verfahren, Protokolle, Infrastrukturen. 6. Auflage, 2016 (knapp 1000 Seiten geballtes Wissen). z.B. hier: ![]() Viel Erfolg bei der Lektüre bzw. beim Studium! Gruß, Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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