确定在运行时使用 CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE

Determine use of CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE at runtime

我们正在使用 Crypto++ 5.6.3 并在 CentOS 6 上使用 g++ 进行编译。是否可以在运行时确定我们的应用程序是否已链接到使用 CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE 作为 1 构建的 libcryptopp或 0?

谢谢

Is it possible to determine at runtime if our application has linked with a libcryptopp that was built with CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE as 1 or 0?

不,不是。事实上,您甚至无法判断您使用的是 AES-NI 还是软件实现。

有一些关于将 CXXFLAGS 隐藏起来以备将来使用(并从 cryptest.exe 程序打印它们)的讨论,但它的优先级非常低。如此之低,没有关于它的错误报告来进行工作。

编辑:现在在 Crypto++ 邮件列表上打开:GNUmakefile and 'make flag' recipe.


Crypto++ 测试套件打印宏的值。它来自validat1.cpp,第310行附近:

cout << "AESNI_INTRINSICS == " << CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE << endl;

但我想您已经知道,库构建设置和您的构建设置可能不同。


还值得注意的是,Crypto++ 使用 makefile,而发行版通常使用 Autotools 构建。发行版 select 他们自己的标志,它们可能与 Crypto++ makefile 不同。使用发行版时,您可以检查 *.pc 文件或类似文件。

相关的,我们在 CentOS 5 到 CentOS 7 上进行测试。CentOS 5 是一台不错的机器,因为它有 GCC 4.1,而那个版本的 GCC 在某些方面有点讲究。比如不能消费-march=native.