## @file # Module that encodes and decodes a EFI_FIRMWARE_IMAGE_AUTHENTICATION with # certificate data and payload data. # # Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ''' FmpAuthHeader ''' import struct import uuid class FmpAuthHeaderClass (object): # /// # /// Image Attribute -Authentication Required # /// # typedef struct { # /// # /// It is included in the signature of AuthInfo. It is used to ensure freshness/no replay. # /// It is incremented during each firmware image operation. # /// # UINT64 MonotonicCount; # /// # /// Provides the authorization for the firmware image operations. It is a signature across # /// the image data and the Monotonic Count value. Caller uses the private key that is # /// associated with a public key that has been provisioned via the key exchange. # /// Because this is defined as a signature, WIN_CERTIFICATE_UEFI_GUID.CertType must # /// be EFI_CERT_TYPE_PKCS7_GUID. # /// # WIN_CERTIFICATE_UEFI_GUID AuthInfo; # } EFI_FIRMWARE_IMAGE_AUTHENTICATION; # # /// # /// Certificate which encapsulates a GUID-specific digital signature # /// # typedef struct { # /// # /// This is the standard WIN_CERTIFICATE header, where # /// wCertificateType is set to WIN_CERT_TYPE_EFI_GUID. # /// # WIN_CERTIFICATE Hdr; # /// # /// This is the unique id which determines the # /// format of the CertData. . # /// # EFI_GUID CertType; # /// # /// The following is the certificate data. The format of # /// the data is determined by the CertType. # /// If CertType is EFI_CERT_TYPE_RSA2048_SHA256_GUID, # /// the CertData will be EFI_CERT_BLOCK_RSA_2048_SHA256 structure. # /// # UINT8 CertData[1]; # } WIN_CERTIFICATE_UEFI_GUID; # # /// # /// The WIN_CERTIFICATE structure is part of the PE/COFF specification. # /// # typedef struct { # /// # /// The length of the entire certificate, # /// including the length of the header, in bytes. # /// # UINT32 dwLength; # /// # /// The revision level of the WIN_CERTIFICATE # /// structure. The current revision level is 0x0200. # /// # UINT16 wRevision; # /// # /// The certificate type. See WIN_CERT_TYPE_xxx for the UEFI # /// certificate types. The UEFI specification reserves the range of # /// certificate type values from 0x0EF0 to 0x0EFF. # /// # UINT16 wCertificateType; # /// # /// The following is the actual certificate. The format of # /// the certificate depends on wCertificateType. # /// # /// UINT8 bCertificate[ANYSIZE_ARRAY]; # /// # } WIN_CERTIFICATE; # # #define WIN_CERT_TYPE_EFI_GUID 0x0EF1 # # /// # /// This identifies a signature containing a DER-encoded PKCS #7 version 1.5 [RFC2315] # /// SignedData value. # /// # #define EFI_CERT_TYPE_PKCS7_GUID \ # { \ # 0x4aafd29d, 0x68df, 0x49ee, {0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7} \ # } _StructFormat = '