随机数算法定义

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

返回

随机数生成器的种子大小