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

# dkcSHA512.h

SHA 512 [詳細]

`#include "dkcOSIndependent.h"`

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

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

ソースコードを見る。

## 構成
struct | dkc_SHA512
## マクロ定義
#define | SHA512_HASH 8
#define | SHA512_BLOCK 16
#define | SHA512_WORK 80
#define | SHA512_BIN_BUFFER_SIZE (SHA512_HASH * 8)
| SHA512の生ハッシュ値(binary)に必要なバッファサイズ
#define | SHA512_STR_BUFFER_SIZE (SHA512_HASH * 16 + 1)
| SHA512のハッシュ文字列に必要なバッファサイズ
## 型定義
typedef dkc_SHA512 | DKC_SHA512
## 関数
DKC_EXTERN DKC_SHA512 *WINAPI | dkcAllocSHA512 ()
DKC_EXTERN void WINAPI | dkcSHA512Init (DKC_SHA512 *)
DKC_EXTERN void WINAPI | dkcSHA512Load (DKC_SHA512 *p, const BYTE *pBuffer, DWORD dwSize)
DKC_EXTERN void WINAPI | dkcSHA512Final (DKC_SHA512 *p)
DKC_EXTERN int WINAPI | dkcSHA512DigestStr (DKC_SHA512 *p, char *buff, size_t size)
| 文字列のMessage Digestを取得する。
DKC_EXTERN int WINAPI | dkcSHA512Digest (DKC_SHA512 *p, BYTE *buff, size_t size)
| バイナリのMessage Digestを取得する。
DKC_EXTERN int WINAPI | dkcSHA512FinalDigestStr (DKC_SHA512 *p, char *buff, size_t size)
DKC_EXTERN int WINAPI | dkcSHA512FinalDigest (DKC_SHA512 *p, BYTE *buff, size_t size)
DKC_EXTERN int WINAPI | dkcFreeSHA512 (DKC_SHA512 **p)

## 説明

SHA 512

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

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

## マクロ定義

#define SHA512_BIN_BUFFER_SIZE (SHA512_HASH * 8)

| SHA512の生ハッシュ値(binary)に必要なバッファサイズ dkcSHA512.h の 21 行で定義されています。 参照元 dkcCalculateInitializeVector(), dkcSHA512Digest(), と dkcSHO_SHA512Init().

#define SHA512_BLOCK 16

| dkcSHA512.h の 16 行で定義されています。 参照元 Default_Generate().

#define SHA512_HASH 8

| dkcSHA512.h の 15 行で定義されています。 参照元 Default_Generate(), dkcSHA512DigestStr(), と dkcSHA512Init().

#define SHA512_STR_BUFFER_SIZE (SHA512_HASH * 16 + 1)

| SHA512のハッシュ文字列に必要なバッファサイズ dkcSHA512.h の 23 行で定義されています。 参照元 dkcSHA512DigestStr(), と dkcSHO_SHA512Init().

#define SHA512_WORK 80

| dkcSHA512.h の 17 行で定義されています。 参照元 Default_Generate().

## 型定義

typedef struct dkc_SHA512 DKC_SHA512

## 関数

DKC_EXTERN DKC_SHA512* WINAPI dkcAllocSHA512 | ( |  | ) |

| 戻り値: DKC_SHA512構造体への確保したメモリ領域 覚え書き: すでにdkcSHA512Init()は呼ばれています。 dkcSHA512.c の 398 行で定義されています。 参照先 CheckMMX(), dkcAllocate(), dkcSHA512Init(), dkc_SHA512::m_bMMX, と NULL. 参照元 dkcCalculateInitializeVector(), と dkcSHO_SHA512Init().
    00398                                    {
    00399     DKC_SHA512 *p = dkcAllocate(sizeof(DKC_SHA512));
    00400     if(NULL==p){
    00401         return NULL;
    00402     }
    00403     p->m_bMMX = CheckMMX();
    00404     dkcSHA512Init(p);
    00405     return p;
    00406 }

DKC_EXTERN int WINAPI dkcFreeSHA512 | ( | DKC_SHA512 ** | p | ) |

  | 引数:
  | p[in][out] | dkcAllocSHA512()で取得したポインタへのポインタ
戻り値: 上手く開放できたらedk_SUCCEEDED dkcSHA512.c の 533 行で定義されています。 参照先 dkcFree(), と NULL. 参照元 dkcCalculateInitializeVector(), と dkcFreeSHO().
    00533                                         {
    00534     if(NULL==p){
    00535         return edk_FAILED;
    00536     }
    00537     return dkcFree((void **)p);
    00538 }

DKC_EXTERN int WINAPI dkcSHA512Digest | ( | DKC_SHA512 * | p,
|  | BYTE * | buff,
|  | size_t | size
| ) |

| バイナリのMessage Digestを取得する。 dkcSHA512.c の 509 行で定義されています。 参照先 BYTE, FALSE, dkc_SHA512::m_qwH, dkc_SHA512::mFinalized, と SHA512_BIN_BUFFER_SIZE. 参照元 dkcSHA512FinalDigest(), と dkcSHO_SHA512Init().
    00509                                                                 {
    00510     //if(sizeof(QWORD) * SHA512_HASH > size){
    00511     size_t i;
    00512     if(SHA512_BIN_BUFFER_SIZE > size){
    00513         return edk_BufferOverFlow;
    00514     }
    00515     if(FALSE==p->mFinalized){
    00516         //まだFinalやってないっつーの
    00517         return edk_LogicError;
    00518     }
    00519     for(i = 0; i < SHA512_BIN_BUFFER_SIZE; ++i){
    00520         buff[i] = (BYTE)(p->m_qwH[i >> 3] >> (8 * (~i & 7)));
    00521     }
    00522     return edk_SUCCEEDED;
    00523     //return dkc_memcpy(buff,size,(const void *)p->m_qwH,sizeof(p->m_qwH));
    00524 }

DKC_EXTERN int WINAPI dkcSHA512DigestStr | ( | DKC_SHA512 * | p,
|  | char * | buff,
|  | size_t | size
| ) |

  | 文字列のMessage Digestを取得する。 引数:
  | p[in][out] | dkcAllocSHA512()で取得したポインタ
  | buff[out] | 書き込むバッファへのポインタ
  | size[in] | buffのサイズ
戻り値: 成功したらedk_SUCCEEDEDが返る dkcSHA512.c の 477 行で定義されています。 参照先 dkc_strcpy(), DWORD, FALSE, dkc_SHA512::m_qwH, dkc_SHA512::mFinalized, SHA512_HASH, と SHA512_STR_BUFFER_SIZE. 参照元 dkcSHA512FinalDigestStr(), と dkcSHO_SHA512Init().
    00477                                                                    {
    00478     //char s[SHA512_HASH * 16 + 1];
    00479     char s[ SHA512_STR_BUFFER_SIZE ];
    00480     int i;
    00481
    00482     s[SHA512_HASH * 16 ] = '\0';
    00483     //if(size <= sizeof(s)){
    00484     if(SHA512_STR_BUFFER_SIZE > size){
    00485         return edk_BufferOverFlow;
    00486     }
    00487     if(FALSE==p->mFinalized){
    00488         //まだFinalやってないっつーの
    00489         return edk_LogicError;
    00490     }
    00491
    00492     for(i = 0; i < SHA512_HASH; i++){
    00493         sprintf(s + i * 16,     "%08x", (DWORD)(p->m_qwH[i] >> 32));
    00494         sprintf(s + i * 16 + 8, "%08x", (DWORD)(p->m_qwH[i] & 0x00000000ffffffff));
    00495     }
    00496     //std::string strDigest = s;
    00497     //return strDigest;
    00498     return dkc_strcpy(buff,size,s,strlen(s));
    00499 }

DKC_EXTERN void WINAPI dkcSHA512Final | ( | DKC_SHA512 * | p | ) |

  | 引数:
  | p[in][out] | dkcAllocSHA512()で取得したポインタ
覚え書き: dkcSHA512FinalDigest()を使用する事を奨励します。 dkcSHA512.c の 456 行で定義されています。 参照先 BYTE, dkcSHA512Load(), dkc_SHA512::m_nNumChr, dkc_SHA512::m_qwHNumBits, dkc_SHA512::m_qwLNumBits, dkc_SHA512::mFinalized, ReverseEndianQWORD(), SHA512_BUFFER_SIZE, と TRUE. 参照元 dkcSHA384Final(), dkcSHA512FinalDigest(), dkcSHA512FinalDigestStr(), と dkcSHO_SHA512Init().
    00456                                          {
    00457
    00458     BYTE cZero = 0x00;
    00459     BYTE cOne  = 0x80;
    00460     QWORD qwHNumBits;
    00461     QWORD qwLNumBits;
    00462     if(p->mFinalized){
    00463         return;
    00464     }
    00465     qwHNumBits = ReverseEndianQWORD(p->m_qwHNumBits);
    00466     qwLNumBits = ReverseEndianQWORD(p->m_qwLNumBits);
    00467
    00468     dkcSHA512Load(p,&cOne, 1);
    00469     while(p->m_nNumChr != SHA512_BUFFER_SIZE - 16) dkcSHA512Load(p,&cZero, 1);
    00470
    00471     dkcSHA512Load(p,(BYTE *)&qwHNumBits, 8);
    00472     dkcSHA512Load(p,(BYTE *)&qwLNumBits, 8);
    00473
    00474     p->mFinalized = TRUE;
    00475 }

DKC_EXTERN int WINAPI dkcSHA512FinalDigest | ( | DKC_SHA512 * | p,
|  | BYTE * | buff,
|  | size_t | size
| ) |

| 参照: dkcSHA512Digest() dkcSHA512FinalDigestStr() dkcSHA512FinalDigestStr()の binaryのハッシュ値 版 dkcSHA512.c の 527 行で定義されています。 参照先 dkcSHA512Digest(), と dkcSHA512Final(). 参照元 dkcCalculateInitializeVector().
    00527                                                                      {
    00528     dkcSHA512Final(p);
    00529     return dkcSHA512Digest(p,buff,size);
    00530 }

DKC_EXTERN int WINAPI dkcSHA512FinalDigestStr | ( | DKC_SHA512 * | p,
|  | char * | buff,
|  | size_t | size
| ) |

| 参照: 引数、戻り値についてはdkcSHA512DigestStr()と同じです。 覚え書き: dkcSHA512Final()とdkcSHA512DigestStr()を使用するより、この関数の使用を奨励します。 dkcSHA512.c の 502 行で定義されています。 参照先 dkcSHA512DigestStr(), と dkcSHA512Final().
    00502                                                                         {
    00503     dkcSHA512Final(p);
    00504     return dkcSHA512DigestStr(p,buff,size);
    00505 }

DKC_EXTERN void WINAPI dkcSHA512Init | ( | DKC_SHA512 * |  | ) |

| 戻り値: dkcAllocSHA512()から取得した領域を初期化する。 dkcSHA512.c の 408 行で定義されています。 参照先 c_qwInitH, FALSE, dkc_SHA512::m_nNumChr, dkc_SHA512::m_qwH, dkc_SHA512::m_qwHNumBits, dkc_SHA512::m_qwLNumBits, dkc_SHA512::mFinalized, と SHA512_HASH. 参照元 dkcAllocSHA512(), dkcCalculateInitializeVector(), と dkcSHO_SHA512Init().
    00408                                         {
    00409     int i;
    00410     for(i = 0; i < SHA512_HASH; i++){
    00411         p->m_qwH[i] = c_qwInitH[i];
    00412     }
    00413     p->m_qwLNumBits = 0;
    00414     p->m_qwHNumBits = 0;
    00415     p->m_nNumChr = 0;
    00416     p->mFinalized = FALSE;
    00417 }

DKC_EXTERN void WINAPI dkcSHA512Load | ( | DKC_SHA512 * | p,
|  | const BYTE * | pBuffer,
|  | DWORD | dwSize
| ) |

  | 引数:
  | p[in][out] | dkcAllocSHA512()で取得したポインタ
  | pBuffer[in] | 読み取るバッファへのポインタ
  | dwSize[in] | バッファにアクセスしてOKなサイズ
dkcSHA512.c の 419 行で定義されています。 参照先 BYTE, DWORD, Generate(), dkc_SHA512::m_aBlock, dkc_SHA512::m_nNumChr, dkc_SHA512::m_qwHNumBits, dkc_SHA512::m_qwLNumBits, dkc_SHA512::mFinalized, と SHA512_BUFFER_SIZE. 参照元 dkcCalculateInitializeVector(), dkcSHA384Load(), dkcSHA512Final(), と dkcSHO_SHA512Init().
    00419                                                                          {
    00420     QWORD qwSize;
    00421     QWORD qwLNumBits;
    00422     BYTE *pBlock;
    00423     DWORD dwReadSize;
    00424
    00425     if(dwSize == 0) return;
    00426     if(p->mFinalized){
    00427         return;
    00428     }
    00429
    00430     qwSize = dwSize;
    00431     qwLNumBits = (p->m_qwLNumBits + (qwSize << 3));
    00432     if(qwLNumBits < p->m_qwLNumBits) p->m_qwHNumBits++;
    00433 //  p->m_qwHNumBits += qwSize >> 61;
    00434     p->m_qwLNumBits = qwLNumBits;
    00435
    00436     pBlock = (BYTE *)p->m_aBlock;
    00437     while(dwSize){
    00438         //dwReadSize = (dwSize < SHA512_BUFFER_SIZE - p->m_nNumChr) ?
    00439         dwReadSize = (dwSize < SHA512_BUFFER_SIZE - (DWORD)p->m_nNumChr) ?
    00440              dwSize :
    00441             (SHA512_BUFFER_SIZE - p->m_nNumChr);
    00442
    00443         memcpy(pBlock + p->m_nNumChr, pBuffer, dwReadSize);
    00444
    00445         p->m_nNumChr += dwReadSize;
    00446         pBuffer += dwReadSize;
    00447         dwSize -= dwReadSize;
    00448
    00449         if(p->m_nNumChr == SHA512_BUFFER_SIZE){
    00450             Generate(p);
    00451             p->m_nNumChr = 0;
    00452         }
    00453     }
    00454 }