算法检测
- 算法检测通知
如前所述,无论是静态算法还是动态算法,算法注册的最后一步都是进行算法正确性检验,一般流程是先调用__crypto_register_alg函数进行通用的算法注册(即将待注册的算法添加到算法管理链表中),同时创建对应的检测用算法幼虫,然后调用crypto_wait_for_test函数启动算法正确性检验,并等待检验结束。
简单地说,算法正确性检验就是利用样本数据sampledata对算法接口进行计算正确性的验证。算法通过正确性检验的标志是算法标志cra_flags中置算法已检测标志CRYPTO_ALG_TESTED。算法通过正确性检验说明能够提供正常的服务,如加密/解密服务、计算消息摘要服务等。
crypto_wait_for_test函数用于启动算法正确性检验,并等待检验结束,输入参数为检测用算法幼虫larval,处理流程如下所示。
1)在crypto_wait_for_test函数中,调用crypto_probing_notify函数在加密通知链上发布算法正确性检验(CRYPTO_MSG_ALG_REGISTER)的通知,携带的参数为检测用算法幼虫对应的算法成虫,即待检验的算法。
2)静态算法(如AES算法)注册发布算法检验通知时,算法管理链表如下所示,其中aes_larval_t表示检测用算法幼虫,关联到对应的算法成虫(aes_larval_t->adult=aes_alg)。
3)动态算法(如"cbc(aes)"算法)注册发布算法检验通知时,算法管理链表如下所示,其中cbc_aes_larval_r表示注册用算法幼虫,cbc_aes_larval_t表示检测用算法幼虫,注册用算法幼虫还未关联到算法成虫,检测用算法幼虫关联到算法成虫&