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

dkcDCF.c

Cryptograph algorithm [詳細]

#include "dkcDCF.h"
#include "dkcGenericFileSystem.h"
#include "dkcSJISFileSystem.h"
#include "dkcCryptograph.h"

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

ソースコードを見る。

マクロ定義

#define DKUTIL_C_DCF_C

関数

int WINAPI dkcFreeDCF (DKC_DCF **pp)
int WINAPI dkcFileToDCF (uint32 option, const char *save_filename, const char *target_filename, const void *key, size_t keysize)
int WINAPI dkcDCFToFile (uint32 option, const char *dest_filename, const char *target_filename, const void *key, size_t keysize)
BOOL WINAPI dkcDCFPasswordCheck (DKC_DCF *p, const char *filename, const void *password, size_t size)
int WINAPI dkcDCFAllRead (DKC_DCF *p, void *buff, size_t size)
 すべて読み込みます。 内部でdkcDCFInit()されます。
int WINAPI dkcDCFFileSizeExpect (const char *filename, uint64 *pv)
 元のファイルサイズを予測します。


説明

Cryptograph algorithm

から:
2005/11/22
覚え書き:
更新履歴: 2005/12/19:実装をdkcDCF01.cに移した。このファイルには汎用的な処理を書くことにした。 2005/11/25:一応完成するが、読み込みがまだ上手く出来ていない。 2005/11/22:製作開始

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


マクロ定義

#define DKUTIL_C_DCF_C
 

dkcDCF.c12 行で定義されています。


関数

int WINAPI dkcDCFAllRead DKC_DCF p,
void *  buff,
size_t  size
 

すべて読み込みます。 内部でdkcDCFInit()されます。

dkcDCF.c87 行で定義されています。

参照先 dkc_dKingyoCryptionFile::fpInit, dkc_dKingyoCryptionFile::fpRead, dkc_dKingyoCryptionFile::fpReadFinal, NULL, と uint8.

00088 {
00089 
00090     DKC_DCF_INIT_F_TYPE init;
00091     DKC_DCF_READ_F_TYPE read;
00092     DKC_DCF_READ_FINAL_F_TYPE readfinal;
00093     size_t readsize;
00094     uint8 *pBuff = (uint8 *)buff;
00095     int r = edk_FAILED;
00096     size_t offset = 0;
00097     
00098     if(NULL==p) return edk_ArgumentException;
00099     init = p->fpInit;
00100     read = p->fpRead;
00101     readfinal = p->fpReadFinal;
00102     init(p);
00103 
00104     do
00105     {
00106         r = read(p,pBuff + offset,size - offset,&readsize);
00107         
00108         if(DKUTIL_FAILED(r) && (r != edk_EndProcess))
00109         {
00110             return r;
00111         }
00112         offset += readsize;
00113         if(size < offset){
00114             return edk_OutputBufferWasLost;
00115         }else if(size == offset){
00116             if(edk_EndProcess!=r){
00117                 return edk_OutputBufferWasLost;
00118             }
00119             break;
00120         }
00121     }while(edk_EndProcess!=r);
00122 
00123     r = readfinal(p);
00124     if(DKUTIL_FAILED(r)) return r;
00125 
00126     r = edk_SUCCEEDED;
00127 
00128     return r;
00129 }

int WINAPI dkcDCFFileSizeExpect const char *  filename,
uint64 *  pv
 

元のファイルサイズを予測します。

戻り値:
edk_SUCCEEDEDで成功。それ以外はエラー。DCF形式じゃない場合が濃厚な場合はedk_LogicExceptionを返します。

dkcDCF.c131 行で定義されています。

参照先 dkcAllocFile64(), dkcFile64Read(), dkcFile64Seek(), dkcFile64Tell(), dkcFileExist(), dkcFreeFile64(), edkcReadMode, edkcSeekEnd, edkcSeekSet, FALSE, NULL, と SHA512_BIN_BUFFER_SIZE.

00131                                                                 {
00132     int r;
00133     DKC_FILE64 *p;
00134     size_t readsize;
00135     uint64 tv;
00136     if(dkcFileExist(filename)==FALSE)
00137         return edk_FileNotFound;
00138 
00139     p = dkcAllocFile64(edkcReadMode,filename);
00140     if(NULL==p) return edk_FAILED;
00141 
00142     //ファイルの先頭を取得。
00143     r = dkcFile64Seek(p,SHA512_BIN_BUFFER_SIZE,edkcSeekSet);
00144     if(DKUTIL_FAILED(r)){goto Error;}
00145     r = dkcFile64Read(p,pv,sizeof(*pv),&readsize);
00146     if(DKUTIL_FAILED(r)){goto Error;}
00147     if(readsize != sizeof(*pv)){
00148         r = edk_LogicException;
00149         goto Error;
00150     }
00151 
00152     //ファイルの最後までのサイズと比較
00153     r = dkcFile64Seek(p,0,edkcSeekEnd);
00154     if(DKUTIL_FAILED(r)){goto Error;}
00155     
00156     r = dkcFile64Tell(p,&tv);
00157     if(DKUTIL_FAILED(r)){goto Error;}
00158     
00159     if(*pv != tv - (SHA512_BIN_BUFFER_SIZE + readsize)){
00160         r = edk_LogicException;
00161         goto Error;
00162     }
00163     r = edk_SUCCEEDED;
00164 Error:
00165     dkcFreeFile64(&p);
00166     return r;
00167 }

BOOL WINAPI dkcDCFPasswordCheck DKC_DCF p,
const char *  filename,
const void *  password,
size_t  size
 

dkcDCF.c51 行で定義されています。

参照先 FALSE, dkc_dKingyoCryptionFile::fpInit, dkc_dKingyoCryptionFile::fpRead, dkc_dKingyoCryptionFile::fpReadFinal, NULL, TRUE, と uint8.

00052 {
00053     
00054     DKC_DCF_INIT_F_TYPE init;
00055     DKC_DCF_READ_F_TYPE read;
00056     DKC_DCF_READ_FINAL_F_TYPE readfinal;
00057     BOOL r = FALSE;
00058     uint8 tempbuff[1024];
00059     size_t readsize;
00060     if(NULL==p) goto Error;
00061 
00062     init = p->fpInit;
00063     read = p->fpRead;
00064     readfinal = p->fpReadFinal;
00065 
00066     init(p);
00067     do
00068     {
00069         r = read(p,tempbuff,sizeof(tempbuff),&readsize);
00070         
00071         if(DKUTIL_FAILED(r) && (r != edk_EndProcess))
00072         {
00073             goto Error;
00074         }
00075 
00076     }while(edk_EndProcess!=r);
00077 
00078     r = readfinal(p);
00079     if(DKUTIL_FAILED(r)) goto Error;
00080 
00081     r = TRUE;
00082 Error:
00083     return r;
00084     
00085 }

int WINAPI dkcDCFToFile uint32  option,
const char *  dest_filename,
const char *  target_filename,
const void *  key,
size_t  keysize
 

dkcDCF.c38 行で定義されています。

参照先 dkcDCF01ToFile(), と edkcDCF01.

00040 {
00041     int r = edk_FAILED;
00042     switch(option){
00043         case edkcDCF01:
00044             r = dkcDCF01ToFile(dest_filename,target_filename,key,keysize);
00045             break;
00046     }
00047     return r;
00048 } 

int WINAPI dkcFileToDCF uint32  option,
const char *  save_filename,
const char *  target_filename,
const void *  key,
size_t  keysize
 

dkcDCF.c26 行で定義されています。

参照先 dkcFileToDCF01(), と edkcDCF01.

00028 {
00029     int r = edk_FAILED;
00030     switch(option){
00031         case edkcDCF01:
00032             r = dkcFileToDCF01(save_filename,target_filename,key,keysize);
00033             break;
00034     }
00035     return r;
00036 }

int WINAPI dkcFreeDCF DKC_DCF **  pp  ) 
 

dkcDCF.c18 行で定義されています。

参照先 dkc_dKingyoCryptionFile::fpFree, と NULL.

00018                                    {
00019     DKC_DCF *p = *pp;
00020     DKC_DCF_FREE_F_TYPE ff;
00021     if(NULL==pp || NULL==p) return edk_FAILED;
00022     ff = p->fpFree;
00023     return ff(pp);
00024 }


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