123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /** @file
- Type definitions and object declarations for the EnrollDefaultKeys
- application.
- Copyright (C) 2014-2019, Red Hat, Inc.
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef ENROLL_DEFAULT_KEYS_H_
- #define ENROLL_DEFAULT_KEYS_H_
- #include <Uefi/UefiBaseType.h>
- //
- // Convenience structure types for constructing "signature lists" for
- // authenticated UEFI variables.
- //
- // The most important thing about the variable payload is that it is a list of
- // lists, where the element size of any given *inner* list is constant.
- //
- // Since X509 certificates vary in size, each of our *inner* lists will contain
- // one element only (one X.509 certificate). This is explicitly mentioned in
- // the UEFI specification, in "28.4.1 Signature Database", in a Note.
- //
- // The list structure looks as follows:
- //
- // struct EFI_VARIABLE_AUTHENTICATION_2 { |
- // struct EFI_TIME { |
- // UINT16 Year; |
- // UINT8 Month; |
- // UINT8 Day; |
- // UINT8 Hour; |
- // UINT8 Minute; |
- // UINT8 Second; |
- // UINT8 Pad1; |
- // UINT32 Nanosecond; |
- // INT16 TimeZone; |
- // UINT8 Daylight; |
- // UINT8 Pad2; |
- // } TimeStamp; |
- // |
- // struct WIN_CERTIFICATE_UEFI_GUID { | |
- // struct WIN_CERTIFICATE { | |
- // UINT32 dwLength; ----------------------------------------+ |
- // UINT16 wRevision; | |
- // UINT16 wCertificateType; | |
- // } Hdr; | +- DataSize
- // | |
- // EFI_GUID CertType; | |
- // UINT8 CertData[1] = { <--- "struct hack" | |
- // struct EFI_SIGNATURE_LIST { | | |
- // EFI_GUID SignatureType; | | |
- // UINT32 SignatureListSize; -------------------------+ | |
- // UINT32 SignatureHeaderSize; | | |
- // UINT32 SignatureSize; ---------------------------+ | | |
- // UINT8 SignatureHeader[SignatureHeaderSize]; | | | |
- // v | | |
- // struct EFI_SIGNATURE_DATA { | | | |
- // EFI_GUID SignatureOwner; | | | |
- // UINT8 SignatureData[1] = { <--- "struct hack" | | | |
- // X.509 payload | | | |
- // } | | | |
- // } Signatures[]; | | |
- // } SigLists[]; | |
- // }; | |
- // } AuthInfo; | |
- // }; |
- //
- // Given that the "struct hack" invokes undefined behavior (which is why C99
- // introduced the flexible array member), and because subtracting those pesky
- // sizes of 1 is annoying, and because the format is fully specified in the
- // UEFI specification, we'll introduce two matching convenience structures that
- // are customized for our X.509 purposes.
- //
- #pragma pack (1)
- typedef struct {
- EFI_TIME TimeStamp;
- //
- // dwLength covers data below
- //
- UINT32 dwLength;
- UINT16 wRevision;
- UINT16 wCertificateType;
- EFI_GUID CertType;
- } SINGLE_HEADER;
- typedef struct {
- //
- // SignatureListSize covers data below
- //
- EFI_GUID SignatureType;
- UINT32 SignatureListSize;
- UINT32 SignatureHeaderSize; // constant 0
- UINT32 SignatureSize;
- //
- // SignatureSize covers data below
- //
- EFI_GUID SignatureOwner;
- //
- // X.509 certificate follows
- //
- } REPEATING_HEADER;
- #pragma pack ()
- //
- // A structure that collects the values of UEFI variables related to Secure
- // Boot.
- //
- typedef struct {
- UINT8 SetupMode;
- UINT8 SecureBoot;
- UINT8 SecureBootEnable;
- UINT8 CustomMode;
- UINT8 VendorKeys;
- } SETTINGS;
- //
- // Refer to "AuthData.c" for details on the following objects.
- //
- extern CONST UINT8 mMicrosoftKek[];
- extern CONST UINTN mSizeOfMicrosoftKek;
- extern CONST UINT8 mMicrosoftPca[];
- extern CONST UINTN mSizeOfMicrosoftPca;
- extern CONST UINT8 mMicrosoftUefiCa[];
- extern CONST UINTN mSizeOfMicrosoftUefiCa;
- extern CONST UINT8 mSha256OfDevNull[];
- extern CONST UINTN mSizeOfSha256OfDevNull;
- #endif /* ENROLL_DEFAULT_KEYS_H_ */
|