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

dkcHash.c

lots of Hash Algorithm [詳細]

#include "dkcHash.h"
#include "dkcStdio.h"

dkcHash.cのインクルード依存関係図

ソースコードを見る。

マクロ定義

#define check_()   dkcmNOT_ASSERT(sizeof(void *) != sizeof(DKC_SHA1 *));

型定義

typedef void(WINAPI * DKC_SHO_HASH_INIT_F_TYPE )(DKC_SECURE_HASH_OBJECT *)

関数

void WINAPI dkcSHO_MD2Init (DKC_SECURE_HASH_OBJECT *p)
void WINAPI dkcSHO_MD4Init (DKC_SECURE_HASH_OBJECT *p)
void WINAPI dkcSHO_MD5Init (DKC_SECURE_HASH_OBJECT *p)
void WINAPI dkcSHO_SHA1Init (DKC_SECURE_HASH_OBJECT *p)
void WINAPI dkcSHO_SHA256Init (DKC_SECURE_HASH_OBJECT *p)
void WINAPI dkcSHO_SHA384Init (DKC_SECURE_HASH_OBJECT *p)
void WINAPI dkcSHO_SHA512Init (DKC_SECURE_HASH_OBJECT *p)
 これによるHMACの生成を奨励する。
static DKC_INLINE void check_init ()
DKC_SECURE_HASH_OBJECT *WINAPI dkcAllocSHO (UINT option)
int WINAPI dkcFreeSHO (DKC_SECURE_HASH_OBJECT **pp)
void WINAPI dkcSHOInit (DKC_SECURE_HASH_OBJECT *p)
void WINAPI dkcSHOLoad (DKC_SECURE_HASH_OBJECT *p, const BYTE *pBuffer, DWORD dwSize)
void WINAPI dkcSHOFinal (DKC_SECURE_HASH_OBJECT *p)
int WINAPI dkcSHODigestStr (DKC_SECURE_HASH_OBJECT *p, char *buff, size_t size)
int WINAPI dkcSHODigest (DKC_SECURE_HASH_OBJECT *p, BYTE *buff, size_t size)
static DKC_INLINE int shc (UINT hash_option, void *digest_dest, size_t destsize, const BYTE *data, size_t data_size, dkctBOOL isBinary)
int WINAPI dkcSecureHashCalculateBinaryDigest (UINT hash_option, BYTE *digest_dest, size_t destsize, const BYTE *data, size_t data_size)
 バイナリでのハッシュを出力をする
int WINAPI dkcSecureHashCalculateStringDigest (UINT hash_option, char *digest_dest, size_t destsize, const BYTE *data, size_t data_size)
 文字列の出力をする
uint8 dkcHash8 (uint8 *pd, size_t cycle)
uint16 dkcHash16 (uint8 *pd, size_t cycle)
uint32 dkcHash24 (uint8 *pd, size_t cycle)


説明

lots of Hash Algorithm

dkcHash.c で定義されています。


マクロ定義

 
#define check_  )     dkcmNOT_ASSERT(sizeof(void *) != sizeof(DKC_SHA1 *));
 

dkcHash.c124 行で定義されています。

参照元 dkcSHODigest(), dkcSHODigestStr(), dkcSHOFinal(), と dkcSHOLoad().


型定義

typedef void(WINAPI * DKC_SHO_HASH_INIT_F_TYPE)(DKC_SECURE_HASH_OBJECT *)
 

dkcHash.c126 行で定義されています。


関数

static DKC_INLINE void check_init  )  [static]
 

dkcHash.c120 行で定義されています。

参照先 dkcmFORCE_NOT_ASSERT.

参照元 dkcAllocSHO().

00120                                    {
00121     dkcmFORCE_NOT_ASSERT(sizeof(void *) != sizeof(DKC_SHA1 *));
00122 }

DKC_SECURE_HASH_OBJECT* WINAPI dkcAllocSHO UINT  option  ) 
 

dkcHash.c129 行で定義されています。

参照先 check_init(), dkcAllocate(), dkcFreeSHO(), dkcSHO_MD2Init(), dkcSHO_MD4Init(), dkcSHO_MD5Init(), dkcSHO_SHA1Init(), dkcSHO_SHA256Init(), dkcSHO_SHA384Init(), dkcSHO_SHA512Init(), dkc_SecureHashObject::mObj, dkc_SecureHashObject::mOption, と NULL.

参照元 dkcAllocHMAC(), と shc().

00130 {
00131     DKC_SECURE_HASH_OBJECT *p;
00132     DKC_SHO_HASH_INIT_F_TYPE init_func;
00133 
00134     check_init();
00135     p = dkcAllocate(sizeof(DKC_SECURE_HASH_OBJECT));
00136     if(NULL==p){
00137         return NULL;
00138     }
00139 
00140     {
00141         switch(option)
00142         {
00143         case edkcSH_MD2:
00144             init_func = dkcSHO_MD2Init;
00145             break;
00146         case edkcSH_MD4:
00147             init_func = dkcSHO_MD4Init;
00148             break;
00149         case edkcSH_MD5:
00150             init_func = dkcSHO_MD5Init;
00151             break;
00152         case edkcSH_SHA1:
00153             init_func = dkcSHO_SHA1Init;
00154             break;
00155         case edkcSH_SHA256:
00156             init_func = dkcSHO_SHA256Init;
00157             break;
00158         case edkcSH_SHA384:
00159             init_func = dkcSHO_SHA384Init;
00160             break;
00161         case edkcSH_SHA512:
00162             init_func = dkcSHO_SHA512Init;
00163             break;
00164         default:
00165             goto Error;
00166         }
00167     }
00168 
00169     //各ハッシュに応じた初期化
00170     init_func(p);
00171     if(NULL==p->mObj){
00172         goto Error;
00173     }
00174     p->mOption = option;
00175     //dkcAllocate()はmemset(0)
00176     //p->mInited = 0;
00177 
00178 
00179     return p;
00180 Error:
00181     dkcFreeSHO(&p);
00182     return NULL;
00183 }

int WINAPI dkcFreeSHO DKC_SECURE_HASH_OBJECT **  pp  ) 
 

dkcHash.c185 行で定義されています。

参照先 DKC_MD4, dkcFree(), dkcFreeMD2(), dkcFreeMD4(), dkcFreeMD5(), dkcFreeSHA1(), dkcFreeSHA256(), dkcFreeSHA384(), dkcFreeSHA512(), dkc_SecureHashObject::mObj, dkc_SecureHashObject::mOption, と NULL.

参照元 dkcAllocSHO(), dkcFreeHMAC(), と shc().

00186 {
00187     DKC_SECURE_HASH_OBJECT *p = *pp;
00188     int option;
00189     void **obj;
00190 
00191     if(NULL==pp || NULL==p){
00192         return edk_FAILED;
00193     }
00194     option = p->mOption;
00195     obj = &(p->mObj);
00196     
00197     switch(option)
00198     {
00199     case edkcSH_MD2:
00200         dkcFreeMD2((DKC_MD2 **)obj);
00201         break;
00202     case edkcSH_MD4:
00203         dkcFreeMD4((DKC_MD4 **)obj);
00204         break;
00205     case edkcSH_MD5:
00206         dkcFreeMD5((DKC_MD5 **)obj);
00207         break;
00208     case edkcSH_SHA1:
00209         dkcFreeSHA1((DKC_SHA1 **)obj);
00210         break;
00211     case edkcSH_SHA256:
00212         dkcFreeSHA256((DKC_SHA256 **)obj);
00213         break;
00214     case edkcSH_SHA384:
00215         dkcFreeSHA384((DKC_SHA384 **)obj);
00216         break;
00217     case edkcSH_SHA512:
00218         dkcFreeSHA512((DKC_SHA512 **)obj);
00219         break;
00220     //default:
00221 
00222         
00223     }//eos
00224     
00225     return dkcFree(pp);
00226 }

uint16 dkcHash16 uint8 *  pd,
size_t  cycle
 

dkcHash.c331 行で定義されています。

参照先 dkcdUNSIGNED_16BIT_PRIME_NUM, uint16, と uint32.

00331                                         {
00332     uint32 v = 0;
00333     size_t i;
00334     for(i=0;i<cycle;i++){
00335         v = (pd[i] << 3) + v;
00336     }
00337     return (uint16)((v % dkcdUNSIGNED_16BIT_PRIME_NUM) & 0xFFFF);
00338 }

uint32 dkcHash24 uint8 *  pd,
size_t  cycle
 

dkcHash.c340 行で定義されています。

参照先 dkcdUNSIGNED_16BIT_PRIME_NUM, と uint32.

00340                                         {
00341     uint32 v = 0;
00342     size_t i;
00343     for(i=0;i<cycle;i++){
00344         v ^= (pd[i] << 3) + v;
00345     }
00346     return (v % dkcdUNSIGNED_16BIT_PRIME_NUM) & 0xFFFFFF;
00347 }

uint8 dkcHash8 uint8 *  pd,
size_t  cycle
 

dkcHash.c322 行で定義されています。

参照先 dkcdUNSIGNED_8BIT_PRIME_NUM, uint32, と uint8.

00322                                       {
00323     uint32 v = 0;
00324     size_t i;
00325     for(i=0;i<cycle;i++){
00326         v ^= (pd[i] << 3) + v;
00327     }
00328     return (uint8)((v % dkcdUNSIGNED_8BIT_PRIME_NUM) & 0xFF);
00329 }

int WINAPI dkcSecureHashCalculateBinaryDigest UINT  hash_option,
BYTE digest_dest,
size_t  destsize,
const BYTE data,
size_t  data_size
 

バイナリでのハッシュを出力をする

引数:
hash_option[in] edk_SecureHashのどれか
digest_dest[out] ダイジェストの出力バッファ
dest_size[in] digest_destに渡したバッファのサイズ
data[in] ハッシュを計算したいデータ
data_size[in] dataのサイズ

dkcHash.c302 行で定義されています。

参照先 shc(), と TRUE.

参照元 dkcAllocHC256NoLimitKeyLength(), dkcAllocSNOW2NoLimitKeyLength(), dkcCalculateInitializeVector(), dkcHMACInit(), と dkcSNOW2GetInitializeVector().

00305      {
00306 
00307     return shc(hash_option,digest_dest,destsize,data,data_size,TRUE);
00308 }

int WINAPI dkcSecureHashCalculateStringDigest UINT  hash_option,
char *  digest_dest,
size_t  destsize,
const BYTE data,
size_t  data_size
 

文字列の出力をする

参照:
その他引数等は dkcSecureHashCalculateBinaryDigest()

dkcHash.c311 行で定義されています。

参照先 FALSE, と shc().

参照元 dkcHMACInit().

00314  {
00315 
00316     return shc(hash_option,digest_dest,destsize,data,data_size,FALSE);
00317 }

void WINAPI dkcSHO_MD2Init DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c12 行で定義されています。

参照先 dkc_SecureHashObject::Digest, dkc_SecureHashObject::digest_binary_size, dkc_SecureHashObject::digest_string_size, dkc_SecureHashObject::DigestStr, dkcAllocMD2(), dkcMD2Digest(), dkcMD2DigestStr(), dkcMD2Final(), dkcMD2Init(), dkcMD2Load(), dkc_SecureHashObject::Final, dkc_SecureHashObject::Init, dkc_SecureHashObject::Load, MD2_BIN_BUFFER_SIZE, MD2_STR_BUFFER_SIZE, と dkc_SecureHashObject::mObj.

参照元 dkcAllocSHO().

void WINAPI dkcSHO_MD4Init DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c28 行で定義されています。

参照先 dkc_SecureHashObject::Digest, dkc_SecureHashObject::digest_binary_size, dkc_SecureHashObject::digest_string_size, dkc_SecureHashObject::DigestStr, dkcAllocMD4(), dkcMD4Digest(), dkcMD4DigestStr(), dkcMD4Final(), dkcMD4Init(), dkcMD4Load(), dkc_SecureHashObject::Final, dkc_SecureHashObject::Init, dkc_SecureHashObject::Load, MD4_BIN_BUFFER_SIZE, MD4_STR_BUFFER_SIZE, と dkc_SecureHashObject::mObj.

参照元 dkcAllocSHO().

void WINAPI dkcSHO_MD5Init DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c44 行で定義されています。

参照先 dkc_SecureHashObject::Digest, dkc_SecureHashObject::digest_binary_size, dkc_SecureHashObject::digest_string_size, dkc_SecureHashObject::DigestStr, dkcAllocMD5(), dkcMD5Digest(), dkcMD5DigestStr(), dkcMD5Final(), dkcMD5Init(), dkcMD5Load(), dkc_SecureHashObject::Final, dkc_SecureHashObject::Init, dkc_SecureHashObject::Load, MD5_BIN_BUFFER_SIZE, MD5_STR_BUFFER_SIZE, と dkc_SecureHashObject::mObj.

参照元 dkcAllocSHO().

void WINAPI dkcSHO_SHA1Init DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c60 行で定義されています。

参照先 dkc_SecureHashObject::Digest, dkc_SecureHashObject::digest_binary_size, dkc_SecureHashObject::digest_string_size, dkc_SecureHashObject::DigestStr, dkcAllocSHA1(), dkcSHA1Digest(), dkcSHA1DigestStr(), dkcSHA1Final(), dkcSHA1Init(), dkcSHA1Load(), dkc_SecureHashObject::Final, dkc_SecureHashObject::Init, dkc_SecureHashObject::Load, dkc_SecureHashObject::mObj, SHA1_BIN_BUFFER_SIZE, と SHA1_STR_BUFFER_SIZE.

参照元 dkcAllocSHO().

void WINAPI dkcSHO_SHA256Init DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c75 行で定義されています。

参照先 dkc_SecureHashObject::Digest, dkc_SecureHashObject::digest_binary_size, dkc_SecureHashObject::digest_string_size, dkc_SecureHashObject::DigestStr, dkcAllocSHA256(), dkcSHA256Digest(), dkcSHA256DigestStr(), dkcSHA256Final(), dkcSHA256Init(), dkcSHA256Load(), dkc_SecureHashObject::Final, dkc_SecureHashObject::Init, dkc_SecureHashObject::Load, dkc_SecureHashObject::mObj, SHA256_BIN_BUFFER_SIZE, と SHA256_STR_BUFFER_SIZE.

参照元 dkcAllocSHO().

void WINAPI dkcSHO_SHA384Init DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c90 行で定義されています。

参照先 dkc_SecureHashObject::Digest, dkc_SecureHashObject::digest_binary_size, dkc_SecureHashObject::digest_string_size, dkc_SecureHashObject::DigestStr, dkcAllocSHA384(), dkcSHA384Digest(), dkcSHA384DigestStr(), dkcSHA384Final(), dkcSHA384Init(), dkcSHA384Load(), dkc_SecureHashObject::Final, dkc_SecureHashObject::Init, dkc_SecureHashObject::Load, dkc_SecureHashObject::mObj, SHA384_BIN_BUFFER_SIZE, と SHA384_STR_BUFFER_SIZE.

参照元 dkcAllocSHO().

void WINAPI dkcSHO_SHA512Init DKC_SECURE_HASH_OBJECT p  ) 
 

これによるHMACの生成を奨励する。

dkcHash.c106 行で定義されています。

参照先 dkc_SecureHashObject::Digest, dkc_SecureHashObject::digest_binary_size, dkc_SecureHashObject::digest_string_size, dkc_SecureHashObject::DigestStr, dkcAllocSHA512(), dkcSHA512Digest(), dkcSHA512DigestStr(), dkcSHA512Final(), dkcSHA512Init(), dkcSHA512Load(), dkc_SecureHashObject::Final, dkc_SecureHashObject::Init, dkc_SecureHashObject::Load, dkc_SecureHashObject::mObj, SHA512_BIN_BUFFER_SIZE, と SHA512_STR_BUFFER_SIZE.

参照元 dkcAllocSHO().

int WINAPI dkcSHODigest DKC_SECURE_HASH_OBJECT p,
BYTE buff,
size_t  size
 

dkcHash.c262 行で定義されています。

参照先 check_, dkc_SecureHashObject::Digest, と dkc_SecureHashObject::mObj.

参照元 dkcHMACDigest(), dkcHMACFinal(), と shc().

00263 {
00264     DKC_SHO_DIGEST_F_TYPE digest = (DKC_SHO_DIGEST_F_TYPE)p->Digest;
00265     check_();
00266     return digest(p->mObj,buff,size);
00267 }

int WINAPI dkcSHODigestStr DKC_SECURE_HASH_OBJECT p,
char *  buff,
size_t  size
 

dkcHash.c254 行で定義されています。

参照先 check_, dkc_SecureHashObject::DigestStr, と dkc_SecureHashObject::mObj.

参照元 dkcHMACDigestStr(), dkcHMACFinal(), と shc().

00255 {
00256     DKC_SHO_DIGESTSTR_F_TYPE digeststr = (DKC_SHO_DIGESTSTR_F_TYPE)p->DigestStr;
00257     check_();
00258     return digeststr(p->mObj,buff,size);
00259 }

void WINAPI dkcSHOFinal DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c248 行で定義されています。

参照先 check_, dkc_SecureHashObject::Final, と dkc_SecureHashObject::mObj.

参照元 dkcHMACFinal(), と shc().

00248                                                   {
00249     DKC_SHO_FINAL_F_TYPE final = (DKC_SHO_FINAL_F_TYPE)p->Final;
00250     check_();
00251     final(p->mObj);
00252 }

void WINAPI dkcSHOInit DKC_SECURE_HASH_OBJECT p  ) 
 

dkcHash.c228 行で定義されています。

参照先 dkc_SecureHashObject::Init, dkc_SecureHashObject::mInited, dkc_SecureHashObject::mObj, と TRUE.

参照元 dkcHMACFinal(), dkcHMACInit(), と dkcSHOLoad().

00229 {
00230     DKC_SHO_INIT_F_TYPE init = (DKC_SHO_INIT_F_TYPE)p->Init;
00231     init(p->mObj);
00232 
00233     p->mInited = TRUE;
00234 }

void WINAPI dkcSHOLoad DKC_SECURE_HASH_OBJECT p,
const BYTE pBuffer,
DWORD  dwSize
 

dkcHash.c236 行で定義されています。

参照先 check_, dkcSHOInit(), FALSE, dkc_SecureHashObject::Load, dkc_SecureHashObject::mInited, と dkc_SecureHashObject::mObj.

参照元 dkcHMACFinal(), dkcHMACKeyInner(), dkcHMACLoad(), と shc().

00237 {
00238     DKC_SHO_LOAD_F_TYPE load = (DKC_SHO_LOAD_F_TYPE)p->Load;
00239     check_();
00240     if(FALSE == p->mInited){
00241         dkcSHOInit(p);
00242     }
00243     load(p->mObj,pBuffer,dwSize);
00244 }

static DKC_INLINE int shc UINT  hash_option,
void *  digest_dest,
size_t  destsize,
const BYTE data,
size_t  data_size,
dkctBOOL  isBinary
[static]
 

dkcHash.c272 行で定義されています。

参照先 dkcAllocSHO(), dkcFreeSHO(), dkcSHODigest(), dkcSHODigestStr(), dkcSHOFinal(), dkcSHOLoad(), と NULL.

参照元 dkcSecureHashCalculateBinaryDigest(), と dkcSecureHashCalculateStringDigest().

00276 {
00277     int r = edk_FAILED;
00278     DKC_SECURE_HASH_OBJECT *p = dkcAllocSHO(hash_option);
00279     if(NULL==p){
00280         goto Error;
00281     }
00282 
00283     dkcSHOLoad(p,data,data_size);
00284 
00285     dkcSHOFinal(p);
00286 
00287     if(isBinary){
00288         r = dkcSHODigest(p,digest_dest,destsize);
00289     }else{//false
00290         r = dkcSHODigestStr(p,digest_dest,destsize);
00291     }
00292     if(DKUTIL_FAILED(r)){
00293         goto Error;
00294     }
00295     r = edk_SUCCEEDED;
00296 
00297 Error:
00298     dkcFreeSHO(&p);
00299     return r;
00300 }


dkutil_cに対してMon Jan 16 00:41:35 2006に生成されました。  doxygen 1.4.4