linux加密框架 crypto 算法crypto_register_alg的注冊流程

算法注冊流程

靜態算法模塊初始化

分組算法模塊初始化

  • AES算法模塊(aes_generic.c)的初始化接口aes_init實現向加密框架注冊AES算法的功能,如下所示。
  • aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.12) - Bootlin
static int __init aes_init(void)
{return crypto_register_alg(&aes_alg);
}

哈希算法模塊初始化

  • MD5算法模塊(md5.c)的初始化接口md5_mod_init實現向加密框架注冊MD5算法的功能,如下所示。?
  • md5.c - crypto/md5.c - Linux source code (v5.15.12) - Bootlin
static int __init md5_mod_init(void)
{return crypto_register_shash(&alg);
}

靜態算法注冊接口crypto_register_alg

  • crypto_register_alg函數實現向加密框架注冊靜態算法的功能,輸入參數為待注冊靜態算法的算法說明alg,返回值為0表示注冊成功,否則表示注冊過程中出現異常。
  • crypto_register_alg函數執行的算法注冊流程如下圖所示

靜態算法注冊流程

  • ?algapi.c - crypto/algapi.c - Linux source code (v5.15.12) - Bootlin
int crypto_register_alg(struct crypto_alg *alg)
{struct crypto_larval *larval;int err;alg->cra_flags &= ~CRYPTO_ALG_DEAD;err = crypto_check_alg(alg);if (err)return err;down_write(&crypto_alg_sem);larval = __crypto_register_alg(alg);up_write(&crypto_alg_sem);if (IS_ERR(larval))return PTR_ERR(larval);crypto_wait_for_test(larval);return 0;
}
EXPORT_SYMBOL_GPL(crypto_register_alg);
  • 1)crypto_check_alg函數實現檢查算法說明alg的有效性(包括地址對齊要求、塊大小、優先級等)和設置算法驅動名cra_driver_name兩項功能其中設置算法驅動名的功能由crypto_set_driver_name函數實現,如果未設置算法驅動名,則按照“算法名-generic”格式設置算法驅動名。如果alg無效則退出注冊流程。(未從源碼分析得到這個結論)
  • 2)__crypto_register_alg函數實現通用算法注冊流程,注冊過程由讀寫信號量crypto_alg_sem(操作之前使用 down_write進行加鎖,執行操作 __crypto_register_alg,然后使用up_write進行鎖資源的釋放)進行保護。如果注冊過程中出現異常,退出注冊流程,否則函數返回值為待注冊算法的檢驗用算法幼蟲larval(__crypto_register_alg函數返回類型是struct crypto_larvel)。
  • 3)crypto_wait_for_test函數用于觸發并等待待注冊算法的正確性檢驗(由專門的內核線程負責,通過完成量進行同步),檢驗結束后清理注冊用的算法幼蟲(由crypto_larval_kill函數實現)。從流程上看,算法正確性檢驗的結果不影響算法注冊的正常結束,但是通過正確性校驗的算法的算法標志cra_flags會設置算法已檢測狀態位(CRYPTO_ALG_TESTED)。

  • 4)crypto_register_alg函數中接口調用情況如下所示,其中alg表示待注冊算法的通用算法說明。?

算法調用情況

  • ?5)AES算法注冊成功后,算法管理鏈表上已注冊的算法情況如下所示。

算法管理鏈表上已注冊算法情況

?crypto_register_alg函數整體調用流程

?參考鏈接

  • Linux加密框架的算法管理(一)_家有一希的博客-CSDN博客_linux加密框架設計與實現

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446083.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 方法的實例_python調用自定義函數的實例操作

在python中,想要調用自定義函數必須先聲明,然后才能調用。使用函數時,只要按照函數定義的形式,向函數傳遞必需的參數,就可以調用函數完成相應的功能或者獲得函數返回的處理結果。(1)聲明函數python中使用 def 可以聲明…

linux加密框架 crypto 靜態哈希算法crypto_register_shash注冊流程

參考鏈接 Linux加密框架的算法管理(一)_家有一希的博客-CSDN博客_linux加密框架設計與實現shash.c - crypto/shash.c - Linux source code (v5.15.12) - Bootlin 函數介紹 crypto_register_shash函數實現向加密框架注冊靜態哈希算法的功能,…

多個線程訪問統一對象的不同方法_C#多線程讀寫同一文件處理

在多線程訪問讀寫同一個文件時,經常遇到異常:“文件正在由另一進程使用,因此該進程無法訪問此文件”。多線程訪問統一資源的異常,解決方案1,保證讀寫操作單線程執行,可以使用lock解決方案2,使用…

linux加密框架 crypto 通用算法注冊接口__crypto_register_alg注冊流程

函數介紹 __crypto_register_alg函數實現向加密框架注冊算法(包括靜態算法和動態算法)的功能,輸入參數為算法說明alg,注冊成功時返回算法注冊用的算法幼蟲larval,注冊失敗時返回失敗原因。__crypto_register_alg函數執…

spark官方文檔_Spark整合Ray思路漫談

什么是Ray之前花了大概兩到三天把Ray相關的論文,官網文檔看了一遍,同時特意去找了一些中文資料看Ray當前在國內的發展情況(以及目前國內大部分人對Ray的認知程度)。先來簡單介紹下我對Ray的認知。首先基因很重要,所以我們先需要探查下Ray最初…

python用http協議傳數據_python基礎 -- 簡單實現HTTP協議

標簽:一、直接代碼# -*- coding: utf-8 -*-import socket__author__ ‘lpe234‘__date__ ‘2015-03-12‘if __name__ ‘__main__‘:sock socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind((‘127.0.0.1‘, 8001))sock.listen(5)while True:connecti…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg

算法查找接口crypto_find_alg 算法實例tfm是算法的一個可運行的副本,因此在創建算法實例前首先要查找確認算法是否已經注冊有效,此時算法查找由函數crypto_find_alg實現。補充: struct crypto_tfm *tfm; crypto_tfm類型指針tfm可以理解為指代…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的博客-CSDN博客 函數介紹 crypto_alg_mod_lookup函數輸入參數包括待查找的算法名name、算法類型type和算…

qt triggered信號_Qt之網絡編程UDP通信

點擊上方“Qt學視覺”,選擇“星標”公眾號重磅干貨,第一時間送達想要學習的同學們還請認真閱讀每篇文章,相信你一定會有所收獲UDP通信概述UDP(UserDatagramProtocol,用戶數據報協議)是輕量的、不可靠的、面向數據報(datagram)、無…

adguard沒有核心 core no_面試官:線程池如何按照core、max、queue的執行順序去執行?...

前言這是一個真實的面試題。前幾天一個朋友在群里分享了他剛剛面試候選者時問的問題:"線程池如何按照core、max、queue的執行循序去執行?"。我們都知道線程池中代碼執行順序是:corePool->workQueue->maxPool,源碼…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 crypto_larval_lookup函數介紹 crypto_larval_lookup函數的輸入參數包括待查找的算法名name、算法類型type和算法類型屏蔽位mask,查找命中時返回查找到的算法或注冊用算法幼…

python ssh 遠程登錄路由器執行命令_ssh批量登錄并執行命令(python實現)

局域網內有一百多臺電腦,全部都是linux操作系統,所有電腦配置相同,系統完全相同(包括用戶名和密碼),ip地址是自動分配的。現在有個任務是在這些電腦上執行某些命令,者說進行某些操作,比如安裝某些軟件&…

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

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 函數介紹 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))…

linux加密框架 crypto 算法管理 - 動態和靜態算法管理

參考鏈接 Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客 動態和靜態算法管理 靜態算法 加密框架中的算法分為靜態算法和動態算法兩種,其中靜態算法指的是以"算法名.ko"形式存在的靜態編譯的算法模塊,如aes.k…

3分鐘入門python_3分鐘帶你了解世界第一語言Python 入門上手也這么簡單!

一、Python入門1. Python爬蟲入門一之綜述Python爬蟲入門二之爬蟲基礎了解Python爬蟲入門三之Urllib庫的基本使用Python爬蟲入門四之Urllib庫的高級用法Python爬蟲入門五之URLError異常處理Python爬蟲入門六之Cookie的使用Python爬蟲入門七之正則表達式Python爬蟲入門八之Beaut…

linux加密框架 crypto 算法管理 - 算法檢測

參考鏈接 Linux加密框架的算法管理(四)_家有一希的博客-CSDN博客 函數介紹 如前所述,無論是靜態算法還是動態算法,算法注冊的最后一步都是進行算法正確性檢驗,一般流程是先調用__crypto_register_alg函數進行通用的算…

select選中的值_selenium下拉框處理(select)

前言 web自動化中,常見的場景還有一個下拉框的選擇,哪么在selenium中如何做下拉框的操作呢?selectselect在HTML中表示元素名,可創建單選或多選菜單。HTML中select長什么樣子:select在HTML中元素名,下面有選…

linux加密框架 crypto 算法管理 - 創建哈希算法實例

crypto_alloc_ahash函數 加密框架中的哈希算法可以是同步方式實現的也可以是異步方式實現的,但是算法應用不關注哈希算法的實現方式,關注的是哈希算法提供的算法接口。為實現統一管理,加密框架默認哈希算法的實現方式為異步方式,…

發票管理軟件_企業為什么需要ERP企業管理軟件?

對于一個制造企業來說,生產是企業最大的動力,而生產也需要進行優化管理,一個好的生產管理方式會帶給企業巨大的發展空間和利潤價值。對于一個制造企業來說,生產是企業最大的動力,而生產也需要進行優化管理,…

python 畫風場 scipy_Python數據分析及可視化實例之Scipy

強大到沒有朋友的科學計算庫,不知道怎么介紹ta!大牛張若愚出了厚本的《Python 科學計算》第二版里面包羅萬象,就不做搬運工了,盡快開工pandas。來一彈在NLP自然語言處理中用到的稀疏矩陣處理:# coding: utf-8# # 稀疏矩…