我正在尝试使用“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
看起来很可怕
手工实例化。
最后如果获得tfm
实例,我如何使用它来进行实际加密?
答案 0 :(得分:0)
对于用户空间程序,您必须使用'CryptoDev for Linux',它是一个内核模块,使您可以通过 / dev / crypto 使用加密API。见http://www.logix.cz/michal/devel/cryptodev/。 您可以下载示例http://www.logix.cz/michal/devel/cryptodev/cryptodev-demo1.c。
查看您的内核源文档 ./ kernel / documentation / crypto / 。
对于内核代码,请查看:http://www.linuxjournal.com/article/6451?page=0,0
它解释了当某些内核代码需要加密数据时如何使用crypto api。
许多内核模块已经使用加密API,在内核源文件中搜索单词“crypto_”,并搜索stackoverflow ... how to use CryptoAPI in the linux kernel 2.6