【发布时间】:2012-07-24 10:34:26
【问题描述】:
我正在尝试使用 "arc4" 算法来加密任意数据
来自模块的流。但我有点不知道我应该怎么做
接近它。实现在<crypto/arc4.c>
$find . -type f -name '*.[ch]' -exec grep 'EXPORT_SYMBOL' {} \; | grep
'rc4'
什么也没返回。所以我想没有外部接口
static void arc4_crypt(struct crypto_tfm *tfm, u8 *out, const u8 *in).
寄存器函数定义为
static int __init arc4_init(void)
{
return crypto_register_alg(&arc4_alg);
}
还有一个struct crypto_alg的静态实例。
通过这些提示,我得出的结论是,我需要一个更高的级别 访问该算法的接口。
在我的情况下似乎相关的唯一功能是:
EXPORT_SYMBOL_GPL(crypto_alloc_tfm);
来自<crypto/api.c>:
void *crypto_alloc_tfm(const char *alg_name,
const struct crypto_type *frontend, u32 type, u32 mask)
它返回void *,这是我最关心的问题。
还有来自<crypt/api.c>
crypto_alloc_tfm() 将首先尝试定位已加载的 算法。如果失败并且内核支持动态加载 模块,然后它将尝试加载同名的模块或 别名。如果失败,它将向任何加载的加密发送查询 经理即时构建算法。抓取了一个引用计数 然后与新的变换相关联的算法。
返回的转换是不确定的类型。大多数人 应该使用更具体的分配功能之一,例如 crypto_alloc_blkcipher。
但我找不到具体的crypto_alloc_* 将提供 arc4
算法。
第二个关注点:
struct crypto_type in 看起来很可怕
手动实例化。
最后,如果得到一个tfm 实例,我如何使用它来进行实际加密?
【问题讨论】:
-
您是否有特定原因要使用 RC4 而不是现代加密?
标签: c cryptography linux-kernel