ENCODEKEY256
Código 256-Bit clave con Key Locker
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F3 0F 38 FB 11:rrr:bbb | ENCODEKEY256 r32, r32 <XMM0-6> | A | Valido | Valido | Envuelve un AES clave de 256 bits de XMM1:XMM0 a una clave descriptor y guárdalo en XMM0--3. |
Codificacion de operandos
Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.
A
modrm.regescriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pideXMM0--1lectura y escrituraXMM2--6escritura
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
La instrucción ENCODEKEY2561 envuelve un AES clave de 256 bits del implícito operando XMM1:XMM0 en una clave descriptor que se almacena en el implícito operandos de destino XMM0-3.
El operando de origen explícito es un registro de proposito general y especifica qué restricciones descriptor deben ser construidas en el descriptor.
El operando de destino explícito se pobla con información sobre la fuente de la clave y sus atributos. XMM4 a través de XMM6 se reservan para usos futuros y el software no debe confiar en que se estén cero.
Operación
ENCODEKEY256
#GP (0) if a reserved bit2 in SRC[31:0] is set
InputKey[255:0] := XMM1:XMM0;
KeyMetadata[2:0] = SRC[2:0];
KeyMetadata[23:3] = 0; // Reserved for future usage
KeyMetadata[27:24] = 1; // KeyType is AES-256 (value of 1)
KeyMetadata[127:28] = 0; // Reserved for future usage
// KeyMetadata is the AAD input and InputKey is the Plaintext input for WrapKey256
Handle[511:0] := WrapKey256(InputKey[255:0], KeyMetadata[127:0], IWKey.Integrity Key[127:0], IWKey.Encryption Key[255:0]);
DEST[0] := IWKey.NoBackup;
DEST[4:1] := IWKey.KeySource[3:0];
DEST[31:5] = 0;
XMM0 := Handle[127:0]; // AAD
XMM1 := Handle[255:128]; // Integrity Tag
XMM2 := Handle[383:256]; // CipherText[127:0]
XMM3 := Handle[511:384]; // CipherText[255:128]
XMM4 := 0; // Reserved for future usage
XMM5 := 0; // Reserved for future usage
XMM6 := 0; // Reserved for future usage
RFLAGS.OF, SF, ZF, AF, PF, CF := 0;
1. Further details on Key Locker and usage of this instruction can be found here:
https://software.intel.com/content/www/us/en/develop/download/intel-key-locker-specification.html.
2. SRC[31:3] are currently reserved for future usages. SRC[2], which indicates a no-decrypt restriction, is reserved if
CPUID.19H:EAX[2] is 0. SRC[1], which indicates a no-encrypt restriction, is reserved if CPUID.19H:EAX[1] is 0. SRC[0], which indicates
a CPL0-only restriction, is reserved if CPUID.19H:EAX[0] is 0.Banderas afectadas
Todas las banderas aritméticas (OF, SF, ZF, AF, PF, CF) se limpian a 0. Aunque se han aclarado para las operaciones actualmente definidas, las prórrogas futuras pueden informar de información en las banderas.
Intel C/C++ compilador intrínseco
ENCODEKEY256 unsigned int _mm_encodekey256_u32(unsigned int htype, __m128i key_lo, __m128i key_hi, void* h);Excepciones
Modo real
#GP | Si el bit reservado se establece en el valor de registro fuente. |
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:ECX.KEY_LOCKER[23] = 0. Si CR4.KL = 0. Si CPUID.19H:EBX.AESKLE[0] = 0. Si CR0.EM = 1. Si CR4.OSFXSR = 0. |
#NM | Si CR0.TS = 1. |
Modo protegido
#GP | Si el bit reservado se establece en el valor de registro fuente. |
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:ECX.KEY_LOCKER[23] = 0. Si CR4.KL = 0. Si CPUID.19H:EBX.AESKLE[0] = 0. Si CR0.EM = 1. Si CR4.OSFXSR = 0. |
#NM | Si CR0.TS = 1. |
Modo virtual-8086
#GP | Si el bit reservado se establece en el valor de registro fuente. |
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:ECX.KEY_LOCKER[23] = 0. Si CR4.KL = 0. Si CPUID.19H:EBX.AESKLE[0] = 0. Si CR0.EM = 1. Si CR4.OSFXSR = 0. |
#NM | Si CR0.TS = 1. |
Modo de compatibilidad
#GP | Si el bit reservado se establece en el valor de registro fuente. |
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:ECX.KEY_LOCKER[23] = 0. Si CR4.KL = 0. Si CPUID.19H:EBX.AESKLE[0] = 0. Si CR0.EM = 1. Si CR4.OSFXSR = 0. |
#NM | Si CR0.TS = 1. |
Modo de 64 bits
#GP | Si el bit reservado se establece en el valor de registro fuente. |
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:ECX.KEY_LOCKER[23] = 0. Si CR4.KL = 0. Si CPUID.19H:EBX.AESKLE[0] = 0. Si CR0.EM = 1. Si CR4.OSFXSR = 0. |
#NM | Si CR0.TS = 1. |