ablkcipher_request_set_callback做了什么?

时间:2014-02-20 06:26:39

标签: c linux api linux-kernel

我在网上搜索代码后看到了代码,但对ablkcipher_request_set_callback()的内容几乎没有任何清晰直接的描述。

include/linux/crypto.h中,评论为零。任何人都可以提供任何见解以及如何使用此功能吗?

2 个答案:

答案 0 :(得分:3)

这是一个内核头文件(与/include/linux中的所有头文件一样,因此它并不适用于普通应用程序。假设您正在使用内核(例如编写设备)驱动程序),那么你应该阅读源代码以更好地了解正在做什么。

您应该在应用程序中使用的任何内容都不会出现在linux目录中,并且会有一个手册页解释它的作用以及如何使用它。

有一些documentation here,但它不包括您要询问的功能。

答案 1 :(得分:3)

这是Linux加密框架中的一个函数。

简单的理论是:

  

Linux加密框架假设您的硬件芯片可能存在   机器,可以进行加密/解密工作,如AES,DES。

     

因此它构建了对此HW芯片的请求。芯片会做到这一点   与CPU并行工作。

     

硬件芯片完成请求后,它会通知你的CPU   完整的活动,通常由IRQ。

     

然后是IRQ处理程序(好吧,大部分时间实际上是下半部分)   将执行您在请求中指定的回调函数。

     

所以:ablkcipher_request_set_callback()是设置回调函数   加密/解密请求。

一个真实的例子就像:

  

假设您正在运行IPsec协议。它会做以下事情   逻辑:

     

构造数据包加密请求,具有回调函数“when   加密完成后,请将此数据包发送出去。“

     

将加密请求提交给HW芯片驱动程序,然后再提交给HW   芯片。

     

硬件芯片完成加密后的这个数据包,硬件芯片驱动程序   将运行此回调函数“传输此加密数据包”。

=============================================== ========================

IPsec使用        aead_givcrypt_set_callback()

不        ablkcipher_request_set_callback()

“ablkcipher”表示“块密码”(如AES),“异步”的“a”标准(在带有CPU的parralel中运行)。

“aead”可以被认为是(“ablkcipher”+计算哈希值)的组合算法。在IPsec情况下,哈希值是数据包CRC。

添加IPSec代码片段:#in $(kernel)/net/ipv4/esp4.c

static int esp_output(struct xfrm_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;

---好吧,对于未涵盖的细节,就像你说的那样,“无证件”给我们带来了很多麻烦。