# Function _mm_loadiwkey

Source

    pub unsafe fn _mm_loadiwkey(
        control: u32,
        integrity_key: __m128i,
        key_lo: __m128i,
        key_hi: __m128i,
    )

🔬This is a nightly-only experimental API. (`keylocker_x86` #134813)
Available on (x86 or x86-64) and target feature `kl` and x86 only.
Expand description

Load internal wrapping key (IWKey). The 32-bit unsigned integer `control` specifies IWKey’s KeySource and whether backing up the key is permitted. IWKey’s 256-bit encryption key is loaded from `key_lo` and `key_hi`.

- `control[0]`: NoBackup bit. If set, the IWKey cannot be backed up.
- `control[1:4]`: KeySource bits. These bits specify the encoding method of the IWKey. The only allowed values are `0` (AES GCM SIV wrapping algorithm with the specified key) and `1` (AES GCM SIV wrapping algorithm with random keys enforced by hardware). After calling `_mm_loadiwkey` with KeySource set to `1`, software must check `ZF` to ensure that the key was loaded successfully. Using any other value may result in a General Protection Exception.
- `control[5:31]`: Reserved for future use, must be set to `0`.

Note that setting the NoBackup bit and using the KeySource value `1` requires hardware support. These permissions can be found by calling `__cpuid(0x19)` and checking the `ECX[0:1]` bits. Failing to follow these restrictions may result in a General Protection Exception.

Intel’s documentation