非对称签名算法定义

struct sig_alg

通用公钥签名算法

定义:

struct sig_alg {
    int (*sign)(struct crypto_sig *tfm,const void *src, unsigned int slen, void *dst, unsigned int dlen);
    int (*verify)(struct crypto_sig *tfm,const void *src, unsigned int slen, const void *digest, unsigned int dlen);
    int (*set_pub_key)(struct crypto_sig *tfm, const void *key, unsigned int keylen);
    int (*set_priv_key)(struct crypto_sig *tfm, const void *key, unsigned int keylen);
    unsigned int (*key_size)(struct crypto_sig *tfm);
    unsigned int (*digest_size)(struct crypto_sig *tfm);
    unsigned int (*max_size)(struct crypto_sig *tfm);
    int (*init)(struct crypto_sig *tfm);
    void (*exit)(struct crypto_sig *tfm);
    struct crypto_alg base;
};

成员

sign

函数执行公钥算法定义的签名操作。 成功时,返回签名大小。 可选。

verify

函数执行公钥算法定义的完整验证操作,返回验证状态。 可选。

set_pub_key

函数调用算法特定的设置公钥函数,该函数知道如何解码和解释 BER 编码的公钥和参数。 必需。

set_priv_key

函数调用算法特定的设置私钥函数,该函数知道如何解码和解释 BER 编码的私钥和参数。 可选。

key_size

函数返回密钥大小。 必需。

digest_size

函数返回最大摘要大小。 可选。

max_size

函数返回最大签名大小。 可选。

init

初始化加密转换对象。 此函数用于初始化加密转换对象。 此函数仅在实例化时调用一次,就在分配转换上下文之后。 如果加密硬件有一些特殊的软件处理要求,则此函数应检查转换的精确要求并将任何软件回退到位。

exit

取消初始化加密转换对象。 这是 init 的对应项,用于删除在 init 中设置的各种更改。

base

通用加密 API 算法数据结构

非对称签名 API

公钥签名 API 与 CRYPTO_ALG_TYPE_SIG 类型的算法一起使用(在 /proc/crypto 中列为“sig”类型)

struct crypto_sig *crypto_alloc_sig(const char *alg_name, u32 type, u32 mask)

分配签名 tfm 句柄

参数

const char *alg_name

是签名算法的 cra_name / 名称或 cra_driver_name / 驱动程序名称,例如“ecdsa”

u32 type

指定算法的类型

u32 mask

指定算法的掩码

描述

为公钥签名算法分配句柄。 返回的 struct crypto_sig 是签名操作的任何后续 API 调用所需的句柄。

返回

成功时分配的句柄; 如果发生错误,则 IS_ERR() 为真,PTR_ERR() 返回错误代码。

如果是错误,PTR_ERR() 会返回错误代码。

void crypto_free_sig(struct crypto_sig *tfm)

释放签名 tfm 句柄

参数

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的签名 tfm 句柄

描述

如果 tfm 是 NULL 或错误指针,则此函数不执行任何操作。

unsigned int crypto_sig_keysize(struct crypto_sig *tfm)

获取密钥大小

参数

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的签名 tfm 句柄

描述

函数返回密钥大小(以位为单位)。 函数假定密钥已在转换中设置。 如果在没有设置密钥或设置密钥失败的情况下调用此函数,则最终可能会出现 NULL 解引用。

unsigned int crypto_sig_digestsize(struct crypto_sig *tfm)

获取最大摘要大小

参数

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的签名 tfm 句柄

描述

函数返回最大摘要大小(以字节为单位)。 函数假定密钥已在转换中设置。 如果在没有设置密钥或设置密钥失败的情况下调用此函数,则最终可能会出现 NULL 解引用。

unsigned int crypto_sig_maxsize(struct crypto_sig *tfm)

获取最大签名大小

参数

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的签名 tfm 句柄

描述

函数返回最大签名大小(以字节为单位)。 函数假定密钥已在转换中设置。 如果在没有设置密钥或设置密钥失败的情况下调用此函数,则最终可能会出现 NULL 解引用。

int crypto_sig_sign(struct crypto_sig *tfm, const void *src, unsigned int slen, void *dst, unsigned int dlen)

调用签名操作

参数

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的签名 tfm 句柄

const void *src

源缓冲区

unsigned int slen

源长度

void *dst

目标缓冲区

unsigned int dlen

目标长度

描述

函数调用给定算法的特定签名操作

返回

成功时返回签名大小; 错误时返回错误代码

int crypto_sig_verify(struct crypto_sig *tfm, const void *src, unsigned int slen, const void *digest, unsigned int dlen)

调用签名验证

参数

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的签名 tfm 句柄

const void *src

源缓冲区

unsigned int slen

源长度

const void *digest

摘要

unsigned int dlen

摘要长度

描述

函数调用给定算法的特定签名验证操作。

返回

验证成功时返回零; 错误时返回错误代码。

int crypto_sig_set_pubkey(struct crypto_sig *tfm, const void *key, unsigned int keylen)

调用设置公钥操作

参数

struct crypto_sig *tfm

tfm 句柄

const void *key

BER 编码的公钥、算法 OID、参数长度、BER 编码的参数

unsigned int keylen

密钥的长度(不包括其他数据)

描述

函数调用算法特定的设置密钥函数,该函数知道如何解码和解释编码的密钥和参数

返回

成功时返回零; 错误时返回错误代码

int crypto_sig_set_privkey(struct crypto_sig *tfm, const void *key, unsigned int keylen)

调用设置私钥操作

参数

struct crypto_sig *tfm

tfm 句柄

const void *key

BER 编码的私钥、算法 OID、参数长度、BER 编码的参数

unsigned int keylen

密钥的长度(不包括其他数据)

描述

函数调用算法特定的设置密钥函数,该函数知道如何解码和解释编码的密钥和参数

返回

成功时返回零; 错误时返回错误代码