隨機數演算法定義¶
-
struct rng_alg¶
隨機數生成器定義
定義:
struct rng_alg {
int (*generate)(struct crypto_rng *tfm,const u8 *src, unsigned int slen, u8 *dst, unsigned int dlen);
int (*seed)(struct crypto_rng *tfm, const u8 *seed, unsigned int slen);
void (*set_ent)(struct crypto_rng *tfm, const u8 *data, unsigned int len);
unsigned int seedsize;
struct crypto_alg base;
};
成員
generate由此變數定義的函式獲取一個隨機數。隨機數生成器轉換必須從透過此呼叫提供的上下文中生成隨機數,以及如果提供給呼叫的任何其他資料。
seed播種或重新播種隨機數生成器。透過呼叫此函式,隨機數生成器應準備好生成。如果隨機數生成器需要種子來設定新狀態,則種子必須由使用者在呼叫此函式時提供。所需種子的長度由 **seedsize** 定義。
set_ent設定否則將從熵源獲得的熵。僅供內部使用。
seedsize使用此變數定義的隨機數生成器初始化所需的種子大小。某些隨機數生成器不需要種子,因為播種在內部實現,不需要使用者支援。在這種情況下,種子大小設定為零。
base通用加密 API 演算法資料結構。
加密 API 隨機數 API¶
隨機數生成器 API 與 CRYPTO_ALG_TYPE_RNG 型別的密碼一起使用(在 /proc/crypto 中列為 “rng” 型別)
-
struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask)¶
分配 RNG 控制代碼
引數
const char *alg_name是訊息摘要密碼的 cra_name / name 或 cra_driver_name / driver name
u32 type指定密碼的型別
u32 mask指定密碼的掩碼
描述
為隨機數生成器分配密碼控制代碼。返回的 struct crypto_rng 是該隨機數生成器的任何後續 API 呼叫所需的密碼控制代碼。
對於所有隨機數生成器,此呼叫建立隨機數生成器的一個新的私有副本,該副本不與其他例項共享狀態。唯一的例外是 “krng” 隨機數生成器,它是 /dev/random 驅動程式的 get_random_bytes() 函式的核心加密 API 用例。
返回
-
struct rng_alg *crypto_rng_alg(struct crypto_rng *tfm)¶
從 RNG 控制代碼獲取 ‘
struct rng_alg’ 指標
-
void crypto_free_rng(struct crypto_rng *tfm)¶
歸零並釋放 RNG 控制代碼
引數
struct crypto_rng *tfm要釋放的密碼控制代碼
描述
如果 **tfm** 是 NULL 或錯誤指標,則此函式不執行任何操作。
-
int crypto_rng_generate(struct crypto_rng *tfm, const u8 *src, unsigned int slen, u8 *dst, unsigned int dlen)¶
獲取隨機數
引數
struct crypto_rng *tfm密碼控制代碼
const u8 *src儲存附加資料的輸入緩衝區,可以為 NULL
unsigned int slen附加資料的長度
u8 *dst儲存隨機數的輸出緩衝區
unsigned int dlen輸出緩衝區的長度
描述
此函式使用密碼控制代碼引用的隨機數生成器,使用隨機數填充呼叫者分配的緩衝區。
返回
0 函式成功; < 0 如果發生錯誤
-
int crypto_rng_get_bytes(struct crypto_rng *tfm, u8 *rdata, unsigned int dlen)¶
獲取隨機數
引數
struct crypto_rng *tfm密碼控制代碼
u8 *rdata儲存隨機數的輸出緩衝區
unsigned int dlen輸出緩衝區的長度
描述
此函式使用密碼控制代碼引用的隨機數生成器,使用隨機數填充呼叫者分配的緩衝區。
返回
0 函式成功; < 0 如果發生錯誤
-
int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen)¶
重新初始化 RNG
引數
struct crypto_rng *tfm密碼控制代碼
const u8 *seed種子輸入資料
unsigned int slen種子輸入資料的長度
描述
reset 函式透過清除當前狀態來完全重新初始化由密碼控制代碼引用的隨機數生成器。新狀態使用呼叫者提供的種子初始化,或者根據隨機數生成器型別自動初始化(ANSI X9.31 RNG 需要呼叫者提供的種子,SP800-90A DRBG 執行自動播種)。種子作為引數提供給此函式呼叫。提供的種子應具有為隨機數生成器定義的種子大小的長度,如 crypto_rng_seedsize 定義的那樣。
返回
如果金鑰設定成功,則為 0; < 0 如果發生錯誤
-
int crypto_rng_seedsize(struct crypto_rng *tfm)¶
獲取 RNG 的種子大小
引數
struct crypto_rng *tfm密碼控制代碼
描述
該函式返回由密碼控制代碼引用的隨機數生成器的種子大小。如果隨機數生成器不實現或不需要重新播種,則此值可能為零。例如,SP800-90A DRBG 在達到預定義閾值後實現自動重新播種。
返回
隨機數生成器的種子大小