random.h
Functions
| Name | |
|---|---|
| int | wc_InitNetRandom(const char * configFile, wnr_hmac_key hmac_cb, int timeout) グローバルWhitewood netRandomコンテキストを初期化します |
| int | wc_FreeNetRandom(void ) グローバルWhitewood netRandomコンテキストを解放します。 |
| int | wc_InitRng(WC_RNG * ) rng用のシード(OSから)と鍵暗号を取得します。rng_>drbg(決定論的乱数ビット生成器)が割り当てられます(wc_FreeRngで割り当て解除する必要があります)。これはブロッキング操作です。 |
| int | wc_RNG_GenerateBlock(WC_RNG * rng, byte * b, word32 sz) 疑似乱数データのszバイトをoutputにコピーします。必要に応じてrngを再シードします(ブロッキング)。 |
| WC_RNG * | wc_rng_new(byte * nonce, word32 nonceSz, void * heap) 新しいWC_RNG構造体を作成します。 |
| int | wc_FreeRng(WC_RNG * ) drgbを安全に解放するために、RNGが不要になったときに呼び出す必要があります。rng-drbgをゼロ化しXFREEします。 |
| WC_RNG * | wc_rng_free(WC_RNG * rng) rngを安全に解放するために、RNGが不要になったときに呼び出す必要があります。 |
| int | wc_RNG_HealthTest(int reseed, const byte * seedA, word32 seedASz, const byte * seedB, word32 seedBSz, byte * output, word32 outputSz) drbgの機能を作成してテストします。 |
Attributes
| Name | |
|---|---|
| WC_RNG byte * | b |
Functions Documentation
function wc_InitNetRandom
int wc_InitNetRandom(
const char * configFile,
wnr_hmac_key hmac_cb,
int timeout
)
グローバルWhitewood netRandomコンテキストを初期化します
Parameters:
- configFile 設定ファイルへのパス
- hmac_cb HMACコールバックを作成するためのオプション。
- timeout タイムアウト期間。
See: wc_FreeNetRandom
Return:
- 0 成功
- BAD_FUNC_ARG configFileがnullまたはtimeoutが負の値の場合。
- RNG_FAILURE_E rngの初期化に失敗しました。
Example
char* config = "path/to/config/example.conf";
int time = // 十分なタイムアウト値;
if (wc_InitNetRandom(config, NULL, time) != 0)
{
// エラーが発生しました
}
function wc_FreeNetRandom
int wc_FreeNetRandom(
void
)
グローバルWhitewood netRandomコンテキストを解放します。
Parameters:
- none 戻り値なし。
See: wc_InitNetRandom
Return:
- 0 成功
- BAD_MUTEX_E wnr_mutexのミューテックスロックエラー
Example
int ret = wc_FreeNetRandom();
if(ret != 0)
{
// エラーを処理
}
function wc_InitRng
int wc_InitRng(
WC_RNG *
)
rng用のシード(OSから)と鍵暗号を取得します。rng->drbg(決定論的乱数ビット生成器)が割り当てられます(wc_FreeRngで割り当て解除する必要があります)。これはブロッキング操作です。
Parameters:
- rng シードと鍵暗号で使用するために初期化される乱数生成器
See:
- wc_InitRngCavium
- wc_RNG_GenerateBlock
- wc_RNG_GenerateByte
- wc_FreeRng
- wc_RNG_HealthTest
Return:
- 0 成功時。
- MEMORY_E XMALLOCが失敗しました
- WINCRYPT_E wc_GenerateSeed: コンテキストの取得に失敗しました
- CRYPTGEN_E wc_GenerateSeed: ランダムの取得に失敗しました
- BAD_FUNC_ARG wc_RNG_GenerateBlock入力がnullまたはszがMAX_REQUEST_LENを超えています
- DRBG_CONT_FIPS_E wc_RNG_GenerateBlock: Hash_genがDRBG_CONT_FAILUREを返しました
- RNG_FAILURE_E wc_RNG_GenerateBlock: デフォルトエラー。rngのステータスが元々okでないか、DRBG_FAILEDに設定されています
Example
RNG rng;
int ret;
#ifdef HAVE_CAVIUM
ret = wc_InitRngCavium(&rng, CAVIUM_DEV_ID);
if (ret != 0){
printf("RNG Nitrox init for device: %d failed", CAVIUM_DEV_ID);
return -1;
}
#endif
ret = wc_InitRng(&rng);
if (ret != 0){
printf("RNG init failed");
return -1;
}
function wc_RNG_GenerateBlock
int wc_RNG_GenerateBlock(
WC_RNG * rng,
byte * b,
word32 sz
)
疑似乱数データのszバイトをoutputにコピーします。必要に応じてrngを再シードします(ブロッキング)。
Parameters:
- rng wc_InitRngで初期化された乱数生成器
- output ブロックがコピーされるバッファ
- sz 出力のサイズ(バイト単位)
See:
- wc_InitRngCavium, wc_InitRng
- wc_RNG_GenerateByte
- wc_FreeRng
- wc_RNG_HealthTest
Return:
- 0 成功時
- BAD_FUNC_ARG 入力がnullまたはszがMAX_REQUEST_LENを超えています
- DRBG_CONT_FIPS_E Hash_genがDRBG_CONT_FAILUREを返しました
- RNG_FAILURE_E デフォルトエラー。rngのステータスが元々okでないか、DRBG_FAILEDに設定されています
Example
RNG rng;
int sz = 32;
byte block[sz];
int ret = wc_InitRng(&rng);
if (ret != 0) {
return -1; //rngの初期化失敗!
}
ret = wc_RNG_GenerateBlock(&rng, block, sz);
if (ret != 0) {
return -1; //ブロック生成失敗!
}
function wc_rng_new
WC_RNG * wc_rng_new(
byte * nonce,
word32 nonceSz,
void * heap
)
新しいWC_RNG構造体を作成します。
Parameters:
- heap ヒープ識別子へのポインタ
- nonce nonceを含むバッファへのポインタ
- nonceSz nonceの長さ
- rng wc_InitRngで初期化された乱数生成器
- b ブロックがコピーされる1バイトのバッファ
See:
- wc_InitRng
- wc_rng_free
- wc_FreeRng
- wc_RNG_HealthTest
- wc_InitRngCavium
- wc_InitRng
- wc_RNG_GenerateBlock
- wc_FreeRng
- wc_RNG_HealthTest
Return:
- WC_RNG 成功時の構造体
- NULL エラー時
- 0 成功時
- BAD_FUNC_ARG 入力がnullまたはszがMAX_REQUEST_LENを超えています
- DRBG_CONT_FIPS_E Hash_genがDRBG_CONT_FAILUREを返しました
- RNG_FAILURE_E デフォルトエラー。rngのステータスが元々okでないか、DRBG_FAILEDに設定されています
Example
RNG rng;
byte nonce[] = { nonceを初期化 };
word32 nonceSz = sizeof(nonce);
wc_rng_new(&nonce, nonceSz, &heap);
疑似乱数データの1バイトをbにコピーするためにwc_RNG_GenerateBlockを呼び出します。必要に応じてrngを再シードします。
Example
RNG rng;
int sz = 32;
byte b[1];
int ret = wc_InitRng(&rng);
if (ret != 0) {
return -1; //rngの初期化失敗!
}
ret = wc_RNG_GenerateByte(&rng, b);
if (ret != 0) {
return -1; //ブロック生成失敗!
}
function wc_FreeRng
int wc_FreeRng(
WC_RNG *
)
drgbを安全に解放するために、RNGが不要になったときに呼び出す必要があります。rng-drbgをゼロ化しXFREEします。
Parameters:
- rng wc_InitRngで初期化された乱数生成器
See:
- wc_InitRngCavium
- wc_InitRng
- wc_RNG_GenerateBlock
- wc_RNG_GenerateByte,
- wc_RNG_HealthTest
Return:
- 0 成功時
- BAD_FUNC_ARG rngまたはrng->drgbがnull
- RNG_FAILURE_E drbgの割り当て解除に失敗しました
Example
RNG rng;
int ret = wc_InitRng(&rng);
if (ret != 0) {
return -1; //rngの初期化失敗!
}
int ret = wc_FreeRng(&rng);
if (ret != 0) {
return -1; //rngの解放失敗!
}
function wc_rng_free
WC_RNG * wc_rng_free(
WC_RNG * rng
)
rngを安全に解放するために、RNGが不要になったときに呼び出す必要があります。
Parameters:
- rng wc_InitRngで初期化された乱数生成器
See:
Example
RNG rng;
byte nonce[] = { nonceを初期化 };
word32 nonceSz = sizeof(nonce);
rng = wc_rng_new(&nonce, nonceSz, &heap);
// rngを使用
wc_rng_free(&rng);
function wc_RNG_HealthTest
int wc_RNG_HealthTest(
int reseed,
const byte * seedA,
word32 seedASz,
const byte * seedB,
word32 seedBSz,
byte * output,
word32 outputSz
)
drbgの機能を作成してテストします。
Parameters:
- int reseed: 設定されている場合、再シード機能をテストします
- seedA drgbをインスタンス化するシード
- seedASz seedAのサイズ(バイト単位)
- seedB reseedが設定されている場合、drbgはseedBで再シードされます
- seedBSz seedBのサイズ(バイト単位)
- output seedrandomが設定されている場合はseedBでシードされたランダムデータに初期化され、それ以外の場合はseedAでシードされます
- outputSz outputの長さ(バイト単位)
See:
- wc_InitRngCavium
- wc_InitRng
- wc_RNG_GenerateBlock
- wc_RNG_GenerateByte
- wc_FreeRng
Return:
- 0 成功時
- BAD_FUNC_ARG seedAとoutputはnullであってはなりません。reseedが設定されている場合、seedBはnullであってはなりません
- -1 テスト失敗
Example
byte output[SHA256_DIGEST_SIZE * 4];
const byte test1EntropyB[] = ....; // reseed falseのテスト入力
const byte test1Output[] = ....; // テストベクター: reseed falseの期待出力
ret = wc_RNG_HealthTest(0, test1Entropy, sizeof(test1Entropy), NULL, 0,
output, sizeof(output));
if (ret != 0)
return -1;//再シードなしのヘルステスト失敗
if (XMEMCMP(test1Output, output, sizeof(output)) != 0)
return -1; //テストベクターとの比較失敗: 予期しない出力
const byte test2EntropyB[] = ....; // reseedのテスト入力
const byte test2Output[] = ....; // テストベクターreseedの期待出力
ret = wc_RNG_HealthTest(1, test2EntropyA, sizeof(test2EntropyA),
test2EntropyB, sizeof(test2EntropyB),
output, sizeof(output));
if (XMEMCMP(test2Output, output, sizeof(output)) != 0)
return -1; //テストベクターとの比較失敗
Attributes Documentation
variable b
WC_RNG byte * b;
Source code
int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout);
int wc_FreeNetRandom(void);
int wc_InitRng(WC_RNG*);
int wc_RNG_GenerateBlock(WC_RNG* rng, byte* b, word32 sz);
WC_RNG* wc_rng_new(byte* nonce, word32 nonceSz, void* heap)
int wc_RNG_GenerateByte(WC_RNG* rng, byte* b);
int wc_FreeRng(WC_RNG*);
WC_RNG* wc_rng_free(WC_RNG* rng);
int wc_RNG_HealthTest(int reseed, const byte* seedA, word32 seedASz,
const byte* seedB, word32 seedBSz,
byte* output, word32 outputSz);
Updated on 2025-12-12 at 03:08:17 +0000