非对称签名算法定义¶
-
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 调用所需的句柄。
返回
-
void crypto_free_sig(struct crypto_sig *tfm)¶
释放签名 tfm 句柄
-
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
密钥的长度(不包括其他数据)
描述
函数调用算法特定的设置密钥函数,该函数知道如何解码和解释编码的密钥和参数
返回
成功时返回零; 错误时返回错误代码