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

dkcArcfour.h

RC4互換アルゴリズム Arcfour [詳細]

#include "dkcOSIndependent.h"

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

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

ソースコードを見る。

構成

struct  dkc_Arcfour_State
 arcfour algprithm state (RC4互換のアルゴリズム [詳細]
struct  dkc_Arcfour2byte_State
 Arcfourを2バイトに拡張したもの 暗号強度、安全性等は不明 使用は控えた方が良いかと・・・ [詳細]

マクロ定義

#define dkcArcfourDecrypt(p, dest, destsize, src, srcsize)   dkcArcfourEncrypt(p,dest,destsize,src,srcsize)
#define dkcArcfourDecryptNoDest(p, dest_and_src, dest_and_srcsize)   dkcArcfourEncryptNoDest(p,dest_and_src,dest_and_srcsize)
#define dkcArcfour2ByteDecrypt(p, dest, destsize, src, srcsize)   dkcArcfour2ByteEncrypt(p,dest,destsize,src,srcsize)
#define dkcArcfour2ByteDecryptNoDest(p, dest_and_src, dest_and_srcsize)   dkcArcfour2ByteEncryptNoDest(p,dest_and_src,dest_and_srcsize)

型定義

typedef dkc_Arcfour_State DKC_ARCFOUR_STATE
 arcfour algprithm state (RC4互換のアルゴリズム
typedef dkc_Arcfour2byte_State DKC_ARCFOUR2BYTE_STATE
 Arcfourを2バイトに拡張したもの 暗号強度、安全性等は不明 使用は控えた方が良いかと・・・

関数

DKC_EXTERN DKC_ARCFOUR_STATE
*WINAPI 
dkcAllocArcfour (const unsigned char *key, size_t keylen)
DKC_EXTERN int WINAPI dkcFreeArcfour (DKC_ARCFOUR_STATE **p)
DKC_EXTERN unsigned char WINAPI dkcArcfourByte (DKC_ARCFOUR_STATE *p)
DKC_EXTERN int WINAPI dkcArcfourEncrypt (DKC_ARCFOUR_STATE *p, unsigned char *dest, size_t destsize, const unsigned char *src, size_t srcsize)
DKC_EXTERN void WINAPI dkcArcfourEncryptNoDest (DKC_ARCFOUR_STATE *p, unsigned char *dest_and_src, size_t dest_and_srcsize)
DKC_EXTERN DKC_ARCFOUR2BYTE_STATE
*WINAPI 
dkcAllocArcfour2Byte (const unsigned char *key, size_t keylen)
DKC_EXTERN int WINAPI dkcFreeArcfour2Byte (DKC_ARCFOUR2BYTE_STATE **p)
DKC_EXTERN unsigned short
WINAPI 
dkcArcfour2ByteProcess (DKC_ARCFOUR2BYTE_STATE *p)
DKC_EXTERN int WINAPI dkcArcfour2ByteEncrypt (DKC_ARCFOUR2BYTE_STATE *p, unsigned char *dest, size_t destsize, const unsigned char *src, size_t srcsize)
DKC_EXTERN int WINAPI dkcArcfour2ByteEncryptNoDest (DKC_ARCFOUR2BYTE_STATE *p, unsigned char *dest_and_src, size_t dest_and_srcsize)


説明

RC4互換アルゴリズム Arcfour

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


マクロ定義

#define dkcArcfour2ByteDecrypt p,
dest,
destsize,
src,
srcsize   )     dkcArcfour2ByteEncrypt(p,dest,destsize,src,srcsize)
 

dkcArcfour.h92 行で定義されています。

#define dkcArcfour2ByteDecryptNoDest p,
dest_and_src,
dest_and_srcsize   )     dkcArcfour2ByteEncryptNoDest(p,dest_and_src,dest_and_srcsize)
 

dkcArcfour.h95 行で定義されています。

#define dkcArcfourDecrypt p,
dest,
destsize,
src,
srcsize   )     dkcArcfourEncrypt(p,dest,destsize,src,srcsize)
 

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

#define dkcArcfourDecryptNoDest p,
dest_and_src,
dest_and_srcsize   )     dkcArcfourEncryptNoDest(p,dest_and_src,dest_and_srcsize)
 

dkcArcfour.h61 行で定義されています。


型定義

typedef struct dkc_Arcfour2byte_State DKC_ARCFOUR2BYTE_STATE
 

Arcfourを2バイトに拡張したもの 暗号強度、安全性等は不明 使用は控えた方が良いかと・・・

typedef struct dkc_Arcfour_State DKC_ARCFOUR_STATE
 

arcfour algprithm state (RC4互換のアルゴリズム


関数

DKC_EXTERN DKC_ARCFOUR_STATE* WINAPI dkcAllocArcfour const unsigned char *  key,
size_t  keylen
 

引数:
key[in] keyへのポインタ
keylen[in] keyのサイズ
戻り値:
DKC_ARCFOUR_STATE 構造体へのポインタ
覚え書き:
使い終わったらdkcFreeArcfourを使いましょう。

dkcArcfour.c13 行で定義されています。

参照先 dkcAllocate(), dkc_Arcfour_State::msbox, と NULL.

00015 {
00016 
00017     int i,j;
00018     unsigned char temp;
00019     unsigned char *sb1,sb2[256];
00020     DKC_ARCFOUR_STATE *p;
00021     if(NULL==key || 0==keylen){
00022         return NULL;
00023     }
00024 
00025     memset(sb2,0,sizeof(sb2));
00026     //allocate state struct
00027     p = (DKC_ARCFOUR_STATE *)dkcAllocate(sizeof(DKC_ARCFOUR_STATE));
00028     if(NULL==p){
00029         return NULL;
00030     }
00031     sb1 = p->msbox;
00032     
00033     //initialize
00034     for(i=0;i<256;i++){
00035         sb1[i] = (unsigned char)i;
00036         //嗅ぎ回られないように(なんか、意味あるのか?ないナァ?
00037         //p->msbox2[i] = key [i % keylen];
00038     }
00039     j=i=0;
00040     
00041     for(;j<256;j++){
00042         sb2[j] = key [j % keylen];
00043     }
00044 
00045 
00046     for(i=0;i<256;i++){
00047         //j = (j + sb1 [i] + sb2 [i]) % 256;
00048         j = (j + sb1[i] + sb2[i]) & 0xff;
00049         temp = sb1 [i];
00050         sb1 [i] = sb1 [j];
00051         sb1 [j] = temp;
00052         /*sb1[i] = sb1[j] - sb1[i] ;
00053     sb1[j] -= sb1[i] ;
00054     sb1[i] += sb1[j] ;*/
00055     //SWAP_NUM(sb1[i],sb1[j]);
00056     }
00057     return p;
00058 }

DKC_EXTERN DKC_ARCFOUR2BYTE_STATE* WINAPI dkcAllocArcfour2Byte const unsigned char *  key,
size_t  keylen
 

dkcArcfour.c160 行で定義されています。

参照先 dkcAllocate(), dkc_Arcfour2byte_State::msbox, と NULL.

00162 {
00163 
00164     int i,j;
00165     unsigned short temp;
00166     unsigned short *sb1,sb2[USHRT_MAX];
00167     DKC_ARCFOUR2BYTE_STATE *p;
00168     if(NULL==key || 0==keylen){
00169         return NULL;
00170     }
00171     
00172     memset(sb2,0,sizeof(sb2));
00173     //allocate state struct
00174     p = (DKC_ARCFOUR2BYTE_STATE *)dkcAllocate(sizeof(DKC_ARCFOUR2BYTE_STATE));
00175     if(NULL==p){
00176         return NULL;
00177     }
00178     sb1 = p->msbox;
00179     
00180     //initialize
00181     for(i=0;i<USHRT_MAX;i++){
00182         sb1[i] = (unsigned short)i;
00183         //嗅ぎ回られないように(なんか、意味あるのか?ないナァ?
00184         //p->msbox2[i] = key [i % keylen];
00185     }
00186     j=i=0;
00187     
00188     for(;j<USHRT_MAX;j++){
00189         sb2[j] = key [j % keylen];
00190     }
00191 
00192 
00193     for(i=0;i<USHRT_MAX;i++){
00194         //j = (j + sb1 [i] + sb2 [i]) % 256;
00195         j = (j + sb1[i] + sb2[i]) & 0xff;
00196         temp = sb1 [i];
00197         sb1 [i] = sb1 [j];
00198         sb1 [j] = temp;
00199         /*sb1[i] = sb1[j] - sb1[i] ;
00200     sb1[j] -= sb1[i] ;
00201     sb1[i] += sb1[j] ;*/
00202     //SWAP_NUM(sb1[i],sb1[j]);
00203     }
00204     return p;
00205 }

DKC_EXTERN int WINAPI dkcArcfour2ByteEncrypt DKC_ARCFOUR2BYTE_STATE p,
unsigned char *  dest,
size_t  destsize,
const unsigned char *  src,
size_t  srcsize
 

dkcArcfour.c273 行で定義されています。

参照先 dkcArcfour2ByteEncrypt_Base().

00276 {
00277     //size_t i=0;
00278     if(destsize < srcsize){
00279         return edk_BufferOverFlow;
00280     }
00281     if(srcsize % 2 != 0){//2の倍数じゃないとねぇ
00282         return edk_ArgumentException;
00283     }
00284 
00285     dkcArcfour2ByteEncrypt_Base(p,
00286         (unsigned short *)dest,(unsigned short *)src,
00287         srcsize / 2
00288     );
00289 
00290     /*for(i = 0;i < srcsize;i++){
00291         dest[i] = (unsigned char )(src[i] ^ dkcArcfourByte(p) );
00292     }*/
00293 
00294     return edk_SUCCEEDED;
00295 }

DKC_EXTERN int WINAPI dkcArcfour2ByteEncryptNoDest DKC_ARCFOUR2BYTE_STATE p,
unsigned char *  dest_and_src,
size_t  dest_and_srcsize
 

dkcArcfour.c299 行で定義されています。

参照先 dkcArcfour2ByteEncrypt_Base().

00301 {
00302     if(dest_and_srcsize % 2 != 0){//2の倍数じゃないとねぇ
00303         return edk_ArgumentException;
00304     }
00305     dkcArcfour2ByteEncrypt_Base(p,
00306         (unsigned short *)dest_and_src,(unsigned short *)dest_and_src,
00307         dest_and_srcsize / 2
00308     );
00309     return edk_SUCCEEDED;
00310 }

DKC_EXTERN unsigned short WINAPI dkcArcfour2ByteProcess DKC_ARCFOUR2BYTE_STATE p  ) 
 

dkcArcfour.c207 行で定義されています。

参照先 dkc_Arcfour2byte_State::mi, dkc_Arcfour2byte_State::mj, と dkc_Arcfour2byte_State::msbox.

00207                                                                                   {
00208   unsigned short i,j,temp;
00209   unsigned short *sb1 = p->msbox;
00210   
00211   //calc
00212   i = (unsigned short )(p->mi+1);// % 256;
00213   j = (unsigned short )(p->mj + sb1[i]);// % 256;
00214   
00215      //swap
00216   temp = sb1 [i];
00217   sb1 [i] = sb1 [j];
00218   sb1 [j] = temp;
00219 
00220   //SWAP_NUM(sb1[i],sb1[j]);
00221   //refresh
00222   p->mi = i;
00223   p->mj = j;
00224   //calc
00225   i = (unsigned short )(sb1 [i] + sb1 [j]);// % 256;
00226   j = (unsigned short )sb1[i];
00227   return j;
00228 }

DKC_EXTERN unsigned char WINAPI dkcArcfourByte DKC_ARCFOUR_STATE p  ) 
 

引数:
p[in][out] dkcAllocArcfour()で確保した領域へのポインタ
戻り値:
XORすべき値

dkcArcfour.c60 行で定義されています。

参照先 dkc_Arcfour_State::mi, dkc_Arcfour_State::mj, と dkc_Arcfour_State::msbox.

00060                                                                     {
00061   unsigned char i,j,temp;
00062   unsigned char *sb1 = p->msbox;
00063   
00064   //calc
00065   i = (unsigned char )(p->mi+1);// % 256;
00066   j = (unsigned char )(p->mj + sb1[i]);// % 256;
00067   
00068      //swap
00069   temp = sb1 [i];
00070   sb1 [i] = sb1 [j];
00071   sb1 [j] = temp;
00072 
00073   //SWAP_NUM(sb1[i],sb1[j]);
00074   //refresh
00075   p->mi = i;
00076   p->mj = j;
00077   //calc
00078   i = (unsigned char )(sb1 [i] + sb1 [j]);// % 256;
00079   j = (unsigned char )sb1[i];
00080   return j;
00081 }

DKC_EXTERN int WINAPI dkcArcfourEncrypt DKC_ARCFOUR_STATE p,
unsigned char *  dest,
size_t  destsize,
const unsigned char *  src,
size_t  srcsize
 

引数:
p[in] dkcAllocArcfour()で確保した領域へのポインタ
dest[in] 出力バッファへのポインタ
destsize[in] destのサイズ
src[in] 入力バッファへのポインタ
srcsize[in] srcのサイズ
戻り値:
edk_SUCCEEDED で成功

dkcArcfour.c123 行で定義されています。

参照先 dkcArcfourEncrypt_Base().

00126 {
00127     //size_t i=0;
00128     if(destsize < srcsize){
00129         return edk_BufferOverFlow;
00130     }
00131     dkcArcfourEncrypt_Base(p,dest,src,srcsize);
00132 
00133     /*for(i = 0;i < srcsize;i++){
00134         dest[i] = (unsigned char )(src[i] ^ dkcArcfourByte(p) );
00135     }*/
00136 
00137     return edk_SUCCEEDED;
00138 }

DKC_EXTERN void WINAPI dkcArcfourEncryptNoDest DKC_ARCFOUR_STATE p,
unsigned char *  dest_and_src,
size_t  dest_and_srcsize
 

dkcArcfour.c142 行で定義されています。

参照先 dkcArcfourEncrypt_Base().

00144 {
00145     dkcArcfourEncrypt_Base(p,dest_and_src,dest_and_src,dest_and_srcsize);
00146 }

DKC_EXTERN int WINAPI dkcFreeArcfour DKC_ARCFOUR_STATE **  p  ) 
 

引数:
dkcAllocArcfourで確保した領域へのポインタへのポインタ 
戻り値:
edk_SUCCEEDEDで成功

dkcArcfour.c148 行で定義されています。

参照先 dkcFree(), と NULL.

00148                                                 {
00149     if(NULL==p){
00150         return edk_FAILED;
00151     }
00152     return dkcFree((void **)p);
00153 }

DKC_EXTERN int WINAPI dkcFreeArcfour2Byte DKC_ARCFOUR2BYTE_STATE **  p  ) 
 

dkcArcfour.c312 行で定義されています。

参照先 dkcFree(), と NULL.

00312                                                           {
00313     if(NULL==p){
00314         return edk_FAILED;
00315     }
00316     return dkcFree((void **)p);
00317 }


dkutil_cに対してSat Sep 10 09:24:02 2005に生成されました。  doxygen 1.4.4