当前位置: 首页 > news >正文

郑州建设网站公司网站建设市场有多大

郑州建设网站公司,网站建设市场有多大,主题 wordpress 宾果,公司在线起名免费网参考链接 Linux加密框架的算法管理#xff08;三#xff09;_家有一希的博客-CSDN博客 动态和静态算法管理 静态算法 加密框架中的算法分为静态算法和动态算法两种#xff0c;其中静态算法指的是以算法名.ko形式存在的静态编译的算法模块#xff0c;如aes.k…参考链接 Linux加密框架的算法管理三_家有一希的博客-CSDN博客 动态和静态算法管理 静态算法 加密框架中的算法分为静态算法和动态算法两种其中静态算法指的是以算法名.ko形式存在的静态编译的算法模块如aes.ko表示AES算法模块md5.ko表示MD5算法模块静态算法模块是预定义的在内核启动时或通过request_module函数加载到加密框架中的在加密框架中静态算法表示为一个算法说明实例。 动态算法 而动态算法指的是根据算法模式如CBC、HMAC等和基础算法静态算法或动态算法创建的算法如cbc(aes)表示使用AES算法的CBC模式的新算法hmac(md5)表示使用MD5算法的HMAC模式的新算法这些算法是根据外部应用需求动态创建并注册到加密框架中在加密框架中动态算法表示为一个算法模板实例。 差异 静态算法在密码学上属于算法的范畴。动态算法在密码学上属于算法应用的范畴。 创建动态算法 发布创建动态算法通知如果外部应用在查找算法如cbc(aes)算法时如果查找未命中将创建注册用算法幼虫然后在加密通知链上发布创建动态算法CRYPTO_MSG_ALG_REQUEST的通知如下所示ok crypto_probing_notify(CRYPTO_MSG_ALG_REQUEST, larval);如果是当前查找线程发布的创建动态算法通知则larval为待创建算法同名的注册用算法幼虫用于向创建动态算法的内核线程传递待创建算法的算法名、算法类型等信息此时算法管理链表如下所示其中cbc_aes_larval_r表示cbc(aes)算法对应的注册用算法幼虫。加密通知链回调函数cryptomgr_notify根据通知消息类型msg调用不同的执行函数algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin如下所示static int cryptomgr_notify(struct notifier_block *this, unsigned long msg,void *data) {switch (msg) {case CRYPTO_MSG_ALG_REQUEST:return cryptomgr_schedule_probe(data);case CRYPTO_MSG_ALG_REGISTER:return cryptomgr_schedule_test(data);case CRYPTO_MSG_ALG_LOADED:break;}return NOTIFY_DONE; } 其中CRYPTO_MSG_ALG_REQUEST为创建动态算法也称为算法探测的通知执行函数为cryptomgr_schedule_probeCRYPTO_MSG_ALG_REGISTER为算法正确性检验的通知执行函数为cryptomgr_schedule_test。 cryptomgr_schedule_probe函数 cryptomgr_schedule_probe函数的输入参数为算法幼虫larval返回值为执行结果NOTIFY_STOP表示执行完毕但是不表示已成功创建动态算法。algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin static int cryptomgr_schedule_probe(struct crypto_larval *larval) {struct task_struct *thread;struct cryptomgr_param *param;const char *name larval-alg.cra_name;const char *p;unsigned int len;int i;if (!try_module_get(THIS_MODULE))goto err;param kzalloc(sizeof(*param), GFP_KERNEL);if (!param)goto err_put_module;for (p name; isalnum(*p) || *p - || *p _; p);len p - name;if (!len || *p ! ()goto err_free_param;memcpy(param-template, name, len);i 0;for (;;) {name p;for (; isalnum(*p) || *p - || *p _; p);if (*p () {int recursion 0;for (;;) {if (!*p)goto err_free_param;if (*p ()recursion;else if (*p ) !recursion--)break;}p;}len p - name;if (!len)goto err_free_param;param-attrs[i].attr.rta_len sizeof(param-attrs[i]);param-attrs[i].attr.rta_type CRYPTOA_ALG;memcpy(param-attrs[i].data.name, name, len);param-tb[i 1] param-attrs[i].attr;i;if (i CRYPTO_MAX_ATTRS)goto err_free_param;if (*p ))break;if (*p ! ,)goto err_free_param;}if (!i)goto err_free_param;param-tb[i 1] NULL;param-type.attr.rta_len sizeof(param-type);param-type.attr.rta_type CRYPTOA_TYPE;param-type.data.type larval-alg.cra_flags ~CRYPTO_ALG_TESTED;param-type.data.mask larval-mask ~CRYPTO_ALG_TESTED;param-tb[0] param-type.attr;param-otype larval-alg.cra_flags;param-omask larval-mask;crypto_alg_get(larval-alg);param-larval larval;thread kthread_run(cryptomgr_probe, param, cryptomgr_probe);if (IS_ERR(thread))goto err_put_larval;return NOTIFY_STOP;err_put_larval:crypto_alg_put(larval-alg); err_free_param:kfree(param); err_put_module:module_put(THIS_MODULE); err:return NOTIFY_OK; }cryptomgr_schedule_probe函数执行流程如下所示。1)在cryptomgr_schedule_probe函数函数中需要从算法幼虫的算法名中解析出算法模板名和基础算法名规则如下正则表达式 a)基本规则算法模板名(基础算法名1,…,基础算法名n)b)算法模板名的有效字符包括0到9、a到z、A到Z、-、等c)基础算法名的有效字符包括0到9、a到z、A到Z、-、、(、)等d)所有基础算法名都必须包含在紧跟算法模板名后的()之内当有多个基础算法时基础算法名以,“间隔e)算法模板名与第一个”(之间不能有任何其他字符f)基础算法名最多不超过32个。例子 例如算法名为hmac(md5)时解析出的算法模板为hmac基础算法为静态算法md5算法名为authenc(hmac(md5),cbc(aes))时解析出的算法模板为authenc基础算法为动态算法hmac(md5)和cbc(aes)。 cryptomgr_param 2)传递给内核线程的参数数据结构为struct cryptomgr_param定义如下所示algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin struct cryptomgr_param {struct rtattr *tb[CRYPTO_MAX_ATTRS 2];struct {struct rtattr attr;struct crypto_attr_type data;} type;struct {struct rtattr attr;struct crypto_attr_alg data;} attrs[CRYPTO_MAX_ATTRS];char template[CRYPTO_MAX_ALG_NAME];struct crypto_larval *larval;u32 otype;u32 omask; };参数介绍  tb参数名T列表不含参数值以NULL结尾。第1个为算法类型CRYPTOA_TYPE后续均为基础算法名CRYPTOA_ALG。type算法类型TLV结构包含算法类型和屏蔽位。attrs基础算法名列表TLV结构。larval算法幼虫名即待创建的动态算法的算法名。template算法模板名。otype原始的算法类型传递给内核线程的算法类型中清除了算法已检测标志位。omask原始的算法类型屏蔽位传递给内核线程的算法类型屏蔽位中清除了算法已检测标志位。填充完参数param后创建名为cryptomgr_probe的内核线程称为算法探测线程其执行函数为cryptomgr_probe如下所示。 thread kthread_run(cryptomgr_probe, param, cryptomgr_probe);if (IS_ERR(thread))goto err_put_larval; 创建完算法探测线程后算法查找线程调用crypto_larval_wait等待算法探测结束如下所示。 if (ok NOTIFY_STOP)alg crypto_larval_wait(larval);算法检测线程非算法探测线程通过注册用算法幼虫的完成量通知查找线程算法探测结束struct completion *completion;完成量指向算法幼虫的完成量。目前的版本  V5.15.12已经删除这个变量 cryptomgr_probe函数 cryptomgr_probe函数是算法探测线程的执行函数输入参数为创建动态算法所需的参数algboss.c - crypto/algboss.c - Linux source code (v5.15.12) - Bootlin static int cryptomgr_probe(void *data) {struct cryptomgr_param *param data;struct crypto_template *tmpl;int err;tmpl crypto_lookup_template(param-template);if (!tmpl)goto out;do {err tmpl-create(tmpl, param-tb);} while (err -EAGAIN !signal_pending(current));crypto_tmpl_put(tmpl);out:complete_all(param-larval-completion);crypto_alg_put(param-larval-alg);kfree(param);module_put_and_exit(0); }处理流程如下所示算法模板要么实现create接口要么实现alloc接口两者必居其一其中create接口不仅创建算法模板实例还实现算法模板实例注册而alloc接口只创建算法模板实例因此还需要调用者再进行算法模板实例注册。一般情况下哈希算法的算法模板实现create接口如HMAC模板提供的create接口为hmac_create函数而分组算法的算法模板实现提供alloc接口如CBC模板提供的alloc接口为crypto_cbc_alloc函数。如果在算法探测过程中出现错误则需要在线程退出前调用crypto_larval_error函数完成收尾工作。crypto_larval_error函数的输入参数为算法幼虫名即待创建的动态算法名param-larval、原始算法类型param-otype和原始算法类型屏蔽位param-omask 注意事项crypto_larval_error 版本5.15.11已经不再支持如果以输入参数为条件查找到算法幼虫则唤醒在其完成量上等待的线程如果查找到的是已注册的算法在算法检测线程中已唤醒在注册用算法幼虫完成量上等待的线程如下所示。 问题create和alloc必须要二者选一实现但是我没有找到证据 进行论证注册动态算法crypto_register_instance crypto_register_instance函数用于注册动态算法即算法模板实例输入参数包括算法模板tmpl和算法模板实例inst处理流程如下所示。algapi.c - crypto/algapi.c - Linux source code (v5.15.12) - Bootlin int crypto_register_instance(struct crypto_template *tmpl,struct crypto_instance *inst) {struct crypto_larval *larval;struct crypto_spawn *spawn;int err;err crypto_check_alg(inst-alg);if (err)return err;inst-alg.cra_module tmpl-module;inst-alg.cra_flags | CRYPTO_ALG_INSTANCE;down_write(crypto_alg_sem);larval ERR_PTR(-EAGAIN);for (spawn inst-spawns; spawn;) {struct crypto_spawn *next;if (spawn-dead)goto unlock;next spawn-next;spawn-inst inst;spawn-registered true;crypto_mod_put(spawn-alg);spawn next;}larval __crypto_register_alg(inst-alg);if (IS_ERR(larval))goto unlock;hlist_add_head(inst-list, tmpl-instances);inst-tmpl tmpl;unlock:up_write(crypto_alg_sem);err PTR_ERR(larval);if (IS_ERR(larval))goto err;crypto_wait_for_test(larval);err 0;err:return err; } EXPORT_SYMBOL_GPL(crypto_register_instance); 1)算法注册由通用算法注册函数__crypto_register_alg完成输入参数为算法模板实例对应的通用算法说明inst-alg返回值为检测用算法幼虫larval。2)算法模板和算法模板实例的关联代码如下hlist_add_head(inst-list, tmpl-instances);inst-tmpl tmpl; 即将算法模板实例添加到算法模板的实例链表中同时设置算法模板实例归属的算法模板。3)和静态算法相同动态算法注册的最后一步是算法正确性检验调用crypto_wait_for_test函数实现。4)crypto_register_instance函数中接口调用情况如下所示。5)注册同步哈希算法模板实例时使用的函数是shash_register_instance其输入参数包括算法模板tmpl和同步哈希算法模板实例inst处理流程如下所示。shash.c - crypto/shash.c - Linux source code (v5.15.12) - Bootlin int shash_register_instance(struct crypto_template *tmpl,struct shash_instance *inst) {int err;if (WARN_ON(!inst-free))return -EINVAL;err shash_prepare_alg(inst-alg);if (err)return err;return crypto_register_instance(tmpl, shash_crypto_instance(inst)); } EXPORT_SYMBOL_GPL(shash_register_instance); 和同步哈希静态算法相同在注册前首先调用shash_prepare_alg函数检测同步哈希算法模板实例对应的同步哈希算法inst-alg的有效性同时进行注册前的准备工作。注册前准备工作中最重要的一步是将算法类型常量设置为crypto_shash_type。同步哈希动态算法的注册工作是由通用动态算法注册函数crypto_register_instance完成。crypto_register_instance函数处理的是通用的算法模板实例因此调用shash_crypto_instance函数获取同步哈希算法模板实例inst对应的通用算法模板实例。shash_register_instance函数中接口调用情况如下所示。
http://www.huolong8.cn/news/383290/

相关文章:

  • 苏州做网站的公司有哪些扬中网站建设 优帮云
  • 网站建设中界面模板下载首页模板
  • 云南省城乡住房建设厅官方网站韶关最新消息
  • 网站建设公司宣传手机网站开发人员工具
  • 手机做的兼职网站设计做网站学的是代码吗
  • wordpress用户验证失败网站seo步骤
  • 江津哪个网站可以做顺风车网站如何建设与安全管理制度
  • 西安植提行业网站建设胶南做网站
  • 闵行区网站沧州网络科技有限公司
  • 内蒙古建信建设有限公司网站广州企业建站公司
  • 网站开发学徒工作如何更换空间对网站的影响
  • 做网站需要什么资料前端如何优化seo
  • 爱站网工具常州高端网站建设公司哪家好
  • 做外贸的在哪些网站找工作找网站做
  • 保定自助建站网站制作手机
  • 备案中网站名称门业网站源码
  • 网站服务器租用延寿县建设银行网站
  • 网站seo外链接wordpress随意布局
  • 北京市两学一做网站农村基本制度建设网站
  • 六年级做的网站的软件怎样做一个网站
  • 黑龙江省建设厅网站首页长沙做痔疮东大医院de网站
  • 站长之家seo信息wordpress 安装 主题
  • 怎样创建网站吉洋大鼓点击图片预览 wordpress
  • 上海专业网站建设咨询推广文案模板
  • 建站的步骤有哪些中英文网站是咋做的
  • 中国建设银行陕西分行网站网站线上推广方式
  • 做网站的会计分录网站建设的域名
  • 长沙网站设计报价陕西seo主管
  • 广州骏域网络邢台seo技术
  • 重点培育学科建设网站厦门广告公司排名