Недавно я провел некоторое исследование режимов блочного шифрования (шифрования). Я действительно интересовался OCB (Offset codebook) и пытался его реализовать. Я использовал реализацию, предоставленную автором алгоритма. Теперь я получаю ошибки. Глубина этих ошибок для меня слишком глубока.несовместимые типы при назначении типа '__m128i' из типа 'int'
Ошибка, перечисленная ниже, встречается очень много. Я попытался прочитать, что _m128i для, , но я никогда не затрагивал ничего связанного с ним. (Не то, что испытали на Linux) У меня возникло ощущение, что это может иметь какое-то отношение к OS/компилятору/настройкам?
Ошибка:
несовместимые типы при назначении типа '__m128i' от типа 'Int'
* (бежал с GCC: GCC -march = родной -O3 ocb.c timing_x86-1 .c) *
Любое понимание было бы действительно оценено.
РЕДАКТИРОВАТЬ
Ниже приведен пример того, где произошла ошибка. (конверсия __m128i)
static void AES_128_Key_Expansion(const unsigned char *userkey, void *key)
{
__m128i x0,x1,x2;
__m128i *kp = (__m128i *)key;
kp[0] = x0 = _mm_loadu_si128((__m128i*)userkey);
x2 = _mm_setzero_si128();
EXPAND_ASSIST(x0,x1,x2,x0,255,1); kp[1] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,2); kp[2] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,4); kp[3] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,8); kp[4] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,16); kp[5] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,32); kp[6] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,64); kp[7] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,128); kp[8] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,27); kp[9] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,54); kp[10] = x0;
}
#define EXPAND_ASSIST(v1,v2,v3,v4,shuff_const,aes_const) \
v2 = _mm_aeskeygenassist_si128(v4,aes_const); \
v3 = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(v3), \
_mm_castsi128_ps(v1), 16)); \
v1 = _mm_xor_si128(v1,v3); \
v3 = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(v3), \
_mm_castsi128_ps(v1), 140)); \
v1 = _mm_xor_si128(v1,v3); \
v2 = _mm_shuffle_epi32(v2,shuff_const); \
v1 = _mm_xor_si128(v1,v2)
#define EXPAND192_STEP(idx,aes_const) \
EXPAND_ASSIST(x0,x1,x2,x3,85,aes_const); \
x3 = _mm_xor_si128(x3,_mm_slli_si128 (x3, 4)); \
x3 = _mm_xor_si128(x3,_mm_shuffle_epi32(x0, 255)); \
kp[idx] = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(tmp), \
_mm_castsi128_ps(x0), 68)); \
kp[idx+1] = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(x0), \
_mm_castsi128_ps(x3), 78)); \
EXPAND_ASSIST(x0,x1,x2,x3,85,(aes_const*2)); \
x3 = _mm_xor_si128(x3,_mm_slli_si128 (x3, 4)); \
x3 = _mm_xor_si128(x3,_mm_shuffle_epi32(x0, 255)); \
kp[idx+2] = x0; tmp = x3
Возможно, есть фрагмент кода, который имеет отношение к проблеме? –
Какая строка является ошибкой? – interjay
все EXPAND_ASSIST (x0, x1, x2, x0,255,1); линии выдают ошибку. – Mash