util.digest
- メッセージダイジェストフレームワーク ¶このモジュールは、MD5 (rfc.md5
- MD5メッセージダイジェスト参照)や
SHA (rfc.sha
- SHAメッセージダイジェスト参照)などの、メッセージ
ダイジェストアルゴリズムのためのベースクラスと一般的なインターフェースを
提供します。
メッセージダイジェストを計算する典型的なコードは次のとおりです:
(use rfc.sha) ; import actual digest implementation (use util.digest) (digest-message-to 'base64url <sha256> "message")
異なるアルゴリズムを選んだり、異なる出力形式を選ぶこともできます
(例: u8vector, 16進数文字列など)。
秘密鍵を用いたダイジェストについてはrfc.hmac
- HMAC鍵付きハッシングを参照してください。
メッセージダイジェストを計算するには、以下のAPIが使えます。
{util.digest
}
messageのダイジェストを、digesterで指定されるアルゴリズムを使って
計算し、targetクラスのインスタンスで結果を返します。
message引数は文字列かu8vectorです。
digester引数は<message-digest-algorithm>
を継承し、
後で述べるダイジェストプロトコルを実装しているクラスです。
Gaucheにデフォルトでついてくるものとしては、SHA
(rfc.sha
- SHAメッセージダイジェスト参照)とMD5(rfc.md5
- MD5メッセージダイジェスト参照)があります。
targetには<u8vector>
か<string>
を指定できます。
ダイジェスト結果は一般にバイト列になるので、<u8vector>
が推奨です。
<string>
を指定した場合は、不完全文字列が返ってくることが多いでしょう。
簡便のために、targetには以下のシンボルのいずれかを渡すこともできます。
その場合、ダイジェスト結果が指定の形式で可読文字列にエンコードされて返されます。
これらのエンコーディングの詳細についてはrfc.base64
- Base64エンコーディングを参照してください。
base64
オリジナルのBase64エンコーディング
base64url
URL安全なBase64エンコーディング
base64url-nopad
URL安全なBase64で、末尾のパディング文字(=
)を省略したもの
base32
Base32エンコーディング
base32hex
Base32hexエンコーディング
base16
Base16エンコーディング、あるいは16進数形式。#[0-9A-F]
が使われます。
hex
16進数形式、アルファベットに小文字が使われます。
入力を現在の入力ポートから読んで、digesterで指定されるアルゴリズムで
ダイジェストを計算し、結果をtargetクラスのインスタンスで返します。
targetには可読文字列へのエンコーディングを指定するシンボルを与えることもできます。
targetとdigester引数について詳しくは、上の
digest-message-to
の項目を参照してください。
{util.digest
}
以下のAPIはダイジェストアルゴリズムを実装する人向けです。
{util.digest
}
メッセージダイジェストアルゴリズムの実装のメタクラスです。
<message-digest-algorithm-meta>
: hmac-block-size ¶各アルゴリズムに固有のブロックサイズをバイト数で指定します。 (これはアルゴリズムを実装する各クラスオブジェクトのスロットで、 それらのクラスのインスタンスのスロットではありません。通常、新たなダイジェストアルゴリズム クラスを実装する人のみが気にすれば良いスロットです。具体例は ソースツリーのext/digest/sha.scmを見てください。)
{util.digest
}
メッセージダイジェストアルゴリズムの実装のベースクラスです。
メッセージダイジェストアルゴリズムの具体サブクラスは、以下のメソッドを 実装しなければなりません。
{util.digest
}
メッセージダイジェストアルゴリズムのインスタンスを取り、
それをu8vectorか(不完全な可能性のある)文字列のデータdataで
更新します。
{util.digest
}
メッセージダイジェストアルゴリズムのインスタンスを終了させ、
そのダイジェストの結果を不完全文字列で返します。
{util.digest
}
ダイジェストルーチンのラッパです。メッセージダイジェストアルゴリズム
classを与え、現在の入力ポートから入力データをEOFまで読み込み、
そのダイジェストの結果を不完全文字列で返します。
{util.digest
}
Deprecated.
新たなコードではより柔軟なdigest-message-to
を使ってください。
(digest-message-to <string> class string)
と同じです。
ただしstring引数は文字列でなければなりません。
{util.digest
}
Deprecated.
(base16-encode-message digest-result :lowercase #t)
と同じです
(rfc.base64
- Base64エンコーディング参照)。通常はdigest-message-to
の
target引数にhex
を渡すことで直接16進数表記の結果が得られます。
この手続きは互換性のためだけに残されています。