Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: DEC: fehlerhafte Hashwerte unter C++

  Alt 13. Mai 2009, 08:02
Hi,

Zitat von Muetze1:
Das ist ja schonmal gut zu wissen, dass man das ganze mit dem nativen Code umschiffen kann. Ich verstehe aber wirklich nicht, wie der vom Delphi Compiler generierte Code - selbst wenn von Delphi Code aufgerufen - andere Ergebnisse bringt, nur weil ein anderer Linker das ganze zusammenpackt.
Ja, das ist mal wieder ein sehr merkwürdiges Verhalten - aber leider kein gänzlich neues Problem. Den Rest des Quotes lass ich mal unkommentiert und gehe gerne im persönlichen Gespräch drauf ein

Zitat von Muetze1:
Aber egal, darum geht es hier nicht. Vielen Dank schonmal für deine Erkenntnisse. Ich hatte zuvor noch keine Kenntnisse über die neue DEV v5.2, habe sie mir aber gerade mal geladen und were somit auch unseren DEC Stand mal updaten auf 5.2.
Siehst Du, hat auch was gutes

Zitat von Muetze1:
Ansonsten wäre vllt. ein Blick auf meinen weiteren Beitrag bezüglich der in der DEC enthaltenen LHSS Komprimierung (DEC: LHSS Komprimierung: Rückgabewerte unbrauchbar).
Schon getan.

Zitat von Muetze1:
es wäre besser sie bei den Stellen abzuschalten innerhalb der Lib, wo gewollt mit Überläufen gerechnet wird. Somit ist zum einen sichergestellt: Ja, wissen um den Überlauf und der ist gewollt hier und gleichzeitig würde er an anderen Stellen aussteigen, wo dies definitiv nicht gewollt wäre. Das wäre mal eine wirklich gute Erweiterung der DEC, falls du da nochmal eine DEC 5.3 planst ^^.
Das ist wirklich eine gute Anregung, gerade weil viele sich eben nicht so gut mit den Compileroptionen und deren begrenzten Reichweite auskennen. Ich nehm das mal in meine Liste auf. Wenn irgendwann sowieso eine Änderung ansteht, pack ich es mit rein.

Ich habe eben nochmal alle Hashes in C++ getestet: Diese funktionieren zu 100%, wenn der asm-Code deaktiviert wird. Die Overflow-Checks müssen dazu dann natürlich aus sein. Es liegt also wirklich am asm Code aus der DECHash.pas bzw. DECHash.inc - wo genau in den 3520 bzw. 28614 Zeilen ist mir im Moment auch nicht erklärbar.

Für alle anderen Leser: Als Bugfix also bei DEC 5.1 bzw. 5.2 & C++ Builder in der Datei DECHash.pas folgendes ändern:
Delphi-Quellcode:
type
  {all Hash Classes}
  THash_MD2 = class; {.$DEFINE THash_MD2_asm} // q&d fix c++
  THash_MD4 = class; {$DEFINE THash_MD4_asm}
  THash_MD5 = class; {$DEFINE THash_MD5_asm}
  THash_RipeMD128 = class; {$DEFINE THash_RipeMD128_asm}
  THash_RipeMD160 = class; {$DEFINE THash_RipeMD160_asm}
  THash_RipeMD256 = class; {$DEFINE THash_RipeMD256_asm}
  THash_RipeMD320 = class; {$DEFINE THash_RipeMD320_asm}
  THash_SHA = class; {$DEFINE THash_SHA_asm}
  THash_SHA1 = class;
  THash_SHA256 = class; {$DEFINE THash_SHA256_asm}
  THash_SHA384 = class; {.$DEFINE THash_SHA384_asm} // q&d fix c++
  THash_SHA512 = class;
  THash_Haval128 = class; {$DEFINE THashBaseHaval_asm}
  THash_Haval160 = class; // Haval 160, 3 Rounds
  THash_Haval192 = class; // Haval 192, 4 Rounds
  THash_Haval224 = class; // Haval 224, 4 Rounds
  THash_Haval256 = class; // Haval 256, 5 Rounds
  THash_Tiger = class; {.$DEFINE THash_Tiger_asm} // q&d fix c++
  THash_Panama = class; {$DEFINE THash_Panama_asm}
  THash_Whirlpool = class; {$DEFINE THashBaseWhirlpool_asm}
  THash_Whirlpool1 = class;
  THash_Square = class; {.$DEFINE THash_Square_asm} // q&d fix c++
  THash_Snefru128 = class; {.$DEFINE THash_Snefru128_asm} // q&d fix c++
  THash_Snefru256 = class; {.$DEFINE THash_Snefru256_asm} // q&d fix c++
  THash_Sapphire = class; {$DEFINE THash_Sapphire_asm}
Gruß Assertor
Frederik
  Mit Zitat antworten Zitat