メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

# dkcMD4.h

MD4 Algorithm [詳細]

`#include "md_misc.h"`
`#include "dkcOSIndependent.h"`

dkcMD4.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

## マクロ定義
#define | MD4_BIN_BUFFER_SIZE 16
| MD4バイナリのシグネチャ保存に必要な領域
#define | MD4_STR_BUFFER_SIZE 33
| MD4文字列のシグネチャ保存に必要な領域
## 関数
DKC_EXTERN DKC_MD4 *WINAPI | dkcAllocMD4 ()
DKC_EXTERN void WINAPI | dkcMD4Init (DKC_MD4 *)
DKC_INLINE void | dkcMD4InitEx (DKC_MD4 *p, uint8 flags)
DKC_EXTERN void WINAPI | dkcMD4Load (DKC_MD4 *p, const BYTE *pBuffer, DWORD dwSize)
DKC_EXTERN void WINAPI | dkcMD4Final (DKC_MD4 *p)
DKC_EXTERN int WINAPI | dkcMD4DigestStr (DKC_MD4 *p, char *buff, size_t size)
DKC_EXTERN int WINAPI | dkcMD4Digest (DKC_MD4 *p, BYTE *buff, size_t size)
DKC_EXTERN int WINAPI | dkcMD4FinalDigestStr (DKC_MD4 *p, char *buff, size_t size)
DKC_EXTERN int WINAPI | dkcMD4FinalDigest (DKC_MD4 *p, BYTE *buff, size_t size)
DKC_EXTERN int WINAPI | dkcFreeMD4 (DKC_MD4 **p)

## 説明

MD4 Algorithm

作者:
  wrapped by d金魚

覚え書き:
  MD4はすでに終わった？アルゴリズムなので、SHA1をご利用ください。 また、2005年度現在で安全性を考慮するならばSHA256以上にすると良いと思われます。

dkcMD4.h で定義されています。

## マクロ定義

#define MD4_BIN_BUFFER_SIZE 16

| MD4バイナリのシグネチャ保存に必要な領域 dkcMD4.h の 20 行で定義されています。 参照元 dkcMD4Digest(), dkcMD4DigestStr(), と dkcSHO_MD4Init().

#define MD4_STR_BUFFER_SIZE 33

| MD4文字列のシグネチャ保存に必要な領域 dkcMD4.h の 22 行で定義されています。 参照元 dkcMD4DigestStr(), と dkcSHO_MD4Init().

## 関数

DKC_EXTERN DKC_MD4* WINAPI dkcAllocMD4 | ( |  | ) |

| 戻り値: DKC_MD4構造体への確保したメモリ領域 覚え書き: すでにdkcMD4Init()は呼ばれています。 dkcMD4.c の 33 行で定義されています。 参照先 DKC_MD4, dkcAllocate(), dkcMD4Init(), と NULL. 参照元 dkcSHO_MD4Init().
    00033                              {
    00034     DKC_MD4 *p = dkcAllocate(sizeof(DKC_MD4));
    00035     if(NULL==p) return NULL;
    00036     dkcMD4Init(p);
    00037     return p;
    00038 }

DKC_EXTERN int WINAPI dkcFreeMD4 | ( | DKC_MD4 ** | p | ) |

  | 引数:
  | p[in][out] | dkcAllocMD4()で取得したポインタへのポインタ
戻り値: 上手く開放できたらedk_SUCCEEDED dkcMD4.c の 41 行で定義されています。 参照先 dkcFree(), と NULL. 参照元 dkcFreeSHO().
    00041                                    {
    00042     if(NULL==pp || NULL==*pp){
    00043         return edk_FAILED;
    00044     }
    00045     return dkcFree((void **)pp);
    00046 }

DKC_EXTERN int WINAPI dkcMD4Digest | ( | DKC_MD4 * | p,
|  | BYTE * | buff,
|  | size_t | size
| ) |

| 参照: dkcMD4DigestStr() dkcMD4.c の 282 行で定義されています。 参照先 dkc_memcpy(), と MD4_BIN_BUFFER_SIZE. 参照元 dkcMD4DigestStr(), dkcMD4FinalDigest(), と dkcSHO_MD4Init().
    00282                                                           {
    00283
    00284     if(size < MD4_BIN_BUFFER_SIZE){
    00285         return edk_BufferOverFlow;
    00286     }
    00287     return dkc_memcpy(buff,size,p->abcd,sizeof(p->abcd));
    00288 }

DKC_EXTERN int WINAPI dkcMD4DigestStr | ( | DKC_MD4 * | p,
|  | char * | buff,
|  | size_t | size
| ) |

  | 引数:
  | p[in][out] | dkcAllocMD4()で取得したポインタ
  | buff[out] | 書き込むバッファへのポインタ
  | size[in] | buffのサイズ
戻り値: 成功したらedk_SUCCEEDEDが返る dkcMD4.c の 290 行で定義されています。 参照先 dkcMD4Digest(), MD4_BIN_BUFFER_SIZE, MD4_STR_BUFFER_SIZE, と uint8. 参照元 dkcMD4FinalDigestStr(), と dkcSHO_MD4Init().
    00290                                                              {
    00291     register int i;
    00292     uint8 temp[MD4_BIN_BUFFER_SIZE];
    00293     if(size < MD4_STR_BUFFER_SIZE){
    00294         return edk_BufferOverFlow;
    00295     }
    00296     i = dkcMD4Digest(p,temp,sizeof(temp));
    00297     if(DKUTIL_FAILED(i)){
    00298         return i;
    00299     }
    00300     for (i=0; i<16; i++){
    00301         sprintf(buff+i*2,"%02x", temp[i]);
    00302     }
    00303   buff[32]='\0';
    00304     return edk_SUCCEEDED;
    00305 }

DKC_EXTERN void WINAPI dkcMD4Final | ( | DKC_MD4 * | p | ) |

  | 引数:
  | p[in][out] | dkcAllocMD4()で取得したポインタ
覚え書き: dkcMD4FinalDigest()を使用する事を奨励します。 dkcMD4.c の 271 行で定義されています。 参照先 dkcMD_Final(), edkcMD_Finalized, と MD4Transform(). 参照元 dkcMD4FinalDigest(), dkcMD4FinalDigestStr(), と dkcSHO_MD4Init().
    00271                                    {
    00272     //uint8 digest[MD4_BIN_BUFFER_SIZE];
    00273     if(p->flags & edkcMD_Finalized){
    00274         return;
    00275     }
    00276     //MD4Final(p);
    00277     dkcMD_Final(p,MD4Transform);
    00278     //memcpy(p->a8,digest,sizeof(digest));
    00279     p->flags |= edkcMD_Finalized;
    00280 }

DKC_EXTERN int WINAPI dkcMD4FinalDigest | ( | DKC_MD4 * | p,
|  | BYTE * | buff,
|  | size_t | size
| ) |

| 参照: dkcMD4FinalDigestStr() dkcMD4.c の 312 行で定義されています。 参照先 dkcMD4Digest(), と dkcMD4Final().
    00312                                                                {
    00313     dkcMD4Final(p);
    00314     return dkcMD4Digest(p,buff,size);
    00315
    00316 }

DKC_EXTERN int WINAPI dkcMD4FinalDigestStr | ( | DKC_MD4 * | p,
|  | char * | buff,
|  | size_t | size
| ) |

| 参照: 引数、戻り値についてはdkcMD4Digest()と同じです。 覚え書き: dkcMD4Final()とdkcMD4Digest()を使用するより、この関数の使用を奨励します。 dkcMD4.c の 307 行で定義されています。 参照先 dkcMD4DigestStr(), と dkcMD4Final().
    00307                                                                   {
    00308     dkcMD4Final(p);
    00309     return dkcMD4DigestStr(p,buff,size);
    00310 }

DKC_EXTERN void WINAPI dkcMD4Init | ( | DKC_MD4 * |  | ) |

| 戻り値: dkcAllocMD4()から取得した領域を初期化する。 dkcMD4.c の 50 行で定義されています。 参照元 dkcAllocMD4(), dkcMD4InitEx(), と dkcSHO_MD4Init().
    00050                                   {
    00051     p->count[0] = p->count[1] = 0;
    00052
    00053     p->abcd[0] = 0x67452301;
    00054   p->abcd[1] = 0xefcdab89;
    00055   p->abcd[2] = 0x98badcfe;
    00056   p->abcd[3] = 0x10325476;
    00057     memset(p->a8,0,sizeof(p->a8));
    00058     //p->mByteOrder = (uint8)dkcGetByteOrder();
    00059 }

DKC_INLINE void dkcMD4InitEx | ( | DKC_MD4 * | p,
|  | uint8 | flags
| ) |

| dkcMD4.h の 50 行で定義されています。 参照先 dkcMD4Init().
    00051 {
    00052     dkcMD4Init(p);
    00053     p->flags = flags;
    00054 }

DKC_EXTERN void WINAPI dkcMD4Load | ( | DKC_MD4 * | p,
|  | const BYTE * | pBuffer,
|  | DWORD | dwSize
| ) |

  | 引数:
  | p[in][out] | dkcAllocMD4()で取得したポインタ
  | pBuffer[in] | 読み取るバッファへのポインタ
  | dwSize[in] | バッファにアクセスしてOKなサイズ
戻り値: edk_SUCCEEDEDで成功 覚え書き: ライブラリの都合により、dkcMD4Load()はINT_MAXより大きいバッファを扱えないため dkcMD4.c の 261 行で定義されています。 参照先 dkcMD_Update(), edkcMD_Finalized, と MD4Transform(). 参照元 dkcSHO_MD4Init().
    00261                                                                    {
    00262     if(p->flags & edkcMD_Finalized){
    00263         return;
    00264     }
    00265     dkcMD_Update(p,pBuffer,dwSize,MD4Transform);
    00266     //MD4Update(p,pBuffer,dwSize);
    00267 }