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

算法注册流程

静态算法模块初始化

分组算法模块初始化

  • AES算法模块(aes_generic.c)的初始化接口aes_init实现向加密框架注册AES算法的功能,如下所示。
  • aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.12) - Bootlin
static int __init aes_init(void)
{return crypto_register_alg(&aes_alg);
}

哈希算法模块初始化

  • MD5算法模块(md5.c)的初始化接口md5_mod_init实现向加密框架注册MD5算法的功能,如下所示。 
  • md5.c - crypto/md5.c - Linux source code (v5.15.12) - Bootlin
static int __init md5_mod_init(void)
{return crypto_register_shash(&alg);
}

静态算法注册接口crypto_register_alg

  • crypto_register_alg函数实现向加密框架注册静态算法的功能,输入参数为待注册静态算法的算法说明alg,返回值为0表示注册成功,否则表示注册过程中出现异常。
  • crypto_register_alg函数执行的算法注册流程如下图所示

静态算法注册流程

  •  algapi.c - crypto/algapi.c - Linux source code (v5.15.12) - Bootlin
int crypto_register_alg(struct crypto_alg *alg)
{struct crypto_larval *larval;int err;alg->cra_flags &= ~CRYPTO_ALG_DEAD;err = crypto_check_alg(alg);if (err)return err;down_write(&crypto_alg_sem);larval = __crypto_register_alg(alg);up_write(&crypto_alg_sem);if (IS_ERR(larval))return PTR_ERR(larval);crypto_wait_for_test(larval);return 0;
}
EXPORT_SYMBOL_GPL(crypto_register_alg);
  • 1)crypto_check_alg函数实现检查算法说明alg的有效性(包括地址对齐要求、块大小、优先级等)和设置算法驱动名cra_driver_name两项功能其中设置算法驱动名的功能由crypto_set_driver_name函数实现,如果未设置算法驱动名,则按照“算法名-generic”格式设置算法驱动名。如果alg无效则退出注册流程。(未从源码分析得到这个结论)
  • 2)__crypto_register_alg函数实现通用算法注册流程,注册过程由读写信号量crypto_alg_sem(操作之前使用 down_write进行加锁,执行操作 __crypto_register_alg,然后使用up_write进行锁资源的释放)进行保护。如果注册过程中出现异常,退出注册流程,否则函数返回值为待注册算法的检验用算法幼虫larval(__crypto_register_alg函数返回类型是struct crypto_larvel)。
  • 3)crypto_wait_for_test函数用于触发并等待待注册算法的正确性检验(由专门的内核线程负责,通过完成量进行同步),检验结束后清理注册用的算法幼虫(由crypto_larval_kill函数实现)。从流程上看,算法正确性检验的结果不影响算法注册的正常结束,但是通过正确性校验的算法的算法标志cra_flags会设置算法已检测状态位(CRYPTO_ALG_TESTED)。

  • 4)crypto_register_alg函数中接口调用情况如下所示,其中alg表示待注册算法的通用算法说明。 

算法调用情况

  •  5)AES算法注册成功后,算法管理链表上已注册的算法情况如下所示。

算法管理链表上已注册算法情况

 crypto_register_alg函数整体调用流程

 参考链接

  • Linux加密框架的算法管理(一)_家有一希的博客-CSDN博客_linux加密框架设计与实现

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

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

相关文章

python 方法的实例_python调用自定义函数的实例操作

在python中,想要调用自定义函数必须先声明,然后才能调用。使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果。(1)声明函数python中使用 def 可以声明…

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

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

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

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

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

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

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

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

python用http协议传数据_python基础 -- 简单实现HTTP协议

标签:一、直接代码# -*- coding: utf-8 -*-import socket__author__ ‘lpe234‘__date__ ‘2015-03-12‘if __name__ ‘__main__‘:sock socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind((‘127.0.0.1‘, 8001))sock.listen(5)while True:connecti…

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

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

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

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

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

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

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

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

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

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

python ssh 远程登录路由器执行命令_ssh批量登录并执行命令(python实现)

局域网内有一百多台电脑,全部都是linux操作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的。现在有个任务是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件&…

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

参考链接 Linux加密框架的算法管理(二)_家有一希的博客-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))…

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

参考链接 Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客 动态和静态算法管理 静态算法 加密框架中的算法分为静态算法和动态算法两种,其中静态算法指的是以"算法名.ko"形式存在的静态编译的算法模块,如aes.k…

3分钟入门python_3分钟带你了解世界第一语言Python 入门上手也这么简单!

一、Python入门1. Python爬虫入门一之综述Python爬虫入门二之爬虫基础了解Python爬虫入门三之Urllib库的基本使用Python爬虫入门四之Urllib库的高级用法Python爬虫入门五之URLError异常处理Python爬虫入门六之Cookie的使用Python爬虫入门七之正则表达式Python爬虫入门八之Beaut…

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

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

select选中的值_selenium下拉框处理(select)

前言 web自动化中,常见的场景还有一个下拉框的选择,哪么在selenium中如何做下拉框的操作呢?selectselect在HTML中表示元素名,可创建单选或多选菜单。HTML中select长什么样子:select在HTML中元素名,下面有选…

linux加密框架 crypto 算法管理 - 创建哈希算法实例

crypto_alloc_ahash函数 加密框架中的哈希算法可以是同步方式实现的也可以是异步方式实现的,但是算法应用不关注哈希算法的实现方式,关注的是哈希算法提供的算法接口。为实现统一管理,加密框架默认哈希算法的实现方式为异步方式,…

发票管理软件_企业为什么需要ERP企业管理软件?

对于一个制造企业来说,生产是企业最大的动力,而生产也需要进行优化管理,一个好的生产管理方式会带给企业巨大的发展空间和利润价值。对于一个制造企业来说,生产是企业最大的动力,而生产也需要进行优化管理,…

python 画风场 scipy_Python数据分析及可视化实例之Scipy

强大到没有朋友的科学计算库,不知道怎么介绍ta!大牛张若愚出了厚本的《Python 科学计算》第二版里面包罗万象,就不做搬运工了,尽快开工pandas。来一弹在NLP自然语言处理中用到的稀疏矩阵处理:# coding: utf-8# # 稀疏矩…