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

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

参照元 dkcAllocHC256(), と dkcAllocHC256NoLimitKeyLength().

#define dkcdHC256_KEY_SIZE   32
 

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

参照元 dkcAllocHC256().

#define dkcHC256_Byte  )     dkcHC256Process(p);
 

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

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

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

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

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


型定義

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

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

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

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

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

参照先 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 }


dkutil_cに対してMon Jan 16 00:41:46 2006に生成されました。  doxygen 1.4.4