linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数
生活随笔
收集整理的這篇文章主要介紹了
linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
參考鏈接
- Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客
函數(shù)介紹
static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type,u32 mask) {struct crypto_alg *alg;u32 test = 0;if (!((type | mask) & CRYPTO_ALG_TESTED))test |= CRYPTO_ALG_TESTED;down_read(&crypto_alg_sem);alg = __crypto_alg_lookup(name, type | test, mask | test);if (!alg && test) {alg = __crypto_alg_lookup(name, type, mask);if (alg && !crypto_is_larval(alg)) {/* Test failed */crypto_mod_put(alg);alg = ERR_PTR(-ELIBBAD);}}up_read(&crypto_alg_sem);return alg; }- crypto_alg_lookup函數(shù)的輸入?yún)?shù)包括待查找的算法名name、算法類型type和算法類型屏蔽位mask,查找命中時(shí)返回查找到的算法或算法幼蟲,查找未命中時(shí)返回異常。
- api.c - crypto/api.c - Linux source code (v5.15.12) - Bootlin
- crypto_alg_lookup函數(shù)實(shí)際上只是一個(gè)包裹函數(shù),在鎖定算法管理鏈表訪問信號(hào)量crypto_alg_sem的前提下調(diào)用__crypto_alg_lookup函數(shù)完成算法查找。
- __crypto_alg_lookup函數(shù)的輸入?yún)?shù)和返回值與crypto_alg_lookup函數(shù)完全相同,其處理流程如下所示
- ?1)__crypto_alg_lookup函數(shù)的基本邏輯是從算法管理鏈表中查找符合條件的算法,查找命中時(shí)返回算法(可能是算法幼蟲),查找未命中時(shí)返回空指針。
- 2)在查找算法時(shí),遵循以下原則:
- a)算法不能處于瀕死(moribund)狀態(tài)。
- b)算法類型必須滿足查找要求,即(q->cra_flags ^ type) & mask=0。
- c)算法可以是已注冊(cè)的算法或者正在注冊(cè)算法的算法幼蟲(可能是注冊(cè)用算法幼蟲也可能是檢測(cè)用算法幼蟲),如果是注冊(cè)用算法幼蟲,算法類型屏蔽位必須滿足查找要求。注冊(cè)用算法幼蟲和檢測(cè)用算法幼蟲的區(qū)別之一是檢測(cè)用算法幼蟲設(shè)置了算法驅(qū)動(dòng)名。
- d)算法名符合查找要求精確符合exac和模糊符合fuzzy兩種情況,如下所示。
- 模糊符合時(shí)還要求算法的優(yōu)先級(jí)要高于預(yù)期優(yōu)先級(jí)best。查找到精確符合的算法時(shí),退出查找流程,返回精確符合的算法;查找到模糊符合的算法時(shí),必須確保返回的是優(yōu)先級(jí)最高的模糊符合算法。
- e)查找到符合要求的算法時(shí),調(diào)用crypto_mod_get函數(shù)持有該算法,即增加算法的引用計(jì)數(shù)。
- 3)在查找算法時(shí),可能出現(xiàn)以下幾種情況:
- a)算法管理鏈表上有已注冊(cè)且檢驗(yàn)合格的符合要求的算法,則返回對(duì)應(yīng)的算法。
- b)算法管理鏈表中沒有符合要求的算法,查找返回空指針,外部將按算法名加載算法模塊(靜態(tài)算法模塊)或創(chuàng)建注冊(cè)用算法幼蟲,發(fā)起創(chuàng)建動(dòng)態(tài)算法,等待算法注冊(cè)完成,返回新注冊(cè)的算法。
- c)查找時(shí),其他外部應(yīng)用已發(fā)起創(chuàng)建動(dòng)態(tài)算法,但未完成,此時(shí)算法管理鏈表中只有一個(gè)符合要求的注冊(cè)用算法幼蟲,返回注冊(cè)用算法幼蟲,外部等待算法注冊(cè)檢驗(yàn)完成,返回新注冊(cè)的算法。
- d)查找時(shí),其他外部應(yīng)用以發(fā)起創(chuàng)建動(dòng)態(tài)算法,已完成,但正確性檢驗(yàn)未完成,此時(shí)算法管理鏈表中有符合要求的注冊(cè)用算法幼蟲和檢測(cè)用算法幼蟲,而已注冊(cè)的算法未檢驗(yàn)合格故不符合要求,檢測(cè)用算法幼蟲優(yōu)先級(jí)(>0)高于注冊(cè)用算法幼蟲(-1),因此返回檢驗(yàn)用算法幼蟲,外部等待算法檢驗(yàn)結(jié)束,返回新注冊(cè)的算法。
總結(jié)
以上是生活随笔為你收集整理的linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 增值税发票怎么开步骤 增值税发票怎么开
- 下一篇: Linux加密框架 crypto 算法模