#include "dkcGenericFileSystem.h"
dkcSemiRealRandom.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_SemiRealRandom |
マクロ定義 | |
#define | dkcdSEMI_REAL_RANDOM_TRIAL_AND_ERROR_LIMIT 64 |
#define | dkcdSEMI_REAL_RANDOM_BITS 64 |
#define | dkcdSRR_TEMP_FILE_NAME "secure_rand_temp.tmp\0" |
テンポラリファイルの名前 | |
#define | dkcdSRR_TEMP_FILE_NAME_W L"secure_rand_temp.tmp\0" |
型定義 | |
typedef dkc_SemiRealRandom | DKC_SEMI_REAL_RANDOM |
関数 | |
DKC_EXTERN DKC_SEMI_REAL_RANDOM *WINAPI | dkcAllocSemiRealRandom () |
DKC_EXTERN DKC_SEMI_REAL_RANDOM *WINAPI | dkcAllocSemiRealRandomFromGFS (DKC_GENERIC_FILESYSTEM *) |
DKC_EXTERN int WINAPI | dkcFreeSemiRealRandom (DKC_SEMI_REAL_RANDOM **) |
DKC_EXTERN int WINAPI | dkcSemiRealRandomInit (DKC_SEMI_REAL_RANDOM *) |
DKC_EXTERN BOOL WINAPI | dkcSemiRealRandomGet32 (DKC_SEMI_REAL_RANDOM *, uint32 *) |
DKC_EXTERN uint8 WINAPI | dkcSemiRealRandomGet1 (DKC_SEMI_REAL_RANDOM *) |
上記URLより引用
このプログラムを利用して発生したいかなる損害にも、作者とつげき東北は責任を負わない。各自の責任の下に使用すること。 改良、自作ソフトへの組み込み等は全て自由。このページの内容を著作権だけを変更して、そのまま自分のHPに書くようなことはしないように(著作権法に違反する)。 このページは2002/04/21に公開された。
hdrand.c Copyright(C) とつげき東北
dkcSemiRealRandom.h で定義されています。
|
dkcSemiRealRandom.h の 27 行で定義されています。 参照元 test(). |
|
dkcSemiRealRandom.h の 25 行で定義されています。 |
|
テンポラリファイルの名前
dkcSemiRealRandom.h の 33 行で定義されています。 |
|
dkcSemiRealRandom.h の 34 行で定義されています。 |
|
|
|
|
|
dkcSemiRealRandom.c の 122 行で定義されています。 参照先 dkcAllocate(), dkc_SemiRealRandom::mpObj, と NULL. 参照元 dkcAllocSemiRealRandomWin32(). 00123 { 00124 DKC_SEMI_REAL_RANDOM *p; 00125 if(NULL==pa){ 00126 return NULL; 00127 } 00128 p = dkcAllocate(sizeof(DKC_SEMI_REAL_RANDOM)); 00129 if(NULL==p){ 00130 return NULL; 00131 } 00132 p->mpObj = pa; 00133 return p; 00134 }
|
|
dkcSemiRealRandom.c の 137 行で定義されています。 参照先 dkcFree(), dkcFreeGenericFileSystem(), dkc_SemiRealRandom::mpObj, と NULL. 参照元 dkcAllocSemiRealRandomWin32(). 00138 { 00139 DKC_SEMI_REAL_RANDOM *p = *pp; 00140 if(NULL==pp || NULL==p) 00141 return edk_FAILED; 00142 00143 dkcFreeGenericFileSystem(&(p->mpObj)); 00144 return dkcFree(pp); 00145 }
|
|
dkcSemiRealRandom.c の 326 行で定義されています。 参照先 generate(). 00327 { 00328 #ifdef WIN32 00329 uint32 val; 00330 generate(ptr,&val); 00331 return (uint8) ( (val >> ptr->mRightShift ) & 1) ; 00332 00333 #else 00334 00335 00336 #endif 00337 00338 00339 00340 }
|
|
dkcSemiRealRandom.c の 293 行で定義されています。 参照先 dkcdSEMI_REAL_RANDOM_TRIAL_AND_ERROR_LIMIT, FALSE, generate(), tmp, と TRUE. 00294 { 00295 uint32 tmp=0; 00296 uint32 val; 00297 int totalbit=0; 00298 size_t i,j; 00299 for(j=0;j<dkcdSEMI_REAL_RANDOM_TRIAL_AND_ERROR_LIMIT;j++) 00300 { 00301 if(FALSE==generate(ptr,&val)) 00302 return FALSE; 00303 00304 val = val >> ptr->mRightShift; 00305 for(i=0;i<ptr->mLeftShift;i++) 00306 { 00307 tmp+=val & 1; 00308 val=val >> 1; 00309 totalbit++; 00310 if(totalbit>=32){ 00311 *value32 = tmp; 00312 goto End; 00313 } 00314 tmp=tmp<<1; 00315 } 00316 } 00317 00318 End: 00319 if(!(j<dkcdSEMI_REAL_RANDOM_TRIAL_AND_ERROR_LIMIT)) 00320 { 00321 return FALSE; 00322 } 00323 return TRUE; 00324 }
|
|
dkcSemiRealRandom.c の 231 行で定義されています。 参照先 dkc_strcat2(), dkc_wcscat2(), dkcdMAXPATH, dkcdSEMI_REAL_RANDOM_TRIAL_AND_ERROR_LIMIT, dkcdSRR_PATH_SIZE, dkcdSRR_TEMP_FILE_NAME, dkcdSRR_TEMP_FILE_NAME_W, dkcmFORCE_NOT_ASSERT, と test(). 00232 { 00233 #ifdef WIN32 00234 00235 GetTempPathA_FT pGTPA; 00236 //char *pstr; 00237 00238 GetTempPathW_FT pGTPW; 00239 //wchar_t *pwstr; 00240 00241 if(ptr->mIsNT){ 00242 pGTPW = (GetTempPathW_FT)ptr->fpGetTempPath; 00243 dkcmFORCE_NOT_ASSERT(dkcdMAXPATH < pGTPW(0,ptr->pPath)); 00244 00245 if(pGTPW(dkcdMAXPATH,ptr->pPath)==0) 00246 return edk_FAILED; //テンポラリファイルフォルダを取得 00247 00248 //仮のテンポラリファイル。ちゃんとやるならGetTempFileNameで。 00249 if(DKUTIL_FAILED(dkc_wcscat2(ptr->pPath,dkcdSRR_PATH_SIZE,dkcdSRR_TEMP_FILE_NAME_W))) 00250 { 00251 return edk_FAILED; 00252 } 00253 00254 }else{//Win9x 00255 pGTPA = (GetTempPathA_FT)ptr->fpGetTempPath; 00256 dkcmFORCE_NOT_ASSERT(dkcdMAXPATH < pGTPA(0,ptr->pPath)); 00257 00258 if(pGTPA(dkcdMAXPATH,ptr->pPath)==0) 00259 return edk_FAILED; //テンポラリファイルフォルダを取得 00260 00261 //仮のテンポラリファイル。ちゃんとやるならGetTempFileNameで。 00262 if(DKUTIL_FAILED(dkc_strcat2(ptr->pPath,dkcdSRR_PATH_SIZE,dkcdSRR_TEMP_FILE_NAME))) 00263 { 00264 return edk_FAILED; 00265 } 00266 } 00267 { 00268 int i; 00269 for(i=0;i<dkcdSEMI_REAL_RANDOM_TRIAL_AND_ERROR_LIMIT;)//64回も行って成功しないは無いだろう・・・ 00270 { 00271 if(0xFFFFFFFF==test(ptr,128,40,60)){ 00272 i++; 00273 }else{ 00274 break; 00275 } 00276 } 00277 if(!(i<64)) 00278 { 00279 return edk_FAILED; 00280 } 00281 } 00282 00283 return edk_SUCCEEDED; 00284 #else 00285 00286 00287 #endif 00288 00289 }
|