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

dkcDCF01.c

dKingyo Cryption File Version01 [詳細]

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

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

ソースコードを見る。

マクロ定義

#define DKUTIL_C_DCF01_C

関数

DKC_INLINE DKC_DCF *WINAPI dkcAllocDCF_Version01_SNOW2 (DKC_SNOW2 *attach_cp, DKC_STREAM *attach_sp)
DKC_DCF *WINAPI dkcAllocDCF01 (const char *filename, uint32 stream_flags, const void *key, size_t keysize)
int WINAPI dkcFreeDCF01 (DKC_DCF **pp)
void WINAPI dkcDCF01Init (DKC_DCF *p)
 内部メッセージダイジェスト関数を初期化する
DKC_INLINE int WINAPI dkcDCF01Write (DKC_DCF *p, const void *data, size_t size, size_t *write_size)
DKC_INLINE int WINAPI dkcDCF01WriteFinal (DKC_DCF *p)
DKC_INLINE int WINAPI dkcDCF01Read (DKC_DCF *p, void *buff, size_t size, size_t *readsize)
DKC_INLINE int WINAPI dkcDCF01ReadFinal (DKC_DCF *p)
int WINAPI dkcFileToDCF01 (const char *save_filename, const char *target_filename, const void *key, size_t keysize)
 セーブロードテスト
int WINAPI dkcDCF01ToFile (const char *dest_filename, const char *target_filename, const void *key, size_t keysize)
 セーブロードテスト


説明

dKingyo Cryption File Version01

から:
2005/11/22
覚え書き:
更新履歴: 2005/12/19:テスト終了 2005/12/18:dkcDCF.cからコード片をこのファイルに移動。 2005/11/25:一応完成するが、読み込みがまだ上手く出来ていない。 2005/11/22:製作開始

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


マクロ定義

#define DKUTIL_C_DCF01_C
 

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


関数

DKC_DCF* WINAPI dkcAllocDCF01 const char *  filename,
uint32  stream_flags,
const void *  key,
size_t  keysize
 

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

参照先 dkcAllocDCF_Version01_SNOW2(), dkcAllocSNOW2NoLimitKeyLength(), dkcAllocStreamFile64Type(), dkcFreeSNOW2(), dkcFreeStream(), edkcStreamWin32PromoteFlag, と NULL.

00058 {
00059     DKC_DCF *p;
00060     DKC_STREAM *ps;
00061     DKC_SNOW2 *psnow2;
00062 
00063     ps = dkcAllocStreamFile64Type(edkcStreamWin32PromoteFlag,filename,stream_flags);
00064     if(NULL==ps) return NULL;
00065     psnow2 = dkcAllocSNOW2NoLimitKeyLength(key,keysize);
00066     if(NULL==psnow2) goto Error;
00067     
00068     p = dkcAllocDCF_Version01_SNOW2(psnow2,ps);
00069     if(NULL==p) goto Error;
00070     return p;
00071 Error:
00072     //dkcFreeDCF01(&p);
00073     dkcFreeSNOW2(&psnow2);
00074     dkcFreeStream(&ps);
00075     return NULL;
00076 }

DKC_INLINE DKC_DCF* WINAPI dkcAllocDCF_Version01_SNOW2 DKC_SNOW2 attach_cp,
DKC_STREAM attach_sp
 

引数:
attach_cp[in] DKC_SNOW2オブジェクトへのポインタ
attach_sp[in] DKC_STREAMオブジェクトへのポインタ あらかじめ書き込みか読み込みか、およびedkcStreamInitFile64で初期化してください。

dkcDCF01.c22 行で定義されています。

参照先 dkc_dKingyoCryptionFile::BufferObj, dkc_dKingyoCryptionFile::CryptObj, dkcAllocate(), dkcAllocBuffer(), dkcAllocSHA512(), dkcDCF01Init(), dkcFree(), dkcFreeSHA512(), dkcStreamTell(), edkcStreamInitFile64, dkc_Stream::mMode, NULL, dkc_dKingyoCryptionFile::SHAObj, と dkc_dKingyoCryptionFile::StreamObj.

参照元 dkcAllocDCF01(), dkcDCF01ToFile(), と dkcFileToDCF01().

00024 {
00025     DKC_DCF *p;
00026     if(NULL==attach_cp || NULL==attach_sp) return NULL;
00027     if(!(attach_sp->mMode & edkcStreamInitFile64))
00028     {
00029         return NULL;
00030     }
00031     if(0!=dkcStreamTell(attach_sp)){
00032         return NULL;
00033     }
00034     p = dkcAllocate(sizeof(DKC_DCF));
00035     if(NULL==p) return NULL;
00036     
00037     p->CryptObj = attach_cp;
00038     p->StreamObj = attach_sp;
00039     p->SHAObj = dkcAllocSHA512();
00040     if(NULL==p->SHAObj){
00041         goto Error;
00042     }
00043     p->BufferObj = dkcAllocBuffer(NULL,1024 * 64);
00044     if(NULL==p->BufferObj){
00045         goto Error;
00046     }
00047     dkcDCF01Init(p);
00048     return p;
00049 Error:
00050     dkcFreeSHA512(&(p->SHAObj));
00051     dkcFree(&p);
00052     return NULL;
00053 }

void WINAPI dkcDCF01Init DKC_DCF p  ) 
 

内部メッセージダイジェスト関数を初期化する

dkcDCF01.c88 行で定義されています。

参照先 dkc_dKingyoCryptionFile::Count, dkcDCF01Init(), dkcDCF01Read(), dkcDCF01ReadFinal(), dkcDCF01ToFile(), dkcDCF01Write(), dkcDCF01WriteFinal(), dkcFileToDCF01(), dkcFreeDCF01(), dkcSHA512Init(), dkcStreamSeek(), edkcStreamSeekSet, dkc_dKingyoCryptionFile::fpDCFToFile, dkc_dKingyoCryptionFile::fpFileToDCF, dkc_dKingyoCryptionFile::fpFree, dkc_dKingyoCryptionFile::fpInit, dkc_dKingyoCryptionFile::fpRead, dkc_dKingyoCryptionFile::fpReadFinal, dkc_dKingyoCryptionFile::fpWrite, dkc_dKingyoCryptionFile::fpWriteFinal, SHA512_BIN_BUFFER_SIZE, dkc_dKingyoCryptionFile::SHAObj, と dkc_dKingyoCryptionFile::StreamObj.

参照元 dkcAllocDCF_Version01_SNOW2(), dkcDCF01Init(), dkcDCF01ToFile(), と dkcFileToDCF01().

00089 {
00090     dkcSHA512Init(p->SHAObj);
00091     dkcStreamSeek(p->StreamObj,
00092         SHA512_BIN_BUFFER_SIZE + sizeof(uint64),edkcStreamSeekSet
00093     );
00094     p->Count = 0;
00095 
00096 
00097     p->fpInit = dkcDCF01Init;
00098     p->fpWrite = dkcDCF01Write;
00099     p->fpWriteFinal = dkcDCF01WriteFinal;
00100     p->fpRead = dkcDCF01Read;
00101     p->fpReadFinal = dkcDCF01ReadFinal;
00102     
00103 
00104     p->fpFree = (DKC_DCF_FREE_F_TYPE)dkcFreeDCF01;
00105 
00106     p->fpFileToDCF = dkcFileToDCF01;
00107     p->fpDCFToFile = dkcDCF01ToFile;
00108 }

DKC_INLINE int WINAPI dkcDCF01Read DKC_DCF p,
void *  buff,
size_t  size,
size_t *  readsize
 

戻り値:
edk_EndProcessですべて読み込んだ。edk_SUCCEEDEDで正常処理中。 戻り値が前述以外だったらdkcDCFInit()を呼び出して最初から処理しなおしてください。

dkcDCF01.c163 行で定義されています。

参照先 dkc_dKingyoCryptionFile::Count, dkc_dKingyoCryptionFile::CryptObj, dkcSHA512Load(), dkcSNOW2DecryptNoDestDOE, dkcStreamEOF(), dkcStreamRead(), dkc_dKingyoCryptionFile::SHAObj, と dkc_dKingyoCryptionFile::StreamObj.

参照元 dkcDCF01Init(), と dkcDCF01ToFile().

00164 {
00165     int r;
00166     *readsize = 0;
00167     r = dkcStreamRead(p->StreamObj,buff,size,readsize);
00168     if(DKUTIL_FAILED(r)) return r;
00169     r = dkcSNOW2DecryptNoDestDOE(p->CryptObj,buff,*readsize);
00170     if(DKUTIL_FAILED(r)) return r;
00171     dkcSHA512Load(p->SHAObj,buff,*readsize);
00172     p->Count += (*readsize);
00173 
00174     if(dkcStreamEOF(p->StreamObj)/* || 0==*readsize*/){
00175         return edk_EndProcess;
00176     }
00177     return r;
00178 
00179 }

DKC_INLINE int WINAPI dkcDCF01ReadFinal DKC_DCF p  ) 
 

戻り値:
edk_SUCCEEDEDでハッシュチェック完了

dkcDCF01.c185 行で定義されています。

参照先 dkc_dKingyoCryptionFile::Count, dkcSHA512FinalDigest(), dkcStreamRead(), dkcStreamSeek(), edkcStreamSeekSet, SHA512_BIN_BUFFER_SIZE, dkc_dKingyoCryptionFile::SHAObj, dkc_dKingyoCryptionFile::StreamObj, と uint8.

参照元 dkcDCF01Init(), と dkcDCF01ToFile().

00186 {
00187     uint64 datasize;
00188     uint8 sha512[SHA512_BIN_BUFFER_SIZE],fsig[SHA512_BIN_BUFFER_SIZE];
00189     int r;
00190     size_t readsize;
00191     r = dkcStreamSeek(p->StreamObj,0,edkcStreamSeekSet);
00192     if(DKUTIL_FAILED(r)) return r;
00193     r = dkcStreamRead(p->StreamObj,fsig,sizeof(fsig),&readsize);
00194     if(DKUTIL_FAILED(r)) return r;
00195     if(readsize != sizeof(fsig)) return edk_FAILED;
00196     r = dkcStreamRead(p->StreamObj,&datasize,sizeof(datasize),&readsize);
00197     if(DKUTIL_FAILED(r)) return r;
00198     if(readsize != sizeof(datasize)) return edk_FAILED;
00199     if(p->Count != datasize){
00200         return edk_SignatureException;
00201     }
00202     r = dkcSHA512FinalDigest(p->SHAObj,sha512,sizeof(sha512));
00203     if(DKUTIL_FAILED(r)) return r;
00204     if(0 != memcmp(sha512,fsig,sizeof(sha512))) return edk_SignatureException;
00205     
00206     return edk_SUCCEEDED;
00207 }

int WINAPI dkcDCF01ToFile const char *  dest_filename,
const char *  target_filename,
const void *  key,
size_t  keysize
 

セーブロードテスト

dkcDCF01.c259 行で定義されています。

参照先 dkcAllocDCF_Version01_SNOW2(), dkcAllocSNOW2NoLimitKeyLength(), dkcAllocStreamFile64Type(), dkcDCF01Init(), dkcDCF01Read(), dkcDCF01ReadFinal(), dkcFreeDCF01(), dkcFreeSNOW2(), dkcFreeStream(), dkcStreamWrite(), edkcReadMode, edkcStreamWin32PromoteFlag, edkcWriteMode, NULL, と uint8.

参照元 dkcDCF01Init(), と dkcDCFToFile().

00261 {
00262     DKC_STREAM *ps = NULL,*writer = NULL;
00263     DKC_SNOW2 *psnow2 = NULL;
00264     DKC_DCF *p = NULL;
00265     //DWORD high,low;
00266     size_t readsize;
00267     uint8 tempbuff[1024];
00268     int r = edk_FAILED;
00269 
00270     ps = dkcAllocStreamFile64Type(edkcStreamWin32PromoteFlag,target_filename,edkcReadMode);
00271     if(NULL==ps) return edk_FAILED;
00272     psnow2 = dkcAllocSNOW2NoLimitKeyLength(key,keysize);
00273     if(NULL==psnow2) goto Error;
00274     
00275     p = dkcAllocDCF_Version01_SNOW2(psnow2,ps);
00276     if(NULL==p) goto Error;
00277 
00278 
00279     
00280     //if(FALSE==dkcFileSize64(target_filename,&high,&low) ) goto Error;
00281     
00282     writer = dkcAllocStreamFile64Type(edkcStreamWin32PromoteFlag,dest_filename,edkcWriteMode);
00283     if(NULL==writer) goto Error;
00284 
00285     do
00286     {
00287         r = dkcDCF01Read(p,tempbuff,sizeof(tempbuff),&readsize);
00288         
00289         if(DKUTIL_FAILED(r) && (r != edk_EndProcess))
00290         {
00291             goto Error;
00292         }
00293         if(dkcStreamWrite(writer,tempbuff,readsize))
00294             goto Error;
00295 
00296     }while(edk_EndProcess!=r);
00297 
00298     r = dkcDCF01ReadFinal(p);
00299     if(DKUTIL_FAILED(r)) goto Error;
00300 
00301     dkcDCF01Init(p);
00302 
00303     r = edk_SUCCEEDED;
00304 Error:
00305     dkcFreeDCF01(&p);
00306     dkcFreeSNOW2(&psnow2);
00307     dkcFreeStream(&ps);
00308     dkcFreeStream(&writer);
00309     return r;
00310 } 

DKC_INLINE int WINAPI dkcDCF01Write DKC_DCF p,
const void *  data,
size_t  size,
size_t *  write_size
 

戻り値:
edk_SUCCEEDEDで成功。 失敗したらdkcDCFInit()を呼び出して最初から処理しなおしてください。

dkcDCF01.c110 行で定義されています。

参照先 dkc_dKingyoCryptionFile::BufferObj, dkc_dKingyoCryptionFile::Count, dkc_dKingyoCryptionFile::CryptObj, dkcSHA512Load(), dkcSNOW2EncryptNoDestDOE(), dkcStreamWriteWithWriteSize(), dkc_Buffer::mBuff, dkc_Buffer::mSize, dkc_dKingyoCryptionFile::SHAObj, dkc_dKingyoCryptionFile::StreamObj, と uint8.

参照元 dkcDCF01Init(), と dkcFileToDCF01().

00111 {
00112     int r;
00113     size_t offset,i;
00114     size_t pSize = p->BufferObj->mSize;
00115     size_t div =  size / pSize;
00116     size_t rest = size % pSize;
00117     uint8 *pBuff = p->BufferObj->mBuff;
00118     const uint8 *pData = data;
00119 
00120     
00121     dkcSHA512Load(p->SHAObj,data,size);
00122     
00123     offset = 0;
00124     for(i=0;i<div;i++){
00125         memcpy(pBuff,pData + offset,pSize);
00126         r = dkcSNOW2EncryptNoDestDOE(p->CryptObj,pBuff,pSize);
00127         if(DKUTIL_FAILED(r)) return r;
00128         r = dkcStreamWriteWithWriteSize(p->StreamObj,pBuff,pSize,write_size);
00129         if(DKUTIL_FAILED(r)) return r;
00130         if(pSize != *write_size) return edk_FAILED;
00131         offset += pSize;
00132         //p->Count += (*write_size);
00133     }
00134     memcpy(pBuff,pData + offset,rest);
00135     r = dkcSNOW2EncryptNoDestDOE(p->CryptObj,pBuff,rest);
00136     if(DKUTIL_FAILED(r)) return r;
00137     r = dkcStreamWriteWithWriteSize(p->StreamObj,pBuff,rest,write_size);
00138     if(DKUTIL_FAILED(r)) return r;
00139     if(rest != *write_size) return edk_FAILED;
00140     
00141     //p->Count += (*write_size);
00142     p->Count += size;
00143     return r;
00144 }

DKC_INLINE int WINAPI dkcDCF01WriteFinal DKC_DCF p  ) 
 

戻り値:
edk_SUCCEEDEDでハッシュ書き込み成功

dkcDCF01.c150 行で定義されています。

参照先 dkc_dKingyoCryptionFile::Count, dkcSHA512FinalDigest(), dkcStreamSeek(), dkcStreamWrite(), edkcStreamSeekSet, SHA512_BIN_BUFFER_SIZE, dkc_dKingyoCryptionFile::SHAObj, dkc_dKingyoCryptionFile::StreamObj, と uint8.

参照元 dkcDCF01Init(), と dkcFileToDCF01().

00150                                                     {
00151     int r;
00152     uint8 sha512[SHA512_BIN_BUFFER_SIZE];
00153     r = dkcSHA512FinalDigest(p->SHAObj,sha512,sizeof(sha512));
00154     if(DKUTIL_FAILED(r)) return r;
00155     dkcStreamSeek(p->StreamObj,0,edkcStreamSeekSet);
00156     r = dkcStreamWrite(p->StreamObj,sha512,sizeof(sha512));
00157     if(DKUTIL_FAILED(r)) return r;
00158 
00159     r = dkcStreamWrite(p->StreamObj,&(p->Count),sizeof(p->Count));
00160     return r;
00161 }

int WINAPI dkcFileToDCF01 const char *  save_filename,
const char *  target_filename,
const void *  key,
size_t  keysize
 

セーブロードテスト

dkcDCF01.c211 行で定義されています。

参照先 dkcAllocDCF_Version01_SNOW2(), dkcAllocSNOW2NoLimitKeyLength(), dkcAllocStreamFile64Type(), dkcDCF01Init(), dkcDCF01Write(), dkcDCF01WriteFinal(), dkcFreeDCF01(), dkcFreeSNOW2(), dkcFreeStream(), dkcStreamEOF(), dkcStreamRead(), edkcReadMode, edkcStreamWin32PromoteFlag, edkcWriteMode, FALSE, NULL, と uint8.

参照元 dkcDCF01Init(), と dkcFileToDCF().

00213 {
00214     DKC_STREAM *ps = NULL,*reader = NULL;
00215     DKC_SNOW2 *psnow2 = NULL;
00216     DKC_DCF *p = NULL;
00217     //DWORD high,low;
00218     size_t readsize,writesize;
00219     uint8 tempbuff[1024];
00220     int r = edk_FAILED;
00221 
00222     ps = dkcAllocStreamFile64Type(edkcStreamWin32PromoteFlag,save_filename,edkcWriteMode);
00223     if(NULL==ps) return edk_FAILED;
00224     psnow2 = dkcAllocSNOW2NoLimitKeyLength(key,keysize);
00225     if(NULL==psnow2) goto Error;
00226     
00227     p = dkcAllocDCF_Version01_SNOW2(psnow2,ps);
00228     if(NULL==p) goto Error;
00229 
00230 
00231 
00232     //if(FALSE==dkcFileSize64(target_filename,&high,&low)) goto Error;
00233     //printf("%d bytes\n",(high << 32) + low)   ;
00234 
00235     reader = dkcAllocStreamFile64Type(edkcStreamWin32PromoteFlag,target_filename,edkcReadMode);
00236     if(NULL==reader) goto Error;
00237 
00238     while(FALSE==dkcStreamEOF(reader))
00239     {
00240         dkcStreamRead(reader,tempbuff,sizeof(tempbuff),&readsize);
00241         r = dkcDCF01Write(p,tempbuff,readsize,&writesize);
00242         if(DKUTIL_FAILED(r)) goto Error;
00243     }
00244     r = dkcDCF01WriteFinal(p);
00245     if(DKUTIL_FAILED(r)) goto Error;
00246 
00247     dkcDCF01Init(p);
00248 
00249     r = edk_SUCCEEDED;
00250 Error:
00251     dkcFreeDCF01(&p);
00252     dkcFreeSNOW2(&psnow2);
00253     dkcFreeStream(&ps);
00254     dkcFreeStream(&reader);
00255     return r;
00256 }

int WINAPI dkcFreeDCF01 DKC_DCF **  pp  ) 
 

dkcDCF01.c79 行で定義されています。

参照先 dkc_dKingyoCryptionFile::BufferObj, dkcFree(), dkcFreeBuffer(), dkcFreeSHA512(), NULL, と dkc_dKingyoCryptionFile::SHAObj.

参照元 dkcDCF01Init(), dkcDCF01ToFile(), と dkcFileToDCF01().

00080 {
00081     DKC_DCF *p = *pp;
00082     if(NULL==pp || NULL==*pp) return edk_FAILED;
00083     dkcFreeBuffer(&(p->BufferObj));
00084     dkcFreeSHA512(&(p->SHAObj));
00085     return dkcFree(pp);
00086 }


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