九江网站建设推广,公司需要网站 该怎么做,设计师做画册必备网站,知舟网站建设算法注册流程
静态算法模块初始化
分组算法模块初始化
AES算法模块#xff08;aes_generic.c#xff09;的初始化接口aes_init实现向加密框架注册AES算法的功能#xff0c;如下所示。aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.12) - Bootlin
sta…算法注册流程
静态算法模块初始化
分组算法模块初始化
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加密框架设计与实现