linux crypto cbc 接口,Linux加密框架中的主要数据结构(三)

数据结构之算法模板

定义

加密框架将算法模式抽象为算法模板数据结构struct crypto_template,在root/include/crypto/algapi.h中该数据结构定义如下所示:

struct crypto_template {

struct list_head list;

struct hlist_head instances;

struct module *module;

struct crypto_instance *(*alloc)(struct rtattr **tb);

void (*free)(struct crypto_instance *inst);

int (*create)(struct crypto_template *tmpl, struct rtattr **tb);

char name[CRYPTO_MAX_ALG_NAME];

};

算法模板数据结构struct crypto_template各成员变量含义如下所示:

1)list:算法模板链表节点。加密框架通过算法模板链表(头节点为crypto_template_list)管理所有算法模板。

2)instance:算法模板实例哈希链表的头节点。算法模板通过实例哈希链表管理由该模板创建的所有算法模板实例。

3)module:算法模板所属的模块,一般为THIS_MODULE,编译时确定。

4)name:算法模板名,最多包含64个字符。

5)alloc:创建算法模板实例(struct crypto_instance)的接口,返回值为新创建的算法模板实例。创建完需要调用注册接口完成算法模板实例注册。

6)free:算法模板实例的析构函数,用于释放算法模板实例占用的内存资源。

7)create:创建算法模板实例的接口。与alloc接口不同,create接口不会显示地创建一个算法模板实例(无论返回值还是输出参数都不是struct crypto_instance类型),而是隐式地创建一个算法模板实例,同时将注册新创建的算法模板实例。一般情况下,分组算法模式的实例地创建接口为alloc接口,哈希算法模式的实例创建接口为create接口。

无论是通过alloc接口还是create接口创建算法模板实例,输入参数tb为创建算法模板实例的相关参数,至少包括算法类型及屏蔽位(tb[0])和基础算法的算法名(tb[1])。每个参数都是TLV格式,类型T有CRYPTOA_TYPE(算法类型)、CRYPTOA_ALG(基础算法名)、CRYPTOA_U32等多种类型,而每种类型的参数值不同,因此接口输入参数tb的数据类型struct rtattr只包括rta_len和rta_type两个成员变量,分别对应着TLV结构的L和T,参数值数据结构根据参数类型定义。

参数类型为CRYPTOA_TYPE时,算法类型TLV结构(即tb[0])如下所示,通过函数crypto_get_attr_type可以获取算法类型和屏蔽位。

2dc753fa0b0dcc921f7c096d252225d3.png

参数类型为CRYPTOA_ALG时,基础算法名TLV结构(即tb[1])如下所示,通过函数crypto_attr_alg_name获取基础算法名。

f3944469607a30bf90e544f8dd09f79a.png

实例

-CBC算法模板

在cbc.c中,CBC算法模板crypto_cbc_tmpl定义如下所示:

static struct crypto_template crypto_cbc_tmpl = {

.name = "cbc",

.alloc = crypto_cbc_alloc,

.free = crypto_cbc_free,

.module = THIS_MODULE,

};

从上述定义可知CBC算法模板的属性如下所示:

1)CBC算法模板名为"cbc"。

2)CBC算法模板定义的创建实例接口为crypto_cbc_alloc,实例析构接口为crypto_cbc_free。

-HMAC算法模块

在hmac.c中,HMAC算法模板hmac_tmpl定义如下所示:

static struct crypto_template hmac_tmpl = {

.name = "hmac",

.create = hmac_create,

.free = shash_free_instance,

.module = THIS_MODULE,

};

从上述定义可知HMAC算法模板的属性如下所示:

1)HMAC算法模板名为"hmac"。

2)HMAC算法模板定义的创建实例接口为hmac_create,实例析构函数为shash_free_instance。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值