隨機數演算法定義

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 用例。

返回

成功時分配的密碼控制代碼;如果發生錯誤,則 IS_ERR() 為 true,PTR_ERR() 返回錯誤程式碼。

如果是錯誤,PTR_ERR() 會返回錯誤碼。

struct rng_alg *crypto_rng_alg(struct crypto_rng *tfm)

從 RNG 控制代碼獲取 ‘struct rng_alg’ 指標

引數

struct crypto_rng *tfm

RNG 控制代碼

返回

指向 ‘struct rng_alg’ 的指標,從 **tfm** RNG 控制代碼派生

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 在達到預定義閾值後實現自動重新播種。

返回

隨機數生成器的種子大小