具有AES-NI支持的EVP接口
在C / C ++中使用OpenSSL加密库时,EVP接口是否自动支持AES-NI硬件加速(假设处理器支持)? 参考这个 ,看起来命令行OpenSSL确实有支持。 我想知道是否有特定的函数调用,我必须使用它来利用这种支持。
例如,如果我使用EVP_EncryptInit_ex(ctx, type, imp, key, iv)
,那么这些参数中的任何一个都必须指定NI加速度吗? 即EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)
诀窍?
谢谢!
在C / C ++中使用OpenSSL加密库时,EVP接口是否自动支持AES-NI
是。 EVP_*
是确保使用AES-NI(如果可用)的官方/支持方式。 事实上,EVP是获得硬件加速的唯一方法。
EVP_*
也是获得其他硬件加速的唯一方法,例如在Skylark下使用英特尔的ia32 SHA加速; ARM的加密扩展在ARMv8中可用; 和VIA的处理器上的ia32 Padlock扩展。
使用低级AES例程(如AES_encrypt
和AES_decrypt
)是AES_decrypt
软件实现,它们永远不会使用像AES-NI这样的硬件加速。 另请参阅Dr. Henson在validationAES-NI运行时使用的OpenSSL邮件列表中的回复? 。
相关问题是(1)如何确定是否使用AES-NI; (2)什么是基准测试结果。 为此,请参阅如何检查OpenSSL是否支持/使用Intel AES-NI?