算法注册流程

静态算法模块初始化

分组算法模块初始化

  • 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的注册流程相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 函数介绍 static struct crypto_alg *crypto_alg_lookup(const char *n ...

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

    参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 crypto_larval_lookup函数介绍 crypto_larval_lookup函数的输入参数包括待查找的算法名n ...

最新文章

  1. linux下find(文件查找)命令的用法总结
  2. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
  3. 网络计算机室电源线怎么布,网吧综合布线(电源和网络)经验谈
  4. RHEL6.3配置FTP服务器(2) 本地用户下载和上传
  5. [原创]Clang with Microsoft CodeGen小测试
  6. 防止 MySQL-PHP 网站被玩弄的方法
  7. 如何在Pr中应用混合模式合成影片中的剪辑?
  8. 通过帮网友解答问题训练同学们使用awk,sed案例
  9. 二路归并排序Python实现-II
  10. 腾讯翻译君在线翻译怎么翻译整个文件_腾讯文档:在线多人协作文档工具
  11. 解决引用微信公众号获取的图片不能正常显示的问题,显示改图片来自微信公众号
  12. OpenSSL 生成CA证书及终端用户证书
  13. 基于单片机的函数信号波形发生器系统设计(#0428)
  14. postfix 测试邮件服务器,搭建Postfix邮件服务器
  15. log4j xml配置保存日志天数
  16. vue与原生安卓相互调用
  17. 一个有趣的时间段重叠问题
  18. Tofu Icecream and Tai-chi man
  19. docker容器创建的流程详解
  20. 非侵入式负荷分解之BLUED数据集

热门文章

  1. php apache配置测试端口,详解安装配置Windows版apache服务器及压力测试
  2. java代码请求2次_Android基于OkHttpUtils网络请求的二次封装
  3. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(Python面向对象的编程)
  4. 【转】C++ 存储类
  5. 【转】Vue.js入门教程(二)在页面中引入vue的方式
  6. MockPlus原型设计介绍
  7. html盒子全部蓝色,彻底弄懂CSS盒子模式之五
  8. 基于matlab的数字下变频器的设计与仿真应用,基于MATLAB的数字下变频器的设计与仿真应用.pdf...
  9. 小米手机证书信任设置在哪里_小米手机闹钟在哪里?闹钟怎么设置?怎么找到闹钟?...
  10. 正则表达式来判断Sql语句中Select到from之间使用了*而不是字段名