LIBRARY EXPORTS CreateAlgorithm @1 ; アルゴリズムへのハンドルを作成します。 DestroyAlgorithm @2 ; アルゴリズムを破棄します。 InitAlgorithm @3 ; アルゴリズムを初期化します。 InputData @4 ; アルゴリズムへデータを入力します。 GetHashLength @5 ; ハッシュのサイズをバイト数で取得します。 GetHash @6 ; 入力されたデータからハッシュを取得します。 GetHashTextLength @7 ; ハッシュ文字列の文字列長をバイト数で取得します。 GetHashText @8 ; 入力されたデータからハッシュ文字列を取得します。
1. LoadLibrary() で DLL をロードする。
2. GetProcAddress() で関数へのポインタを取得する。
3. CreateAlgorithm() でアルゴリズムへのハンドルを取得する。
4. InitAlgorithm() でアルゴリズムを初期化する。
5. InputData() でデータをアルゴリズムへ入力する。
6. GetHash() で計算結果を受け取る。
7. DestroyAlgorithm() でアルゴリズムへのハンドルを解放する。
8. FreeLibrary() で DLL を開放する。
アルゴリズムへのハンドルを作成します。
1
HANDLE WINAPI CreateAlgorithm( void );
作成したアルゴリズムへのハンドルを返します。
アルゴリズムの作成に失敗した場合は null を返します。
作成したアルゴリズムは関数 DestroyAlgorithm() で破棄します。
HANDLE hAlgorithm = CreateAlgorithm();
if ( hAlgorithm )
{
if ( 0 == InitAlgorithm( hAlgorithm ) )
{
if ( 0 == InputData( hAlgorithm, data, length ) )
{
const int hashsize = GetHashLength( hAlgorithm );
if ( 0 < hashsize )
{
void *buffer = malloc( hashsize );
if ( buffer )
{
if ( 0 == GetHash( hAlgorithm, buffer, hashsize ) )
{
…… 省略 ……
}
}
}
}
}
if ( 0 != DestroyAlgorithm( hAlgorithm ) )
{
…… 省略 ……
}
}
アルゴリズムを破棄します。
2
DWORD WINAPI DestroyAlgorithm( HANDLE hAlgorithm );
HANDLE hAlgorithm
破棄するアルゴリズムへのハンドルを指定します。
関数が成功した場合は 0 を返します。
関数が失敗した場合は 0 以外の エラー識別値 を返します。
アルゴリズムを初期化します。
アルゴリズムに入力済みのデータは全て無効になります。
3
DWORD WINAPI InitAlgorithm( HANDLE hAlgorithm );
HANDLE hAlgorithm
アルゴリズムへのハンドルを指定します。
関数が成功した場合は 0 を返します。
関数が失敗した場合は 0 以外の エラー識別値 を返します。
ハッシュを計算したいデータをアルゴリズムへ入力します。
データの入力は複数回に分けて行うこともできます。
4
DWORD WINAPI InputData( HANDLE hAlgorithm, const void *data, int length );
HANDLE hAlgorithm
アルゴリズムへのハンドルを指定します。
const void *data
書き込むデータへのポインタを指定します。
int length
引数 data が指す領域のサイズを バイト数 で指定します。
0 以下の値を指定すると関数は失敗します。
関数が成功した場合は 0 を返します。
関数が失敗した場合は 0 以外の エラー識別値 を返します。
char buffer[ 1024 ];
while( 0 < (length = fread( buffer, 1, sizeof( buffer ), fp )) )
{
if ( 0 == InputData( hAlgorithm, buffer, length ) )
{
…… 省略 ……
}
}
ハッシュのサイズを バイト数 で返します。
5
int WINAPI GetHashLength( HANDLE hAlgorithm );
HANDLE hAlgorithm
アルゴリズムへのハンドルを指定します。
ハッシュのサイズを バイト数 で返します。
関数が失敗した場合は 0 以下の値を返します。
アルゴリズムに入力されたデータからハッシュを計算します。
6
DWORD WINAPI GetHash( HANDLE hAlgorithm, void *buffer, int bufsize );
HANDLE hAlgorithm
アルゴリズムへのハンドルを指定します。
void *buffer
バッファへのポインタを指定します。
この領域に ハッシュ の先頭 bufsize バイトが格納されます。
int bufsize
引数 buffer が指す領域のサイズを バイト数 で指定します。
ハッシュを格納する領域に必要なサイズは関数 GetHashLength() で取得します。
0 以下の値を指定すると関数は失敗します。
関数が成功した場合は 0 を返します。
関数が失敗した場合は 0 以外の エラー識別値 を返します。
const int hashsize = GetHashLength( hAlgorithm );
if ( 0 < hashsize )
{
void *buffer = malloc( hashsize );
if ( buffer )
{
if ( 0 == GetHash( hAlgorithm, buffer, hashsize ) )
{
…… 省略 ……
}
free( buffer );
}
}
ハッシュ文字列の長さを バイト数 で返します。
7
int WINAPI GetHashTextLength( HANDLE hAlgorithm );
HANDLE hAlgorithm
アルゴリズムへのハンドルを指定します。
ハッシュ文字列の長さを バイト数 で返します。
ハッシュ文字列の長さに終端文字 '\0' は含まれません。
関数が失敗した場合は 0 以下の値を返します。
const int length = GetHashTextLength( hAlgorithm );
if ( 0 < length )
{
const int bufsize = 1 + length;
void *buffer = malloc( bufsize );
if ( buffer )
{
if ( 0 == GetHashText( hAlgorithm, buffer, bufsize ) )
{
…… 省略 ……
}
free( buffer );
}
}
アルゴリズムに入力されたデータからハッシュ文字列を取得します。
8
DWORD WINAPI GetHashText( HANDLE hAlgorithm, char *buffer, int bufsize );
HANDLE hAlgorithm
アルゴリズムへのハンドルを指定します。
char *buffer
バッファへのポインタを指定します。
この領域に ハッシュ文字列 の先頭 bufsize-1 バイトが格納されます。
文字列末尾には終端文字 '\0' が付加されます。
int bufsize
引数 buffer が指す領域のサイズを バイト数 で指定します。
ハッシュ文字列を格納する領域に必要なサイズは関数 GetHashTextLength() で取得します。
0 以下の値を指定すると関数は失敗します。
関数が成功した場合は 0 を返します。
関数が失敗した場合は 0 以外の エラー識別値 を返します。
const int length = GetHashTextLength( hAlgorithm );
if ( 0 < length )
{
const int bufsize = 1 + length;
void *buffer = malloc( bufsize );
if ( buffer )
{
if ( 0 == GetHashText( hAlgorithm, buffer, bufsize ) )
{
…… 省略 ……
}
free( buffer );
}
}
| 0x00000000 | - | 関数は正常に終了しました。 |
| 0x00000001 | - | 指定された引数が不正です。 |
| 0x00000100 | - | 関数内部でエラーが発生しました。 |
2005/03/07
md4.dll 0.00
md5.dll 0.00
sha1.dll 0.00
sha256.dll 0.00
sha512.dll 0.00