_mm_aeskeygenassist_si128 硬件指令执行的操作
根据Intel的文档,`_mm_aeskeygenassist_si128` 指令执行以下操作:
result[31:0] = SubWord(RotWord(temp)) xor Rcon;
result[63:32] = SubWord(RotWord(temp));
result[95:64] = SubWord(RotWord(temp)) xor Rcon;
result[127:96] = SubWord(RotWord(temp));
其中,temp是输入寄存器的32位部分,实际上,该指令将输入分成两个64位部分,对每个64位部分的高32位进行RotWord和SubWord,然后与轮常数异或(对于第一个和第三个32位块),然后复制到输出寄存器的相应位置。
在AES-256的密钥扩展中,我们通常使用该指令生成一个中间值,然后与之前的轮密钥异或。
而 shuffle 操作是为了将这个中间值调整为正确的形式。在代码中,我们使用了0xFF和0xAA。