HMAC算法模板实例

  • HMAC算法模板的创建实例的接口是hmac_create函数
  • hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlin  hmac_create
  • 输入的参数包括  算法模板 tmpl  和  算法模板实例参数  tb
  • hmac_cretae函数返回的结果为0表示算法模板实例已经创建注册
  • 算法模板 tmpl
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];
};
  • 算法模板实例参数  tb 显示如下
struct rtattr {unsigned short    rta_len;unsigned short  rta_type;
};
  • hmac_cretae函数显示如下
static int hmac_create(struct crypto_template *tmpl, struct rtattr **tb)
{struct shash_instance *inst;struct crypto_shash_spawn *spawn;struct crypto_alg *alg;struct shash_alg *salg;u32 mask;int err;int ds;int ss;err = crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_SHASH, &mask);if (err)return err;inst = kzalloc(sizeof(*inst) + sizeof(*spawn), GFP_KERNEL);if (!inst)return -ENOMEM;spawn = shash_instance_ctx(inst);err = crypto_grab_shash(spawn, shash_crypto_instance(inst),crypto_attr_alg_name(tb[1]), 0, mask);if (err)goto err_free_inst;salg = crypto_spawn_shash_alg(spawn);alg = &salg->base;/* The underlying hash algorithm must not require a key */err = -EINVAL;if (crypto_shash_alg_needs_key(salg))goto err_free_inst;ds = salg->digestsize;ss = salg->statesize;if (ds > alg->cra_blocksize ||ss < alg->cra_blocksize)goto err_free_inst;err = crypto_inst_setname(shash_crypto_instance(inst), tmpl->name, alg);if (err)goto err_free_inst;inst->alg.base.cra_priority = alg->cra_priority;inst->alg.base.cra_blocksize = alg->cra_blocksize;inst->alg.base.cra_alignmask = alg->cra_alignmask;ss = ALIGN(ss, alg->cra_alignmask + 1);inst->alg.digestsize = ds;inst->alg.statesize = ss;inst->alg.base.cra_ctxsize = sizeof(struct hmac_ctx) +ALIGN(ss * 2, crypto_tfm_ctx_alignment());inst->alg.init = hmac_init;inst->alg.update = hmac_update;inst->alg.final = hmac_final;inst->alg.finup = hmac_finup;inst->alg.export = hmac_export;inst->alg.import = hmac_import;inst->alg.setkey = hmac_setkey;inst->alg.init_tfm = hmac_init_tfm;inst->alg.exit_tfm = hmac_exit_tfm;inst->free = shash_free_singlespawn_instance;err = shash_register_instance(tmpl, inst);if (err) {
err_free_inst:shash_free_singlespawn_instance(inst);}return err;
}

hmac_create函数创建并且注册的流程如下图所示

hmac_create函数的调用流程

参考链接

  • Linux加密框架中的主要数据结构(四)_家有一希的博客-CSDN博客

Linux加密框架 crypto算法模板 以及HMAC算法模板实例相关推荐

  1. Linux加密框架 crypto 算法模板 HMAC模板举例

    参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客 Linux加密框架 crypto 算法模板_CHYabc123456hh的博客-CSDN博客 HMAC算法模板 hma ...

  2. Linux加密框架 crypto算法模板 以及CBC算法模板实例

    参考链接 Linux加密框架中的主要数据结构(四)_家有一希的博客-CSDN博客 algapi.h - include/crypto/algapi.h - Linux source code (v5. ...

  3. linux加密框架 crypto 算法管理 - 哈希算法应用实例

    参考链接 Linux加密框架应用示例(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博 ...

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

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

  5. Linux加密框架 crypto 哈希算法举例 MD5

    参考链接 Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common_CHYabc123456hh的 ...

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

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

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

    算法查找接口crypto_find_alg 算法实例tfm是算法的一个可运行的副本,因此在创建算法实例前首先要查找确认算法是否已经注册有效,此时算法查找由函数crypto_find_alg实现. 补充 ...

  8. Linux加密框架 crypto 算法模板 CBC模板举例

    参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客 https://blog.csdn.net/CHYabc123456hh/article/details/122194 ...

  9. Linux加密框架 crypto 算法模板

    参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客 algapi.h - include/crypto/algapi.h - Linux source code (v5. ...

最新文章

  1. 全球15个顶级技术类博客
  2. 2021北京高考英语口试成绩查询,2021北京高考英语口语怎么考?2021英语增加口语考试是全国?...
  3. 阿里研究院入选中国企业智库系统影响力榜 1
  4. Kali Linux 秘籍 第三章 高级测试环境
  5. 华为Mate 30 Pro最新渲染图曝光:六摄造型 越看越顺眼了?
  6. 中国省市地图JSON数据下载
  7. 如何下载Idea专业版
  8. IMU(陀螺仪)角速度测量原理-科氏力测旋转角速度
  9. MySQL 的 max_allowed_packet
  10. 正月十五闹元宵,平安吉祥乐团圆
  11. Android 编译之make基础(转)
  12. Linux 逻辑卷管理器(LVM)
  13. 各省市县-人口与区域面积(1949-2019年)
  14. 在vc中作用mapx
  15. QT实现简单的塔防游戏
  16. JavaScript学习:多种遍历语法
  17. 16.节点通信-flannel
  18. HTML5 Canvas小游戏
  19. bt分析之bt种子发布---做种(2)
  20. Google adwords新手必读,3个步骤让你的回报率快速提升!

热门文章

  1. discuz viewthread.php,修改discuz论坛的标题header和footer
  2. LSGO软件技术团队2015~2016学年第十五周(1207~1213)总结
  3. 【转】C#中[STAThread]的作用
  4. C#多线程之旅(七)——终止线程
  5. 一步步编写操作系统 34 内核利用bios中断获取物理内存大小
  6. 深入探究JVM | klass-oop对象模型研究
  7. 【Python CheckiO 题解】Sort Array by Element Frequency
  8. 【牛客 - 2B】树(思维,dp,有坑)
  9. Angular相关的有价值的问题集锦
  10. 300英雄服务器维护多久,《300英雄》2021年5月20日6:00-9:00更新维护公告