参考链接
crypto_larval_lookup函数介绍
crypto_larval_lookup函数执行流程
- 1)在算法查找前首先确认算法名是否有效,如果算法名为空,终止查找流程,返回异常。
- 2)算法查找流程由函数crypto_alg_lookup实现,返回值为空说明未查找到符合的算法,否则为查找到符合条件的算法(可能是算法幼虫)。
- 3)在crypto_larval_lookup函数中,最多可能进行三次算法查找,其中前两次显式地调用crypto_alg_lookup函数进行,第三次在crypto_larval_add函数中进行。
- 4)在第一次未查找到算法时,尝试通过request_module函数按算法名自动加载静态算法模块(算法名.ko),然后进行第二次查找。
- 5)如果第二次仍然未查找到算法,调用crypto_larval_add函数创建同名的算法幼虫(称之为注册用算法幼虫,算法优先级为-1),创建完成后会进行第三次查找,如下所示。
- crypto_larval_add函数要么返回第三次查找命中的算法(如果是算法幼虫,则调用crypto_larval_wait函数等待算法注册完成,返回新注册的算法)要么返回创建的注册用算法幼虫(已添加到算法管理链表中)。
- 6)如果前两次查找命中,但查找到的是算法幼虫(可能是注册用算法幼虫也可能是检测用算法幼虫),说明符合要求的算法正在注册中,调用crypto_larval_wait函数等待算法注册完成,返回注册成功的算法。如果是检测用算法幼虫,注册完成的标志是算法成虫已完成正确性检验;如果是注册用算法幼虫,注册完成的标志是已设置有效的算法成虫(并且已完成正确性检验)。
- 7)crypto_larval_lookup函数中接口调用情况如下所示。