From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web12.10363.1593502372754289524 for ; Tue, 30 Jun 2020 00:32:53 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=xHUVrLZ4; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: guomin.jiang@intel.com) IronPort-SDR: Q/VFjiVoIvqRpvbs2A4qdYVVL8ih+qthqGhjsVnOCr4E+YlxKedQ+vCp8xKAB66hP+4EedA5Uy UK/4UPiekRhw== X-IronPort-AV: E=McAfee;i="6000,8403,9666"; a="126292991" X-IronPort-AV: E=Sophos;i="5.75,296,1589266800"; d="scan'208";a="126292991" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2020 00:32:52 -0700 IronPort-SDR: 7FCzGI3vUNxxFeXeeiCNjkMxcT8KRs4Z5rrDFO7+eQSsYsgyj94bhGEJtglS5o+tKVhsZQiSom HvVjyl/DdgBw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,296,1589266800"; d="scan'208";a="425110382" Received: from orsmsx107.amr.corp.intel.com ([10.22.240.5]) by orsmga004.jf.intel.com with ESMTP; 30 Jun 2020 00:32:51 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX107.amr.corp.intel.com (10.22.240.5) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 30 Jun 2020 00:32:51 -0700 Received: from NAM02-CY1-obe.outbound.protection.outlook.com (104.47.37.51) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 30 Jun 2020 00:32:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UIdVPloMHAp6j9T0Z4zsaLLJZWsuscyb7wIUMSdzObNdVmO9uhZMYlgJtLFJjPkS1ZdbSNgxrKe9HdynHg+63zOD9aC/bwiLM+A6+C9Co8ZEjmc0snhk38PXruDxrrMcnrVnSKEPFyYBIBgnYB4hFW/lgo9wzkjwL3e08PWb6NHLtf76cKTOG5/I3IdW0KtQjlNYhNFoGWObcWt4JN+o4KvxHROKd+w4mrpA1ZrKNMKyXapZSp1NpzfZgZRKsk9bogINhL61PQ17j3YksniXxtd5+m6yS4sq+/TX4tjSR7iyTf4nhNeh010a3jUsSV/ZLqGAkJGqE7GatOVLp0QR1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NeD1roBVHiSELUWH0SIGmOyO2F/dP1bXRFy5012RAso=; b=j3fBe7A3n8oq42Sj4usdLU+PfAFWWBpA52/yEkPKPNQIuu350CGLGdtrN+UZNfuUlh8w9cH3EKv+6KHvnQuad94r0hY8e69Ibekaccpo1TPQoGYH7FF6S9gjDaqRQuCnA0xBgKxdlus6EcOcd5d5nsPwpFOolkyl86Zi+QQz3RY2OavFdG+4qmdcyTv4WsTliZuX7o0pQIywNzWuLLjI1ZldiidlVTxW5jEEd6tb7kRmt4+1n1zWCVStnrRlEaJhZG3vHzfSyBkzeEhlh/Ezb6JamZrDC3x5b1PhnPc49XCMWLIE1fMVuNjsrLdbKdNZ9RPuw4kvfyIYmI3xlQRD7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NeD1roBVHiSELUWH0SIGmOyO2F/dP1bXRFy5012RAso=; b=xHUVrLZ40vLMhpK2OTP+qOOjIatY5iqGoLdj9hcpqXXSJ/sPMaoW+SHWYIzdHAJg7S3KTZUlqKkmBMbsFMnujEDbui/JY0TKFaVJ71Err6cxY9iOm1E4DTHKxmv5lAm4GT3m7bfQvcAWxx1ddv1FgcYDHOm4ENTUVCvNnaBquc8= Received: from DM6PR11MB2955.namprd11.prod.outlook.com (2603:10b6:5:65::31) by DM6PR11MB2828.namprd11.prod.outlook.com (2603:10b6:5:c6::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.21; Tue, 30 Jun 2020 07:32:48 +0000 Received: from DM6PR11MB2955.namprd11.prod.outlook.com ([fe80::e916:c766:fc41:b51d]) by DM6PR11MB2955.namprd11.prod.outlook.com ([fe80::e916:c766:fc41:b51d%5]) with mapi id 15.20.3131.027; Tue, 30 Jun 2020 07:32:48 +0000 From: "Guomin Jiang" To: "devel@edk2.groups.io" , "lsun@mellanox.com" , "Xu, Wei6" , "Gao, Liming" , "Kinney, Michael D" CC: Sean Brogan Subject: Re: [edk2-devel] [PATCH] FmpDevicePkg: Enhance capsule verification with secure boot keys Thread-Topic: [edk2-devel] [PATCH] FmpDevicePkg: Enhance capsule verification with secure boot keys Thread-Index: AQHWRmLn4qcSWkWl3EKmf7xe2byxn6ju+QaQgAGYoICAAEGHYA== Date: Tue, 30 Jun 2020 07:32:48 +0000 Message-ID: References: <5b42e8e089fb961766c639b733284413ccf03272.1592587621.git.lsun@mellanox.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.2.0.6 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.38] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6d6f47c5-6fa9-495a-a8a5-08d81cc7c9c3 x-ms-traffictypediagnostic: DM6PR11MB2828: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:538; x-forefront-prvs: 0450A714CB x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: MKzM+p33PSI5BqOC8Pi0FXetgZlnwdkRf0wte+4ULuEa9H472+8IkdxBFY1jnpuz0ZITUXrD7+goavkoes3kAICAMokPjPKhS0MKcR/MqbsvCq6V4W6Cc5JrPKZfxlaYByRzsKS22zG80TG1Ze32fSi1iXXhGNkDzlnwoCldMi5Xq0gqzrW62ACIu6b8Gnsup82Hx+89mOMrECcsrKHwQbTudVznBjmRXUdrlARvyq5hcXGj95xA97U0V7KCvoyJrXVEttc6m9ZBJO8j9g/ZcIKeW7562lgurFGtgdAcy6bvVo8AhgcwFTq8l01IK8/ilG4XrBG8WwCT+9ZXCrosOkSC7TB4E9mGtYBcerkCm8KAM4mXt8Y7V7TWInvS3c8s1dQoKWctBpNFg/EtMDnfrg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB2955.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(39860400002)(376002)(366004)(396003)(136003)(346002)(26005)(66556008)(66946007)(19627235002)(966005)(4326008)(64756008)(186003)(86362001)(8936002)(8676002)(66446008)(66476007)(7696005)(76116006)(316002)(110136005)(15650500001)(71200400001)(478600001)(83380400001)(9686003)(30864003)(6636002)(5660300002)(52536014)(53546011)(2906002)(33656002)(55016002)(6506007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: GRHU+yXPQ2zCn+Dg440SNOzN3sOZsI2wcsRStBJ9dMngA56PsaIZUBvMfMkd0brwXW4H7ZVksjEv8+BWsc7QAAW3+AgEJXClHXTQfW2iI7eWLiHsfkYJq74gihNZACUo6uQ9lUII4YIYZAdgjgJbXijW4oMp3W3+OwQAkLPQhCU8cTc6GvXtluDC0S3QTqpP6l7UwiWD0NVho5+KL5zDxSK+rk6HyXv/xyDmJR+PxFcTudPggwlOm52yWV8iW6boRzxllB59d6t8CW1k4BShtWjXS8ZEa5BvBbapoaoJjxDvGQe1TZtxHg/Ndaecb/rycb6RvTZd4nNOOTkddMGT5ML9qzuDi/TucM1q8BomDDza87auRxtLlVTZX/Nh57HULjpzRnTltPjgjc3lJMU5cJuxGiczYdCUNwdqctA6JXxQhD4Uvx12BAjXKfWxFLp/n5peoDvB69NXd5V1r9kexOKreGm8CCeClgHl6QlKC4Y2HZLalTLTjD7XsvKbUX+3 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB2955.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d6f47c5-6fa9-495a-a8a5-08d81cc7c9c3 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jun 2020 07:32:48.0908 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5iHNitFiy03QUKy+ZPJTVdUyUH2T586sUNkztcrPgS6hA0IL0nMgLu8zM7lBOmz/3e+1HjEIS/ufMtLaGtf56g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB2828 Return-Path: guomin.jiang@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Liming, The end user have the ability to enroll their DB without too many effort. And I think some end user also have the ability to get insecure firmware w= hich not from the device vendor. I suggest that tell the device vendor that it is critical that set the Pcd= FmpDevicePkcs7CertBufferXdr rather than decrease the security. Best Regards Guomin > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Liming > Sun > Sent: Tuesday, June 30, 2020 11:33 AM > To: Jiang, Guomin ; devel@edk2.groups.io; Xu, > Wei6 ; Gao, Liming ; Kinney, > Michael D > Cc: Sean Brogan > Subject: Re: [edk2-devel] [PATCH] FmpDevicePkg: Enhance capsule > verification with secure boot keys >=20 > Thanks Guomin for the comments! >=20 > Below is the main scenario for the proposed change: >=20 > - Device Manufacturer provides the devices with UEFI preinstalled in non= - > secure state and no hard-coded keys ( PcdFmpDevicePkcs7CertBufferXdr). >=20 > - Customer (not End-User) enrolls their own keys in trusted environment > before delivering to End User. > This capsule approach can be used for large deployment without involving= any > private keys. >=20 > Yes, I do agree that once it's delivered to End User it won't be conside= red > secure. >=20 > Thanks, > Liming >=20 > > -----Original Message----- > > From: Jiang, Guomin > > Sent: Sunday, June 28, 2020 11:18 PM > > To: devel@edk2.groups.io; Liming Sun ; Xu, Wei6 > > ; Gao, Liming ; Kinney, > > Michael D > > Cc: Sean Brogan > > Subject: RE: [edk2-devel] [PATCH] FmpDevicePkg: Enhance capsule > > verification with secure boot keys > > > > I think it have some vulnerability, the case as below. > > > > 1. Untrusted End User enroll the new DB key -> sign the untrusted > > device firmware -> flash the untrusted device firmware -> the system w= ill > become unsafe. > > > > I think the end user is untrusted and we need to make sure only few pe= rson > can have the privilege. > > > > Best Regards > > Guomin > > > > > -----Original Message----- > > > From: devel@edk2.groups.io On Behalf Of > > > Liming Sun > > > Sent: Saturday, June 20, 2020 1:48 AM > > > To: Xu, Wei6 ; Gao, Liming > > > ; Kinney, Michael D > > > > > > Cc: Liming Sun ; devel@edk2.groups.io; Sean > > > Brogan > > > Subject: [edk2-devel] [PATCH] FmpDevicePkg: Enhance capsule > > > verification with secure boot keys > > > > > > This commit enhances the FmpDevicePkg package to optionally verify > > > capsule with the secure boot keys when > > > PcdFmpDevicePkcs7CertBufferXdr is not set and the new PCD variable > > > PcdFmpDeviceAllowSecureBootKeys is configured. Below is the check > logic: > > > - Pass if verified with PK key, or PK key not set yet; > > > - Deny if verified with the DBX keys; > > > - Verified it against the DB keys; > > > > > > One purpose for this change is to auto-deploy the UEFI secure boot > > > keys with UEFI capsule. Initially it's done in trusted environment. > > > Once secure boot is enabled, the same keys will be used to verify > > > the signed capsules as well for further updates. > > > > > > Signed-off-by: Liming Sun > > > --- > > > FmpDevicePkg/FmpDevicePkg.dec | 6 +++ > > > FmpDevicePkg/FmpDxe/FmpDxe.c | 109 > > > ++++++++++++++++++++++++++++++++++++-- > > > FmpDevicePkg/FmpDxe/FmpDxe.h | 1 + > > > FmpDevicePkg/FmpDxe/FmpDxe.inf | 3 ++ > > > FmpDevicePkg/FmpDxe/FmpDxeLib.inf | 1 + > > > 5 files changed, 117 insertions(+), 3 deletions(-) > > > > > > diff --git a/FmpDevicePkg/FmpDevicePkg.dec > > > b/FmpDevicePkg/FmpDevicePkg.dec index cab63f5..3aeb89c 100644 > > > --- a/FmpDevicePkg/FmpDevicePkg.dec > > > +++ b/FmpDevicePkg/FmpDevicePkg.dec > > > @@ -126,6 +126,12 @@ > > > # @Prompt Firmware Device Image Type ID > > > > > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{0}|VOID > > > *|0x40000010 > > > > > > + ## This option is used to verify the capsule using secure boot > > > + keys if the # PcdFmpDevicePkcs7CertBufferXdr is not configured. > > > + In such case, the check # will pass if secure boot hasn't been en= abled > yet. > > > + # @A flag to tell whether to use secure boot keys when > > > PcdFmpDevicePkcs7CertBufferXdr is not set. > > > + > > > + > > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceAllowSecureBootKeys|0x0| > > > UINT8| > > > + 0x40000012 > > > + > > > [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, > PcdsDynamicEx] > > > ## One or more PKCS7 certificates used to verify a firmware devic= e > capsule > > > # update image. Encoded using the Variable-Length Opaque Data > > > format of RFC diff --git a/FmpDevicePkg/FmpDxe/FmpDxe.c > > > b/FmpDevicePkg/FmpDxe/FmpDxe.c index 5884177..6f82aee 100644 > > > --- a/FmpDevicePkg/FmpDxe/FmpDxe.c > > > +++ b/FmpDevicePkg/FmpDxe/FmpDxe.c > > > @@ -682,6 +682,102 @@ GetAllHeaderSize ( > > > return CalculatedSize; > > > } > > > > > > +EFI_STATUS > > > +CheckTheImageWithSecureBootVariable ( > > > + IN CONST CHAR16 *Name, > > > + IN CONST EFI_GUID *Guid, > > > + IN CONST VOID *Image, > > > + IN UINTN ImageSize > > > + ) > > > +{ > > > + EFI_STATUS Status; > > > + VOID *Data; > > > + UINTN Length; > > > + EFI_SIGNATURE_LIST *CertList; > > > + EFI_SIGNATURE_DATA *CertData; > > > + UINTN CertCount; > > > + UINTN Index; > > > + > > > + Status =3D GetVariable2 (Name, Guid, &Data, &Length); if > > > + (EFI_ERROR > > > + (Status)) { > > > + return EFI_NOT_FOUND; > > > + } > > > + > > > + CertList =3D (EFI_SIGNATURE_LIST *) Data; while ((Length > 0) && > > > + (Length >=3D CertList->SignatureListSize)) { > > > + if (CompareGuid (&CertList->SignatureType, &gEfiCertX509Guid)) = { > > > + CertData =3D (EFI_SIGNATURE_DATA *) ((UINT8 *) CertList + > > > + sizeof (EFI_SIGNATURE_LIST) + CertList->SignatureHeaderSize= ); > > > + CertCount =3D (CertList->SignatureListSize - sizeof (EFI_SIGN= ATURE_LIST) > - > > > + CertList->SignatureHeaderSize) / CertList->SignatureSize; > > > + > > > + for (Index =3D 0; Index < CertCount; Index++) { > > > + Status =3D AuthenticateFmpImage ( > > > + (EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image, > > > + ImageSize, > > > + CertData->SignatureData, > > > + CertList->SignatureSize - sizeof (EFI_GUID) > > > + ); > > > + if (!EFI_ERROR (Status)) > > > + goto Done; > > > + > > > + CertData =3D (EFI_SIGNATURE_DATA *) ((UINT8 *) CertData + > > > + CertList- > > > >SignatureSize); > > > + } > > > + } > > > + > > > + Length -=3D CertList->SignatureListSize; > > > + CertList =3D (EFI_SIGNATURE_LIST *) ((UINT8 *) CertList + > > > + CertList->SignatureListSize); } > > > + > > > +Done: > > > + FreePool (Data); > > > + return Status; > > > +} > > > + > > > +EFI_STATUS > > > +CheckTheImageWithSecureBootKeys ( > > > + IN CONST VOID *Image, > > > + IN UINTN ImageSize > > > + ) > > > +{ > > > + EFI_STATUS Status; > > > + > > > + // PK check. > > > + Status =3D CheckTheImageWithSecureBootVariable( > > > + EFI_PLATFORM_KEY_NAME, > > > + &gEfiGlobalVariableGuid, > > > + Image, > > > + ImageSize > > > + ); > > > + if (!EFI_ERROR (Status) || Status =3D=3D EFI_NOT_FOUND) { > > > + // Return SUCCESS if verified by PK key or PK key not configure= d. > > > + DEBUG ((DEBUG_INFO, "FmpDxe: Verified capsule with PK key.\n"))= ; > > > + return EFI_SUCCESS; > > > + } > > > + > > > + // DBX check. > > > + Status =3D CheckTheImageWithSecureBootVariable( > > > + EFI_IMAGE_SECURITY_DATABASE1, > > > + &gEfiImageSecurityDatabaseGuid, > > > + Image, > > > + ImageSize > > > + ); > > > + if (!EFI_ERROR (Status)) { > > > + DEBUG ((DEBUG_INFO, "FmpDxe: Reject capsule with DBX key.\n")); > > > + return EFI_SECURITY_VIOLATION; > > > + } > > > + > > > + // DB check. > > > + DEBUG ((DEBUG_INFO, "FmpDxe: Verify capsule with DB key.\n")); > > > + Status =3D CheckTheImageWithSecureBootVariable( > > > + EFI_IMAGE_SECURITY_DATABASE, > > > + &gEfiImageSecurityDatabaseGuid, > > > + Image, > > > + ImageSize > > > + ); > > > + return Status; > > > +} > > > + > > > /** > > > Checks if the firmware image is valid for the device. > > > > > > @@ -728,6 +824,7 @@ CheckTheImage ( > > > UINT8 *PublicKeyDataXdrEnd; > > > EFI_FIRMWARE_IMAGE_DEP *Dependencies; > > > UINT32 DependenciesSize; > > > + UINT8 AllowSecureBootKeys; > > > > > > Status =3D EFI_SUCCESS; > > > RawSize =3D 0; > > > @@ -782,9 +879,15 @@ CheckTheImage ( > > > PublicKeyDataXdr =3D PcdGetPtr (PcdFmpDevicePkcs7CertBufferXdr= ); > > > PublicKeyDataXdrEnd =3D PublicKeyDataXdr + PcdGetSize > > > (PcdFmpDevicePkcs7CertBufferXdr); > > > > > > - if (PublicKeyDataXdr =3D=3D NULL || (PublicKeyDataXdr =3D=3D > > > PublicKeyDataXdrEnd)) { > > > - DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Invalid certificate, skipping= it.\n", > > > mImageIdName)); > > > - Status =3D EFI_ABORTED; > > > + if (PublicKeyDataXdr =3D=3D NULL || (PublicKeyDataXdrEnd - > > > + PublicKeyDataXdr > > > < sizeof (UINT32))) { > > > + AllowSecureBootKeys =3D PcdGet8 > (PcdFmpDeviceAllowSecureBootKeys); > > > + if (AllowSecureBootKeys) { > > > + DEBUG ((DEBUG_INFO, "FmpDxe: Use secure boot certs.\n")); > > > + Status =3D CheckTheImageWithSecureBootKeys (Image, ImageSize)= ; > > > + } else { > > > + DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Invalid certificate, > > > + skipping > > > it.\n", mImageIdName)); > > > + Status =3D EFI_ABORTED; > > > + } > > > } else { > > > // > > > // Try each key from PcdFmpDevicePkcs7CertBufferXdr diff --git > > > a/FmpDevicePkg/FmpDxe/FmpDxe.h b/FmpDevicePkg/FmpDxe/FmpDxe.h > index > > > 30754de..72a6ce6 100644 > > > --- a/FmpDevicePkg/FmpDxe/FmpDxe.h > > > +++ b/FmpDevicePkg/FmpDxe/FmpDxe.h > > > @@ -34,6 +34,7 @@ > > > #include #include > > > > > > #include > > > +#include > > > #include #include > > > > > > diff --git a/FmpDevicePkg/FmpDxe/FmpDxe.inf > > > b/FmpDevicePkg/FmpDxe/FmpDxe.inf index eeb904a..60b02d4 100644 > > > --- a/FmpDevicePkg/FmpDxe/FmpDxe.inf > > > +++ b/FmpDevicePkg/FmpDxe/FmpDxe.inf > > > @@ -58,6 +58,8 @@ > > > > > > [Guids] > > > gEfiEndOfDxeEventGroupGuid > > > + gEfiCertX509Guid > > > + gEfiImageSecurityDatabaseGuid > > > > > > [Protocols] > > > gEdkiiVariableLockProtocolGuid ## CONSUMES > > > @@ -74,6 +76,7 @@ > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr > > > ## CONSUMES > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest > > > ## CONSUMES > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid > > > ## CONSUMES > > > + gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceAllowSecureBootKeys > > > ## CONSUMES > > > gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed = ## > > > SOMETIMES_PRODUCES > > > > > > [Depex] > > > diff --git a/FmpDevicePkg/FmpDxe/FmpDxeLib.inf > > > b/FmpDevicePkg/FmpDxe/FmpDxeLib.inf > > > index 9a93b5e..1308cae 100644 > > > --- a/FmpDevicePkg/FmpDxe/FmpDxeLib.inf > > > +++ b/FmpDevicePkg/FmpDxe/FmpDxeLib.inf > > > @@ -74,6 +74,7 @@ > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr > > > ## CONSUMES > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest > > > ## CONSUMES > > > gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid > > > ## CONSUMES > > > + gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceAllowSecureBootKeys > > > ## CONSUMES > > > gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed = ## > > > SOMETIMES_PRODUCES > > > > > > [Depex] > > > -- > > > 1.8.3.1 > > > > > > > > > >=20 >=20 >=20