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加密框架设计与实现
linux加密框架 crypto 算法crypto_register_alg的注册流程相关推荐
- linux加密框架 crypto 算法管理 - 算法查找接口
参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的 ...
- linux加密框架 crypto 算法管理 - 哈希算法应用实例
参考链接 Linux加密框架应用示例(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博 ...
- linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup
参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的 ...
- Linux加密框架 crypto算法模板 以及CBC算法模板实例
参考链接 Linux加密框架中的主要数据结构(四)_家有一希的博客-CSDN博客 algapi.h - include/crypto/algapi.h - Linux source code (v5. ...
- Linux加密框架 crypto 算法模板 HMAC模板举例
参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客 Linux加密框架 crypto 算法模板_CHYabc123456hh的博客-CSDN博客 HMAC算法模板 hma ...
- linux加密框架 crypto 算法管理 - 算法检测
参考链接 Linux加密框架的算法管理(四)_家有一希的博客-CSDN博客 函数介绍 如前所述,无论是静态算法还是动态算法,算法注册的最后一步都是进行算法正确性检验,一般流程是先调用__crypto_ ...
- linux加密框架 crypto 算法管理 - 动态和静态算法管理
参考链接 Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客 动态和静态算法管理 静态算法 加密框架中的算法分为静态算法和动态算法两种,其中静态算法指的是以"算法名.ko&qu ...
- linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数
参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 函数介绍 static struct crypto_alg *crypto_alg_lookup(const char *n ...
- linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup
参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 crypto_larval_lookup函数介绍 crypto_larval_lookup函数的输入参数包括待查找的算法名n ...
最新文章
- linux下find(文件查找)命令的用法总结
- 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
- 网络计算机室电源线怎么布,网吧综合布线(电源和网络)经验谈
- RHEL6.3配置FTP服务器(2) 本地用户下载和上传
- [原创]Clang with Microsoft CodeGen小测试
- 防止 MySQL-PHP 网站被玩弄的方法
- 如何在Pr中应用混合模式合成影片中的剪辑?
- 通过帮网友解答问题训练同学们使用awk,sed案例
- 二路归并排序Python实现-II
- 腾讯翻译君在线翻译怎么翻译整个文件_腾讯文档:在线多人协作文档工具
- 解决引用微信公众号获取的图片不能正常显示的问题,显示改图片来自微信公众号
- OpenSSL 生成CA证书及终端用户证书
- 基于单片机的函数信号波形发生器系统设计(#0428)
- postfix 测试邮件服务器,搭建Postfix邮件服务器
- log4j xml配置保存日志天数
- vue与原生安卓相互调用
- 一个有趣的时间段重叠问题
- Tofu Icecream and Tai-chi man
- docker容器创建的流程详解
- 非侵入式负荷分解之BLUED数据集
热门文章
- php apache配置测试端口,详解安装配置Windows版apache服务器及压力测试
- java代码请求2次_Android基于OkHttpUtils网络请求的二次封装
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(Python面向对象的编程)
- 【转】C++ 存储类
- 【转】Vue.js入门教程(二)在页面中引入vue的方式
- MockPlus原型设计介绍
- html盒子全部蓝色,彻底弄懂CSS盒子模式之五
- 基于matlab的数字下变频器的设计与仿真应用,基于MATLAB的数字下变频器的设计与仿真应用.pdf...
- 小米手机证书信任设置在哪里_小米手机闹钟在哪里?闹钟怎么设置?怎么找到闹钟?...
- 正则表达式来判断Sql语句中Select到from之间使用了*而不是字段名