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

crypto_alloc_ahash函數

  • 加密框架中的哈希算法可以是同步方式實現的也可以是異步方式實現的,但是算法應用不關注哈希算法的實現方式,關注的是哈希算法提供的算法接口。為實現統一管理,加密框架默認哈希算法的實現方式為異步方式,將哈希算法的外部接口統一定義為異步哈希算法接口。
  • 算法實例是算法應用和加密框架之間的橋梁,算法應用通過算法實例實現算法調用。以哈希算法實例為例,在IPSEC框架的AH協議模塊中,協議狀態初始化(ah_init_state函數)時,將根據配置的認證算法名(x->aalg->alg_name)創建對應的異步哈希算法實例ahash,如下所示。
  • ah4.c - net/ipv4/ah4.c - Linux source code (v5.15.12) - Bootlin

static int ah_init_state(struct xfrm_state *x)
{struct ah_data *ahp = NULL;struct xfrm_algo_desc *aalg_desc;struct crypto_ahash *ahash;if (!x->aalg)goto error;if (x->encap)goto error;ahp = kzalloc(sizeof(*ahp), GFP_KERNEL);if (!ahp)return -ENOMEM;ahash = crypto_alloc_ahash(x->aalg->alg_name, 0, 0);if (IS_ERR(ahash))goto error;ahp->ahash = ahash;if (crypto_ahash_setkey(ahash, x->aalg->alg_key,(x->aalg->alg_key_len + 7) / 8))goto error;/** Lookup the algorithm description maintained by xfrm_algo,* verify crypto transform properties, and store information* we need for AH processing.  This lookup cannot fail here* after a successful crypto_alloc_ahash().*/aalg_desc = xfrm_aalg_get_byname(x->aalg->alg_name, 0);BUG_ON(!aalg_desc);if (aalg_desc->uinfo.auth.icv_fullbits/8 !=crypto_ahash_digestsize(ahash)) {pr_info("%s: %s digestsize %u != %hu\n",__func__, x->aalg->alg_name,crypto_ahash_digestsize(ahash),aalg_desc->uinfo.auth.icv_fullbits / 8);goto error;}ahp->icv_full_len = aalg_desc->uinfo.auth.icv_fullbits/8;ahp->icv_trunc_len = x->aalg->alg_trunc_len/8;if (x->props.flags & XFRM_STATE_ALIGN4)x->props.header_len = XFRM_ALIGN4(sizeof(struct ip_auth_hdr) +ahp->icv_trunc_len);elsex->props.header_len = XFRM_ALIGN8(sizeof(struct ip_auth_hdr) +ahp->icv_trunc_len);if (x->props.mode == XFRM_MODE_TUNNEL)x->props.header_len += sizeof(struct iphdr);x->data = ahp;return 0;error:if (ahp) {crypto_free_ahash(ahp->ahash);kfree(ahp);}return -EINVAL;
}
  • crypto_alloc_ahash函數的輸入參數包括算法名alg_name、算法類型type和算法類型屏蔽字mask,返回值為新創建的異步哈希算法實例,函數處理流程非常簡單,調用crypto_alloc_tfm函數創建算法alg_name對應的異步哈希算法實例
struct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type,u32 mask)
{return crypto_alloc_tfm(alg_name, &crypto_ahash_type, type, mask);
}
EXPORT_SYMBOL_GPL(crypto_alloc_ahash);

crypto_alloc_tfm函數

static inline void *crypto_alloc_tfm(const char *alg_name,const struct crypto_type *frontend, u32 type, u32 mask)
{return crypto_alloc_tfm_node(alg_name, frontend, type, mask, NUMA_NO_NODE);
}
  • crypto_alloc_tfm函數的輸入參數包括算法名alg_name、算法前端fronted(即算法類型常量)、算法類型type和算法類型屏蔽字mask
  • 處理流程如下圖所示。

crypto_alloc_tfm函數處理流程

  • 1)crypto_alloc_tfm函數內部嵌套了一個函數crypto_alloc_tfm_node
  • crypto_alloc_tfm_node函數 處理流程包括兩步,第一步調用crypto_find_alg函數查找符合條件的算法alg,第二步調用crypto_create_tfm_node函數根據算法alg創建對應的算法實例tfm。

  • 2)crypto_alloc_tfm_node函數返回一個void*類型的通用指針(即內存地址),由直接或間接的調用者負責解釋通用指針的具體含義(即具體表示何種數據結構的指針)(使用的時候,將void*轉化為 具體使用的結構體指針),如crypto_alloc_ahash函數作為直接調用者將crypto_alloc_tfm函數返回的通用指針解釋為異步哈希算法實例的指針。
  • 即 將void* 轉化為?crypto_ahash* 類型的指針
  • api.c - crypto/api.c - Linux source code (v5.15.12) - Bootlin

  • 3)crypto_alloc_ahash函數調用crypto_alloc_tfm函數時,輸入的算法前端為crypto_ahash_type,定義如下所示。
  • ahash.c - crypto/ahash.c - Linux source code (v5.15.12) - Bootlin
static const struct crypto_type crypto_ahash_type = {.extsize = crypto_ahash_extsize,.init_tfm = crypto_ahash_init_tfm,.free = crypto_ahash_free_instance,
#ifdef CONFIG_PROC_FS.show = crypto_ahash_show,
#endif.report = crypto_ahash_report,.maskclear = ~CRYPTO_ALG_TYPE_MASK,.maskset = CRYPTO_ALG_TYPE_AHASH_MASK,.type = CRYPTO_ALG_TYPE_AHASH,.tfmsize = offsetof(struct crypto_ahash, base),
};

crypto_create_tfm_node函數的

  • crypto_create_tfm_node函數的輸入參數包括通用算法說明alg和算法前端frontend
  • 處理流程如下所示

crypto_create_tfm函數處理流程

  • 1)在申請內存前,需要計算算法實例所需的內存空間total,包括個性化算法實例占用的內存空間tfmsize、通用算法實例占用的內存空間以及算法實例占用的額外內存空間extsize,如下圖所示。

  • 個性化算法實例內存空間由算法前端的成員變量tfmsize確定,算法實例占用的額外內存空間由具體算法確定,通過算法前端的extsize接口獲取。創建異步哈希算法實例時,算法前端為crypto_ahash_type,tfmzise為offsetof(struct crypto_ahash, base),extsize接口為crypto_ahash_extsize函數

crypto_ahash_extsize函數

  • ahash.c - crypto/ahash.c - Linux source code (v5.15.12) - Bootlin??
static unsigned int crypto_ahash_extsize(struct crypto_alg *alg)
{if (alg->cra_type != &crypto_ahash_type)return sizeof(struct crypto_shash *);return crypto_alg_extsize(alg);
}
  • 如上所示,算法實例占用的額外內存空間與哈希算法實現方式有關
    • 實現方式為異步方式時,額外內存空間為異步哈希算法上下文空間;
    • 實現方式為同步方式時,額外內存空間用于保存同步哈希算法實現指針。
  • 2)申請完內存空間mem后,需要初始化通用算法實例tfm,包括:
    • a)通用算法實例tfm關聯到通用算法說明alg,?tfm->__crt_alg = alg;
    • b)??調用算法前端frontend的init_tfm接口初始化tfm。創建異步哈希算法實例時,算法前端crypto_ahash_type定義的initial_tfm接口為crypto_ahash_init_tfm函數。
      crypto_ahash_init_tfm函數的主要功能是利用異步哈希算法說明alg的算法接口初始化異步哈希算法實例hash的算法接口,但是如果算法的實現方式不是異步方式,將調用crypto_init_shash_ops_async函數使用同步哈希算法的異步實現接口(形如shash_async_xxx)初始化異步哈希算法實例的算法接口。
    • c)如果通用算法說明alg定義了cra_init接口則調用其進一步初始化tfm。在加密框架中,一般情況下動態算法的算法說明都會定義cra_init接口,而靜態算法的算法說明都不定義cra_init接口,如HMAC模板創建的動態算法的算法說明的cra_init接口為hmac_init_tfm,而MD5算法的算法說明未定義cra_init接口

?

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

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

相關文章

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

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

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

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

linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程

參考鏈接 Linux加密框架的應用示例(一)_家有一希的博客-CSDN博客 本文大綱 本節將從應用角度說明加密框架的運行流程,包括加密框架如何管理算法、如何動態創建算法,應用模塊如何創建算法實例、如何通過算法實例調用算法接口等。…

java 累進計費率計算_設計費400萬,繳納所得稅100萬,如何籌劃

很多公司老板都會把利潤放在第一位,照理說這是沒錯的,公司要盈利才能繼續經營下去。我國有很多針對小微企業的政策,盈利不高的情況下,基本不會去考慮納稅問題,也沒有多少稅收壓力。但是對一些暴利的服務型行業、軟件設…

linux加密框架 crypto 算法管理 - 哈希算法應用實例

參考鏈接 Linux加密框架應用示例(二)_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程_CHYabc123456hh的博客-CSDN博客 在應用模塊中創建并初始化哈希算法實例 假設某個SA配置使用的認證算法為"hmac(md5…

guido python正式發布年份_Python語言適合哪些領域的計算問題? (1.3分)_學小易找答案...

【單選題】關于Python中的復數,下列說法錯誤的是 (1.3分)【多選題】藥物作用的基本規律包括?【單選題】Python 中,以下哪個賦值操作符是錯誤的? (1.3分)【單選題】哪個選項是下面代碼的執行結果? s "abcd1234" print ( s . find ( "cd" )) (1.3分)【填…

Linux加密框架 crypto crypto_larval | crypto_larval_alloc | __crypto_register_alg 介紹

參考鏈接 Lniux加密框架中的主要數據結構(五)_家有一希的博客-CSDN博客crypto_larval struct crypto_larval {struct crypto_alg alg;struct crypto_alg *adult;struct completion completion;u32 mask; };結構體名叫 crypto_larval (算法幼…

好玩的腳本代碼大全_Github | 推薦一個Python腳本集合項目

點擊上方"藍字"關注我們Python大數據分析記錄 分享 成長用python寫小腳本是一件好玩的事情,因為不是個大活兒,而且能解決眼邊前十分繁瑣的事情,這種輕松且便宜的代碼頗受人民群眾的歡迎~有點生活小妙招的意味大家較為熟知的腳本…

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

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup_CHYabc123456hh的…

python中以下關于列表描述錯誤的_10. 以下關于列表操作的描述,錯誤的是:_學小易找答案...

【單選題】Python 語句 a1211.21 print(type(a)) 的輸出結果為( )【單選題】Python語句序列"s1 [4, 5, 6]; s2 s1; s1[1]0; print(s2)"的運行結果是( )。【填空題】Python語句print(%d%%%d%(3/2, 3%2))的運行結果是( 1 )。【單選題】python語句print(type(123))的數…

寫論文注意事項

參考鏈接 給研究生修改了一篇論文后,該985博導幾近崩潰…… 重點分析 摘要與結論幾乎重合 這一條是我見過研究生論文中最常出現的事情,很多情況下,他們論文中摘要部分與結論部分重復率超過70%。對于摘要而言,首先要用一小句話引…

xml模糊查詢語句_2Mybatis學習筆記07:動態SQL語句(原創,轉載請注明來源)

開發環境:硬件環境:Windows10JDK 1.8; 軟件環境:JavaEclipseMybatismaven3.6tomcat8.0Postgresql 10.6; 用到的jar包: asm-3.3.1.jar cglib-2.2.2.jar commons-logging-1.1.1.jar javassist-3.17.1-GA.jar …

硬件密碼組件的硬件結構、作用及實現應用設計

引 言 1 硬件密碼組件的概念 密碼技術是解決信息安全問題的核心技術。要實現信息的保密性、完整性、可控性和不可否認性等安全要求,都離不開密碼技術的運用。在具體的信息安全系統中,密碼技術的運用可以基于軟件密碼組件(簡稱為SCM&#xf…

sql倒序查詢語句_SQL丨1.基本查詢語句復習

此為自用查詢語句1.selectSELECT column1,column2 FROM table1;常用的格式慣例:大寫了SELECT和FROM,而將表名和列名小寫;通常在列名中使用下劃線,避免使用空格;在每個語句末尾添加分號;SQL不區分大小寫。2.…

基于區塊鏈的檔案共享 項目啟動

注意事項 已經備份了一個配置fabric的完整ubuntu系統,其需要注意的細節如下1,此鏡像系統需要配置host文件,sudo vim /etc/hosts,添加如下內容127.0.0.1 orderer.example.com peer0.org1.example.com peer1.org1.example.c…

知道一點怎么設直線方程_【初中數學】反比例函數策略(二) ——構造方程法...

【相關閱讀】【初中數學】反比例函數策略之一 ——數形結合反比例函數策略(二)——構造方程法(王 橋)上一次,咱們探討了解決反比例函數的策略一——數形結合,本節課我們繼續反比例函數的策略(二)——構造方程法。構造方程法,在《春季攻勢》第…

音視頻處理 C語言編譯器

命令 gcc/clang -g -O2 -o test test.c -I ... -L ... -lgcc Linux環境下的命令;clang是MAC環境下的執行命令-g 輸出文件中的調試信息-O 對輸出文件進行指令優化-o 輸出文件,可執行文件-I 指定頭文件,大寫的i 從-I 開始 是鏈接內容&#x…

wpf將文字轉化為圖形_將創新轉化為實際應用

Worldsensing是全球公認的物聯網先驅。這家位于西班牙巴塞羅那的技術供應商成立于2008年,為城市和傳統行業提供運營情報。伊格納西維拉霍薩納(IgnasiVilajosana)是公司聯合創始人兼首席執行官。伊格納西擁有西班牙巴塞羅那大學物理學博士學位,還接受過美…

音視頻處理 FFmpeg相關內容介紹 以及八大

FFmpeg的介紹 FFmpeg由Fabrice Bellard于2000年創建,由C和匯編語言進行開發FF -> Fast Forward 快進mpeg -> 標準化組織 Moving Pictures Experts Group使用到FFmpeg的開源項目gstreamer: a framework for streaming mediachromiummpv: Command line video pl…

python開發wince軟件_Wince6.0應用開發:二、模擬器的使用

上一篇我們只是搭建我們的開發平臺,那么下面我們結合之前安裝的Wince6.0模擬器進行簡單的開發,來了解一個操作流程一直寫的東西都是很直白的,(*^__^*) 嘻嘻……一、連接上我們的模擬器1、打開vs2008,選擇工具---->設備仿真器管…