具有AES-NI支持的EVP接口

在C/C++中使用OpenSSL加密库时,EVP接口是否自动支持AES-NI硬件加速(假设处理器支持)?参考this,看来命令行OpenSSL确实有支持.我想知道是否有特定的函数调用,我必须使用它来利用这种支持.

例如,如果我使用EVP_EncryptInit_ex(ctx,type,imp,key,iv),那么这些参数中的任何一个都必须指定NI加速度吗?即将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下使用英特尔的ia32 SHA加速; ARM的加密扩展在ARMv8中可用;和VIA的处理器上的ia32 Padlock扩展.

使用低级AES例程(如AES_encrypt和AES_decrypt)是纯软件实现,它们永远不会像AES-NI那样使用硬件加速.另请参阅Dr. Henson在Verify AES-NI use at runtime?的OpenSSL邮件列表中的回复.

相关问题是(1)如何确定是否使用AES-NI; (2)什么是基准测试结果.为此,见How can I check if OpenSSL is support/use the Intel AES-NI?

转载注明原文:具有AES-NI支持的EVP接口 - 代码日志