ENCODEKEY128
Código 128-Bit clave con Key Locker
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F3 0F 38 FA 11:rrr:bbb | ENCODEKEY128 r32, r32, <XMM0-2>, <XMM4-6> | A | Valido | Valido | Envuelve un AES clave de 128 bits de XMM0 a una clave descriptor y salida descriptor en XMM0--2. |
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 pideXMM0lectura y escrituraXMM1--2escrituraXMM4--6escritura
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
La instrucción ENCODEKEY1281 envuelve un AES clave de 128 bits del implícito operando XMM0 a una clave descriptor que se almacena en el implícito operandos de destino XMM0-2.
El operando de origen explícito especifica las restricciones descriptor, si las hay.
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
ENCODEKEY128
#GP (0) if a reserved bit2 in SRC[31:0] is set
InputKey[127:0] := XMM0;
KeyMetadata[2:0] = SRC[2:0];
KeyMetadata[23:3] = 0; // Reserved for future usage
KeyMetadata[27:24] = 0; // KeyType is AES-128 (value of 0)
KeyMetadata[127:28] = 0; // Reserved for future usage
// KeyMetadata is the AAD input and InputKey is the Plaintext input for WrapKey128
Handle[383:0] := WrapKey128(InputKey[127: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
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;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.
- Más detalles sobre Key Locker y el uso de esta instrucción se puede encontrar aquí:
https://software.intel.com/content/www/us/en/develop/download/intel-key-locker-specification.html.
- SRC[31:3] están actualmente reservados para usos futuros. SRC[2], que indica una restricción de no cifrado, se reserva si CPUID.19H:EAX[2] es 0. SRC[1], que indica una restricción de no cifrado, se reserva si CPUID.19H:EAX[1] es 0. SRC[0], que indica una restricción sólo CPL0, se reserva si CPUID.19H:EAX[0] es 0.
Intel C/C++ compilador intrínseco
ENCODEKEY128 unsigned int _mm_encodekey128_u32(unsigned int htype, __m128i key, 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. |