Good point.

I think the original design limits the usage to be variable driver. As such, 
the API only gets a "variable root key".

A "platform root key" can derive the "variable root key" and some "other 
features' root key".

The tricky part is to regenerate the key, when the variable is under attack.
In that case, we want to only regenerate the "variable root key", instead of 
"platform root key".
That's why we want to introduce a variablekeylib module.
To make API consistent, maybe we should rename GetVariableRootKey() to 
GetVariableKey(), RegenerateKey() to RegenerateVariableKey(), and 
LockKeyInterface() to LockVariableKeyInterface()


If we really want to create a generic platformkeylib module, then we need add a 
key indicator. Such as:
EFI_STATUS
EFIAPI
GetPlatformKey (
  IN GUID   *KeyIndicator,
  OUT VOID    **PlatformKey,
  IN  OUT UINTN   *PlatformKeySize
  );

Then the variable driver can pass a GUID, and any other feature driver can pass 
anther GUID.

Thank you
Yao Jiewen


From: Bret Barkelew <bret.barke...@microsoft.com>
Sent: Wednesday, March 25, 2020 1:44 AM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.w...@intel.com>
Cc: Yao, Jiewen <jiewen....@intel.com>; Zhang, Chao B <chao.b.zh...@intel.com>; 
Mistry, Nishant C <nishant.c.mis...@intel.com>
Subject: RE: [EXTERNAL] [edk2-devel] [PATCH v4 1/3] SecurityPkg: add RpmcLib 
and VariableKeyLib public headers

Is there a reason this needs to be called "VariableKeyLib" rather than any 
other "KeyLib"? It seems general-purpose as an interface.

- Bret

________________________________
From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> 
<devel@edk2.groups.io<mailto:devel@edk2.groups.io>> on behalf of Wang, Jian J 
via Groups.Io 
<jian.j.wang=intel....@groups.io<mailto:jian.j.wang=intel....@groups.io>>
Sent: Monday, March 23, 2020 11:35:21 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io> 
<devel@edk2.groups.io<mailto:devel@edk2.groups.io>>
Cc: Jiewen Yao <jiewen....@intel.com<mailto:jiewen....@intel.com>>; Chao Zhang 
<chao.b.zh...@intel.com<mailto:chao.b.zh...@intel.com>>; Nishant C Mistry 
<nishant.c.mis...@intel.com<mailto:nishant.c.mis...@intel.com>>
Subject: [EXTERNAL] [edk2-devel] [PATCH v4 1/3] SecurityPkg: add RpmcLib and 
VariableKeyLib public headers

> v4: remove CounterId which should not be exposed

REF: 
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2594&amp;data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305504454&amp;sdata=wCxxsc6cc%2Ffduq88XOZOZv6debpAQMZiIdsFjD0zHXE%3D&amp;reserved=0

RpmcLib.h and VariableKeyLib.h are header files required to access RPMC
device and Key generator from platform. They will be used to ensure the
integrity and confidentiality of NV variables.

Cc: Jiewen Yao <jiewen....@intel.com<mailto:jiewen....@intel.com>>
Cc: Chao Zhang <chao.b.zh...@intel.com<mailto:chao.b.zh...@intel.com>>
Cc: Nishant C Mistry 
<nishant.c.mis...@intel.com<mailto:nishant.c.mis...@intel.com>>
Signed-off-by: Jian J Wang <jian.j.w...@intel.com<mailto:jian.j.w...@intel.com>>
---
 SecurityPkg/Include/Library/RpmcLib.h        | 42 ++++++++++++++
 SecurityPkg/Include/Library/VariableKeyLib.h | 59 ++++++++++++++++++++
 SecurityPkg/SecurityPkg.dec                  |  8 +++
 3 files changed, 109 insertions(+)
 create mode 100644 SecurityPkg/Include/Library/RpmcLib.h
 create mode 100644 SecurityPkg/Include/Library/VariableKeyLib.h

diff --git a/SecurityPkg/Include/Library/RpmcLib.h 
b/SecurityPkg/Include/Library/RpmcLib.h
new file mode 100644
index 0000000000..8e3868516c
--- /dev/null
+++ b/SecurityPkg/Include/Library/RpmcLib.h
@@ -0,0 +1,42 @@
+/** @file

+  Public definitions for the Replay Protected Monotonic Counter (RPMC) Library.

+

+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>

+SPDX-License-Identifier: BSD-2-Clause-Patent

+

+**/

+

+#ifndef _RPMC_LIB_H_

+#define _RPMC_LIB_H_

+

+#include <Uefi/UefiBaseType.h>

+

+/**

+  Requests the monotonic counter from the designated RPMC counter.

+

+  @param[out]   CounterValue            A pointer to a buffer to store the 
RPMC value.

+

+  @retval       EFI_SUCCESS             The operation completed successfully.

+  @retval       EFI_DEVICE_ERROR        A device error occurred while 
attempting to update the counter.

+  @retval       EFI_UNSUPPORTED         The operation is un-supported.

+**/

+EFI_STATUS

+EFIAPI

+RequestMonotonicCounter (

+  OUT UINT32  *CounterValue

+  );

+

+/**

+  Increments the monotonic counter in the SPI flash device by 1.

+

+  @retval       EFI_SUCCESS             The operation completed successfully.

+  @retval       EFI_DEVICE_ERROR        A device error occurred while 
attempting to update the counter.

+  @retval       EFI_UNSUPPORTED         The operation is un-supported.

+**/

+EFI_STATUS

+EFIAPI

+IncrementMonotonicCounter (

+  VOID

+  );

+

+#endif
\ No newline at end of file
diff --git a/SecurityPkg/Include/Library/VariableKeyLib.h 
b/SecurityPkg/Include/Library/VariableKeyLib.h
new file mode 100644
index 0000000000..fe642b3d66
--- /dev/null
+++ b/SecurityPkg/Include/Library/VariableKeyLib.h
@@ -0,0 +1,59 @@
+/** @file

+  Public definitions for Variable Key Library.

+

+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>

+SPDX-License-Identifier: BSD-2-Clause-Patent

+

+**/

+

+#ifndef _VARIABLE_KEY_LIB_H_

+#define _VARIABLE_KEY_LIB_H_

+

+#include <Uefi/UefiBaseType.h>

+

+/**

+  Retrieves the variable root key.

+

+  @param[out]     VariableRootKey         A pointer to pointer for the 
variable root key buffer.

+  @param[in,out]  VariableRootKeySize     The size in bytes of the variable 
root key.

+

+  @retval       EFI_SUCCESS             The variable root key was returned.

+  @retval       EFI_DEVICE_ERROR        An error occurred while attempting to 
get the variable root key.

+  @retval       EFI_ACCESS_DENIED       The function was invoked after locking 
the key interface.

+  @retval       EFI_UNSUPPORTED         The variable root key is not supported 
in the current boot configuration.

+**/

+EFI_STATUS

+EFIAPI

+GetVariableRootKey (

+      OUT VOID    **VariableRootKey,

+  IN  OUT UINTN   *VariableRootKeySize

+  );

+

+/**

+  Regenerates the variable root key.

+

+  @retval       EFI_SUCCESS             The variable root key was regenerated 
successfully.

+  @retval       EFI_DEVICE_ERROR        An error occurred while attempting to 
regenerate the root key.

+  @retval       EFI_ACCESS_DENIED       The function was invoked after locking 
the key interface.

+  @retval       EFI_UNSUPPORTED         Key regeneration is not supported in 
the current boot configuration.

+**/

+EFI_STATUS

+EFIAPI

+RegenerateKey (

+  VOID

+  );

+

+/**

+  Locks the regenerate key interface.

+

+  @retval       EFI_SUCCESS             The key interface was locked 
successfully.

+  @retval       EFI_UNSUPPORTED         Locking the key interface is not 
supported in the current boot configuration.

+  @retval       Others                  An error occurred while attempting to 
lock the key interface.

+**/

+EFI_STATUS

+EFIAPI

+LockKeyInterface (

+  VOID

+  );

+

+#endif
\ No newline at end of file
diff --git a/SecurityPkg/SecurityPkg.dec b/SecurityPkg/SecurityPkg.dec
index 5335cc5397..2cdfb02cc5 100644
--- a/SecurityPkg/SecurityPkg.dec
+++ b/SecurityPkg/SecurityPkg.dec
@@ -76,6 +76,14 @@
   #

   TcgStorageOpalLib|Include/Library/TcgStorageOpalLib.h



+  ## @libraryclass  Provides interfaces to access RPMC device.

+  #

+  RpmcLib|Include/Library/RpmcLib.h

+

+  ## @libraryclass  Provides interfaces to access variable root key.

+  #

+  VariableKeyLib|Include/Library/VariableKeyLib.h

+

 [Guids]

   ## Security package token space guid.

   # Include/Guid/SecurityPkgTokenSpace.h

--
2.24.0.windows.2


-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56132): 
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F56132&amp;data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305514447&amp;sdata=CoBs9mwnHTAAZiErAEHS3E7dbdRd%2FZefJPKXKPmJwfc%3D&amp;reserved=0
Mute This Topic: 
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fmt%2F72512084%2F1852292&amp;data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305514447&amp;sdata=%2B14%2BIfGmu88GSnKZnpb51EGaW3MqfFCT1%2BWI5Bhdlo0%3D&amp;reserved=0
Group Owner: devel+ow...@edk2.groups.io<mailto:devel+ow...@edk2.groups.io>
Unsubscribe: 
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Funsub&amp;data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305514447&amp;sdata=JLLWLjx0OW0eTjn7xXG5aNHdAfWQqhY4qLXSuNhhcys%3D&amp;reserved=0
  [bret.barke...@microsoft.com]
-=-=-=-=-=-=

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56270): https://edk2.groups.io/g/devel/message/56270
Mute This Topic: https://groups.io/mt/72522973/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to