#include "dkcOSIndependent.h"
dkcHC256.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_HC256 |
マクロ定義 | |
#define | dkcdHC256_KEY_SIZE 32 |
#define | dkcdHC256_IV_SIZE 32 |
#define | dkcHC256DecryptDOE(a, b, c, d, e) dkcHC256EncryptDOE(a,b,c,d,e) |
#define | dkcHC256DecryptNoDestDOE(a, b, c) dkcHC256EncryptNoDestDOE(a,b,c) |
型定義 | |
typedef dkc_HC256 | DKC_HC256 |
関数 | |
DKC_EXTERN DKC_HC256 *WINAPI | dkcAllocHC256 (BYTE *key, size_t size, uint32 *iv, size_t ivsize) |
keyのサイズは32byte ivも32byte | |
DKC_EXTERN DKC_HC256 * | dkcAllocHC256Const (const BYTE *key, size_t size, const uint32 *iv, size_t ivsize) |
DKC_EXTERN int WINAPI | dkcFreeHC256 (DKC_HC256 **) |
DKC_EXTERN uint8 WINAPI | dkcHC256_Byte (DKC_HC256 *p) |
DKC_EXTERN int WINAPI | dkcHC256EncryptDOE (DKC_HC256 *p, uint8 *dest, size_t dsize, const uint8 *src, size_t ssize) |
DKC_EXTERN int WINAPI | dkcHC256EncryptNoDestDOE (DKC_HC256 *p, uint8 *inout, size_t size) |
この処理バイトを分割していく |
DOE : Dependent On Endian / エンディアンに依存する
dkcHC256.h で定義されています。
|
dkcHC256.h の 25 行で定義されています。 |
|
dkcHC256.h の 24 行で定義されています。 参照元 dkcAllocHC256(). |
|
dkcHC256.h の 64 行で定義されています。 |
|
dkcHC256.h の 67 行で定義されています。 |
|
|
|
keyのサイズは32byte ivも32byte
dkcHC256.c の 309 行で定義されています。 参照先 dkcAllocate(), dkcdHC256_IV_SIZE, dkcdHC256_KEY_SIZE, initialization(), NULL, と store(). 参照元 dkcAllocHC256Const(), と dkcAllocHC256NoLimitKeyLength(). 00309 { 00310 DKC_HC256 *p; 00311 //uint32 iv[8]; 00312 //size_t limit = sizeof(uint32) * 8; 00313 //if(size != limit || ivsize != limit){ 00314 if(size != dkcdHC256_KEY_SIZE || ivsize != dkcdHC256_IV_SIZE){ 00315 return NULL; 00316 } 00317 00318 p = dkcAllocate(sizeof(DKC_HC256)); 00319 if(NULL==p){ 00320 return NULL; 00321 } 00322 //DKUTIL_MEMZERO(iv,sizeof(iv)); 00323 initialization(p,(uint32 *)key,iv); 00324 store(p); 00325 //p->store_size = 64; 00326 return p; 00327 }
|
|
|
|
dkcHC256.c の 346 行で定義されています。 参照先 dkcFree(). 00346 { 00347 return dkcFree(p); 00348 }
|
|
dkcHC256.c の 353 行で定義されています。 参照先 dkcmNOT_ASSERT, get_offset, store(), dkc_HC256::store_size, と dkc_HC256::u_store. 参照元 dkcHC256EncryptNoDestDOE(). 00353 { 00354 int r = 0; 00355 size_t offset; 00356 //DKC_4BYTE_LITTLE_ENDIAN_BASE a; 00357 if(p->store_size <=0){ 00358 r = store(p); 00359 dkcmNOT_ASSERT(DKUTIL_FAILED(r)); 00360 } 00361 offset = get_offset(p); 00362 p->store_size--; 00363 return p->u_store.a8[offset]; 00364 00365 }
|
|
dkcHC256.c の 367 行で定義されています。 参照先 dkcHC256EncryptNoDestDOE(). 00368 { 00369 if(ssize > dsize){ 00370 return edk_ArgumentException; 00371 } 00372 if(dest != src){ 00373 memcpy(dest,src,ssize); 00374 } 00375 return dkcHC256EncryptNoDestDOE(p,dest,ssize); 00376 00377 }
|
|
この処理バイトを分割していく
dkcHC256.c の 380 行で定義されています。 参照先 dkcHC256_Byte(), dkcHC256EncryptNoDestDOE(), dkcmNOT_ASSERT, store(), dkc_HC256::store_size, と dkc_HC256::u_store. 参照元 dkcHC256EncryptDOE(), と dkcHC256EncryptNoDestDOE(). 00381 { 00382 00383 size_t i; 00384 int r; 00385 size_t count,rest; 00386 uint64 *io64; 00387 00388 //残り物処分 00389 if(size <= 0) return edk_SUCCEEDED; 00390 for(i=0;;){//for scope 00391 if((size > 64) && ( p->store_size == 0 || 64==p->store_size)){ 00392 break; 00393 } 00394 for(;i<size;i++){ 00395 inout[i] ^= dkcHC256_Byte(p); 00396 if(p->store_size == 0){ 00397 break; 00398 } 00399 } 00400 break; 00401 } 00402 size-=i; 00403 inout+=i; 00404 if(size <= 0) return edk_SUCCEEDED; 00405 00406 count = size / 64; 00407 rest = size % 64;//最適化に任せよう(笑) 00408 if(64!=p->store_size){ 00409 r = store(p); 00410 dkcmNOT_ASSERT(DKUTIL_FAILED(r)); 00411 } 00412 io64 = (uint64 *)inout; 00413 for(;i<count;i++){ 00414 //64bit単位も良いかも? 00415 io64[0] ^= p->u_store.a64[0]; 00416 io64[1] ^= p->u_store.a64[1]; 00417 io64[2] ^= p->u_store.a64[2]; 00418 io64[3] ^= p->u_store.a64[3]; 00419 io64[4] ^= p->u_store.a64[4]; 00420 io64[5] ^= p->u_store.a64[5]; 00421 io64[6] ^= p->u_store.a64[6]; 00422 io64[7] ^= p->u_store.a64[7]; 00423 00424 io64+=8; 00425 p->store_size = 0; 00426 store(p); 00427 } 00428 inout =(uint8*)io64; 00429 return dkcHC256EncryptNoDestDOE(p,inout,rest); 00430 00431 }
|