For Development HEAD DRAFTSearch (procedure/syntax/module):

Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]

12.84 util.digest - メッセージダイジェストフレームワーク

Module: 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

メッセージダイジェストを計算するには、以下のAPIが使えます。

Generic Function: digest-message-to target digester message

{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進数形式、アルファベットに小文字が使われます。

Generic Function: digest-to target digester

入力を現在の入力ポートから読んで、digesterで指定されるアルゴリズムで ダイジェストを計算し、結果をtargetクラスのインスタンスで返します。 targetには可読文字列へのエンコーディングを指定するシンボルを与えることもできます。 targetdigester引数について詳しくは、上の digest-message-toの項目を参照してください。 {util.digest}

実装者向けAPI

以下のAPIはダイジェストアルゴリズムを実装する人向けです。

Class: <message-digest-algorithm-meta>

{util.digest} メッセージダイジェストアルゴリズムの実装のメタクラスです。

Instance Variable of <message-digest-algorithm-meta>: hmac-block-size

各アルゴリズムに固有のブロックサイズをバイト数で指定します。 (これはアルゴリズムを実装する各クラスオブジェクトのスロットで、 それらのクラスのインスタンスのスロットではありません。通常、新たなダイジェストアルゴリズム クラスを実装する人のみが気にすれば良いスロットです。具体例は ソースツリーのext/digest/sha.scmを見てください。)

Class: <message-digest-algorithm>

{util.digest} メッセージダイジェストアルゴリズムの実装のベースクラスです。

メッセージダイジェストアルゴリズムの具体サブクラスは、以下のメソッドを 実装しなければなりません。

Generic function: digest-update! algorithm data

{util.digest} メッセージダイジェストアルゴリズムのインスタンスを取り、 それをu8vectorか(不完全な可能性のある)文字列のデータdataで 更新します。

Generic function: digest-final! algorithm

{util.digest} メッセージダイジェストアルゴリズムのインスタンスを終了させ、 そのダイジェストの結果を不完全文字列で返します。

Generic function: digest class

{util.digest} ダイジェストルーチンのラッパです。メッセージダイジェストアルゴリズム classを与え、現在の入力ポートから入力データをEOFまで読み込み、 そのダイジェストの結果を不完全文字列で返します。

非推奨API

Generic function: digest-string class string

{util.digest} Deprecated. 新たなコードではより柔軟なdigest-message-toを使ってください。

(digest-message-to <string> class string)と同じです。 ただしstring引数は文字列でなければなりません。

Function: digest-hexify digest-result

{util.digest} Deprecated. (base16-encode-message digest-result :lowercase #t)と同じです (rfc.base64 - Base64エンコーディング参照)。通常はdigest-message-totarget引数にhexを渡すことで直接16進数表記の結果が得られます。 この手続きは互換性のためだけに残されています。


Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]


For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT