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

歡迎訪問 生活随笔!

生活随笔

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

linux

Linux加密框架 crypto 算法模板

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

參考鏈接

  • Linux加密框架中的主要數(shù)據(jù)結(jié)構(gòu)(三)_家有一希的博客-CSDN博客
  • algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin

定義

struct crypto_template {struct list_head list;struct hlist_head instances;struct module *module;int (*create)(struct crypto_template *tmpl, struct rtattr **tb);char name[CRYPTO_MAX_ALG_NAME]; };

crypto_template各成員變量含義

  • 1)list:算法模板鏈表節(jié)點。
  • 2)instance:算法模板實例哈希鏈表的頭節(jié)點。算法模板通過實例哈希鏈表管理由該模板創(chuàng)建的所有算法模板實例。
  • 3)module:算法模板所屬的模塊,一般為THIS_MODULE,編譯時確定。
  • 4)name:算法模板名,最多包含64個字符。
  • 5)alloc:創(chuàng)建算法模板實例(struct crypto_instance)的接口,返回值為新創(chuàng)建的算法模板實例。創(chuàng)建完需要調(diào)用注冊接口完成算法模板實例注冊。? 刪除
  • 6)free:算法模板實例的析構(gòu)函數(shù),用于釋放算法模板實例占用的內(nèi)存資源? ?刪除
  • 7)create:創(chuàng)建算法模板實例的接口。與alloc接口不同,create接口不會顯式地創(chuàng)建一個算法模板實例(無論返回值還是輸出參數(shù)都不是struct crypto_instance類型),而是隱式地創(chuàng)建一個算法模板實例,同時將注冊新創(chuàng)建的算法模板實例? (源碼可知)。
  • 一般情況下,分組算法模式的實例地創(chuàng)建接口為alloc接口,哈希算法模式的實例創(chuàng)建接口為create接口
  • 無論是通過alloc接口還是create接口創(chuàng)建算法模板實例,輸入?yún)?shù)tb為創(chuàng)建算法模板實例的相關(guān)參數(shù),至少包括算法類型及屏蔽位(tb[0])和基礎(chǔ)算法的算法名(tb[1])。每個參數(shù)都是TLV格式,類型T有CRYPTOA_TYPE(算法類型)、CRYPTOA_ALG(基礎(chǔ)算法名)、CRYPTOA_U32等多種類型,而每種類型的參數(shù)值不同,因此接口輸入?yún)?shù)tb的數(shù)據(jù)類型struct rtattr只包括rta_len和rta_type兩個成員變量,分別對應著TLV結(jié)構(gòu)的L和T,參數(shù)值數(shù)據(jù)結(jié)構(gòu)根據(jù)參數(shù)類型定義
/* Generic structure for encapsulation of optional route information.It is reminiscent of sockaddr, but with sa_family replacedwith attribute type.*/struct rtattr {unsigned short rta_len;unsigned short rta_type; };
  • ?參數(shù)類型為CRYPTOA_TYPE時,算法類型TLV結(jié)構(gòu)(即tb[0])如下所示,通過函數(shù)crypto_get_attr_type可以獲取算法類型和屏蔽位。
  • algapi.c - crypto/algapi.c - Linux source code (v5.15.11) - Bootlin
  • #define RTA_DATA(rta) ? ((void*)(((char*)(rta)) + RTA_LENGTH(0)))? ?返回空指針指向一個結(jié)構(gòu)體,第一個參數(shù)char*指向的是type,第二個參數(shù)int是mask屏蔽位
  • #define RTA_LENGTH(len)?? ?(RTA_ALIGN(sizeof(struct rtattr)) + (len))
struct crypto_attr_type {u32 type;u32 mask; };

  • ?參數(shù)類型為CRYPTOA_ALG時,基礎(chǔ)算法名TLV結(jié)構(gòu)(即tb[1])如下所示,通過函數(shù)crypto_attr_alg_name獲取基礎(chǔ)算法名

  • algapi.c - crypto/algapi.c - Linux source code (v5.15.11) - Bootlin?
const char *crypto_attr_alg_name(struct rtattr *rta) {struct crypto_attr_alg *alga;if (!rta)return ERR_PTR(-ENOENT);if (RTA_PAYLOAD(rta) < sizeof(*alga))return ERR_PTR(-EINVAL);if (rta->rta_type != CRYPTOA_ALG)return ERR_PTR(-EINVAL);alga = RTA_DATA(rta);alga->name[CRYPTO_MAX_ALG_NAME - 1] = 0;return alga->name; } EXPORT_SYMBOL_GPL(crypto_attr_alg_name);

參考鏈接

  • C/C++ struct初始化/復制/內(nèi)存分配技巧_wys的專欄-CSDN博客?

總結(jié)

以上是生活随笔為你收集整理的Linux加密框架 crypto 算法模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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