md5 - MD5 の処理

------------------------------------------------------------------------------
typedef struct _SMD5 SMD5;

MD5 ハッシュを表す構造体です。

------------------------------------------------------------------------------
#define S_GNET_MD5_HASH_LENGTH	16

MD5 ハッシュの長さ(バイト)です。

------------------------------------------------------------------------------
SMD5*    s_gnet_md5_new (const guchar* buffer, guint length);

長さ length の ハッシュデータ buffer から SMD5 構造体を作成します。

buffer: ハッシュデータを格納するバッファ
length: buffer の長さ
戻り値: 新規 SMD5 構造体へのポインタ

------------------------------------------------------------------------------
SMD5*	 s_gnet_md5_new_string (const gchar* str);

16進数のハッシュ文字列 str から SMD5 構造体を作成します。

str: 16進数のハッシュ文字列
戻り値: 新規 SMD5 構造体へのポインタ

------------------------------------------------------------------------------
SMD5*    s_gnet_md5_clone (const SMD5* md5);

SMD5 構造体 md5 をコピーします。

md5: SMD5 構造体へのポインタ
戻り値: 新規 SMD5 構造体へのポインタ

------------------------------------------------------------------------------
void     s_gnet_md5_delete (SMD5* md5);

SMD5 構造体 md5 を削除します。

md5: SMD5 構造体へのポインタ
	
------------------------------------------------------------------------------
SMD5*	 s_gnet_md5_new_incremental (void);

SMD5 構造体をインクリメンタルに作成します。 SMD5 を作成した後、
s_gnet_md5_update() を1度以上ハッシュデータに対して呼ぶ必要があります。
最後に s_gnet_md5_final() を呼んでハッシュ値を計算します。

戻り値: 新規 SMD5 構造体へのポインタ

------------------------------------------------------------------------------
void	 s_gnet_md5_update (SMD5* md5, const guchar* buffer, guint length);

ハッシュ md5 を長さ length のハッシュデータ buffer で更新します。
s_gnet_md5_new_incremental() によって作成されたハッシュに対して
s_gnet_md5_final() を呼んで完了するまでにこの関数を数回呼ぶことができます。

md5: SMD5 構造体へのポインタ
buffer: 追加するハッシュデータ
length: buffer の長さ

------------------------------------------------------------------------------
void	 s_gnet_md5_final (SMD5* md5);

md5 の最終的なハッシュ値を計算します。この関数は s_gnet_md5_new_incremental()
によって作成された SMD5 構造体に対してのみ呼ぶ必要があります。

md5: SMD5 構造体へのポインタ

------------------------------------------------------------------------------
gboolean s_gnet_md5_equal (gconstpointer p1, gconstpointer p2);

2つの SMD5 構造体 p1 と p2 が等しいかどうかを比較します。

p1: SMD5 構造体1へのポインタ
p2: SMD5 構造体2へのポインタ
戻り値: p1 と p2 が等しい場合 TRUE
        等しくない場合 FALSE

------------------------------------------------------------------------------
guint	 s_gnet_md5_hash (gconstpointer p);

GHashTable で使用するための SMD5 構造体に対するハッシュ値を生成します。
この値は MD5 ダイジェストとは異なります。

p: SMD5 構造体へのポインタ
戻り値: p のハッシュ値

------------------------------------------------------------------------------
gchar*   s_gnet_md5_get_digest (const SMD5* md5);

md5 の生のハッシュダイジェスト値を含むバッファを取得します。
バッファのサイズは S_GNET_MD5_HASH_LENGTH バイトです。
返った値は SMD5 側で保持しているため解放できません。

md5: SMD5 構造体へのポインタ
戻り値: MD5 ハッシュダイジェストを含むバッファへのポインタ

------------------------------------------------------------------------------
gchar*   s_gnet_md5_get_string (const SMD5* md5);

ダイジェスト値を16進文字列で取得します。文字列は 2 * S_GNET_MD5_HASH_LENGTH
バイトで、ヌル文字で終端しています。

返った文字列は g_free() で解放する必要があります。

md5: SMD5 構造体へのポインタ
戻り値: ダイジェスト値を表す16進文字列
	
------------------------------------------------------------------------------
void	 s_gnet_md5_copy_string (const SMD5* md5, gchar* buffer);

ダイジェスト値を16進文字列として buffer にコピーします。文字列はヌル文字で
終端しません。

md5: SMD5 構造体へのポインタ
buffer: 少なくとも 2 * S_GNET_MD5_HASH_LENGTH バイトのサイズのバッファ
