#include "dkcSHA512.h"
#include "dkcStdio.h"
dkcSHA512.cのインクルード依存関係図
マクロ定義 | |
#define | DKUTIL_C_SHA512_C |
#define | SHA512_BUFFER_SIZE (SHA512_BLOCK * 8) |
#define | cpuid __asm __emit 0fh __asm __emit 0a2h |
関数 | |
DKC_INLINE BOOL | CheckMMX (void) |
DKC_INLINE DWORD | ReverseEndianDWORD (DWORD x) |
DKC_INLINE QWORD | ReverseEndianQWORD (QWORD x) |
DKC_INLINE QWORD | Rotate (QWORD x, DWORD n) |
DKC_INLINE QWORD | Ch (QWORD x, QWORD y, QWORD z) |
DKC_INLINE QWORD | Maj (QWORD x, QWORD y, QWORD z) |
DKC_INLINE QWORD | S0 (QWORD x) |
DKC_INLINE QWORD | S1 (QWORD x) |
DKC_INLINE QWORD | s0 (QWORD x) |
DKC_INLINE QWORD | s1 (QWORD x) |
DKC_INLINE void | Generate (DKC_SHA512 *) |
DKC_INLINE void | MMX_Generate (DKC_SHA512 *) |
DKC_INLINE void | Default_Generate (DKC_SHA512 *p) |
DKC_SHA512 *WINAPI | dkcAllocSHA512 () |
void WINAPI | dkcSHA512Init (DKC_SHA512 *p) |
dkcAllocSHA512()から取得した領域を初期化する。 | |
void WINAPI | dkcSHA512Load (DKC_SHA512 *p, const BYTE *pBuffer, DWORD dwSize) |
void WINAPI | dkcSHA512Final (DKC_SHA512 *p) |
int WINAPI | dkcSHA512DigestStr (DKC_SHA512 *p, char *buff, size_t size) |
文字列のMessage Digestを取得する。 | |
int WINAPI | dkcSHA512FinalDigestStr (DKC_SHA512 *p, char *buff, size_t size) |
int WINAPI | dkcSHA512Digest (DKC_SHA512 *p, BYTE *buff, size_t size) |
バイナリのMessage Digestを取得する。 | |
int WINAPI | dkcSHA512FinalDigest (DKC_SHA512 *p, BYTE *buff, size_t size) |
int WINAPI | dkcFreeSHA512 (DKC_SHA512 **p) |
変数 | |
const QWORD | c_qwInitH [SHA512_HASH] |
const QWORD | c_qwK [SHA512_WORK] |
dkcSHA512.c で定義されています。
|
dkcSHA512.c の 48 行で定義されています。 |
|
dkcSHA512.c の 8 行で定義されています。 |
|
dkcSHA512.c の 13 行で定義されています。 参照元 dkcSHA512Final(), と dkcSHA512Load(). |
|
dkcSHA512.c の 63 行で定義されています。 参照先 DKC_INLINE, と QWORD. 参照元 Default_Generate(), と Generate().
00063 {return (x & (y ^ z)) ^ z;}
|
|
dkcSHA512.c の 50 行で定義されています。 参照先 BOOL, DKC_INLINE, と dkcIsMMX(). 参照元 dkcAllocSHA512().
00051 { 00052 return dkcIsMMX(); 00053 } |
|
dkcSHA512.c の 74 行で定義されています。 参照先 c_qwK, Ch(), DKC_INLINE, DKC_SHA512, dkc_SHA512::m_aBlock, dkc_SHA512::m_qwH, Maj(), QWORD, ReverseEndianQWORD(), S0(), s0(), S1(), s1(), SHA512_BLOCK, SHA512_HASH, と SHA512_WORK. 参照元 Generate(), と MMX_Generate().
00074 { 00075 int i; 00076 QWORD W[SHA512_WORK]; 00077 QWORD Hash[SHA512_WORK + SHA512_HASH]; 00078 QWORD *pHash = &Hash[SHA512_WORK]; 00079 QWORD qwT1, qwT2; 00080 for(i = 0; i < SHA512_HASH; i++) Hash[SHA512_WORK + i] = p->m_qwH[i]; 00081 for(i = 0; i < SHA512_BLOCK; i++) W[i] = ReverseEndianQWORD(p->m_aBlock[i]); 00082 for(i = SHA512_BLOCK; i < SHA512_WORK; i++) W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16]; 00083 for(i = 0; i < SHA512_WORK; i++){ 00084 pHash--; 00085 qwT1 = pHash[8] + S1(pHash[5]) + Ch(pHash[5], pHash[6], pHash[7]) + c_qwK[i] + W[i]; 00086 qwT2 = S0(pHash[1]) + Maj(pHash[1], pHash[2], pHash[3]); 00087 pHash[4] += qwT1; 00088 pHash[0] = qwT1 + qwT2; 00089 } 00090 for(i = 0; i < SHA512_HASH; i++) p->m_qwH[i] += Hash[i]; 00091 } |
|
dkcSHA512.c の 398 行で定義されています。 参照先 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 } |
|
dkcSHA512.c の 533 行で定義されています。 参照先 DKC_SHA512, dkcFree(), edk_FAILED, と NULL.
00533 { 00534 if(NULL==p){ 00535 return edk_FAILED; 00536 } 00537 return dkcFree((void **)p); 00538 } |
|
バイナリのMessage Digestを取得する。
dkcSHA512.c の 509 行で定義されています。 参照先 BYTE, DKC_SHA512, edk_BufferOverFlow, edk_LogicError, edk_SUCCEEDED, FALSE, dkc_SHA512::m_qwH, dkc_SHA512::mFinalized, と SHA512_BIN_BUFFER_SIZE.
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 } |
|
文字列のMessage Digestを取得する。
dkcSHA512.c の 477 行で定義されています。 参照先 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 } |
|
dkcSHA512.c の 456 行で定義されています。 参照先 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 } |
|
dkcSHA512.c の 527 行で定義されています。 参照先 BYTE, DKC_SHA512, dkcSHA512Digest(), と dkcSHA512Final().
00527 { 00528 dkcSHA512Final(p); 00529 return dkcSHA512Digest(p,buff,size); 00530 } |
|
dkcSHA512.c の 502 行で定義されています。 参照先 DKC_SHA512, dkcSHA512DigestStr(), と dkcSHA512Final().
00502 { 00503 dkcSHA512Final(p); 00504 return dkcSHA512DigestStr(p,buff,size); 00505 } |
|
dkcAllocSHA512()から取得した領域を初期化する。
dkcSHA512.c の 408 行で定義されています。 参照先 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 } |
|
dkcSHA512.c の 419 行で定義されています。 参照先 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 } |
|
dkcSHA512.c の 389 行で定義されています。 参照先 Default_Generate(), DKC_INLINE, DKC_SHA512, dkc_SHA512::m_bMMX, と MMX_Generate(). 参照元 dkcSHA1Load(), dkcSHA256Load(), と dkcSHA512Load().
00390 { 00391 if(p->m_bMMX){ 00392 MMX_Generate(p); 00393 return; 00394 } 00395 Default_Generate(p); 00396 } |
|
dkcSHA512.c の 64 行で定義されています。 参照先 DKC_INLINE, と QWORD. 参照元 Default_Generate(), と Generate().
00064 {return (x & (y | z)) | (y & z);}
|
|
dkcSHA512.c の 383 行で定義されています。 参照先 Default_Generate(), DKC_INLINE, と DKC_SHA512. 参照元 Generate().
00383 { 00384 Default_Generate(p); 00385 } |
|
dkcSHA512.c の 56 行で定義されています。 参照先 DKC_INLINE, dkcReverseEndian32(), と DWORD.
00056 { 00057 return dkcReverseEndian32(x); 00058 } |
|
dkcSHA512.c の 59 行で定義されています。 参照先 DKC_INLINE, dkcReverseEndian64(), と QWORD. 参照元 Default_Generate(), と dkcSHA512Final().
00059 { 00060 return dkcReverseEndian64(x); 00061 } |
|
dkcSHA512.c の 62 行で定義されています。 参照先 DKC_INLINE, と QWORD. 参照元 Generate(), s0(), S0(), s1(), と S1().
00062 {return (x >> n) | (x << (64 - n));}
|
|
dkcSHA512.c の 67 行で定義されています。 参照先 DKC_INLINE, QWORD, と Rotate(). 参照元 Default_Generate(), と Generate().
|
|
dkcSHA512.c の 65 行で定義されています。 参照先 DKC_INLINE, QWORD, と Rotate(). 参照元 Default_Generate(), と Generate().
|
|
dkcSHA512.c の 68 行で定義されています。 参照先 DKC_INLINE, QWORD, と Rotate(). 参照元 Default_Generate(), と Generate().
|
|
dkcSHA512.c の 66 行で定義されています。 参照先 DKC_INLINE, QWORD, と Rotate(). 参照元 Default_Generate(), と Generate().
|
|
初期値: { 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, } dkcSHA512.c の 18 行で定義されています。 参照元 dkcSHA512Init(). |
|
初期値: { 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817, } dkcSHA512.c の 23 行で定義されています。 参照元 Default_Generate(). |