首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核Crypto API

Linux内核Crypto API
EN

Stack Overflow用户
提问于 2019-09-21 12:58:04
回答 1查看 956关注 0票数 1

我试着用制作简单的内核模块。

我从https://www.kernel.org/doc/html/v4.17/crypto/api-samples.html (对称密钥密码操作的代码示例)获得了这个例子。

我的问题是变量“划痕”(输入日期)在启动之前和之后都是相同的值。

此外,bracnh从未被使用过:

代码语言:javascript
复制
if (rc)
        pr_info("skcipher encrypt returned with result %d\n", rc);

我肯定做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-21 19:46:20

关于问题的第一部分:

我的问题是变量“划痕”(输入日期)在启动之前和之后都是相同的值。

由于您正试图通过传递与目标相同的散射/聚集列表来对本地进行加密,因此这是一个问题。它们不应该是一样的。

要调试,可以:

  1. 试试其他算法。我从您的/proc/crypto文件中看到,您有__cbc-aes-aesni。您可能需要尝试这一点和其他方法,以测试模块的逻辑。
  2. 尝试从用户空间(/dev/crypto)进行加密。它通过使用加密设备测试和检查dmesg,使调试变得更加容易。将enable_stats=1添加到模块选项也有帮助。当您的应用程序在用户空间上稳定时,就由您返回内核。

第二部分:

此外,bracnh从未被使用过: 如果(rc) pr_info("skcipher返回结果%d\n",rc);

我想说这不是问题。

按照代码序列(引用与文档链接相同的内核版本v4.17 ):

  1. crypto_wait_req接受一个错误代码,在我们的例子中是由crypto_skcipher_encrypt()传递的。除非错误是-EBUSY-EINPROGRESS,否则此错误代码将返回给rc,而零是完全正常的。
  2. 反过来,如果密码操作成功,crypto_skcipher_encrypt返回0;如果发生错误,则返回<0。既然您已经设置了一个键,那么应该返回0。
  3. 我将参考英特尔的__cbc-aes-aesni作为驱动程序。通过检查cbc_encrypt(),您可以看到零是成功时的返回值,在成功状态下skcipher_walk_done()的返回值就是证明。

因此,预期在成功操作时不调用分支的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58040517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档