Linux 内核加密 API
Linux Kernel Crypto API
我正在尝试使用 Linux 内核加密 API 制作简单的内核模块。
我从 https://www.kernel.org/doc/html/v4.17/crypto/api-samples.html 那里得到了示例(对称密钥密码操作的代码示例
)
我的问题是变量“scratchpad”(输入日期)在启动前后是相同的值。
也从未使用过 bracnh:
if (rc)
pr_info("skcipher encrypt returned with result %d\n", rc);
我确定我做错了什么?
关于问题的第一部分:
My problem is variable "scratchpad" (Input date) is the same value before and after launching it.
由于您试图通过传递相同的 scatter/gather 列表作为目标来就地加密,这是一个问题。他们应该不一样。
要调试,您可以:
- 试试其他算法。我从你的
/proc/crypto
文件中看到你有 __cbc-aes-aesni
。您可能想尝试这个和其他人,以测试您的模块的逻辑。
- 从用户空间尝试 cryptodev (
/dev/crypto
)。通过使用 cryptodev tests 和检查 dmesg
,它使调试变得更加容易。添加 enable_stats=1
到模块选项也有帮助。当您的应用程序在用户空间稳定时,是否返回内核取决于您。
第二部分:
Also bracnh is never used:
if (rc)
pr_info("skcipher encrypt returned with result %d\n", rc);
我会说这不是问题。
按照代码序列(引用与您的文档相同的内核版本 v4.17 link):
crypto_wait_req
接受一个错误代码,在我们的例子中由 crypto_skcipher_encrypt()
传递。除非错误是-EBUSY
或-EINPROGRESS
,否则这个错误码返回rc
,零是完全正常的。
- 反过来,
crypto_skcipher_encrypt
returns如果密码操作成功则为0; < 0 如果发生错误。由于您设置了密钥,因此应返回 0。
- 我将引用 Intel 的
__cbc-aes-aesni
作为驱动程序。检查 cbc_encrypt()
, you can see zero is the return value on success, as evidenced in the return value of skcipher_walk_done()
处于成功状态。
因此,不调用分支是成功操作的预期行为。
我正在尝试使用 Linux 内核加密 API 制作简单的内核模块。
我从 https://www.kernel.org/doc/html/v4.17/crypto/api-samples.html 那里得到了示例(对称密钥密码操作的代码示例
)
我的问题是变量“scratchpad”(输入日期)在启动前后是相同的值。
也从未使用过 bracnh:
if (rc)
pr_info("skcipher encrypt returned with result %d\n", rc);
我确定我做错了什么?
关于问题的第一部分:
My problem is variable "scratchpad" (Input date) is the same value before and after launching it.
由于您试图通过传递相同的 scatter/gather 列表作为目标来就地加密,这是一个问题。他们应该不一样。
要调试,您可以:
- 试试其他算法。我从你的
/proc/crypto
文件中看到你有__cbc-aes-aesni
。您可能想尝试这个和其他人,以测试您的模块的逻辑。 - 从用户空间尝试 cryptodev (
/dev/crypto
)。通过使用 cryptodev tests 和检查dmesg
,它使调试变得更加容易。添加enable_stats=1
到模块选项也有帮助。当您的应用程序在用户空间稳定时,是否返回内核取决于您。
第二部分:
Also bracnh is never used:
if (rc) pr_info("skcipher encrypt returned with result %d\n", rc);
我会说这不是问题。
按照代码序列(引用与您的文档相同的内核版本 v4.17 link):
crypto_wait_req
接受一个错误代码,在我们的例子中由crypto_skcipher_encrypt()
传递。除非错误是-EBUSY
或-EINPROGRESS
,否则这个错误码返回rc
,零是完全正常的。- 反过来,
crypto_skcipher_encrypt
returns如果密码操作成功则为0; < 0 如果发生错误。由于您设置了密钥,因此应返回 0。 - 我将引用 Intel 的
__cbc-aes-aesni
作为驱动程序。检查cbc_encrypt()
, you can see zero is the return value on success, as evidenced in the return value ofskcipher_walk_done()
处于成功状态。
因此,不调用分支是成功操作的预期行为。