Okay, der Code war zusammengeschustert ... und das sieht man. Ich habs mal auf das Wesentliche reduziert.
Delphi-Quellcode:
uses HMAC, Hash, SHA256, mem_util;
{...}
function GenerateHMACSignature(Text: string; Key: string): string;
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, sizeof(key));
hmac_update(ctx, @Text, sizeof(Text));
hmac_final(ctx, mac);
Result := HexStr(@mac, Length(mac));
end;
Bin mir trotz Doku nicht sicher, ob das so richtig ist, da ich die Test Vectors des zugehörigen RFCs und auch einige Beispiele von Webgeneratoren nicht reproduzieren konnte. Kennt sich jemand mit diesen Units aus und kann mir sagen wo mein Fehler ist?
Außerdem ist mir immer noch nicht klar, WOVON genau Amazon möchte, dass ich die Signatur erstelle. Laut deren Doku soll es ein TimeStamp sein (s.o. im Quelltext. Das sollte gehen) und der Inhalt des Action-Tags - nur leider enthält der vom
WSDL erzeugte Envelope überhaupt kein solches Tag.
Es ist echt ein Krampf, die Schnittstelle war mal so gut