Linux加密框架 crypto 算法模板

参考链接

  • 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;
};

算法类型TLV结构

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

基础算法名TLV结构

  • 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博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

参考链接 Linux加密框架中的主要数据结构&#xff08;三&#xff09;_家有一希的博客-CSDN博客https://blog.csdn.net/CHYabc123456hh/article/details/122194754 CBC算法模板 cbc.c - crypto/cbc.c - Linux source code (v5.15.11) - BootlinCBC算法模板属性 1)CBC算法模板名…

leetcode数组汇总_LeetCode刷题实战43:字符串相乘

算法的重要性&#xff0c;我就不多说了吧&#xff0c;想去大厂&#xff0c;就必须要经过基础知识和业务逻辑面试算法面试。所以&#xff0c;为了提高大家的算法能力&#xff0c;这个公众号后续每天带大家做一道算法题&#xff0c;题目就从LeetCode上面选 &#xff01;今天和大家…

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

参考链接 Linux加密框架中的主要数据结构&#xff08;三&#xff09;_家有一希的博客-CSDN博客Linux加密框架 crypto 算法模板_CHYabc123456hh的博客-CSDN博客 HMAC算法模板 hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlinhmac.c - crypto/hmac.c - Linux…

判断非负整数是否是3的倍数_五年级数学因数与倍数知识点汇总与解题方法技巧...

在日常教学过程中&#xff0c;我发现孩子们和某些家长对学习数学的方法有一些误区&#xff0c;就是觉着数学&#xff0c;单纯就是逻辑思维&#xff0c;只要多做练习题就能学好&#xff0c;但是不是这样的&#xff0c;低年级的学生&#xff0c;学习数学还是以背诵为主&#xff0…

tcp通讯一次最多能发送多少数据?_关于TCP/IP,必须知道的十个知识点

本文整理了一些TCP/IP协议簇中需要必知必会的十大问题&#xff0c;既是面试高频问题&#xff0c;又是程序员必备基础素养。一、TCP/IP模型TCP/IP协议模型&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;&#xff0c;包含了一系列构成互联网基础的网络…

Linux内核crypto子系统的调用逻辑

testmgr.c - crypto/testmgr.c - Linux source code (v5.15.11) - Bootlin上述代码是内核内部即crypto子系统对外提供密码服务的测试程序调用流程&#xff1a;crypto API <—> crypto core <—> crypto_register_alg处于用户态的程序想要调用处于内核态的密码算法&…

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

参考链接 Linux加密框架中的主要数据结构&#xff08;四&#xff09;_家有一希的博客-CSDN博客algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin struct crypto_instance {struct crypto_alg alg;struct crypto_template *tmpl;union {/* Node i…

tomcat temp 大量 upload 文件_渗透测试之文件上传漏洞总结

文末下载上传环境源码客户端js检查一般都是在网页上写一段javascript脚本&#xff0c;校验上传文件的后缀名&#xff0c;有白名单形式也有黑名单形式。查看源代码可以看到有如下代码对上传文件类型进行了限制&#xff1a;我们可以看到对上传文件类型进行了限制。绕过方法1.我们…

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

HMAC算法模板实例 HMAC算法模板的创建实例的接口是hmac_create函数hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlin hmac_create输入的参数包括 算法模板 tmpl 和 算法模板实例参数 tbhmac_cretae函数返回的结果为0表示算法模板实例已经创建注册算法模…

linux加密框架 crypto 算法crypto_register_alg的注册流程

算法注册流程 静态算法模块初始化 分组算法模块初始化 AES算法模块&#xff08;aes_generic.c&#xff09;的初始化接口aes_init实现向加密框架注册AES算法的功能&#xff0c;如下所示。aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.12) - Bootlin sta…

linux加密框架 crypto 静态哈希算法crypto_register_shash注册流程

参考链接 Linux加密框架的算法管理&#xff08;一&#xff09;_家有一希的博客-CSDN博客_linux加密框架设计与实现shash.c - crypto/shash.c - Linux source code (v5.15.12) - Bootlin 函数介绍 crypto_register_shash函数实现向加密框架注册静态哈希算法的功能&#xff0c;…

多个线程访问统一对象的不同方法_C#多线程读写同一文件处理

在多线程访问读写同一个文件时&#xff0c;经常遇到异常&#xff1a;“文件正在由另一进程使用&#xff0c;因此该进程无法访问此文件”。多线程访问统一资源的异常&#xff0c;解决方案1&#xff0c;保证读写操作单线程执行&#xff0c;可以使用lock解决方案2&#xff0c;使用…

linux加密框架 crypto 通用算法注册接口__crypto_register_alg注册流程

函数介绍 __crypto_register_alg函数实现向加密框架注册算法&#xff08;包括静态算法和动态算法&#xff09;的功能&#xff0c;输入参数为算法说明alg&#xff0c;注册成功时返回算法注册用的算法幼虫larval&#xff0c;注册失败时返回失败原因。__crypto_register_alg函数执…

spark官方文档_Spark整合Ray思路漫谈

什么是Ray之前花了大概两到三天把Ray相关的论文&#xff0c;官网文档看了一遍&#xff0c;同时特意去找了一些中文资料看Ray当前在国内的发展情况(以及目前国内大部分人对Ray的认知程度)。先来简单介绍下我对Ray的认知。首先基因很重要&#xff0c;所以我们先需要探查下Ray最初…

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

算法查找接口crypto_find_alg 算法实例tfm是算法的一个可运行的副本&#xff0c;因此在创建算法实例前首先要查找确认算法是否已经注册有效&#xff0c;此时算法查找由函数crypto_find_alg实现。补充&#xff1a; struct crypto_tfm *tfm; crypto_tfm类型指针tfm可以理解为指代…

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

参考链接 Linux加密框架的算法管理&#xff08;二&#xff09;_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的博客-CSDN博客 函数介绍 crypto_alg_mod_lookup函数输入参数包括待查找的算法名name、算法类型type和算…

qt triggered信号_Qt之网络编程UDP通信

点击上方“Qt学视觉”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达想要学习的同学们还请认真阅读每篇文章&#xff0c;相信你一定会有所收获UDP通信概述UDP(UserDatagramProtocol&#xff0c;用户数据报协议)是轻量的、不可靠的、面向数据报(datagram)、无…

adguard没有核心 core no_面试官:线程池如何按照core、max、queue的执行顺序去执行?...

前言这是一个真实的面试题。前几天一个朋友在群里分享了他刚刚面试候选者时问的问题&#xff1a;"线程池如何按照core、max、queue的执行循序去执行&#xff1f;"。我们都知道线程池中代码执行顺序是&#xff1a;corePool->workQueue->maxPool&#xff0c;源码…

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

参考链接 Linux加密框架的算法管理&#xff08;二&#xff09;_家有一希的博客-CSDN博客 crypto_larval_lookup函数介绍 crypto_larval_lookup函数的输入参数包括待查找的算法名name、算法类型type和算法类型屏蔽位mask&#xff0c;查找命中时返回查找到的算法或注册用算法幼…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数

参考链接 Linux加密框架的算法管理&#xff08;二&#xff09;_家有一希的博客-CSDN博客 函数介绍 static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type,u32 mask) {struct crypto_alg *alg;u32 test 0;if (!((type | mask) & CRYPTO_ALG_TESTED))…