--- /dev/null
+/** @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