我在网上看到了一个接一个的代码,但对ablkcipher_request_set_callback()的功能几乎没有任何清晰直接的描述。
include/linux/crypto.h中,没有注释。有人能提供一些见解和如何使用这个功能吗?

最佳答案

这是linux密码框架中的一个函数。
简单的理论是:
Linux加密框架假设
可以进行加密/解密工作的机器,如aes、des。
所以它构造了一个对这个硬件芯片的请求。芯片会
与CPU并行工作。
硬件芯片完成请求后,它会通知您的CPU
完成事件,通常由IRQ完成。
然后是IRQ处理程序(实际上,大部分时间都是下半部分)
将执行您在请求中指定的回调函数。
所以:ablkcipher_request_set_callback()是设置回调函数
加密/解密请求。
一个真正的例子是:
假设您正在运行ipsec协议。它可以做到以下几点
逻辑:
构造一个包加密请求,带有回调函数“when
加密完成,请将此数据包发送出去。
将加密请求提交给硬件芯片驱动程序,并进一步提交给硬件
炸薯条。
硬件芯片完成此包的加密后,硬件芯片驱动程序
将运行此回调函数“将此加密数据包发送出去”。
=======================================================================
IPsec使用
AEAD_givcrypt_set_callback()

ablkcipher_request_set_callback()
“ablkcipher”是指“分组密码”(如aes)、“异步”的“a”标准(用cpu在parralel中运行)。
“aead”可以被视为组合算法(“ablkcipher”+计算散列值)。在ipsec情况下,散列值是数据包crc。
在$(kernel)/net/ipv4/esp4.c中添加ipsec代码片段:
静态int esp_输出(struct xfm_state*x,struct sk_buff*skb)

     /* set the callback esp_output_done(), which would essentially call
      *     dev_queue_xmit()     # transmit the encrypted packet out
      */
    aead_givcrypt_set_callback(req, 0, esp_output_done, skb)

    /*
     * sumbit the request to Linux crypto framework, which internally would forward
     * the request to a HW chip driver.
     *
     * The HW chip driver accept the request, and return EINPROGRESS indicating
     * the request is being handled in progress or queued for handling.
     *
     * After HW chip done with encryption, request callback esp_output_done() is
     * called
     */
    err = crypto_aead_givencrypt(req);
if (err == -EINPROGRESS)
    goto error;

——好吧,很多细节没有涉及,就像你说的,“无文档”给我们带来了很多麻烦。

关于c - ablkcipher_request_set_callback有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21899904/

10-09 04:42