linux加密框架 crypto 通用算法注册接口__crypto_register_alg注册流程
函数介绍
- __crypto_register_alg函数实现向加密框架注册算法(包括静态算法和动态算法)的功能,输入参数为算法说明alg,注册成功时返回算法注册用的算法幼虫larval,注册失败时返回失败原因。
- __crypto_register_alg函数执行的算法注册流程如下所示。
- 1)算法注册过程可类比为幼虫(larval)成长为成虫(adult)的过程,成虫指的是带注册算法,而幼虫指的是在注册和算法正确性检验过程中使用的临时算法(之所以称之为幼虫是因为这个临时的算法不能提供可供调用的算法接口,只是提供算法的一些基本属性,而且其生命周期有限)。算法幼虫虽然是临时的算法,但是也可以表示为通用算法说明的一个实例,并且加密框架也是通过算法管理链表管理算法幼虫的,通过算法标志cra_flags中的标志位CRYPTO_ALG_LARVAL标识算法幼虫。
- 2)在算法注册前,首先要遍历算法管理链表确认是否可以进行本次注册,包括以下几种情况:
- a)算法不能重复注册,如果同名算法已注册或正在注册(即算法管理链表上有同名的算法幼虫,说明同名算法正在注册中)则终止注册流程;
- b)算法处于濒死状态(CRYPTO_ALG_DEAD状态或CRYPTO_ALG_DYING状态),说明该算法正在被删除或卸载,终止注册流程;
- c)如果待注册的算法是已注册算法的算法驱动(即注册算法的算法名和已注册算法的算法驱动名相同),说明算法注册流程有问题,终止注册流程。
- 3)如果遍历算法管理链表确认可以继续执行算法注册流程时,调用crypto_larval_alloc函数创建对应的算法幼虫larval,这个算法幼虫称之为检测用算法幼虫。检测用算法幼虫继承待注册算法的算法名、算法驱动名、优先级(>0)、算法类型等属性,设置算法幼虫标志CRYPTO_ALG_LARVAL和已检验标志CRYPTO_ALG_TESTED,初始化完成量completion,将通用算法说明的cra_destroy接口设置为crypto_larval_destroy函数,再将待注册算法设置为对应的算法成虫adult(此时待注册算法的引用计数为2)。
- 4)某个算法第一次注册时,__crypto_register_alg函数中接口调用情况如下所示。
- 5)假设在向加密框架注册AES算法,__crypto_register_alg函数执行完毕时,管理算法链表中已注册算法情况如下所示:
- 其中aes_alg为AES算法的通用算法说明,aes_larval_t表示AES算法注册时的检测用算法幼虫,也是算法幼虫对应的通用算法说明。
函数调用完整流程
参考链接
- Linux加密框架的算法管理(一)_家有一希的博客-CSDN博客_linux加密框架设计与实现
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446079.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!