参考链接

  • 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))test |= CRYPTO_ALG_TESTED;down_read(&crypto_alg_sem);alg = __crypto_alg_lookup(name, type | test, mask | test);if (!alg && test) {alg = __crypto_alg_lookup(name, type, mask);if (alg && !crypto_is_larval(alg)) {/* Test failed */crypto_mod_put(alg);alg = ERR_PTR(-ELIBBAD);}}up_read(&crypto_alg_sem);return alg;
}
  • crypto_alg_lookup函数的输入参数包括待查找的算法名name、算法类型type和算法类型屏蔽位mask,查找命中时返回查找到的算法或算法幼虫,查找未命中时返回异常。
  • api.c - crypto/api.c - Linux source code (v5.15.12) - Bootlin
  • crypto_alg_lookup函数实际上只是一个包裹函数,在锁定算法管理链表访问信号量crypto_alg_sem的前提下调用__crypto_alg_lookup函数完成算法查找。
  • __crypto_alg_lookup函数的输入参数和返回值与crypto_alg_lookup函数完全相同,其处理流程如下所示

  • 1)__crypto_alg_lookup函数的基本逻辑是从算法管理链表中查找符合条件的算法,查找命中时返回算法(可能是算法幼虫),查找未命中时返回空指针。
  • 2)在查找算法时,遵循以下原则:
    • a)算法不能处于濒死(moribund)状态。
    • b)算法类型必须满足查找要求,即(q->cra_flags ^ type) & mask=0。
    • c)算法可以是已注册的算法或者正在注册算法的算法幼虫(可能是注册用算法幼虫也可能是检测用算法幼虫),如果是注册用算法幼虫,算法类型屏蔽位必须满足查找要求。注册用算法幼虫和检测用算法幼虫的区别之一是检测用算法幼虫设置了算法驱动名
    • d)算法名符合查找要求精确符合exac和模糊符合fuzzy两种情况,如下所示。
exact = !strcmp(q->cra_driver_name, name);
fuzzy = !strcmp(q->cra_name, name);
  • 模糊符合时还要求算法的优先级要高于预期优先级best。查找到精确符合的算法时,退出查找流程,返回精确符合的算法;查找到模糊符合的算法时,必须确保返回的是优先级最高的模糊符合算法。

    • e)查找到符合要求的算法时,调用crypto_mod_get函数持有该算法,即增加算法的引用计数。
  • 3)在查找算法时,可能出现以下几种情况:
    • a)算法管理链表上有已注册且检验合格的符合要求的算法,则返回对应的算法。
    • b)算法管理链表中没有符合要求的算法,查找返回空指针,外部将按算法名加载算法模块(静态算法模块)或创建注册用算法幼虫,发起创建动态算法,等待算法注册完成,返回新注册的算法。
    • c)查找时,其他外部应用已发起创建动态算法,但未完成,此时算法管理链表中只有一个符合要求的注册用算法幼虫,返回注册用算法幼虫,外部等待算法注册检验完成,返回新注册的算法。
    • d)查找时,其他外部应用以发起创建动态算法,已完成,但正确性检验未完成,此时算法管理链表中有符合要求的注册用算法幼虫和检测用算法幼虫,而已注册的算法未检验合格故不符合要求,检测用算法幼虫优先级(>0)高于注册用算法幼虫(-1),因此返回检验用算法幼虫,外部等待算法检验结束,返回新注册的算法。

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

  1. Linux加密框架 crypto 哈希算法举例 MD5

    参考链接 Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common_CHYabc123456hh的 ...

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

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

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

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

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

    算法查找接口crypto_find_alg 算法实例tfm是算法的一个可运行的副本,因此在创建算法实例前首先要查找确认算法是否已经注册有效,此时算法查找由函数crypto_find_alg实现. 补充 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 【微服务架构】SpringCloud之路由网关(zuul)
  2. Oracle中序列(Sequence)详解
  3. python数学建模基础教程_Python数学建模极简入门(二)差分方程
  4. go预防CSRF攻击
  5. 这样的奇技淫巧不可取,切记切记
  6. 重构,重构,重构--代码,程序,包括思想
  7. 【设计模式】第二章 代理模式
  8. python画折线图-手把手教你Python yLab的绘制折线图的画法
  9. 跨域请求的常用方式及解释
  10. word 产生很多temp 不显示_word表格中文字显示到最下面的时候不自动换页-解决办法...
  11. deeplearning.ai——TensorFlow指南
  12. (扒站工具)如何下载网站fonts文件夹
  13. PuttyPsftp命令行实现自动登录
  14. CentOS6.5下lv调整空间大小
  15. 计算机去掉word2007,研习office 2007兼容包怎么卸载
  16. 高中计算机网络技术应用教案,高中信息技术选修3《网络技术应用》教案.doc
  17. android手机紧急快捷键,常用手机指令(手机快捷键)及呼叫转移快捷指令
  18. 计算机快捷方式图标没显示不出来,程序快捷方式不显示图标怎么办?Win10快捷方式图标变白纸解决方法...
  19. GTC '19 经典回顾 | 如何编排和创造二次元中的舞蹈?
  20. 编程训练4-统计单词平均长度

热门文章

  1. 计算机控制的点火系统由,第八节(点火系统)
  2. python的read函数_Python Pandas pandas.read_sql函数方法的使用
  3. python从小白到大牛pdf 下载 资源共享_Kotlin从小白到大牛 (关东升著) 中文pdf高清版[12MB]...
  4. Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)
  5. 【转】DHF、DMR、MDF、DHR医疗器械文件要求与解读
  6. 【转】mysql 、oracle中char和varchar以及varchar2的区别
  7. 【转】WPF从我炫系列4---装饰控件的用法
  8. 【转】超详细的UML状态图符号,初学者也能轻松看懂状态图
  9. 【转】The underlying connection was closed
  10. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别