#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) |
セーブロードテスト |
dkcDCF01.c で定義されています。
|
dkcDCF01.c の 13 行で定義されています。 |
|
dkcDCF01.c の 57 行で定義されています。 参照先 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 }
|
|
dkcDCF01.c の 22 行で定義されています。 参照先 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 }
|
|
|
dkcDCF01.c の 163 行で定義されています。 参照先 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 }
|
|
dkcDCF01.c の 185 行で定義されています。 参照先 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 }
|
|
セーブロードテスト
dkcDCF01.c の 259 行で定義されています。 参照先 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 }
|
|
dkcDCF01.c の 110 行で定義されています。 参照先 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 }
|
|
dkcDCF01.c の 150 行で定義されています。 参照先 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 }
|
|
セーブロードテスト
dkcDCF01.c の 211 行で定義されています。 参照先 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 }
|
|
dkcDCF01.c の 79 行で定義されています。 参照先 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 }
|