0

我正在尝试使用“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_typein 手动实例化看起来很可怕。

最后,如果获得一个tfm实例,我如何使用它来进行实际加密?

4

1 回答 1

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。

许多内核模块已经使用了crypto API,在内核源文件中搜索“crypto_”这个词,并在stackoverflow上搜索......如何在linux内核2.6中使用CryptoAPI

于 2012-07-24T13:32:04.050 回答