Home | History | Annotate | Download | only in Guid
      1 /** @file
      2   GUID for UEFI WIN_CERTIFICATE structure.
      3 
      4   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13   @par Revision Reference:
     14   GUID defined in UEFI 2.0 spec.
     15 **/
     16 
     17 #ifndef __EFI_WIN_CERTIFICATE_H__
     18 #define __EFI_WIN_CERTIFICATE_H__
     19 
     20 //
     21 // _WIN_CERTIFICATE.wCertificateType
     22 //
     23 #define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002
     24 #define WIN_CERT_TYPE_EFI_PKCS115      0x0EF0
     25 #define WIN_CERT_TYPE_EFI_GUID         0x0EF1
     26 
     27 ///
     28 /// The WIN_CERTIFICATE structure is part of the PE/COFF specification.
     29 ///
     30 typedef struct {
     31   ///
     32   /// The length of the entire certificate,
     33   /// including the length of the header, in bytes.
     34   ///
     35   UINT32  dwLength;
     36   ///
     37   /// The revision level of the WIN_CERTIFICATE
     38   /// structure. The current revision level is 0x0200.
     39   ///
     40   UINT16  wRevision;
     41   ///
     42   /// The certificate type. See WIN_CERT_TYPE_xxx for the UEFI
     43   /// certificate types. The UEFI specification reserves the range of
     44   /// certificate type values from 0x0EF0 to 0x0EFF.
     45   ///
     46   UINT16  wCertificateType;
     47   ///
     48   /// The following is the actual certificate. The format of
     49   /// the certificate depends on wCertificateType.
     50   ///
     51   /// UINT8 bCertificate[ANYSIZE_ARRAY];
     52   ///
     53 } WIN_CERTIFICATE;
     54 
     55 ///
     56 /// WIN_CERTIFICATE_UEFI_GUID.CertType
     57 ///
     58 #define EFI_CERT_TYPE_RSA2048_SHA256_GUID \
     59   {0xa7717414, 0xc616, 0x4977, {0x94, 0x20, 0x84, 0x47, 0x12, 0xa7, 0x35, 0xbf } }
     60 
     61 ///
     62 /// WIN_CERTIFICATE_UEFI_GUID.CertData
     63 ///
     64 typedef struct {
     65   EFI_GUID  HashType;
     66   UINT8     PublicKey[256];
     67   UINT8     Signature[256];
     68 } EFI_CERT_BLOCK_RSA_2048_SHA256;
     69 
     70 
     71 ///
     72 /// Certificate which encapsulates a GUID-specific digital signature
     73 ///
     74 typedef struct {
     75   ///
     76   /// This is the standard WIN_CERTIFICATE header, where
     77   /// wCertificateType is set to WIN_CERT_TYPE_EFI_GUID.
     78   ///
     79   WIN_CERTIFICATE   Hdr;
     80   ///
     81   /// This is the unique id which determines the
     82   /// format of the CertData. .
     83   ///
     84   EFI_GUID          CertType;
     85   ///
     86   /// The following is the certificate data. The format of
     87   /// the data is determined by the CertType.
     88   /// If CertType is EFI_CERT_TYPE_RSA2048_SHA256_GUID,
     89   /// the CertData will be EFI_CERT_BLOCK_RSA_2048_SHA256 structure.
     90   ///
     91   UINT8            CertData[1];
     92 } WIN_CERTIFICATE_UEFI_GUID;
     93 
     94 
     95 ///
     96 /// Certificate which encapsulates the RSASSA_PKCS1-v1_5 digital signature.
     97 ///
     98 /// The WIN_CERTIFICATE_UEFI_PKCS1_15 structure is derived from
     99 /// WIN_CERTIFICATE and encapsulate the information needed to
    100 /// implement the RSASSA-PKCS1-v1_5 digital signature algorithm as
    101 /// specified in RFC2437.
    102 ///
    103 typedef struct {
    104   ///
    105   /// This is the standard WIN_CERTIFICATE header, where
    106   /// wCertificateType is set to WIN_CERT_TYPE_UEFI_PKCS1_15.
    107   ///
    108   WIN_CERTIFICATE Hdr;
    109   ///
    110   /// This is the hashing algorithm which was performed on the
    111   /// UEFI executable when creating the digital signature.
    112   ///
    113   EFI_GUID        HashAlgorithm;
    114   ///
    115   /// The following is the actual digital signature. The
    116   /// size of the signature is the same size as the key
    117   /// (1024-bit key is 128 bytes) and can be determined by
    118   /// subtracting the length of the other parts of this header
    119   /// from the total length of the certificate as found in
    120   /// Hdr.dwLength.
    121   ///
    122   /// UINT8 Signature[];
    123   ///
    124 } WIN_CERTIFICATE_EFI_PKCS1_15;
    125 
    126 extern EFI_GUID gEfiCertTypeRsa2048Sha256Guid;
    127 
    128 #endif
    129