在 C/C++ 中使用 OpenSSL 加密库时,EVP 接口(interface)是否自动支持 AES-NI 硬件加速(假设处理器支持)?引用this ,看来命令行 OpenSSL 确实有支持。我想知道是否必须使用特定的函数调用才能利用此支持。
例如,如果我使用 EVP_EncryptInit_ex(ctx, type, imp, key, iv)
,这些参数是否必须指定 NI 加速? IE。 EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)
会成功吗?
谢谢!
最佳答案
When using the OpenSSL crypto libraries in C/C++, does the EVP interface automatically support AES-NI
是的。 EVP_*
是确保使用 AES-NI(如果可用)的官方/支持方式。事实上,EVP 通常是访问硬件加速的唯一途径。
EVP_*
也是获得其他硬件加速的唯一途径,比如在Skylark下使用Intel的ia32的SHA加速; ARM 的 Crypto 扩展在 ARMv8 中可用;以及 VIA 在其处理器上的 ia32 Padlock 扩展。
使用低级 AES 例程(如 AES_encrypt
和 AES_decrypt
)是纯软件实现,它们永远不会使用像 AES-NI 这样的硬件加速。另请参阅 Henson 博士在 OpenSSL 邮件列表上的回复 Verify AES-NI use at runtime? .
相关问题是(1)如何判断是否使用了AES-NI; (2) 基准测试结果是什么。为此,请参阅 How can I check if OpenSSL is support/use the Intel AES-NI?
关于c - 支持 AES-NI 的 EVP 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516976/