目的のコード
指定された鍵で HMAC-SHA256 を使用して指定された値に署名し、16進数の文字列にして返す
function toSha256(key: string, value: string): string {
const signatureBytes = Utilities.computeHmacSha256Signature(value, key);
const signature = signatureBytes
.map((byte) => (byte < 0 ? 256 + byte : byte))
.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), "");
return signature;
}
keyに鍵を、valueに目的の値をいれる。戻り値が16進数の文字列だ。
解説
- 下記のユーティリティ関数のwrapperである。
- GASのバイト列は、符号付き整数になっているのがNode.jsのByteとは異なるので、単純な流用ができなかった。
- あんまり低レイヤー詳しくないが、負数に256を足して、それぞれ16進数に変換したら目的のものが得られたので良しとした。
先行記事があります
こちらが先行記事でして、私の貢献は、この機能をモジュール化して切り出したこと。
何に使用したのか
- 個人的に、とあるprivate APIにアクセスする際に必要となった。
ちょっとしたNode.jsのサーバーほしいな、ってとき、GASも選択肢
- GASはHTTPクライアント/サーバーになれる
- GASは定期実行できる
- GASは永続化層をスプレッドシートにすればいいので、状態も持てる
- ただGASはNode.jsみたいにライブラリがないのが弱点なので、今回紹介したようなユーティリティがないと辛い
- 僕は暇なときこのへん進めてくので、Universalな機能で困ったら相談してください
関連記事