首页/指令库/向量 AES 最终轮加密
VAESEF.VV

RISC-V VAESEF.VV 指令详解

指令手册OP-VE vector-vector form

向量 AES 末轮加密:vd 中每个 128 位状态组使用 vs2 对应轮密钥组。

指令语法

vaesef.vv vd, vs2

vd 读取旧状态并接收新状态;vs2 提供轮密钥,二者均为向量寄存器 v0–v31。没有第三个源、立即数或 v0.t 掩码操作数;v0 作为数据寄存器时可以写入。

32 位 OP-VE:opcode=1110111,funct6=101000,vm=1,vs1=00011,funct3=010;vs1 是固定选择字段,不是源操作数。

要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。SubBytes → ShiftRows → round-key XOR (no MixColumns);每个活动状态组使用对应的 vs2 轮密钥组;允许相同寄存器保存状态和密钥。

从元素组 vstart/4 处理至 vl/4−1。vl、vstart 不是 4 的整数倍时编码保留;其它 SEW 也保留。LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常。执行延迟必须与操作数据无关。

Zvkned向量密码AES

指令行为说明

vaesef.vv 执行 AES 末轮加密操作。它以 128 位 element group 为单位读取 vd 中的状态,依次应用 SubBytes、ShiftRows,再与 vs2 中对应的 128 位轮密钥 element group 异或,并将新状态写回 vd。SEW 必须为 32。

VAESEF.VV 指令解析与执行动画

受限教学模型只展示官方 ISA 可见字段、状态与条件,不模拟完整密码协议或微架构。

vaesef.vv
fixed 101000 / vm=1 / vs1=00011vs2=v16vs1=00011funct3=010vd=v8opcode=1110111
执行数据路径

state -> SubBytes, ShiftRows, then AddRoundKey -> vd

结果待定

快速理解与检索要点

向量 AES 末轮加密:vd 中每个 128 位状态组使用 vs2 对应轮密钥组。

执行 AES 最终轮加密:依次为 SubBytes、ShiftRows 和轮密钥异或;不包含 MixColumns。
该 element-group 密码指令没有 vm 掩码操作数,按 element group 粒度执行。
SEW=32、EGW=128、EGS=4;vl 和 vstart 不是 4 的倍数时编码保留。LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常。

向量执行上下文

vd 读取旧状态并接收新状态;vs2 提供轮密钥,二者均为向量寄存器 v0–v31。没有第三个源、立即数或 v0.t 掩码操作数;v0 作为数据寄存器时可以写入。

32 位 OP-VE:opcode=1110111,funct6=101000,vm=1,vs1=00011,funct3=010;vs1 是固定选择字段,不是源操作数。

要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。SubBytes → ShiftRows → round-key XOR (no MixColumns);每个活动状态组使用对应的 vs2 轮密钥组;允许相同寄存器保存状态和密钥。

从元素组 vstart/4 处理至 vl/4−1。vl、vstart 不是 4 的整数倍时编码保留;其它 SEW 也保留。LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常。执行延迟必须与操作数据无关。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 33

常见使用场景

加密与密码

启用 Zvkned 与向量状态,VLEN=128、LMUL=1、SEW=32、vl=4、vstart=0;v8 旧状态与 v16 轮密钥均为零。按本指令轮函数计算并写回 v8=0x63636363636363636363636363636363,仅更新此活动组。

向量化加速

启用 Zvkned 与向量状态,VLEN=128、LMUL=1、SEW=32、vl=4、vstart=0;v8 旧状态与 v16 轮密钥均为零。按本指令轮函数计算并写回 v8=0x63636363636363636363636363636363,仅更新此活动组。

使用前检查清单

语法检查
  • vd 读取旧状态并接收新状态;vs2 提供轮密钥,二者均为向量寄存器 v0–v31。没有第三个源、立即数或 v0.t 掩码操作数;v0 作为数据寄存器时可以写入。
  • 32 位 OP-VE:opcode=1110111,funct6=101000,vm=1,vs1=00011,funct3=010;vs1 是固定选择字段,不是源操作数。
语义检查
  • 要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。SubBytes → ShiftRows → round-key XOR (no MixColumns);每个活动状态组使用对应的 vs2 轮密钥组;允许相同寄存器保存状态和密钥。
  • 从元素组 vstart/4 处理至 vl/4−1。vl、vstart 不是 4 的整数倍时编码保留;其它 SEW 也保留。LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常。执行延迟必须与操作数据无关。

容易混淆 / 常见误区

没有 vm 操作数;该 element-group crypto 指令不可掩码执行。
SEW 必须为 32,且每个 element group 为 128 位。
vd 同时是输入状态和目的寄存器。
SEW=32、EGW=128、EGS=4;vl 和 vstart 必须是 4 的整数倍,且 LMUL*VLEN 至少覆盖 128 位 element group。

常见问题

VAESEF.VV 是否总能带 v0.t 掩码?

不能。该类 element-group 密码指令没有 vm 操作数;不要把普通 RVV 掩码语法套到页面示例中。

VAESEF.VV 的元素宽度由什么决定?

该指令固定 SEW=32 并以 128 位 element group 执行;其它 SEW 的编码为保留编码。