日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数

發(fā)布時間:2023/12/13 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考鏈接

  • 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,查找命中時返回查找到的算法或算法幼蟲,查找未命中時返回異常。
  • api.c - crypto/api.c - Linux source code (v5.15.12) - Bootlin
  • crypto_alg_lookup函數(shù)實際上只是一個包裹函數(shù),在鎖定算法管理鏈表訪問信號量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ù)的基本邏輯是從算法管理鏈表中查找符合條件的算法,查找命中時返回算法(可能是算法幼蟲),查找未命中時返回空指針。
  • 2)在查找算法時,遵循以下原則:
    • a)算法不能處于瀕死(moribund)狀態(tài)。
    • b)算法類型必須滿足查找要求,即(q->cra_flags ^ type) & mask=0。
    • c)算法可以是已注冊的算法或者正在注冊算法的算法幼蟲(可能是注冊用算法幼蟲也可能是檢測用算法幼蟲),如果是注冊用算法幼蟲,算法類型屏蔽位必須滿足查找要求。注冊用算法幼蟲和檢測用算法幼蟲的區(qū)別之一是檢測用算法幼蟲設(shè)置了算法驅(qū)動名
    • d)算法名符合查找要求精確符合exac和模糊符合fuzzy兩種情況,如下所示。
exact = !strcmp(q->cra_driver_name, name); fuzzy = !strcmp(q->cra_name, name);
  • 模糊符合時還要求算法的優(yōu)先級要高于預(yù)期優(yōu)先級best。查找到精確符合的算法時,退出查找流程,返回精確符合的算法;查找到模糊符合的算法時,必須確保返回的是優(yōu)先級最高的模糊符合算法。
    • e)查找到符合要求的算法時,調(diào)用crypto_mod_get函數(shù)持有該算法,即增加算法的引用計數(shù)。
  • 3)在查找算法時,可能出現(xiàn)以下幾種情況:
    • a)算法管理鏈表上有已注冊且檢驗合格的符合要求的算法,則返回對應(yīng)的算法。
    • b)算法管理鏈表中沒有符合要求的算法,查找返回空指針,外部將按算法名加載算法模塊(靜態(tài)算法模塊)或創(chuàng)建注冊用算法幼蟲,發(fā)起創(chuàng)建動態(tài)算法,等待算法注冊完成,返回新注冊的算法。
    • c)查找時,其他外部應(yīng)用已發(fā)起創(chuàng)建動態(tài)算法,但未完成,此時算法管理鏈表中只有一個符合要求的注冊用算法幼蟲,返回注冊用算法幼蟲,外部等待算法注冊檢驗完成,返回新注冊的算法。
    • d)查找時,其他外部應(yīng)用以發(fā)起創(chuàng)建動態(tài)算法,已完成,但正確性檢驗未完成,此時算法管理鏈表中有符合要求的注冊用算法幼蟲和檢測用算法幼蟲,而已注冊的算法未檢驗合格故不符合要求,檢測用算法幼蟲優(yōu)先級(>0)高于注冊用算法幼蟲(-1),因此返回檢驗用算法幼蟲,外部等待算法檢驗結(jié)束,返回新注冊的算法。

總結(jié)

以上是生活随笔為你收集整理的linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。