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

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_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.c92 行で定義されています。

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


型定義

typedef void(WINAPI * DKC_SHO_HASH_INIT_F_TYPE)(DKC_SECURE_HASH_OBJECT *)
 

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


関数

static DKC_INLINE void check_init  )  [static]
 

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

参照先 dkcmFORCE_NOT_ASSERT.

参照元 dkcAllocSHO().

00088                                    {
00089     dkcmFORCE_NOT_ASSERT(sizeof(void *) != sizeof(DKC_SHA1 *));
00090 }

DKC_SECURE_HASH_OBJECT* WINAPI dkcAllocSHO UINT  option  ) 
 

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

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

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

00098 {
00099     DKC_SECURE_HASH_OBJECT *p;
00100     DKC_SHO_HASH_INIT_F_TYPE init_func;
00101 
00102     check_init();
00103     p = dkcAllocate(sizeof(DKC_SECURE_HASH_OBJECT));
00104     if(NULL==p){
00105         return NULL;
00106     }
00107 
00108     {
00109         switch(option)
00110         {
00111         case edkcSH_MD5:
00112             init_func = dkcSHO_MD5Init;
00113             break;
00114         case edkcSH_SHA1:
00115             init_func = dkcSHO_SHA1Init;
00116             break;
00117         case edkcSH_SHA256:
00118             init_func = dkcSHO_SHA256Init;
00119             break;
00120         case edkcSH_SHA384:
00121             init_func = dkcSHO_SHA384Init;
00122             break;
00123         case edkcSH_SHA512:
00124             init_func = dkcSHO_SHA512Init;
00125             break;
00126         default:
00127             goto Error;
00128         }
00129     }
00130 
00131     //各ハッシュに応じた初期化
00132     init_func(p);
00133     if(NULL==p->mObj){
00134         goto Error;
00135     }
00136     p->mOption = option;
00137     //dkcAllocate()はmemset(0)
00138     //p->mInited = 0;
00139 
00140 
00141     return p;
00142 Error:
00143     dkcFreeSHO(&p);
00144     return NULL;
00145 }

int WINAPI dkcFreeSHO DKC_SECURE_HASH_OBJECT **  pp  ) 
 

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

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

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

00148 {
00149     DKC_SECURE_HASH_OBJECT *p = *pp;
00150     int option;
00151     void **obj;
00152 
00153     if(NULL==pp || NULL==p){
00154         return edk_FAILED;
00155     }
00156     option = p->mOption;
00157     obj = &(p->mObj);
00158     
00159     switch(option)
00160     {
00161     case edkcSH_MD5:
00162         dkcFreeMD5((DKC_MD5 **)obj);
00163         break;
00164     case edkcSH_SHA1:
00165         dkcFreeSHA1((DKC_SHA1 **)obj);
00166         break;
00167     case edkcSH_SHA256:
00168         dkcFreeSHA256((DKC_SHA256 **)obj);
00169         break;
00170     case edkcSH_SHA384:
00171         dkcFreeSHA384((DKC_SHA384 **)obj);
00172         break;
00173     case edkcSH_SHA512:
00174         dkcFreeSHA512((DKC_SHA512 **)obj);
00175         break;
00176     //default:
00177 
00178         
00179     }//eos
00180     
00181     return dkcFree(pp);
00182 }

uint16 dkcHash16 uint8 *  pd,
size_t  cycle
 

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

参照先 dkcdUNSIGNED_16BIT_PRIME_NUM.

00287                                         {
00288     uint32 v = 0;
00289     size_t i;
00290     for(i=0;i<cycle;i++){
00291         v = (pd[i] << 3) + v;
00292     }
00293     return (uint16)((v % dkcdUNSIGNED_16BIT_PRIME_NUM) & 0xFFFF);
00294 }

uint32 dkcHash24 uint8 *  pd,
size_t  cycle
 

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

参照先 dkcdUNSIGNED_16BIT_PRIME_NUM.

00296                                         {
00297     uint32 v = 0;
00298     size_t i;
00299     for(i=0;i<cycle;i++){
00300         v ^= (pd[i] << 3) + v;
00301     }
00302     return (v % dkcdUNSIGNED_16BIT_PRIME_NUM) & 0xFFFFFF;
00303 }

uint8 dkcHash8 uint8 *  pd,
size_t  cycle
 

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

参照先 dkcdUNSIGNED_8BIT_PRIME_NUM.

00278                                       {
00279     uint32 v = 0;
00280     size_t i;
00281     for(i=0;i<cycle;i++){
00282         v ^= (pd[i] << 3) + v;
00283     }
00284     return (uint8)((v % dkcdUNSIGNED_8BIT_PRIME_NUM) & 0xFF);
00285 }

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.c258 行で定義されています。

参照先 shc(), と TRUE.

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

00261      {
00262 
00263     return shc(hash_option,digest_dest,destsize,data,data_size,TRUE);
00264 }

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

文字列の出力をする

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

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

参照先 FALSE, と shc().

参照元 dkcHMACInit().

00270  {
00271 
00272     return shc(hash_option,digest_dest,destsize,data,data_size,FALSE);
00273 }

void WINAPI dkcSHO_MD5Init DKC_SECURE_HASH_OBJECT p  ) 
 

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

参照先 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.c28 行で定義されています。

参照先 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.c43 行で定義されています。

参照先 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.c58 行で定義されています。

参照先 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.c74 行で定義されています。

参照先 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.c218 行で定義されています。

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

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

00219 {
00220     DKC_SHO_DIGEST_F_TYPE digest = (DKC_SHO_DIGEST_F_TYPE)p->Digest;
00221     check_();
00222     return digest(p->mObj,buff,size);
00223 }

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

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

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

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

00211 {
00212     DKC_SHO_DIGESTSTR_F_TYPE digeststr = (DKC_SHO_DIGESTSTR_F_TYPE)p->DigestStr;
00213     check_();
00214     return digeststr(p->mObj,buff,size);
00215 }

void WINAPI dkcSHOFinal DKC_SECURE_HASH_OBJECT p  ) 
 

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

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

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

00204                                                   {
00205     DKC_SHO_FINAL_F_TYPE final = (DKC_SHO_FINAL_F_TYPE)p->Final;
00206     check_();
00207     final(p->mObj);
00208 }

void WINAPI dkcSHOInit DKC_SECURE_HASH_OBJECT p  ) 
 

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

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

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

00185 {
00186     DKC_SHO_INIT_F_TYPE init = (DKC_SHO_INIT_F_TYPE)p->Init;
00187     init(p->mObj);
00188 
00189     p->mInited = TRUE;
00190 }

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

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

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

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

00193 {
00194     DKC_SHO_LOAD_F_TYPE load = (DKC_SHO_LOAD_F_TYPE)p->Load;
00195     check_();
00196     if(FALSE == p->mInited){
00197         dkcSHOInit(p);
00198     }
00199     load(p->mObj,pBuffer,dwSize);
00200 }

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.c228 行で定義されています。

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

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

00232 {
00233     int r = edk_FAILED;
00234     DKC_SECURE_HASH_OBJECT *p = dkcAllocSHO(hash_option);
00235     if(NULL==p){
00236         goto Error;
00237     }
00238 
00239     dkcSHOLoad(p,data,data_size);
00240 
00241     dkcSHOFinal(p);
00242 
00243     if(isBinary){
00244         r = dkcSHODigest(p,digest_dest,destsize);
00245     }else{//false
00246         r = dkcSHODigestStr(p,digest_dest,destsize);
00247     }
00248     if(DKUTIL_FAILED(r)){
00249         goto Error;
00250     }
00251     r = edk_SUCCEEDED;
00252 
00253 Error:
00254     dkcFreeSHO(&p);
00255     return r;
00256 }


dkutil_cに対してSat Sep 10 09:24:22 2005に生成されました。  doxygen 1.4.4