Ich scheitere allerdings an der Hash-Registrierung. Gibts da irgendwo eine Demo oder eine Anleitung?
Es gibt die englische
Einführung und viele Testprogramme als Besipiele; für Dich wohl interessant das Program t_kdf.pas mit dem Test für KDF1 in
Delphi-Quellcode:
procedure CryptoSys_Tests;
{-Vectors from http://www.di-mgt.com.au/cryptoKDFs.html}
//..
phash := FindHash_by_ID(_SHA1);
if phash=nil then begin
writeln('Hash SHA1 not registered/found');
exit;
end;
err := kdf1(phash, @Z, sizeof(Z), nil, 0, key, 32);
write(' kdf1: ');
if err=0 then writeln(compmem(@key,@K1,sizeof(K1)))
else writeln(' err=',err);
//..
Hier wird SHA1 benutzt, wenn Du MD5 verwenden willst, gehts entsprechend mit
phash := FindHash_by_ID(_MD5);
oder
phash := FindHash_by_Name('MD5');
. Wichtig ist (wie in der Einführung beschrieben), daß die
Unit mit der Hashfunktion auch wirklich eingebunden wird, zB durch explizites
uses md5;
Auf deiner Seite steht zwar "pb_kdf functions are used in the FCA and FZCA demo programs. ", aber gefunden habe ich diese nicht
Na zB in der
Unit fcrypta (File crypt/authenticate
unit):
Delphi-Quellcode:
function FCA_EAX_init(var cx: TAES_EAXContext; pPW: pointer; pLen: word; var hdr: TFCAHdr): integer;
{-Initialize crypt context using password pointer pPW and hdr.salt}
var
XKey: TXKey;
Err : integer;
begin
{derive the EAX key / nonce and pw verifier}
Err := pbkdf2(FindHash_by_ID(_SHA1), pPW, pLen, @hdr.salt, sizeof(TFCASalt), KeyIterations, XKey, sizeof(XKey));
{init AES EAX mode with ak/hk}
if Err=0 then Err := AES_EAX_Init(XKey.ak, 8*sizeof(XKey.ak), xkey.hk, sizeof(XKey.hk), cx);;
{exit if any error}
FCA_EAX_init := Err;
if Err<>0 then exit;
{return pw verifier}
hdr.PW_Ver := XKey.pv;
hdr.FCASig := C_FCA_Sig;
hdr.Flags := $A1;
{burn XKey}
fillchar(XKey, sizeof(XKey),0);
end;
Edit: Oder meinst Du, daß Du die Demoprogramme nicht gefunden hast? Die sind hier zu finden:
http://www.wolfgang-ehrhardt.de/crypt_de.html#FCADemo