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

# dkcSHA256.h

SHA 256 [詳細]

`#include "dkcOSIndependent.h"`

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

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

ソースコードを見る。

## 構成
struct | dkc_SHA256
## マクロ定義
#define | SHA256_HASH 8
#define | SHA256_BLOCK 16
#define | SHA256_WORK 64
#define | SHA256_BIN_BUFFER_SIZE (SHA256_HASH * 4)
| SHA256の生ハッシュ値(binary)に必要なバッファサイズ
#define | SHA256_STR_BUFFER_SIZE (SHA256_HASH * 8 + 1)
| SHA256のハッシュ値文字列に必要なバッファサイズ
## 型定義
typedef dkc_SHA256 | DKC_SHA256
## 関数
DKC_EXTERN DKC_SHA256 *WINAPI | dkcAllocSHA256 ()
DKC_EXTERN void WINAPI | dkcSHA256Init (DKC_SHA256 *)
DKC_EXTERN void WINAPI | dkcSHA256Load (DKC_SHA256 *p, const BYTE *pBuffer, DWORD dwSize)
DKC_EXTERN void WINAPI | dkcSHA256Final (DKC_SHA256 *p)
DKC_EXTERN int WINAPI | dkcSHA256DigestStr (DKC_SHA256 *p, char *buff, size_t size)
| 文字列版
DKC_EXTERN int WINAPI | dkcSHA256Digest (DKC_SHA256 *p, BYTE *buff, size_t size)
| バイナリ版
DKC_EXTERN int WINAPI | dkcSHA256FinalDigestStr (DKC_SHA256 *p, char *buff, size_t size)
DKC_EXTERN int WINAPI | dkcSHA256FinalDigest (DKC_SHA256 *p, BYTE *buff, size_t size)
| バイナリ版
DKC_EXTERN int WINAPI | dkcFreeSHA256 (DKC_SHA256 **p)

## 説明

SHA 256

作者:
  original : General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved. convert C by d金魚

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

## マクロ定義

#define SHA256_BIN_BUFFER_SIZE (SHA256_HASH * 4)

| SHA256の生ハッシュ値(binary)に必要なバッファサイズ dkcSHA256.h の 18 行で定義されています。 参照元 dkcAllocHC256NoLimitKeyLength(), dkcAllocSNOW2NoLimitKeyLength(), dkcSHA256Digest(), と dkcSHO_SHA256Init().

#define SHA256_BLOCK 16

| dkcSHA256.h の 13 行で定義されています。 参照元 Generate().

#define SHA256_HASH 8

| dkcSHA256.h の 12 行で定義されています。 参照元 dkcSHA256DigestStr(), dkcSHA256Init(), と Generate().

#define SHA256_STR_BUFFER_SIZE (SHA256_HASH * 8 + 1)

| SHA256のハッシュ値文字列に必要なバッファサイズ dkcSHA256.h の 20 行で定義されています。 参照元 dkcSHA256DigestStr(), と dkcSHO_SHA256Init().

#define SHA256_WORK 64

| dkcSHA256.h の 14 行で定義されています。 参照元 Generate().

## 型定義

typedef struct dkc_SHA256 DKC_SHA256

## 関数

DKC_EXTERN DKC_SHA256* WINAPI dkcAllocSHA256 | ( |  | ) |

| 戻り値: DKC_SHA256構造体への確保したメモリ領域 覚え書き: すでにdkcSHA256Init()は呼ばれています。 dkcSHA256.c の 69 行で定義されています。 参照先 dkcAllocate(), dkcSHA256Init(), と NULL. 参照元 dkcSHO_SHA256Init().
    00069                                    {
    00070     DKC_SHA256 *p = dkcAllocate(sizeof(DKC_SHA256));
    00071     if(NULL==p){
    00072         return NULL;
    00073     }
    00074     dkcSHA256Init(p);
    00075     return p;
    00076 }

DKC_EXTERN int WINAPI dkcFreeSHA256 | ( | DKC_SHA256 ** | p | ) |

  | 引数:
  | p[in][out] | dkcAllocSHA256()で取得したポインタへのポインタ
戻り値: 上手く開放できたらedk_SUCCEEDED dkcSHA256.c の 198 行で定義されています。 参照先 dkcFree(), と NULL. 参照元 dkcFreeSHO().
    00198                                         {
    00199     if(NULL==p){
    00200         return edk_FAILED;
    00201     }
    00202     return dkcFree((void **)p);
    00203 }

DKC_EXTERN int WINAPI dkcSHA256Digest | ( | DKC_SHA256 * | p,
|  | BYTE * | buff,
|  | size_t | size
| ) |

| バイナリ版 参照: dkcSHA256DigestStr dkcSHA256.c の 176 行で定義されています。 参照先 BYTE, FALSE, dkc_SHA256::m_dwH, dkc_SHA256::mFinalized, と SHA256_BIN_BUFFER_SIZE. 参照元 dkcSHA256FinalDigest(), と dkcSHO_SHA256Init().
    00176                                                                 {
    00177     size_t i;
    00178     if(SHA256_BIN_BUFFER_SIZE > size){
    00179         return edk_BufferOverFlow;
    00180     }
    00181     if(FALSE==p->mFinalized){
    00182         //まだFinalやってないっつーの
    00183         return edk_LogicError;
    00184     }
    00185     for(i = 0; i < SHA256_BIN_BUFFER_SIZE; ++i){
    00186         buff[i] = (BYTE)(p->m_dwH[i >> 2] >> (8 * (~i & 3)));
    00187     }
    00188     return edk_SUCCEEDED;
    00189     //return dkc_memcpy(buff,size,(const void *)p->m_dwH,sizeof(p->m_dwH));
    00190 }

DKC_EXTERN int WINAPI dkcSHA256DigestStr | ( | DKC_SHA256 * | p,
|  | char * | buff,
|  | size_t | size
| ) |

  | 文字列版 引数:
  | p[in][out] | dkcAllocSHA256()で取得したポインタ
  | buff[out] | 書き込むバッファへのポインタ
  | size[in] | buffのサイズ
戻り値: 成功したらedk_SUCCEEDEDが返る dkcSHA256.c の 148 行で定義されています。 参照先 dkc_strcpy(), FALSE, dkc_SHA256::m_dwH, dkc_SHA256::mFinalized, SHA256_HASH, と SHA256_STR_BUFFER_SIZE. 参照元 dkcSHA256FinalDigestStr(), と dkcSHO_SHA256Init().
    00148                                                                    {
    00149     //char s[SHA256_HASH * 8 + 1];
    00150     char s[SHA256_STR_BUFFER_SIZE];
    00151     int i;
    00152
    00153     s[SHA256_HASH * 8]='\0';
    00154     if(SHA256_STR_BUFFER_SIZE > size){
    00155         return edk_BufferOverFlow;
    00156     }
    00157     if(FALSE==p->mFinalized){
    00158         //まだFinalやってないっつーの
    00159         return edk_LogicError;
    00160     }
    00161
    00162     for(i = 0; i < SHA256_HASH; i++){
    00163         sprintf(s + i * 8, "%08x", p->m_dwH[i]);
    00164     }
    00165     //std::string strDigest = s;
    00166     //return strDigest;
    00167     return dkc_strcpy(buff,size,s,strlen(s));
    00168 }

DKC_EXTERN void WINAPI dkcSHA256Final | ( | DKC_SHA256 * | p | ) |

  | 引数:
  | p[in][out] | dkcAllocSHA256()で取得したポインタ
覚え書き: dkcSHA256FinalDigest()を使用する事を奨励します。 dkcSHA256.c の 124 行で定義されています。 参照先 BYTE, dkcSHA256Load(), DWORD, dkc_SHA256::m_dwHNumBits, dkc_SHA256::m_dwLNumBits, dkc_SHA256::m_nNumChr, dkc_SHA256::mFinalized, ReverseEndian(), SHA256_BUFFER_SIZE, と TRUE. 参照元 dkcSHA256FinalDigest(), dkcSHA256FinalDigestStr(), と dkcSHO_SHA256Init().
    00124                                          {
    00125
    00126     BYTE cZero = 0x00;
    00127     BYTE cOne  = 0x80;
    00128     DWORD dwHNumBits;
    00129     DWORD dwLNumBits;
    00130
    00131     if(p->mFinalized){
    00132         return;
    00133     }
    00134
    00135     dwHNumBits = ReverseEndian(p->m_dwHNumBits);
    00136     dwLNumBits = ReverseEndian(p->m_dwLNumBits);
    00137
    00138     dkcSHA256Load(p,&cOne, 1);
    00139     while(p->m_nNumChr != SHA256_BUFFER_SIZE - 8) dkcSHA256Load(p,&cZero, 1);
    00140
    00141     dkcSHA256Load(p,(BYTE *)&dwHNumBits, 4);
    00142     dkcSHA256Load(p,(BYTE *)&dwLNumBits, 4);
    00143
    00144     //ファイナル処理した。
    00145     p->mFinalized = TRUE;
    00146 }

DKC_EXTERN int WINAPI dkcSHA256FinalDigest | ( | DKC_SHA256 * | p,
|  | BYTE * | buff,
|  | size_t | size
| ) |

| バイナリ版 参照: dkcSHA256DigestStr(); dkcSHA256.c の 192 行で定義されています。 参照先 dkcSHA256Digest(), と dkcSHA256Final().
    00192                                                                      {
    00193     dkcSHA256Final(p);
    00194     return dkcSHA256Digest(p,buff,size);
    00195 }

DKC_EXTERN int WINAPI dkcSHA256FinalDigestStr | ( | DKC_SHA256 * | p,
|  | char * | buff,
|  | size_t | size
| ) |

| 参照: 引数、戻り値についてはdkcSHA256DigestStr()と同じです。 覚え書き: dkcSHA256Final()とdkcSHA256DigestStr()を使用するより、この関数の使用を奨励します。 dkcSHA256.c の 169 行で定義されています。 参照先 dkcSHA256DigestStr(), と dkcSHA256Final().
    00169                                                                         {
    00170     dkcSHA256Final(p);
    00171     return dkcSHA256DigestStr(p,buff,size);
    00172 }

DKC_EXTERN void WINAPI dkcSHA256Init | ( | DKC_SHA256 * |  | ) |

| 戻り値: dkcAllocSHA256()から取得した領域を初期化する。 dkcSHA256.c の 78 行で定義されています。 参照先 c_dwInitH, FALSE, dkc_SHA256::m_dwH, dkc_SHA256::m_dwHNumBits, dkc_SHA256::m_dwLNumBits, dkc_SHA256::m_nNumChr, dkc_SHA256::mFinalized, と SHA256_HASH. 参照元 dkcAllocSHA256(), と dkcSHO_SHA256Init().
    00078                                         {
    00079     int i;
    00080     for(i = 0; i < SHA256_HASH; i++){
    00081         p->m_dwH[i] = c_dwInitH[i];
    00082     }
    00083     p->m_dwLNumBits = 0;
    00084     p->m_dwHNumBits = 0;
    00085     p->m_nNumChr = 0;
    00086     p->mFinalized = FALSE;
    00087 }

DKC_EXTERN void WINAPI dkcSHA256Load | ( | DKC_SHA256 * | p,
|  | const BYTE * | pBuffer,
|  | DWORD | dwSize
| ) |

  | 引数:
  | p[in][out] | dkcAllocSHA256()で取得したポインタ
  | pBuffer[in] | 読み取るバッファへのポインタ
  | dwSize[in] | バッファにアクセスしてOKなサイズ
dkcSHA256.c の 89 行で定義されています。 参照先 BYTE, DWORD, Generate(), dkc_SHA256::m_aBlock, dkc_SHA256::m_dwHNumBits, dkc_SHA256::m_dwLNumBits, dkc_SHA256::m_nNumChr, dkc_SHA256::mFinalized, と SHA256_BUFFER_SIZE. 参照元 dkcSHA256Final(), と dkcSHO_SHA256Init().
    00089                                                                          {
    00090     DWORD dwReadSize;
    00091     DWORD dwLNumBits;
    00092     BYTE *pBlock;
    00093
    00094     if(dwSize == 0) return;
    00095     if(p->mFinalized){
    00096         return;
    00097     }
    00098     dwLNumBits = (p->m_dwLNumBits + (dwSize << 3));
    00099     if(dwLNumBits < p->m_dwLNumBits) p->m_dwHNumBits++;
    00100     p->m_dwHNumBits += dwSize >> 29;
    00101     p->m_dwLNumBits = dwLNumBits;
    00102
    00103     pBlock = (BYTE *)p->m_aBlock;
    00104
    00105     while(dwSize){
    00106         //dwReadSize = (dwSize < SHA256_BUFFER_SIZE - p->m_nNumChr) ?
    00107         dwReadSize = (dwSize < SHA256_BUFFER_SIZE - (DWORD)p->m_nNumChr) ?
    00108             dwSize :
    00109             (SHA256_BUFFER_SIZE - p->m_nNumChr);
    00110
    00111         memcpy(pBlock + p->m_nNumChr, pBuffer, dwReadSize);
    00112
    00113         p->m_nNumChr += dwReadSize;
    00114         pBuffer += dwReadSize;
    00115         dwSize -= dwReadSize;
    00116
    00117         if(p->m_nNumChr == SHA256_BUFFER_SIZE){
    00118             Generate(p);
    00119             p->m_nNumChr = 0;
    00120         }
    00121     }
    00122 }