参考链接

  • Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客
  • algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin

定义

struct crypto_template {struct list_head list;struct hlist_head instances;struct module *module;int (*create)(struct crypto_template *tmpl, struct rtattr **tb);char name[CRYPTO_MAX_ALG_NAME];
};

crypto_template各成员变量含义

  • 1)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,参数值数据结构根据参数类型定义
/* Generic structure for encapsulation of optional route information.It is reminiscent of sockaddr, but with sa_family replacedwith attribute type.*/struct rtattr {unsigned short   rta_len;unsigned short  rta_type;
};
  • 参数类型为CRYPTOA_TYPE时,算法类型TLV结构(即tb[0])如下所示,通过函数crypto_get_attr_type可以获取算法类型和屏蔽位。
  • algapi.c - crypto/algapi.c - Linux source code (v5.15.11) - Bootlin
  • #define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))   返回空指针指向一个结构体,第一个参数char*指向的是type,第二个参数int是mask屏蔽位
  • #define RTA_LENGTH(len)    (RTA_ALIGN(sizeof(struct rtattr)) + (len))
struct crypto_attr_type {u32 type;u32 mask;
};

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

  • algapi.c - crypto/algapi.c - Linux source code (v5.15.11) - Bootlin
const char *crypto_attr_alg_name(struct rtattr *rta)
{struct crypto_attr_alg *alga;if (!rta)return ERR_PTR(-ENOENT);if (RTA_PAYLOAD(rta) < sizeof(*alga))return ERR_PTR(-EINVAL);if (rta->rta_type != CRYPTOA_ALG)return ERR_PTR(-EINVAL);alga = RTA_DATA(rta);alga->name[CRYPTO_MAX_ALG_NAME - 1] = 0;return alga->name;
}
EXPORT_SYMBOL_GPL(crypto_attr_alg_name);

参考链接

  • C/C++ struct初始化/复制/内存分配技巧_wys的专栏-CSDN博客

Linux加密框架 crypto 算法模板相关推荐

  1. Linux加密框架 crypto算法模板 以及CBC算法模板实例

    参考链接 Linux加密框架中的主要数据结构(四)_家有一希的博客-CSDN博客 algapi.h - include/crypto/algapi.h - Linux source code (v5. ...

  2. Linux加密框架 crypto 算法模板 HMAC模板举例

    参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客 Linux加密框架 crypto 算法模板_CHYabc123456hh的博客-CSDN博客 HMAC算法模板 hma ...

  3. Linux加密框架 crypto算法模板 以及HMAC算法模板实例

    HMAC算法模板实例 HMAC算法模板的创建实例的接口是hmac_create函数 hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bo ...

  4. Linux加密框架 crypto 算法模板 CBC模板举例

    参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客 https://blog.csdn.net/CHYabc123456hh/article/details/122194 ...

  5. linux加密框架 crypto 算法管理 - 哈希算法应用实例

    参考链接 Linux加密框架应用示例(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博 ...

  6. linux加密框架 crypto 算法管理 - 算法查找接口

    参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的 ...

  7. linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup

    参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的 ...

  8. linux加密框架 crypto 算法管理 - 动态和静态算法管理

    参考链接 Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客 动态和静态算法管理 静态算法 加密框架中的算法分为静态算法和动态算法两种,其中静态算法指的是以"算法名.ko&qu ...

  9. linux加密框架 crypto 算法管理 - 算法检测

    参考链接 Linux加密框架的算法管理(四)_家有一希的博客-CSDN博客 函数介绍 如前所述,无论是静态算法还是动态算法,算法注册的最后一步都是进行算法正确性检验,一般流程是先调用__crypto_ ...

最新文章

  1. ubuntu /boot 空间清理
  2. win10 安装MySQL过程和遇到的坑
  3. 黄海广博士的机器学习个人笔记及深度学习笔记
  4. 描述Linux的虚拟化实现,Linux中实现虚拟化的四种常用方法
  5. Qt读写ini文件的问题
  6. 实战-130W表增加字段耗时
  7. ADO.NET提供的Connection类总结
  8. 程序反编译找pdf打开密码_即时密码保护PDF文件的免费工具
  9. [2018.07.31 T3] 第三题
  10. 动易2007后台模板上传任意文件漏洞
  11. ExoPlayer的缓存 四 缓存Cache 的应用
  12. msvcr71.dll丢失的解决方法,哪种解决方法更好?
  13. 腾讯QQ空间穿越时光轴3D特效
  14. win7搭建nas存储服务器_普通用户的低成本家庭文件服务器(伪NAS)的搭建(系统篇)...
  15. macbook 如何在开盖的情况下连接外接显示器, 同时 macbook 的键盘和触摸板都能工作
  16. 动态规划经典问题--TSP问题
  17. 数据库关系代数思维导图
  18. wps怎么把字缩到最小_wps怎么把最左侧的字体变小
  19. IE网页出现js错误修复方法_离水的鱼_新浪博客
  20. python支持复数类型、以下说法错误的是_Python支持复数类型,以下哪个说法是错误的?...

热门文章

  1. qt能使用logback_X04Logback的配置
  2. spring boot web项目_阿里技术专家带你使用Spring框架快速搭建Web工程项目
  3. 域用户更改密码提示拒绝访问_AD域中的ACL攻防探索
  4. 解决方案架构师我需要懂代码吗_架构师不写代码,能行吗?
  5. arcgis坡度结果有误或z因子前有感叹号
  6. 【转】DHF、DMR、MDF、DHR医疗器械文件要求与解读
  7. Python 数据分析三剑客之 Matplotlib(十):3D 图的绘制
  8. 完美解决 bash: hexo: command not found
  9. Navicat15安装笔记
  10. 【CodeForces - 361D】Levko and Array (二分,dp)