參考鏈接
- Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客
crypto_larval_lookup函數介紹
- crypto_larval_lookup函數的輸入參數包括待查找的算法名name、算法類型type和算法類型屏蔽位mask,查找命中時返回查找到的算法或注冊用算法幼蟲,查找未命中時返回異常。
- api.c - crypto/api.c - Linux source code (v5.15.12) - Bootlin
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函數中接口調用情況如下所示。