9. crypto_register_instance
函数原型:int crypto_register_instance(struct crypto_template *tmpl, struct crypto_instance *inst);
函数功能:算法实例的注册。
函数参数:tmpl 模板名称; inst 算法实例名称。
函数返回值:函数调用成功返回0。
执行流程:
(1) 调用crypto_check_alg函数对实例对应的算法进行检测并返回结果err。
(2) 如果err为真,跳转到第8步。
(3) 对实例对应的算法模块和标志进行初始化操作。
(4) 对crypto_alg_sem写信号量进行锁定操作。
(5) 调用__crypto_register_alg对实例对应的算法进行注册并返回larval。如果返回结果出错,则跳转到第7步。
(6) 调用Hash链表在实例中添加list并初始化实例对应的模板。
(7) 写信号量的释放操作,并对第5步产生结果larval输出结果err。然后如果larval出错,则跳转到第8步并调用crypto_wait_for_test。
(8) 返回err结果。
流程图:见图2-14。
图2-14 算法实例注册
10. crypto_unregister_instance
函数原型:int crypto_unregister_instance(struct crypto_alg *alg);
函数功能:算法实例的注销。
函数参数:alg 算法注册名。
函数返回值:函数调用成功返回0。
执行流程:
(1) 初始化链表users。
(2) 判断实例对应的算法标志是否为CRYPTO_ALG_INSTANCE,如果不是则返回-EINVAL宏定义。
(3) 对算法的引用计数进行原子读操作,然后进行调试。
(4) 对crypto_alg_aem进行写信号量的锁定操作。
(5) 使用Hash链表对实例中的list链表进行删除并初始化操作。
(6) 调用算法删除函数crypto_remove_alg删除users链表中的alg算法并获得结果err。
(7) 对写信号量进行释放操作。
(8) 判断第6步的结果是否为真,如果为真,则返回err。
(9) 释放模板的实例对象并调用crypto_remove_final处理链表users中成员的后续操作。并返回0。
流程图:见图2-15。
图2-15 算法实例注销
11. crypto_alloc_instance2
函数原型:void *crypto_alloc_instance2(const char *name, struct crypto_alg *alg, unsigned int head);
函数功能:算法实例的分配。
函数参数:name 分配的实例名; alg 算法注册名;head 用于内核空间分配。
函数返回值:返回空指针。
执行流程:
(1) 调用函数kzalloc对内核空间进行分配,返回结果p。如果内核空间分配失败,则返回-ENOMEN宏定义。
(2) 判断实例算法名长度是否超过了算法的最大长度,如果超过了算法名最大长度,则跳转到第4步。
(3) 判断实例算法对应的驱动名是否超过了算法的最大长度,如果超过了算法名最大长度,则跳转到第4步。否则返回内核空间地址。
(4) 释放内核空间并返回错误信息。
流程图:见图2-16。
图2-16 算法实例分配
12. crypto_alloc_instance
函数原型:struct crypto_instance *crypto_alloc_instance(const char *name,
struct crypto_alg *alg);
函数功能:算法实例的分配,通过调用crypto_alloc_instance2实现。
函数参数:name 分配的实例名; alg 算法注册名。
函数返回值:返回crypto_instance 对象。
执行流程:
(1) 调用函数crypto_alloc_instance2分配算法实例,并返回结果inst。如果返回结果出错,则跳转到第4步。
(2) 调用crypto_instance_ctx获得算法实例的上下文,并返回结果spawn。
(3) 在获得spawn之后调用crypto_init_spawn对spawn进行初始化并返回结果err。如果初始化失败,则跳转到第4步,并返回inst算法实例对象。
(4) 释放分配的算法实例对象并返回错误结果。
流程图:见图2-17。
图2-17 算法实例分配接口
本文来源于:Linux加解密支持模块代码详细分析之核心文件分析-内部函数(3)-变化吧门户
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧门户观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论