/** @file | |
GUID for UEFI WIN_CERTIFICATE structure. | |
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
@par Revision Reference: | |
GUID defined in UEFI 2.0 spec. | |
**/ | |
#ifndef __EFI_WIN_CERTIFICATE_H__ | |
#define __EFI_WIN_CERTIFICATE_H__ | |
// | |
// _WIN_CERTIFICATE.wCertificateType | |
// | |
#define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 | |
#define WIN_CERT_TYPE_EFI_PKCS115 0x0EF0 | |
#define WIN_CERT_TYPE_EFI_GUID 0x0EF1 | |
/// | |
/// 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; | |
/// | |
/// WIN_CERTIFICATE_UEFI_GUID.CertType | |
/// | |
#define EFI_CERT_TYPE_RSA2048_SHA256_GUID \ | |
{0xa7717414, 0xc616, 0x4977, {0x94, 0x20, 0x84, 0x47, 0x12, 0xa7, 0x35, 0xbf } } | |
/// | |
/// WIN_CERTIFICATE_UEFI_GUID.CertData | |
/// | |
typedef struct { | |
EFI_GUID HashType; | |
UINT8 PublicKey[256]; | |
UINT8 Signature[256]; | |
} EFI_CERT_BLOCK_RSA_2048_SHA256; | |
/// | |
/// 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; | |
/// | |
/// Certificate which encapsulates the RSASSA_PKCS1-v1_5 digital signature. | |
/// | |
/// The WIN_CERTIFICATE_UEFI_PKCS1_15 structure is derived from | |
/// WIN_CERTIFICATE and encapsulate the information needed to | |
/// implement the RSASSA-PKCS1-v1_5 digital signature algorithm as | |
/// specified in RFC2437. | |
/// | |
typedef struct { | |
/// | |
/// This is the standard WIN_CERTIFICATE header, where | |
/// wCertificateType is set to WIN_CERT_TYPE_UEFI_PKCS1_15. | |
/// | |
WIN_CERTIFICATE Hdr; | |
/// | |
/// This is the hashing algorithm which was performed on the | |
/// UEFI executable when creating the digital signature. | |
/// | |
EFI_GUID HashAlgorithm; | |
/// | |
/// The following is the actual digital signature. The | |
/// size of the signature is the same size as the key | |
/// (1024-bit key is 128 bytes) and can be determined by | |
/// subtracting the length of the other parts of this header | |
/// from the total length of the certificate as found in | |
/// Hdr.dwLength. | |
/// | |
/// UINT8 Signature[]; | |
/// | |
} WIN_CERTIFICATE_EFI_PKCS1_15; | |
extern EFI_GUID gEfiCertTypeRsa2048Sha256Guid; | |
#endif |