Rijndael key schedule procedure polega RotWord
, SubWord
i XOR
, które są obsługiwane przez _mm_aeskeygenassist_si128:Dlaczego AES w SSE nie zapewnia pełnej funkcjonalności?
X3[31:0] ← SRC [127: 96];
X2[31:0] ← SRC [95: 64];
X1[31:0] ← SRC [63: 32];
X0[31:0] ← SRC [31: 0];
RCON[31:0] ← ZeroExtend(Imm8[7:0]);
DEST[31:0] ← SubWord(X1);
DEST[63:32 ] ← RotWord(SubWord(X1)) XOR RCON;
DEST[95:64] ← SubWord(X3);
DEST[127:96] ← RotWord(SubWord(X3)) XOR RCON;
DEST[VLMAX-1:128] (Unmodified)
jednak nie zwraca pełną klucz okrągły. Na przykład, zamiast po prostu wykonując
DEST[31:0] <- SubWord(X1)
,
Chyba powinniśmy wykonują
DEST[31:0]<-RotWord(SubWord(X3)) XOR RCON XOR X0
.
W związku z tym, po, programiści muszą wykonać dodatkową pracę, zanim klucz okrągły zostanie całkowicie wygenerowany.
Dlaczego SSE nie zapewnia pełnej procedury generowania klucza AES?