_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。

相关推荐
blue_blooded7 分钟前
对College数据进行多模型预测(R语言)
开发语言·r语言
努力的小帅18 分钟前
C++_红黑树树
开发语言·数据结构·c++·学习·算法·红黑树
CN-Dust19 分钟前
【C++】指针
开发语言·c++
hweiyu0022 分钟前
学习Scala语言的最佳实践有哪些?
开发语言·学习·scala
逐花归海.32 分钟前
『 C++ 入门到放弃 』- 哈希表
数据结构·c++·程序人生·哈希算法·散列表
许野平38 分钟前
Rust:anyhow::Result 与其他 Result 类型转换
服务器·开发语言·rust·result·anyhow
筏.k38 分钟前
C++现代Redis客户端库redis-plus-plus详解
c++·redis
Sammyyyyy1 小时前
Node.js 是怎么一步步撼动PHP地位的
开发语言·node.js·php
lly2024061 小时前
Node.js 路由
开发语言
程序员编程指南1 小时前
Qt 多线程调试技巧与常见问题
c语言·开发语言·c++·qt