Linux加密框架中的主要数据结构(三)

数据结构之算法模板

  1. 定义

加密框架将算法模式抽象为算法模板数据结构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可以获取算法类型和屏蔽位。
Linux加密框架中的主要数据结构(三)_第1张图片
参数类型为CRYPTOA_ALG时,基础算法名TLV结构(即tb[1])如下所示,通过函数crypto_attr_alg_name获取基础算法名。
Linux加密框架中的主要数据结构(三)_第2张图片

  1. 实例

-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。

你可能感兴趣的:(加密框架)