#include "dkcOSIndependent.h"
dkcBlowfish.hのインクルード依存関係図

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

構成 | |
| struct | dkc_Blowfish |
マクロ定義 | |
| #define | MAXKEYBYTES 56 |
| #define | NPASS 16 |
| #define | dkcd_BLOWFISH_MAX_KEY_SIZE MAXKEYBYTES |
| キーの最大値 | |
型定義 | |
| typedef DWORD(* | DKC_BLOWFISH_SBOX_TYPE )[256] |
| typedef dkc_Blowfish | DKC_BLOWFISH |
関数 | |
| DKC_EXTERN DKC_BLOWFISH *WINAPI | dkcAllocBlowfish (BYTE *key, int keysize) |
| DKC_EXTERN int WINAPI | dkcFreeBlowfish (DKC_BLOWFISH **) |
| dkcAllocBlowfish()で確保したメモリ領域を開放 | |
| DKC_EXTERN int WINAPI | dkcBlowfishInit (DKC_BLOWFISH *p, BYTE *key, int keybytes) |
| dkcAllocBlowfish()で初期化するけど、明示的に初期化したい場合これを呼び出す。 | |
| DKC_EXTERN DWORD WINAPI | dkcBlowfishGetOutputLength (DWORD lInputLong) |
| DKC_EXTERN DWORD WINAPI | dkcBlowfishEncrypt (DKC_BLOWFISH *p, BYTE *pInput, BYTE *pOutput, DWORD lSize) |
| DKC_EXTERN void WINAPI | dkcBlowfishDecrypt (DKC_BLOWFISH *p, BYTE *pInput, BYTE *pOutput, DWORD lSize) |
dkcBlowfish.h で定義されています。
|
|
キーの最大値
dkcBlowfish.h の 25 行で定義されています。 参照元 dkcBlowfishInit(). |
|
|
dkcBlowfish.h の 20 行で定義されています。 |
|
|
dkcBlowfish.h の 22 行で定義されています。 参照元 dkcBlowfishInit(). |
|
|
参照元 Blowfish_decipher(), Blowfish_encipher(), dkcAllocBlowfish(), dkcBlowfishDecrypt(), dkcBlowfishEncrypt(), dkcBlowfishInit(), と dkcFreeBlowfish(). |
|
|
dkcBlowfish.h の 30 行で定義されています。 参照元 dkcAllocBlowfish(). |
|
||||||||||||
|
dkcBlowfish.c の 289 行で定義されています。 参照先 BYTE, DKC_BLOWFISH, DKC_BLOWFISH_SBOX_TYPE, dkcAllocate(), dkcBlowfishInit(), dkcFreeBlowfish(), DWORD, NULL, dkc_Blowfish::PArray, と dkc_Blowfish::SBoxes.
00289 {
00290 DKC_BLOWFISH *p;
00291 if(NULL==key || 0==keysize){
00292 return NULL;
00293 }
00294 p = (DKC_BLOWFISH *)dkcAllocate(sizeof(DKC_BLOWFISH));
00295 if(NULL==p){
00296 return NULL;
00297 }
00298 p->PArray = (DWORD *)malloc( sizeof(DWORD) * 18) ;
00299 if(NULL==p->PArray){
00300 goto Error;
00301 }
00302 p->SBoxes = (DKC_BLOWFISH_SBOX_TYPE)malloc( sizeof(DWORD) * 4 * 256) ;
00303 if(NULL==p->SBoxes){
00304 goto Error;
00305 }
00306 if(DKUTIL_FAILED(dkcBlowfishInit(p,key,keysize))){
00307 goto Error;
00308 }
00309 return p;
00310 Error:
00311 dkcFreeBlowfish(&p);
00312 return NULL;
00313 }
|
|
||||||||||||||||||||
|
Decode pIntput into pOutput. Input length in lSize. Inputbuffer and output buffer can be the same, but be sure buffer length is even MOD8. dkcBlowfish.c の 516 行で定義されています。 参照先 Blowfish_decipher(), BYTE, DKC_BLOWFISH, と DWORD.
00517 {
00518 DWORD lCount ;
00519 BYTE *pi, *po ;
00520 int i ;
00521 int SameDest = (pInput == pOutput ? 1 : 0) ;
00522
00523 for (lCount = 0 ; lCount < lSize ; lCount += 8)
00524 {
00525 if (SameDest) // if encoded data is being written into inputbuffer
00526 {
00527 Blowfish_decipher (p,(DWORD *) pInput,
00528 (DWORD *) (pInput + 4)) ;
00529 pInput += 8 ;
00530 }
00531 else // output buffer not equal to inputbuffer
00532 { // so copy input to output before decoding
00533 pi = pInput ;
00534 po = pOutput ;
00535 for (i = 0 ; i < 8 ; i++)
00536 *po++ = *pi++ ;
00537 Blowfish_decipher (p,(DWORD *) pOutput,
00538 (DWORD *) (pOutput + 4)) ;
00539 pInput += 8 ;
00540 pOutput += 8 ;
00541 }
00542 }
00543 }
|
|
||||||||||||||||||||
|
Encode pIntput into pOutput. Input length in lSize. Returned value is length of output which will be even MOD 8 bytes. Inputbuffer and output buffer can be the same, but be sure buffer length is even MOD8.
dkcBlowfish.c の 449 行で定義されています。 参照先 Blowfish_encipher(), BYTE, DKC_BLOWFISH, dkcBlowfishGetOutputLength(), DWORD, と NULL.
00452 {
00453 DWORD lCount, lOutSize, lGoodBytes ;
00454 BYTE *pi, *po ;
00455 int i, j ;
00456 int SameDest = (pInput == pOutput ? 1 : 0) ;
00457
00458 if(NULL==p){
00459 return 0;
00460 }
00461 lOutSize = dkcBlowfishGetOutputLength (lSize) ;
00462 if(lOutSize > lSize){
00463 return 0;
00464 }
00465 for (lCount = 0 ; lCount < lOutSize ; lCount += 8)
00466 {
00467 if (SameDest) // if encoded data is being written into inputbuffer
00468 {
00469 if (lCount < lSize - 7) // if not dealing with unevenbytes at end
00470 {
00471 Blowfish_encipher (p,(DWORD *) pInput,
00472 (DWORD *) (pInput + 4)) ;
00473 }
00474 else // pad end of data with null bytes tocomplete encryption
00475 {
00476 po = pInput + lSize ; // point at bytepast theend of actual data
00477 j = (int) (lOutSize - lSize) ; // number ofbytes to set to null
00478 for (i = 0 ; i < j ; i++)
00479 *po++ = 0 ;
00480 Blowfish_encipher (p,(DWORD *) pInput,
00481 (DWORD *) (pInput + 4)) ;
00482 }
00483 pInput += 8 ;
00484 }
00485 else // output buffer not equal to inputbuffer, so must copy
00486 { // input to output buffer prior to encrypting
00487 if (lCount < lSize - 7) // if not dealing with unevenbytes at end
00488 {
00489 pi = pInput ;
00490 po = pOutput ;
00491 for (i = 0 ; i < 8 ; i++)
00492 // copy bytes to output
00493 *po++ = *pi++ ;
00494 Blowfish_encipher (p,(DWORD *) pOutput, // nowencrypt them
00495 (DWORD *) (pOutput + 4)) ;
00496 }
00497 else // pad end of data with null bytes tocomplete encryption
00498 {
00499 lGoodBytes = lSize - lCount ; // number ofremaining data bytes
00500 po = pOutput ;
00501 for (i = 0 ; i < (int) lGoodBytes ; i++)
00502 *po++ = *pInput++ ;
00503 for (j = i ; j < 8 ; j++)
00504 *po++ = 0 ;
00505 Blowfish_encipher (p,(DWORD *) pOutput,
00506 (DWORD *) (pOutput + 4)) ;
00507 }
00508 pInput += 8 ;
00509 pOutput += 8 ;
00510 }
00511 }
00512 return lOutSize ;
00513 }
|
|
|
dkcBlowfish.c の 436 行で定義されています。 参照先 DWORD. 参照元 dkcBlowfishEncrypt().
00437 {
00438 DWORD lVal ;
00439
00440 lVal = lInputLong % 8 ; // find out if uneven number of bytes at
00441 //the end
00442 if (lVal != 0)
00443 return lInputLong + 8 - lVal ;
00444 else
00445 return lInputLong ;
00446 }
|
|
||||||||||||||||
|
dkcAllocBlowfish()で初期化するけど、明示的に初期化したい場合これを呼び出す。
dkcBlowfish.c の 378 行で定義されています。 参照先 bf_P, bf_S, Blowfish_encipher(), BYTE, DKC_BLOWFISH, dkcd_BLOWFISH_MAX_KEY_SIZE, DWORD, NPASS, dkc_Blowfish::PArray, と dkc_Blowfish::SBoxes. 参照元 dkcAllocBlowfish().
00379 {
00380
00381 int i, j ;
00382 DWORD data, datal, datar ;
00383 union aword temp ;
00384
00385 if(dkcd_BLOWFISH_MAX_KEY_SIZE < keybytes){
00386 return edk_FAILED;
00387 }
00388
00389 // first fill arrays from data tables
00390 for (i = 0 ; i < 18 ; i++)
00391 p->PArray[i] = bf_P [i] ;
00392
00393 for (i = 0 ; i < 4 ; i++)
00394 {
00395 for (j = 0 ; j < 256 ; j++)
00396 p->SBoxes [i][j] = bf_S [i][j] ;
00397 }
00398
00399
00400 j = 0 ;
00401 for (i = 0 ; i < NPASS + 2 ; ++i)
00402 {
00403 temp.dword = 0 ;
00404 temp.w.byte0 = key[j];
00405 temp.w.byte1 = key[(j+1) % keybytes] ;
00406 temp.w.byte2 = key[(j+2) % keybytes] ;
00407 temp.w.byte3 = key[(j+3) % keybytes] ;
00408 data = temp.dword ;
00409 p->PArray[i] ^= data ;
00410 j = (j + 4) % keybytes ;
00411 }
00412
00413 datal = 0 ;
00414 datar = 0 ;
00415
00416 for (i = 0 ; i < NPASS + 2 ; i += 2)
00417 {
00418 Blowfish_encipher (p,&datal, &datar) ;
00419 p->PArray[i] = datal ;
00420 p->PArray[i + 1] = datar ;
00421 }
00422
00423 for (i = 0 ; i < 4 ; ++i)
00424 {
00425 for (j = 0 ; j < 256 ; j += 2)
00426 {
00427 Blowfish_encipher (p,&datal, &datar) ;
00428 p->SBoxes [i][j] = datal ;
00429 p->SBoxes [i][j + 1] = datar ;
00430 }
00431 }
00432
00433 return edk_SUCCEEDED;
00434 }
|
|
|
dkcAllocBlowfish()で確保したメモリ領域を開放
dkcBlowfish.c の 316 行で定義されています。 参照先 DKC_BLOWFISH, dkcFree(), と NULL. 参照元 dkcAllocBlowfish().
|
1.3.6