Amazon の SimpleDB 用のモジュールを作成しています。HMAC-SHA アルゴリズムを使用して REST 要求に署名する必要があります。(詳細はこちら)
この署名をコンピューター化する機能があると言われましたが、ドキュメントで見つけることができません。関数は何と呼ばれ、その引数はどのように見えますか?
編集済み:以下が機能するはずです:
pre {
message = "Four score and seven years ago";
key = "Abe Lincoln";
signature = math:hmac_sha256_base64(message, key);
}
notify("Signature is", signature);
機能はmath:hmac_sha256_base64(<datastring>,<keystring>)
改行が埋め込まれた文字列に署名するには (AWS I'm talk to you!)、次のことを行う必要があります (AWS S3 の例に基づく)
pre {
raw_string = uri:unescape("GET%0A%0A%0AWed, 28 Mar 2007 01:29:59 +0000%0A/");
sample_key = "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o";
signature = math:hmac_sha1_base64(raw_string, sample_key);
expected = "Db+gepJSUbZKwpx1FR0DLtEYoZA=";
passfail = (signature eq expected) => "pass" | "fail";
}
関数はuri:decode()
適切な改行を含む文字列を返しますが、そうではあり\n\n\n
ません。署名の末尾に「=」を追加する必要がある場合があります。
HMAC は、ほとんどのプラットフォームの暗号化ライブラリにある標準関数です。Amazon は、リンク先のドキュメント ページにいくつかの例を示しています。
Java の場合は、javax.crypto.Macにあります。
.Net の場合は、System.Security.Cryptographyを調べます。
KRLの場合、組み込みのストック ソリューションは見つかりませんでした。JavaScript を埋め込むことができるように見えるので、jsSHAの実装が役立つ可能性があります。数学ライブラリにはsha1関数があり、 RFC2104に従って HMAC を実装することはそれほど難しくないようです。