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

# dkcHC256.h

HC256 stream cipher Algorithm [詳細]

`#include "dkcOSIndependent.h"`

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

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

ソースコードを見る。

## 構成
struct | dkc_HC256
## マクロ定義
#define | dkcdHC256_KEY_SIZE 32
#define | dkcdHC256_IV_SIZE 32
#define | dkcHC256_Byte(p) dkcHC256Process(p);
#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 | dkcHC256Process (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)
| この処理バイトを分割していく

## 説明

HC256 stream cipher Algorithm

作者:
  Hongjun Wu in 2003. convert by d金魚

から:
  original 2003 / converted in 2004/12/20

覚え書き:
  参考資料： http://d.hatena.ne.jp/studiokingyo/20041216#p4 http://www.i2r.a-star.edu.sg/icsd/staff/hongjun/hc/

### 略語解説

    DOE : Dependent On Endian / エンディアンに依存する

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

## マクロ定義

#define dkcdHC256_IV_SIZE 32

| dkcHC256.h の 25 行で定義されています。 参照元 dkcAllocHC256(), と dkcAllocHC256NoLimitKeyLength().

#define dkcdHC256_KEY_SIZE 32

| dkcHC256.h の 24 行で定義されています。 参照元 dkcAllocHC256().

#define dkcHC256_Byte | ( | p |  | ) | dkcHC256Process(p);

| dkcHC256.h の 58 行で定義されています。

#define dkcHC256DecryptDOE | ( | a,
|  | b,
|  | c,
|  | d,
|  | e |  | ) | dkcHC256EncryptDOE(a,b,c,d,e)

| dkcHC256.h の 65 行で定義されています。

#define dkcHC256DecryptNoDestDOE | ( | a,
|  | b,
|  | c |  | ) | dkcHC256EncryptNoDestDOE(a,b,c)

| dkcHC256.h の 68 行で定義されています。

## 型定義

typedef struct dkc_HC256 DKC_HC256

## 関数

DKC_EXTERN DKC_HC256* WINAPI dkcAllocHC256 | ( | BYTE * | key,
|  | size_t | size,
|  | uint32 * | iv,
|  | size_t | ivsize
| ) |

| keyのサイズは32byte ivも32byte 参照: keyやivは内部でいじり倒されるのでそれが嫌な場合はdkcAllocHC256Const()を使ってください。 dkcHC256.c の 309 行で定義されています。 参照先 dkcAllocate(), dkcdHC256_IV_SIZE, dkcdHC256_KEY_SIZE, initialization(), NULL, store(), と uint32. 参照元 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 }

DKC_EXTERN DKC_HC256* dkcAllocHC256Const | ( | const BYTE * | key,
|  | size_t | size,
|  | const uint32 * | iv,
|  | size_t | ivsize
| ) |

DKC_EXTERN int WINAPI dkcFreeHC256 | ( | DKC_HC256 ** |  | ) |

| dkcHC256.c の 346 行で定義されています。 参照先 dkcFree().
    00346                                                  {
    00347     return dkcFree(p);
    00348 }

DKC_EXTERN int WINAPI dkcHC256EncryptDOE | ( | DKC_HC256 * | p,
|  | uint8 * | dest,
|  | size_t | dsize,
|  | const uint8 * | src,
|  | size_t | ssize
| ) |

| 覚え書き: dkcHC256.c の 376 行で定義されています。 参照先 dkcHC256EncryptNoDestDOE().
    00377 {
    00378     if(ssize > dsize){
    00379         return edk_ArgumentException;
    00380     }
    00381     if(dest != src){
    00382         memcpy(dest,src,ssize);
    00383     }
    00384     return dkcHC256EncryptNoDestDOE(p,dest,ssize);
    00385
    00386 }

DKC_EXTERN int WINAPI dkcHC256EncryptNoDestDOE | ( | DKC_HC256 * | p,
|  | uint8 * | inout,
|  | size_t | size
| ) |

| この処理バイトを分割していく dkcHC256.c の 425 行で定義されています。 参照先 dkcHC256EncryptNoDestDOE(), dkcmASSERT, dkcmNOT_ASSERT, encode_byte(), NULL, store(), dkc_HC256::store_size, dkc_HC256::u_store, と uint8. 参照元 dkcHC256EncryptDOE(), と dkcHC256EncryptNoDestDOE().
    00426 {
    00427
    00428     size_t i = 0;
    00429     int r = edk_FAILED;
    00430     size_t count,rest;
    00431     uint64 *io64 = NULL;
    00432
    00433     r = encode_byte(p,inout,size,&rest);
    00434     switch(r){
    00435     case edk_SUCCEEDED:
    00436         return r;
    00437     case edk_NoValueToProcess:
    00438         break;
    00439     default:
    00440         dkcmNOT_ASSERT(DKUTIL_FAILED(r));
    00441     }
    00442     size = size - rest;
    00443     inout += rest;
    00444     if(rest == size) return edk_SUCCEEDED;
    00445     //if(size <= 0) return edk_SUCCEEDED;
    00446
    00447     count = size / 64;
    00448     rest = size % 64;//最適化に任せよう（笑）
    00449
    00450     if(64!=p->store_size){
    00451         dkcmASSERT(p->store_size ==0);
    00452         r = store(p);
    00453         dkcmNOT_ASSERT(DKUTIL_FAILED(r));
    00454     }
    00455     io64 = (uint64 *)inout;
    00456     for(i=0;i<count;i++){
    00457         //64bit単位も良いかも？
    00458         io64[0] ^= p->u_store.a64[0];
    00459         io64[1] ^= p->u_store.a64[1];
    00460         io64[2] ^= p->u_store.a64[2];
    00461         io64[3] ^= p->u_store.a64[3];
    00462         io64[4] ^= p->u_store.a64[4];
    00463         io64[5] ^= p->u_store.a64[5];
    00464         io64[6] ^= p->u_store.a64[6];
    00465         io64[7] ^= p->u_store.a64[7];
    00466
    00467         io64+=8;
    00468         p->store_size = 0;
    00469         store(p);
    00470     }
    00471     inout =(uint8*)io64;
    00472     return dkcHC256EncryptNoDestDOE(p,inout,rest);
    00473
    00474 }

DKC_EXTERN uint8 WINAPI dkcHC256Process | ( | DKC_HC256 * | p | ) |

| dkcHC256.c の 365 行で定義されています。 参照先 dkcmNOT_ASSERT, hc256_byte(), store(), と dkc_HC256::store_size.
    00365                                                      {
    00366     int r = 0;
    00367     //DKC_4BYTE_LITTLE_ENDIAN_BASE a;
    00368     if(p->store_size <= 0){
    00369         r = store(p);
    00370         dkcmNOT_ASSERT(DKUTIL_FAILED(r));
    00371     }
    00372     return hc256_byte(p);
    00373
    00374 }