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

# dkcRijndael.c

Rijndael Algorithm Wrapper [詳細]

`#include "dkcRijndael.h"`
`#include "dkcOSIndependent.h"`
`#include "rijndael-api-fst.h"`

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

ソースコードを見る。

## マクロ定義
#define | GETBYTE(x, y) (unsigned int)byte((x)>>(8*(y)))
| this version of the macro is fastest on Pentium 3 and Pentium 4 with MSVC 6 SP5 w/ Processor Pack
#define | RDEM_SC(a) dkc_strcpy(buff,size,a,strlen(b))
## 型定義
typedef int(* | RIJNDAEL_CALLBACK_PROCESS )(cipherInstance *, keyInstance *, BYTE *, int, BYTE *)
## 関数
DKC_RIJNDAEL *WINAPI | dkcAllocRijndael ()
DKC_RIJNDAEL *WINAPI | dkcAllocRijndaelEncrypt (const BYTE *key, size_t keysize)
DKC_RIJNDAEL *WINAPI | dkcAllocRijndaelDecrypt (const BYTE *key, size_t keysize)
static | ProcessCall (RIJNDAEL_CALLBACK_PROCESS proc, DKC_RIJNDAEL *p, BYTE *dest, int dsize, const BYTE *src, int ssize)
int WINAPI | dkcRijndaelBlockEncrypt (DKC_RIJNDAEL *p, BYTE *dest, int dsize, const BYTE *src, int ssize)
int WINAPI | dkcRijndaelBlockDecrypt (DKC_RIJNDAEL *p, BYTE *dest, int dsize, const BYTE *src, int ssize)
int WINAPI | dkcRijndaelPadEncrypt (DKC_RIJNDAEL *p, BYTE *dest, int dsize, const BYTE *src, int ssize)
int WINAPI | dkcRijndaelPadDecrypt (DKC_RIJNDAEL *p, BYTE *dest, int dsize, const BYTE *src, int ssize)
BOOL WINAPI | dkcRijndaelErrorMessage (int result, char *buff, size_t size)
int WINAPI | dkcFreeRijndael (DKC_RIJNDAEL **p)
int WINAPI | dkcRijndaelStringKey (DKC_RIJNDAEL *p, char *dest_and_material, int size, BYTE option)

## 説明

Rijndael Algorithm Wrapper

覚え書き:

dkcRijndael.cppはd金魚によって改変されました。 dkcRijndael.cpp - modified by d.Kingyo

オリジナルのコードおよび改変されたコード（のライセンス）はパブリックドメインです。 The original code and all modification are in the public domain.

これ（以下）はオリジナルの紹介（表記）していたコメント（文章）です。 this is the original introductory comment:

    rijndael.cpp - modified by Chris Morgan <cmorgan@wpi.edu>
    and Wei Dai from Paulo Baretto's Rijndael implementation
    The original code and all modifications are in the public domain.

    This is the original introductory comment:

     version 3.0 (December 2000)

     Optimised ANSI C code for the Rijndael cipher (now AES)

     author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be>
     author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be>
     author Paulo Barreto <paulo.barreto@terra.com.br>

     This code is hereby placed in the public domain.

     THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
     OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
     LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

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

## マクロ定義

#define GETBYTE | ( | x,
|  | y |  | ) | (unsigned int)byte((x)>>(8*(y)))

| this version of the macro is fastest on Pentium 3 and Pentium 4 with MSVC 6 SP5 w/ Processor Pack dkcRijndael.c の 48 行で定義されています。

#define RDEM_SC | ( | a |  | ) | dkc_strcpy(buff,size,a,strlen(b))

| 参照元 dkcRijndaelErrorMessage().

## 型定義

typedef int(* RIJNDAEL_CALLBACK_PROCESS)(cipherInstance *, keyInstance *, BYTE *, int, BYTE *)

| dkcRijndael.c の 102 行で定義されています。

## 関数

DKC_RIJNDAEL* WINAPI dkcAllocRijndael | ( |  | ) |

| dkcRijndael.c の 59 行で定義されています。 参照先 dkcAllocate(), dkcFree(), dkc_RijnDael::mKey, dkc_RijnDael::mRijndael, と NULL.
    00059                                        {
    00060     DKC_RIJNDAEL *p = dkcAllocate(sizeof(DKC_RIJNDAEL));
    00061     if(NULL==p){
    00062         return NULL;
    00063     }
    00064
    00065     p->mKey = dkcAllocate(sizeof(keyInstance));
    00066     if(NULL==p->mKey){
    00067         goto Error;
    00068     }
    00069
    00070     p->mRijndael = dkcAllocate(sizeof(cipherInstance));
    00071     if(NULL==p->mRijndael){
    00072         goto Error;
    00073     }
    00074     return p;
    00075 Error:
    00076     dkcFree(&p->mRijndael);
    00077     dkcFree(&p->mKey);
    00078     dkcFree(&p);
    00079     return NULL;
    00080 }

DKC_RIJNDAEL* WINAPI dkcAllocRijndaelDecrypt | ( | const BYTE * | key,
|  | size_t | keysize
| ) |

| dkcRijndael.c の 93 行で定義されています。 参照先 dkcAllocate(), と NULL.
    00093                                                                             {
    00094     DKC_RIJNDAEL *p = dkcAllocate(sizeof(DKC_RIJNDAEL));
    00095     if(NULL==p){
    00096         return NULL;
    00097     }
    00098
    00099     return p;
    00100
    00101 }

DKC_RIJNDAEL* WINAPI dkcAllocRijndaelEncrypt | ( | const BYTE * | key,
|  | size_t | keysize
| ) |

| dkcRijndael.c の 82 行で定義されています。 参照先 dkcAllocate(), と NULL.
    00083 {
    00084     DKC_RIJNDAEL *p = dkcAllocate(sizeof(DKC_RIJNDAEL));
    00085     if(NULL==p){
    00086         return NULL;
    00087     }
    00088
    00089     return p;
    00090 }

int WINAPI dkcFreeRijndael | ( | DKC_RIJNDAEL ** | p | ) |

| dkcRijndael.c の 174 行で定義されています。 参照先 dkcFree(), と NULL.
    00174                                             {
    00175     if(NULL==p){
    00176         return edk_FAILED;
    00177     }
    00178     return dkcFree((void **)p);
    00179 }

int WINAPI dkcRijndaelBlockDecrypt | ( | DKC_RIJNDAEL * | p,
|  | BYTE * | dest,
|  | int | dsize,
|  | const BYTE * | src,
|  | int | ssize
| ) |

| dkcRijndael.c の 130 行で定義されています。 参照先 blockDecrypt(), と ProcessCall().
    00131                                                                                                                     {
    00132     return ProcessCall(blockDecrypt,p,dest,dsize,src,ssize);
    00133 }

int WINAPI dkcRijndaelBlockEncrypt | ( | DKC_RIJNDAEL * | p,
|  | BYTE * | dest,
|  | int | dsize,
|  | const BYTE * | src,
|  | int | ssize
| ) |

| dkcRijndael.c の 125 行で定義されています。 参照先 blockEncrypt(), と ProcessCall().
    00126                                                                                                            {
    00127     return ProcessCall(blockEncrypt,p,dest,dsize,src,ssize);
    00128 }

BOOL WINAPI dkcRijndaelErrorMessage | ( | int | result,
|  | char * | buff,
|  | size_t | size
| ) |

| TODO: まだ未実装な為、実装する事 dkcRijndael.c の 148 行で定義されています。 参照先 edkcBAD_BLOCK_LENGTH, edkcBAD_CIPHER_INSTANCE, edkcBAD_CIPHER_MODE, edkcBAD_CIPHER_STATE, edkcBAD_DATA, edkcBAD_KEY_DIR, edkcBAD_KEY_INSTANCE, edkcBAD_KEY_MAT, edkcBAD_OTHER, RDEM_SC, と TRUE.
    00149 {
    00150 #define RDEM_SC(a) dkc_strcpy(buff,size,a,strlen(b))
    00151 #if 0
    00152     switch(result){
    00153     case    edkcBAD_KEY_DIR://  Key direction is invalid, e.g., unknown value
    00154     RDEM_SC("キーのdirectoinが不正");break;
    00155     case edkcBAD_KEY_MAT://  Key material not of correct length
    00156         RDEM_SC("キーの元データの長さが足りないかも");break;
    00157     case edkcBAD_KEY_MAT://  Key passed is not valid
    00158         RDEM_SC("キーのpassedが無効かも");break;
    00159     case edkcBAD_KEY_INSTANCE://  Params struct passed to cipherInit invalid
    00160
    00161     edkcBAD_CIPHER_MODE =     -4 ,
    00163     edkcBAD_CIPHER_STATE =    -5 ,
    00164     edkcBAD_BLOCK_LENGTH  =   -6,
    00165     edkcBAD_CIPHER_INSTANCE = -7,
    00167     edkcBAD_DATA        =     -8 ,
    00169     edkcBAD_OTHER       =     -9,
    00170 #endif
    00171     return TRUE;
    00172 }

int WINAPI dkcRijndaelPadDecrypt | ( | DKC_RIJNDAEL * | p,
|  | BYTE * | dest,
|  | int | dsize,
|  | const BYTE * | src,
|  | int | ssize
| ) |

| dkcRijndael.c の 142 行で定義されています。 参照先 padDecrypt(), と ProcessCall().
    00144 {
    00145     return ProcessCall(padDecrypt,p,dest,dsize,src,ssize);
    00146 }

int WINAPI dkcRijndaelPadEncrypt | ( | DKC_RIJNDAEL * | p,
|  | BYTE * | dest,
|  | int | dsize,
|  | const BYTE * | src,
|  | int | ssize
| ) |

| dkcRijndael.c の 135 行で定義されています。 参照先 padEncrypt(), と ProcessCall().
    00137 {
    00138     return ProcessCall(padEncrypt,p,dest,dsize,src,ssize);
    00139 }

int WINAPI dkcRijndaelStringKey | ( | DKC_RIJNDAEL * | p,
|  | char * | dest_and_material,
|  | int | size,
|  | BYTE | option
| ) |

| dkcRijndael.c の 181 行で定義されています。 参照先 edkcBAD_OTHER, makeKey(), dkc_RijnDael::mKey, と NULL.
    00184 {
    00185     keyInstance *pk;
    00186     if(NULL==p){
    00187         return edkcBAD_OTHER;
    00188     }
    00189     pk   = (keyInstance *)p->mKey;
    00190     return makeKey(pk,option,size,dest_and_material);
    00191 }

static ProcessCall | ( | RIJNDAEL_CALLBACK_PROCESS | proc,
|  | DKC_RIJNDAEL * | p,
|  | BYTE * | dest,
|  | int | dsize,
|  | const BYTE * | src,
|  | int | ssize
| ) | `[static]`

| dkcRijndael.c の 105 行で定義されています。 参照先 BYTE, edkcBAD_KEY_DIR, dkc_RijnDael::mKey, と dkc_RijnDael::mRijndael. 参照元 dkcRijndaelBlockDecrypt(), dkcRijndaelBlockEncrypt(), dkcRijndaelPadDecrypt(), と dkcRijndaelPadEncrypt().
    00107 {
    00108
    00109     int r;
    00110     BYTE *tsrc = (BYTE *)src;
    00111
    00112     if(dsize < ssize){
    00113         return edk_BufferOverFlow;
    00114     }
    00115
    00116     r = proc((cipherInstance *)p->mRijndael,(keyInstance *)p->mKey,tsrc,ssize,dest);
    00117
    00118     if(r > edkcBAD_KEY_DIR){
    00119         return edk_SUCCEEDED;
    00120     }
    00121         //error
    00122     return r;
    00123 }