メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcSHA512.h

SHA 512 original : General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved. convert C by d金魚. [詳細]

#include "dkcOSIndependent.h"

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

Include dependency graph

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

Included by dependency graph

ソースコードを見る。

構成

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 *)
 dkcAllocSHA512()から取得した領域を初期化する。

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

参照元 dkcSHA512Digest().

#define SHA512_BLOCK   16
 

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

参照元 Default_Generate().

#define SHA512_HASH   8
 

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

参照元 Default_Generate(), dkcSHA512DigestStr(), と dkcSHA512Init().

#define SHA512_STR_BUFFER_SIZE   (SHA512_HASH * 16 + 1)
 

SHA512のハッシュ文字列に必要なバッファサイズ.

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

参照元 dkcSHA512DigestStr().

#define SHA512_WORK   80
 

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

参照元 Default_Generate().


型定義

typedef struct dkc_SHA512 DKC_SHA512
 

参照元 Default_Generate(), dkcAllocSHA512(), dkcFreeSHA512(), dkcSHA512Digest(), dkcSHA512DigestStr(), dkcSHA512Final(), dkcSHA512FinalDigest(), dkcSHA512FinalDigestStr(), dkcSHA512Init(), dkcSHA512Load(), Generate(), と MMX_Generate().


関数

DKC_EXTERN DKC_SHA512* WINAPI dkcAllocSHA512  ) 
 

戻り値:
DKC_SHA512構造体への確保したメモリ領域
覚え書き:
すでにdkcSHA512Init()は呼ばれています。

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

参照先 CheckMMX(), DKC_SHA512, dkcAllocate(), dkcSHA512Init(), dkc_SHA512::m_bMMX, と NULL.

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

参照先 DKC_SHA512, dkcFree(), edk_FAILED, と NULL.

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

参照先 BYTE, DKC_SHA512, edk_BufferOverFlow, edk_LogicError, edk_SUCCEEDED, FALSE, dkc_SHA512::m_qwH, dkc_SHA512::mFinalized, と SHA512_BIN_BUFFER_SIZE.

参照元 dkcSHA512FinalDigest().

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

参照先 DKC_SHA512, dkc_strcpy(), DWORD, edk_BufferOverFlow, edk_LogicError, FALSE, dkc_SHA512::m_qwH, dkc_SHA512::mFinalized, SHA512_HASH, と SHA512_STR_BUFFER_SIZE.

参照元 dkcSHA512FinalDigestStr().

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

参照先 BYTE, DKC_SHA512, dkcSHA512Load(), dkc_SHA512::m_nNumChr, dkc_SHA512::m_qwHNumBits, dkc_SHA512::m_qwLNumBits, dkc_SHA512::mFinalized, QWORD, ReverseEndianQWORD(), SHA512_BUFFER_SIZE, と TRUE.

参照元 dkcSHA384Final(), dkcSHA512FinalDigest(), と dkcSHA512FinalDigestStr().

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

参照先 BYTE, DKC_SHA512, dkcSHA512Digest(), と dkcSHA512Final().

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

参照先 DKC_SHA512, dkcSHA512DigestStr(), と dkcSHA512Final().

00502                                                                         {
00503     dkcSHA512Final(p);
00504     return dkcSHA512DigestStr(p,buff,size);
00505 }

DKC_EXTERN void WINAPI dkcSHA512Init DKC_SHA512  ) 
 

dkcAllocSHA512()から取得した領域を初期化する。

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

参照先 c_qwInitH, DKC_SHA512, FALSE, dkc_SHA512::m_nNumChr, dkc_SHA512::m_qwH, dkc_SHA512::m_qwHNumBits, dkc_SHA512::m_qwLNumBits, dkc_SHA512::mFinalized, と SHA512_HASH.

参照元 dkcAllocSHA512().

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

参照先 BYTE, DKC_SHA512, DWORD, Generate(), dkc_SHA512::m_aBlock, dkc_SHA512::m_nNumChr, dkc_SHA512::m_qwHNumBits, dkc_SHA512::m_qwLNumBits, dkc_SHA512::mFinalized, QWORD, と SHA512_BUFFER_SIZE.

参照元 dkcSHA384Load(), と dkcSHA512Final().

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 }


dkutil_cに対してTue Oct 19 03:36:28 2004に生成されました。 doxygen 1.3.6