]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/UserIdentification/UsbCredentialProviderDxe/UsbCredentialProvider.h
Add security package to repository.
[mirror_edk2.git] / SecurityPkg / UserIdentification / UsbCredentialProviderDxe / UsbCredentialProvider.h
diff --git a/SecurityPkg/UserIdentification/UsbCredentialProviderDxe/UsbCredentialProvider.h b/SecurityPkg/UserIdentification/UsbCredentialProviderDxe/UsbCredentialProvider.h
new file mode 100644 (file)
index 0000000..1d43e9a
--- /dev/null
@@ -0,0 +1,354 @@
+/** @file\r
+  Usb Credential Provider driver header file.\r
+    \r
+Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution.  The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _USB_CREDENTIAL_PROVIDER_H_\r
+#define _USB_CREDENTIAL_PROVIDER_H_\r
+\r
+#include <Uefi.h>\r
+\r
+#include <Guid/GlobalVariable.h>\r
+#include <Guid/MdeModuleHii.h>\r
+#include <Guid/FileInfo.h>\r
+#include <Guid/SecurityPkgTokenSpace.h>\r
+\r
+#include <Protocol/SimpleFileSystem.h>\r
+#include <Protocol/BlockIo.h>\r
+#include <Protocol/UserCredential.h>\r
+#include <Protocol/UserManager.h>\r
+\r
+#include <Library/UefiRuntimeServicesTableLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/DevicePathLib.h>\r
+#include <Library/BaseCryptLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/PrintLib.h>\r
+#include <Library/HiiLib.h>\r
+#include <Library/PcdLib.h>\r
+\r
+extern UINT8      UsbCredentialProviderStrings[];\r
+extern UINT8      UsbCredentialProviderVfrBin[];\r
+\r
+#define USB_TABLE_INC          16\r
+#define HASHED_CREDENTIAL_LEN  20\r
+\r
+#define USB_CREDENTIAL_PROVIDER_GUID \\r
+  { \\r
+    0xd0849ed1, 0xa88c, 0x4ba6, { 0xb1, 0xd6, 0xab, 0x50, 0xe2, 0x80, 0xb7, 0xa9 }\\r
+  }\r
+\r
+//\r
+// Save the enroll user credential Information.\r
+//\r
+typedef struct {\r
+  EFI_USER_INFO_IDENTIFIER  UserId;\r
+  UINT8                     Token[HASHED_CREDENTIAL_LEN];\r
+} USB_INFO;\r
+\r
+//\r
+// USB Credential Table.\r
+//\r
+typedef struct {\r
+  UINTN     Count;\r
+  UINTN     MaxCount;\r
+  USB_INFO  UserInfo[1];\r
+} CREDENTIAL_TABLE;\r
+\r
+//\r
+// The user information on the USB provider.\r
+//\r
+typedef struct {\r
+  UINTN                         Count;\r
+  EFI_USER_INFO                 *Info[1];\r
+} USB_CREDENTIAL_INFO;\r
+\r
+///\r
+/// HII specific Vendor Device Path definition.\r
+///\r
+typedef struct {\r
+  VENDOR_DEVICE_PATH        VendorDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL  End;\r
+} HII_VENDOR_DEVICE_PATH;\r
+\r
+#define USB_PROVIDER_SIGNATURE  SIGNATURE_32 ('U', 'S', 'B', 'P')\r
+\r
+typedef struct {\r
+  UINTN                           Signature;\r
+  EFI_HANDLE                      DriverHandle;\r
+  EFI_HII_HANDLE                  HiiHandle;\r
+} USB_PROVIDER_CALLBACK_INFO;\r
+\r
+/**\r
+  Enroll a user on a credential provider.\r
+\r
+  This function enrolls and deletes a user profile using this credential provider. \r
+  If a user profile is successfully enrolled, it calls the User Manager Protocol \r
+  function Notify() to notify the user manager driver that credential information \r
+  has changed. If an enrolled user does exist, delete the user on the credential \r
+  provider.\r
+\r
+  @param[in] This                Points to this instance of EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[in] User                The user profile to enroll.\r
\r
+  @retval EFI_SUCCESS            User profile was successfully enrolled.\r
+  @retval EFI_ACCESS_DENIED      Current user profile does not permit enrollment on the\r
+                                 user profile handle. Either the user profile cannot enroll\r
+                                 on any user profile or cannot enroll on a user profile \r
+                                 other than the current user profile.\r
+  @retval EFI_UNSUPPORTED        This credential provider does not support enrollment in\r
+                                 the pre-OS.\r
+  @retval EFI_DEVICE_ERROR       The new credential could not be created because of a device\r
+                                 error.\r
+  @retval EFI_INVALID_PARAMETER  User does not refer to a valid user profile handle.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialEnroll (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  IN        EFI_USER_PROFILE_HANDLE             User\r
+  );\r
+\r
+/**\r
+  Returns the user interface information used during user identification.\r
+\r
+  This function returns information about the form used when interacting with the\r
+  user during user identification. The form is the first enabled form in the form-set\r
+  class EFI_HII_USER_CREDENTIAL_FORMSET_GUID installed on the HII handle HiiHandle. If \r
+  the user credential provider does not require a form to identify the user, then this\r
+  function should return EFI_NOT_FOUND.\r
+\r
+  @param[in]  This       Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[out] Hii        On return, holds the HII database handle.\r
+  @param[out] FormSetId  On return, holds the identifier of the form set which contains\r
+                         the form used during user identification.\r
+  @param[out] FormId     On return, holds the identifier of the form used during user \r
+                         identification.\r
+                         \r
+  @retval EFI_SUCCESS            Form returned successfully.\r
+  @retval EFI_NOT_FOUND          Form not returned.\r
+  @retval EFI_INVALID_PARAMETER  Hii is NULL or FormSetId is NULL or FormId is NULL.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialForm (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  OUT       EFI_HII_HANDLE                      *Hii,\r
+  OUT       EFI_GUID                            *FormSetId,\r
+  OUT       EFI_FORM_ID                         *FormId\r
+  );\r
+\r
+/**\r
+  Returns bitmap used to describe the credential provider type.\r
+\r
+  This optional function returns a bitmap which is less than or equal to the number\r
+  of pixels specified by Width and Height. If no such bitmap exists, then EFI_NOT_FOUND\r
+  is returned. \r
+\r
+  @param[in]     This    Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[in, out] Width  On entry, points to the desired bitmap width. If NULL then no \r
+                         bitmap information will be returned. On exit, points to the \r
+                         width of the bitmap returned.\r
+  @param[in, out] Height On entry, points to the desired bitmap height. If NULL then no\r
+                         bitmap information will be returned. On exit, points to the \r
+                         height of the bitmap returned.\r
+  @param[out]    Hii     On return, holds the HII database handle. \r
+  @param[out]    Image   On return, holds the HII image identifier. \r
\r
+  @retval EFI_SUCCESS            Image identifier returned successfully.\r
+  @retval EFI_NOT_FOUND          Image identifier not returned.\r
+  @retval EFI_INVALID_PARAMETER  Hii is NULL or Image is NULL.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialTile (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  IN OUT    UINTN                               *Width,\r
+  IN OUT    UINTN                               *Height,\r
+  OUT       EFI_HII_HANDLE                      *Hii,\r
+  OUT       EFI_IMAGE_ID                        *Image\r
+  );\r
+\r
+/**\r
+  Returns string used to describe the credential provider type.\r
+\r
+  This function returns a string which describes the credential provider. If no\r
+  such string exists, then EFI_NOT_FOUND is returned. \r
+\r
+  @param[in]  This       Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[out] Hii        On return, holds the HII database handle.\r
+  @param[out] String     On return, holds the HII string identifier.\r
\r
+  @retval EFI_SUCCESS            String identifier returned successfully.\r
+  @retval EFI_NOT_FOUND          String identifier not returned.\r
+  @retval EFI_INVALID_PARAMETER  Hii is NULL or String is NULL.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialTitle (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  OUT       EFI_HII_HANDLE                      *Hii,\r
+  OUT       EFI_STRING_ID                       *String\r
+  );\r
+\r
+/**\r
+  Return the user identifier associated with the currently authenticated user.\r
+\r
+  This function returns the user identifier of the user authenticated by this credential\r
+  provider. This function is called after the credential-related information has been \r
+  submitted on a form OR after a call to Default() has returned that this credential is\r
+  ready to log on.\r
+\r
+  @param[in]  This           Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[in]  User           The user profile handle of the user profile currently being \r
+                             considered by the user identity manager. If NULL, then no user\r
+                             profile is currently under consideration.\r
+  @param[out] Identifier     On return, points to the user identifier. \r
\r
+  @retval EFI_SUCCESS        User identifier returned successfully.\r
+  @retval EFI_NOT_READY      No user identifier can be returned.\r
+  @retval EFI_ACCESS_DENIED  The user has been locked out of this user credential.\r
+  @retval EFI_INVALID_PARAMETER  This is NULL, or Identifier is NULL.\r
+  @retval EFI_NOT_FOUND          User is not NULL, and the specified user handle can't be\r
+                                 found in user profile database.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialUser (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  IN        EFI_USER_PROFILE_HANDLE             User,\r
+  OUT       EFI_USER_INFO_IDENTIFIER            *Identifier\r
+  );\r
+\r
+/**\r
+  Indicate that user interface interaction has begun for the specified credential.\r
+\r
+  This function is called when a credential provider is selected by the user. If \r
+  AutoLogon returns FALSE, then the user interface will be constructed by the User\r
+  Identity Manager. \r
+\r
+  @param[in]  This       Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[out] AutoLogon  On return, points to the credential provider's capabilities \r
+                         after the credential provider has been selected by the user. \r
\r
+  @retval EFI_SUCCESS            Credential provider successfully selected.\r
+  @retval EFI_INVALID_PARAMETER  AutoLogon is NULL.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialSelect (\r
+  IN  CONST  EFI_USER_CREDENTIAL_PROTOCOL    *This,\r
+  OUT        EFI_CREDENTIAL_LOGON_FLAGS      *AutoLogon\r
+  );\r
+\r
+/**\r
+  Indicate that user interface interaction has ended for the specified credential.\r
+\r
+  This function is called when a credential provider is deselected by the user.\r
+\r
+  @param[in] This        Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
\r
+  @retval EFI_SUCCESS    Credential provider successfully deselected.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialDeselect (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This\r
+  );\r
+\r
+/**\r
+  Return the default logon behavior for this user credential.\r
+\r
+  This function reports the default login behavior regarding this credential provider.  \r
+\r
+  @param[in]  This       Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[out] AutoLogon  On return, holds whether the credential provider should be used\r
+                         by default to automatically log on the user.  \r
\r
+  @retval EFI_SUCCESS            Default information successfully returned.\r
+  @retval EFI_INVALID_PARAMETER  AutoLogon is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialDefault (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  OUT       EFI_CREDENTIAL_LOGON_FLAGS          *AutoLogon\r
+  );\r
+\r
+/**\r
+  Return information attached to the credential provider.\r
+\r
+  This function returns user information. \r
+\r
+  @param[in]      This          Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[in]      UserInfo      Handle of the user information data record. \r
+  @param[out]     Info          On entry, points to a buffer of at least *InfoSize bytes. On\r
+                                exit, holds the user information. If the buffer is too small\r
+                                to hold the information, then EFI_BUFFER_TOO_SMALL is returned\r
+                                and InfoSize is updated to contain the number of bytes actually\r
+                                required.\r
+  @param[in, out] InfoSize      On entry, points to the size of Info. On return, points to the \r
+                                size of the user information. \r
\r
+  @retval EFI_SUCCESS           Information returned successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL  The size specified by InfoSize is too small to hold all of the\r
+                                user information. The size required is returned in *InfoSize.\r
+  @retval EFI_INVALID_PARAMETER Info is NULL or InfoSize is NULL.\r
+  @retval EFI_NOT_FOUND         The specified UserInfo does not refer to a valid user info handle. \r
+                                \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialGetInfo (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  IN        EFI_USER_INFO_HANDLE                UserInfo,\r
+  OUT       EFI_USER_INFO                       *Info,\r
+  IN OUT    UINTN                               *InfoSize\r
+  );\r
+\r
+/**\r
+  Enumerate all of the user informations on the credential provider.\r
+\r
+  This function returns the next user information record. To retrieve the first user\r
+  information record handle, point UserInfo at a NULL. Each subsequent call will retrieve\r
+  another user information record handle until there are no more, at which point UserInfo\r
+  will point to NULL. \r
+\r
+  @param[in]      This     Points to this instance of the EFI_USER_CREDENTIAL_PROTOCOL.\r
+  @param[in, out] UserInfo On entry, points to the previous user information handle or NULL\r
+                           to start enumeration. On exit, points to the next user information\r
+                           handle or NULL if there is no more user information.\r
\r
+  @retval EFI_SUCCESS            User information returned.\r
+  @retval EFI_NOT_FOUND          No more user information found.\r
+  @retval EFI_INVALID_PARAMETER  UserInfo is NULL.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CredentialGetNextInfo (\r
+  IN CONST  EFI_USER_CREDENTIAL_PROTOCOL        *This,\r
+  IN OUT    EFI_USER_INFO_HANDLE                *UserInfo\r
+  );\r
+\r
+#endif\r