Variables used by Shim and Mokmanager Request variables: MokPW: Set by MokUtil when setting a password. A SHA-256 hash of the UCS-2 representation of the password. The user will be asked to re-enter the password to confirm. If the hash of the entered password matches the contents of MokPW, the user will be prompted to copy MokPW into MokPWState. BS,RT,NV MokSB: Set by MokUtil when requesting a change in state of signature validation. A packed structure as follows: typedef struct { UINT32 MokSBState; UINT32 PWLen; CHAR16 Password[PASSWORD_MAX]; } __attribute__ ((packed)) MokSBvar; If MokSBState is 0, the user will be prompted to disable signature validation. Otherwise, the user will be prompted to enable it. PWLen is the length of the password, in characters. Password is a UCS-2 representation of the password. The user will be prompted to enter three randomly chosen characters from the password. If successful, they will then be prompted to change the signature validation according to MokSBState. BS,RT,NV MokDB: Set by MokUtil when requesting a change in state of validation using db hashes and certs. A packed structure as follows: typedef struct { UINT32 MokDBState; UINT32 PWLen; CHAR16 Password[PASSWORD_MAX]; } __attribute__ ((packed)) MokDBvar; If MokDBState is 0, the user will be prompted to disable usage of db for validation. Otherwise, the user will be prompted to allow it. PWLen is the length of the password, in characters. Password is a UCS-2 representation of the password. The user will be prompted to enter three randomly chosen characters from the password. If successful, they will then be prompted to change the signature validation according to MokDBState. BS,RT,NV MokNew: Set by MokUtil when requesting the addition or removal of keys from MokList. Is an EFI_SIGNATURE_LIST as described in the UEFI specification. BS,RT,NV MokAuth: A hash dependent upon the contents of MokNew and the sealing password. The user's password in UCS-2 form should be appended to the contents of MokNew and a SHA-256 hash generated and stored in MokAuth. The hash will be regenerated by MokManager after the user is requested to enter their password to confirm enrolment of the keys. If the hash matches MokAuth, the user will be prompted to enrol the keys. BS,RT,NV ShimRetainProtocol: UINT8, read by Shim before uninstalling protocol. If set to non-zero, Shim will keep the protocol in place. It can be used by second stages to ensure the protocol is still available for later stages, and can thus be used to verify additional PE files. BS,RT. State variables: MokList: A list of authorized keys and hashes. An EFI_SIGNATURE_LIST as described in the UEFI specification. BS,NV MokListRT: A copy of MokList made available to the kernel at runtime. BS,RT MokListX: A list of forbidden keys and hashes. An EFI_SIGNATURE_LIST as described in the UEFI specification. BS,NV MokListXRT: A copy of MokListX made available to the kernel at runtime. BS,RT MokSBState: An 8-bit unsigned integer. If 1, shim will switch to insecure mode. BS,NV MokSBStateRT: A copy of MokSBState made available to the kernel at runtime. This allows the OS to query the shim secure mode setting for its own verification purposes. BS,RT MokDBState: An 8-bit unsigned integer. If 1, shim will not use db for verification. BS,NV MokIgnoreDB: A copy of MokDBState made available to the kernel at runtime. This allows the OS to query whether or not to import DB certs for its own verification purposes. BS,RT MokPWStore: A SHA-256 representation of the password set by the user via MokPW. The user will be prompted to enter this password in order to interact with MokManager. BS,NV MokListTrusted: An 8-bit unsigned integer. If 1, it signifies to Linux to trust CA keys in the MokList. BS,NV MokListTrustedRT: A copy of MokListTrusted made available to the kernel at runtime. BS,RT HSIStatus: Status of various security features: heap-is-executable: 0: heap allocations are not executable by default 1: heap allocations are executable stack-is-executable: 0: UEFI stack is not executable 1: UEFI stack is executable ro-sections-are-writable: 0: read-only sections are not writable 1: read-only sections are writable has-memory-attribute-protocol: 0: platform does not provide the EFI Memory Attribute Protocol 1: platform does provide the EFI Memory Attribute Protocol has-dxe-services-table: 0: platform does not provide the DXE Services Table 1: platform does provide the DXE Services Table has-get-memory-space-descriptor: 0: platform's DST does not populate GetMemorySpaceDescriptor 1: platform's DST does populate GetMemorySpaceDescriptor has-set-memory-space-descriptor: 0: platform's DST does not populate SetMemorySpaceDescriptor 1: platform's DST does populate SetMemorySpaceDescriptor shim-has-nx-compat-set: 0: the running shim binary does not have NX_COMPAT bit set 1: the running shim binary does have the NX_COMPAT bit set