随机数算法定义¶
-
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 / 名称或 cra_driver_name / 驱动程序名称
u32 type
指定密码的类型
u32 mask
指定密码的掩码
描述
为随机数生成器分配密码句柄。返回的 struct crypto_rng 是任何后续随机数生成器 API 调用所需的密码句柄。
对于所有随机数生成器,此调用都会创建一个新的随机数生成器的私有副本,该副本不与其他实例共享状态。唯一的例外是 “krng” 随机数生成器,它是 /dev/random 驱动程序的 get_random_bytes() 函数的内核加密 API 用例。
返回
- 成功时分配的密码句柄;如果
发生错误,则 IS_ERR() 为真,
PTR_ERR()
返回错误代码。
参数
struct crypto_rng *tfm
密码句柄
描述
返回已初始化的随机数生成器的通用名称 (cra_name)
返回
通用名称字符串
-
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 在达到预定义阈值后实现自动重新播种。
返回
随机数生成器的种子大小