From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (EUR01-DB5-obe.outbound.protection.outlook.com [40.107.15.75]) by mx.groups.io with SMTP id smtpd.web11.14574.1593521228473861769 for ; Tue, 30 Jun 2020 05:47:09 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@mellanox.com header.s=selector1 header.b=sZqZ4bhS; spf=pass (domain: mellanox.com, ip: 40.107.15.75, mailfrom: lsun@mellanox.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z82qt9AdFnm43RnMf5m8JE9Sye2sNmaPO4V/4Nz29Feb7uXG+y4hFISL8644DHM1r2lVrKQewr58KeS1pIOX6xBrda6wWhstWpYjBKEoqpOArPuzqOplo4KKLu5NXEeszFqVkPiNNylM8m8cxPTkOI7Sm9SHHaJWICBqt3lprv31lwFv+VwevsJoBzZZtPFs4kQi+GRdV0RvxvafbU1lmbsiSzFEA9mXpjWkjucl5uljlLeFRjL//iT1L0X1LOa9pHz4h3fl9Rel9hQets7xW8e6Ju2f4xThXKQeOGNSHp1E+PSGOdBZQUazE4o8rURM+5wP+Q8XzT6Dl9KYAfLpzQ== 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=5oYQUdoUYwqO5Tdi6J0aOzdzkGAW2PvXUTktFdX15Pg=; b=S2MU6Y/HPHLJHWdrCsXimPe/Ps92odTe82BsowxmXK/4GLwkGaKFIJaGyIuzWtw7bvifl7T2jqnNKJ8cWHAIBpc8KPfL8AvI3R4dt8LwCLc39Pm+uWvR/V6eslLNbclgVpsJS8R+NsAUg87paKX5FIj/Q11Ws7PvGaA9wC+n0WDXICe9+JVBWctwUVfQBZk3UWsg3ONX9kxg/u9vIoGRQf1dg4vO8hYWjcIi/9d91rCyD/TmXdXP+3LUhs1tBpwRiM59Y4OMQx3D1Sb+axMRivqsQxe8Ocq3fTG0LgfFDGZ5zyGz1PzHJV+4tb9Jr/vdyNTy+OniA5wiknwnbzj/Dw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5oYQUdoUYwqO5Tdi6J0aOzdzkGAW2PvXUTktFdX15Pg=; b=sZqZ4bhSfrcTih/V0cHPncgejNqhywb0RdW6JYTIRVMxPe07+Q1GXxFwSVGfsoW9x5OoCG4WEl2hUakVe/TR6K37I1Cnd9EeDlr23iQu+QYAQJbexcZAc5FLXzorx9nwJbzL6t5QEueCr+nInvOKwMqwXsBt8P6WKRh/t8POq/A= Received: from DB6PR05MB3223.eurprd05.prod.outlook.com (2603:10a6:6:20::21) by DB7PR05MB5416.eurprd05.prod.outlook.com (2603:10a6:10:59::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.26; Tue, 30 Jun 2020 12:47:06 +0000 Received: from DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::3878:38d1:7487:f23a]) by DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::3878:38d1:7487:f23a%3]) with mapi id 15.20.3131.027; Tue, 30 Jun 2020 12:47:06 +0000 From: "Liming Sun" To: "devel@edk2.groups.io" , "guomin.jiang@intel.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: AQHWRmHfzsoxRpvKo0Kc2JNYV1wdaaju+xgAgAGNuZCAAEu5AIAAVYtA Date: Tue, 30 Jun 2020 12:47:06 +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: authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [173.76.169.242] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: fbae158f-8b3a-44b5-2108-08d81cf3b20b x-ms-traffictypediagnostic: DB7PR05MB5416: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:454; x-forefront-prvs: 0450A714CB x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 6ti9Z3su3ZKGO7yVTxrSXqqBH/78s+loL+gXDHhYO0X8MnGsIAeqWOrs0zSIyV0knp4dgcaHraAHp6rImiZige+c5MbSVnoplvh0hfiWHETxyu6QR08ItzUhGmZO5d3SL0RrbN8Y2m/qFDt4tWtV9hELHUjAjnZOg1SQg2mVdd0KQGPWrEYsHAEpMTHDhlhBinw0N7hqIVK1yjTb9PDt2TM1MLrGneKwtTWp6WKS4vPeFNM4lsYNpQrAhS+FRdx7GxvSfjtY5ZO6575zm4FccFeIdPCuB/xn1VHZYpMu0epWkzzKw9CnuAHrg/6j1wA056f/f1A4gmIVHvLNwo/69RqWSD3LWudw6STxsuJ0NXKwEbwUzwT67gQ9/rXukf1cJV6hXfDvvCyBMJLL1O0uIA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB6PR05MB3223.eurprd05.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(366004)(376002)(39860400002)(396003)(346002)(136003)(71200400001)(83380400001)(478600001)(4326008)(15650500001)(26005)(53546011)(186003)(30864003)(6506007)(45080400002)(9686003)(55016002)(33656002)(5660300002)(86362001)(19627235002)(8676002)(7696005)(52536014)(66556008)(110136005)(64756008)(66476007)(66446008)(316002)(8936002)(2906002)(966005)(76116006)(66946007);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: 1JQWGYswWKo3sASqfMHBwSg9b2IVKo7saaO/OJnqi4K64aTN2IlvKDW41xHxWWhuwt1L1LAOEFAnydmB7in9DYOyqJisj8twXbcYR9Akxt1pJQBMb1K5K6+sg0OyEisiucH3s+mDavTA+ezJB4uWS6LBXgaLczNiunI6Yetf9MKfqydsjzp8WbJ1jzL+GtrjojqgOgKEDsKD467AqLmhgA0O4l1ngFNc+RscRHqedxq0xnmJgckT5VYMyqpr2+DkUhj8blZQBaHIKpYGVFupNyFL9Jr5GVJdOdPhOJWujyK11WYxWsRkw54Q9MhYq/4DdkuUJzRdXXCJLYJub35jUcw67uNL5u80xgumFuJhKqjZtSck7o2XpDx9p0glGhnFwX0jgcxDhtHodxQfZhXij99C9LXEpH24ISqJOZ3q0hsxG4uJtAvKNcquV5AJ3HjTvCeQAVVYgZC5EYLHkJbILI6xFSGZs6Bl7p3028xmYF8owMrxR1KIhk86DHGZqUEZ x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB6PR05MB3223.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbae158f-8b3a-44b5-2108-08d81cf3b20b X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jun 2020 12:47:06.0810 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GzNtDnlo8D4ckbjoE3tEN3/UncDZCkR6vXTiILjyRM7jdtcE8UFBXmRkNWZRe7P3mNl6cZDk1GGgsxZBDher3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR05MB5416 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks Guomin. I still have one question. Let's assume we're the device vendor and we let= customer to enroll their keys. Once the keys are enrolled, the device will= be in secure boot mode. Are you saying that the end user could "have the a= bility to enroll their DB without too many effort" even after the secure bo= ot has been enabled already? Please correct me if I misunderstood it. - Liming > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Guomin Ji= ang via groups.io > Sent: Tuesday, June 30, 2020 3:33 AM > 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 verifica= tion with secure boot keys >=20 > Liming, >=20 > The end user have the ability to enroll their DB without too many effort= . >=20 > And I think some end user also have the ability to get insecure firmware= which not from the device vendor. >=20 > I suggest that tell the device vendor that it is critical that set the P= cdFmpDevicePkcs7CertBufferXdr rather than decrease the security. >=20 > Best Regards > Guomin >=20 > > -----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 > > > > Thanks Guomin for the comments! > > > > Below is the main scenario for the proposed change: > > > > - Device Manufacturer provides the devices with UEFI preinstalled in n= on- > > secure state and no hard-coded keys ( PcdFmpDevicePkcs7CertBufferXdr). > > > > - Customer (not End-User) enrolls their own keys in trusted environmen= t > > before delivering to End User. > > This capsule approach can be used for large deployment without involvi= ng any > > private keys. > > > > Yes, I do agree that once it's delivered to End User it won't be consi= dered > > secure. > > > > Thanks, > > Liming > > > > > -----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= will > > become unsafe. > > > > > > I think the end user is untrusted and we need to make sure only few = person > > 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 = enabled > > 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 dev= ice > > 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->SignatureHeaderSi= ze); > > > > + CertCount =3D (CertList->SignatureListSize - sizeof (EFI_SI= GNATURE_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 configu= red. > > > > + 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 (PcdFmpDevicePkcs7CertBufferX= dr); > > > > PublicKeyDataXdrEnd =3D PublicKeyDataXdr + PcdGetSize > > > > (PcdFmpDevicePkcs7CertBufferXdr); > > > > > > > > - if (PublicKeyDataXdr =3D=3D NULL || (PublicKeyDataXdr =3D=3D > > > > PublicKeyDataXdrEnd)) { > > > > - DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Invalid certificate, skippi= ng 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, ImageSiz= e); > > > > + } else { > > > > + DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Invalid certificate, > > > > + skipping > > > > it.\n", mImageIdName)); > > > > + Status =3D EFI_ABORTED; > > > > + } > > > > } else { > > > > // > > > > // Try each key from PcdFmpDevicePkcs7CertBufferXdr diff --gi= t > > > > 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