Linux kernel 在Linux内核中对文件使用加密API

Linux kernel 在Linux内核中对文件使用加密API,linux-kernel,cryptoapi,Linux Kernel,Cryptoapi,我一直在尝试在linux内核中使用加密api,我需要做的是打开一个文件。我正在使用LSM捕捉那些打开的文件 到目前为止,我所做的是使用 struct crypto_shash *tfm; struct shash_desc desc; tfm = crypto_alloc_shash("sha1", 0, CRYPTO_ALG_ASYNC); 我想我应该在那之后初始化它 desc.tfm = tfm; desc.flags = 0; err = crypto_shash_init(&

我一直在尝试在linux内核中使用加密api,我需要做的是打开一个文件。我正在使用LSM捕捉那些打开的文件

到目前为止,我所做的是使用

struct crypto_shash *tfm;
struct shash_desc desc;
tfm = crypto_alloc_shash("sha1", 0, CRYPTO_ALG_ASYNC);
我想我应该在那之后初始化它

desc.tfm = tfm;
desc.flags = 0;

err = crypto_shash_init(&desc);
这一切都很好,但我想使用

crypto_shash_digest(&desc, ??, ??, sha_hash);
我意识到它需要一个散点列表作为第二个参数,散点列表的长度作为第三个参数。我不明白的是,我应该如何将文件加载到散乱列表中,以便将其交给加密系统

我已经读了很多书,但是到目前为止还没有找到关于将文件内容加载到散点列表中的任何细节。因此,任何指向正确方向的指针都将受到赞赏


谢谢

不久前我也做过类似的事情。唯一的区别是我计算了ELF部分的散列

  • 可能您的desc.flags应该是CRYPTO_TFM_REQ_MAY_SLEEP,直到您有足够的理由阻止加密操作阻塞为止
  • 你确定你没有把它弄混吗?因为crypto_*s*hash_digest()接收指向数据的指针作为其第三个参数。如果这对你来说不是真的,你在说什么linux kenrel版本

  • 我用的是2.6.38,你是对的,我改用shash是因为我读到很多东西,说那是我想要的。奇怪的是,当我尝试crypto_shash_摘要(desc、teststr、strlen(teststr)、sha_hash)时,仍然会出现空指针错误;另外,我正在检查我得到的tfm是否为空,以及init是否存在错误。@DigitalPowers请您向我展示代码,我需要了解您如何使用crypto_shash_digest(),如何初始化tfm等等?我假设在准备TFM时出错,但在看到代码之前我不能说任何事情。我最初粘贴的代码就是它,我在最后调用了final并进行了错误检查,但除此之外,这些都是我对crypto_shash函数的调用。我目前正在使用字符串文字teststr尝试将其作为摘要进行哈希,然后执行final。@DigitalPowers 1)您是否尝试设置CRYPTO\u TFM\u REQ\u MAY\u SLEEP TFM标志?2) 如何分配sha_散列?它必须是最小的crypto_shash_digestsize字节。3) 从哪里得到的nullptr错误?你能显示堆栈跟踪吗?