我正在使用QtCreator中C ++中的AES指令集进行AES加密,这是我的代码:
void aes256_enc(int8_t *plainText, int8_t *cipherText, __m256i *exp_enc_key)
{
__m256i m = _mm256_loadu_si256((__m256i *) plainText);
m = _mm256_xor_si256(m, exp_enc_key[0]);
for (int i = 1; i < 10; i++) {
m = _mm256_aesenc_epi128(m, exp_enc_key[i]);
}
m = _mm256_aesenclast_epi128(m, exp_enc_key[10]);
_mm256_storeu_si256((__m256i *) cipherText, m);
}
这是在我的.pro
文件中:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
QMAKE_CXXFLAGS +=-march=native -maes
SOURCES += \
main.cpp \
aes256.cpp
HEADERS += \
aes256.h
但是我仍然收到类似的错误:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include/vaesintrin.h:50: error: inlining failed in call to always_inline ‘__m256i _mm256_aesenc_epi128(__m256i, __m256i)’: target specific option mismatch
50 | _mm256_aesenc_epi128 (__m256i __A, __m256i __B)
| ^~~~~~~~~~~~~~~~~~~~
我的CPU是i5-4670。
.pro
文件中添加以下行:QMAKE_CXXFLAGS += -mvaes
在vaesintrin.h
中,此定义似乎需要vaes
/* Default attributes for YMM forms. */ #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("vaes"), __min_vector_width__(256)))
作为处理器i5-4670 does not support it,请尝试此:
DEFINES += "NO_AVX512=1"