メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcArcfour.c

RC4互換アルゴリズム arcfour d金魚. [詳細]

#include "dkcArcfour.h"
#include "dkcStdio.h"

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

Include dependency graph

ソースコードを見る。

関数

DKC_ARCFOUR_STATE *WINAPI dkcAllocArcfour (const unsigned char *key, size_t keylen)
DKC_EXTERN unsigned char WINAPI dkcArcfourByte (DKC_ARCFOUR_STATE *p)
DKC_INLINE void dkcArcfourEncrypt_Base (DKC_ARCFOUR_STATE *p, unsigned char *dest, unsigned const char *src, size_t srcsize)
int WINAPI dkcArcfourEncrypt (DKC_ARCFOUR_STATE *p, unsigned char *dest, size_t destsize, const unsigned char *src, size_t srcsize)
void WINAPI dkcArcfourEncryptNoDest (DKC_ARCFOUR_STATE *p, unsigned char *dest_and_src, size_t dest_and_srcsize)
int WINAPI dkcFreeArcfour (DKC_ARCFOUR_STATE **p)


説明

RC4互換アルゴリズム arcfour d金魚.

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


関数

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

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

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

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

DKC_EXTERN unsigned char WINAPI dkcArcfourByte DKC_ARCFOUR_STATE p  ) 
 

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

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

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

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

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

参照先 DKC_ARCFOUR_STATE, dkcArcfourEncrypt_Base(), edk_BufferOverFlow, と edk_SUCCEEDED.

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

DKC_INLINE void dkcArcfourEncrypt_Base DKC_ARCFOUR_STATE p,
unsigned char *  dest,
unsigned const char *  src,
size_t  srcsize
[static]
 

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

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

参照元 dkcArcfourEncrypt(), と dkcArcfourEncryptNoDest().

00082 {
00083 
00084     size_t cc;
00085   unsigned char i,j;
00086   unsigned char *sb1 = p->msbox;
00087     unsigned char temp;
00088   
00089      //calc
00090     i = (unsigned char )(p->mi);
00091     j = (unsigned char )(p->mj);
00092 
00093     for(cc = 0;cc < srcsize;cc++){
00094              //calc
00095         i = (unsigned char )(i+1);
00096         j = (unsigned char )(j + sb1[i]);
00097   
00098          //swap
00099         
00100         temp = sb1 [i];
00101         sb1 [i] = sb1 [j];
00102         sb1 [j] = temp;
00103         
00104 
00105         //SWAP_NUM_EX(sb1[i],sb1[j],unsigned char);
00106 
00107         //calc
00108         dest[cc] = (unsigned char )
00109             (src[cc] ^ (unsigned char )sb1[
00110                 (unsigned char )(sb1 [i] + sb1 [j]) 
00111             ] 
00112         );
00113     }
00114     //refresh
00115     p->mi = i;
00116     p->mj = j;
00117 
00118 }

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

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

参照先 DKC_ARCFOUR_STATE, と dkcArcfourEncrypt_Base().

00141 {
00142     dkcArcfourEncrypt_Base(p,dest_and_src,dest_and_src,dest_and_srcsize);
00143 }

int WINAPI dkcFreeArcfour DKC_ARCFOUR_STATE **  p  ) 
 

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

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

参照先 DKC_ARCFOUR_STATE, dkcFree(), edk_FAILED, と NULL.

00145                                                 {
00146     if(NULL==p){
00147         return edk_FAILED;
00148     }
00149     return dkcFree(p);
00150 }


dkutil_cに対してSun Jul 18 22:45:26 2004に生成されました。 doxygen 1.3.6