2013-09-11 2 views
3

Недавно я провел некоторое исследование режимов блочного шифрования (шифрования). Я действительно интересовался 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 
+3

Возможно, есть фрагмент кода, который имеет отношение к проблеме? –

+0

Какая строка является ошибкой? – interjay

+0

все EXPAND_ASSIST (x0, x1, x2, x0,255,1); линии выдают ошибку. – Mash

ответ

1

Вы не можете ввести машинное отделение. Это то, что команда загрузки делает для вас.

Вы просто указали на команду загрузки непосредственно без трансляции. Он будет копировать из ram в векторный регистр. Бросок не может этого сделать.

+0

Боюсь, я загрузил неправильный код. Я изменил его сейчас. Ошибка возникает на каждой из этих линий EXPAND_ASSIST. (Ваша помощь очень ценится!) – Mash

+0

Это та же проблема. Вы пытаетесь использовать «ключ» вместо загрузки «ключа». – ypnos

+0

Где вы видите «typecast в машинный регистр»? – interjay

Смежные вопросы