Warum benutzen hier eigentlich die meisten immer diese unsäglichen Strings, Hash und HMAC arbeitet mit Bit/Bytefolgen. Wenn schon Strings dann richtig: daß erste Zeichen ist key[1], Länge nicht sizeof(=4!) sondern length. Bei meinen Supportanfragen mußten auch immer ansistrings für Amazon benutzt werden.
Hier die korrigierte Funktion:
Delphi-Quellcode:
function GenerateHMACSignature(Text, key: ansistring): ansistring;
var
ctx: THMAC_Context;
phash: PHashDesc;
mac: THashDigest;
begin
phash := FindHash_by_Name('SHA256');
if phash = nil then
begin
{Action for 'Hash function not found/registered.'}
exit;
end;
hmac_init(ctx, phash, @key[1], length(key));
hmac_update(ctx, @Text[1], length(Text));
hmac_final(ctx, mac);
Result := HexStr(@mac, sizeof(mac));
end;