随机数算法定义

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 rng_alg *crypto_rng_alg(struct crypto_rng *tfm)

获取 RNG 的名称

参数

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 在达到预定义阈值后实现自动重新播种。

返回

随机数生成器的种子大小