从linux访问自定义硬件加速器:用于openVPN / openSSL

时间:2017-03-17 22:26:54

标签: openssl embedded-linux openvpn hardware-acceleration zynq

我试图让openVPN使用我为其加密操作设计的自定义硬件加速器(为了简单起见,我可以说我只是想让openVPN使用我设计的自定义AES加速器一个FPGA)。我将在运行linux的Xilinx ZYNQ平台上使用openVPN,我将对FPGA逻辑进行内存映射访问。

我已经编写并验证了多个加密操作(RSA,SHA256,AES)的加速器,但只是通过裸机编程接口设法使用它们。

我正在寻找一种让openVPN使用这些加速器的方法,但我无处可去,需要一些指针。

我知道openVPN使用openSSL库,可以配置为通过使用“引擎”来使用/ dev / Crypto(cryptodev)API,但是我仍然不知道为了制作它需要做什么我的加速器块和openSSL之间的连接。几乎没有CryptoDev的文档,我很难理解它如何与openSSL一起工作。

我知道我需要编写某种内核模块/设备驱动程序(或者可能只是mmap()我的加速器的内存地址到内核空间?)但这只是让linux“看到”我的加速器。

请帮助我了解我需要做些什么才能获得openSSL(以及openVPN)才能使用我的硬件加速器。这可能是一个很高的水平,但我只需要知道需要采取哪些步骤才能开始。

编辑:如果您对此不了解,请不要让Xilinx ZYNQ吓到你,只是假设我自己创建了一个神奇地映射到物理内存的硬件加速器。现在我只需要将它集成到openSSL / cryptodev中。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要做的第一件事就是为您的加速器提供内核空间驱动程序。接下来,您需要通过在加速器中提供支持的AES密码列表(struct crypto_alg)来注册支持的密码(使用linux / crypto.h中的crypto_register_algs函数)

您可以在此处找到更多信息:

接下来使用cryptoDev模块允许用户空间访问通过cryptoAPI注册的自定义加密驱动程序(加速器)。

重新编译OpenSSL以将CryptoDev与-DHAVE_CRYPTODEV一起使用。使用“-engine cryptodev”选项

使用cryptodev引擎