2016-03-29 08:42:13 +02:00
|
|
|
/** @file
|
|
|
|
Public API for Opal Core library.
|
|
|
|
|
|
|
|
Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
|
|
|
|
This program and the accompanying materials
|
|
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef _OPAL_CORE_H_
|
|
|
|
#define _OPAL_CORE_H_
|
|
|
|
|
|
|
|
#include <IndustryStandard/TcgStorageOpal.h>
|
|
|
|
|
|
|
|
#include <Library/TcgStorageCoreLib.h>
|
|
|
|
#include <Protocol/StorageSecurityCommand.h>
|
|
|
|
|
|
|
|
#pragma pack(1)
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
//
|
|
|
|
// Opal SSC 1 support (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 OpalSsc1 : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Opal SSC 2support (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 OpalSsc2 : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Opal SSC Lite support (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 OpalSscLite : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Pyrite SSC support (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 PyriteSsc : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Security protocol 1 support (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 Sp1 : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Security protocol 2 support (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 Sp2 : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Security protocol IEEE1667 support (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 SpIeee1667 : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Media encryption supported (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 MediaEncryption : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Initial C_PIN_SID PIN Indicator
|
|
|
|
// 0 - The initial C_PIN_SID PIN value is NOT equal to the C_PIN_MSID PIN value
|
|
|
|
// 1 - The initial C_PIN_SID PIN value is equal to the C_PIN_MSID PIN value
|
|
|
|
//
|
|
|
|
UINT32 InitCpinIndicator : 1;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Behavior of C_PIN_SID PIN upon TPer Revert
|
|
|
|
// 0 - The initial C_PIN_SID PIN value is NOT equal to the C_PIN_MSID PIN value
|
|
|
|
// 1 - The initial C_PIN_SID PIN value is equal to the C_PIN_MSID PIN value
|
|
|
|
//
|
|
|
|
UINT32 CpinUponRevert : 1;
|
2016-04-22 04:54:05 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
// Media encryption supported (0 - not supported, 1 - supported)
|
|
|
|
//
|
|
|
|
UINT32 BlockSid : 1;
|
|
|
|
|
2016-03-29 08:42:13 +02:00
|
|
|
} OPAL_DISK_SUPPORT_ATTRIBUTE;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Opal device ownership type
|
|
|
|
// The type indicates who was the determined owner of the device.
|
|
|
|
//
|
|
|
|
typedef enum {
|
|
|
|
//
|
|
|
|
// Represents the device ownership is unknown because starting a session as the SID authority with the ADMIN SP
|
|
|
|
//was unsuccessful with the provided PIN
|
|
|
|
//
|
|
|
|
OpalOwnershipUnknown,
|
|
|
|
|
|
|
|
//
|
|
|
|
// Represents that the ADMIN SP SID authority contains the same PIN as the MSID PIN
|
|
|
|
//
|
|
|
|
OpalOwnershipNobody,
|
|
|
|
} OPAL_OWNER_SHIP;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Structure that is used to represent an Opal session.
|
|
|
|
// The structure must be initialized by calling OpalStartSession before being used as a parameter
|
|
|
|
// for any other Opal function.
|
|
|
|
// This structure should NOT be directly modified by the client of this library.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
typedef struct {
|
|
|
|
UINT32 HostSessionId;
|
|
|
|
UINT32 TperSessionId;
|
|
|
|
UINT16 ComIdExtension;
|
|
|
|
|
|
|
|
UINT16 OpalBaseComId;
|
|
|
|
|
|
|
|
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *Sscp;
|
|
|
|
UINT32 MediaId;
|
|
|
|
} OPAL_SESSION;
|
|
|
|
#pragma pack()
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function fills in the provided Buffer with the supported protocol list
|
|
|
|
of the device specified.
|
|
|
|
|
|
|
|
@param[in] Session OPAL_SESSION data.
|
|
|
|
@param[in] BufferSize Size of Buffer provided (in bytes)
|
|
|
|
@param[in] BuffAddress Buffer address to fill with security protocol list
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalRetrieveSupportedProtocolList(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
UINTN BufferSize,
|
|
|
|
VOID *BuffAddress
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function fills in the provided Buffer with the level 0 discovery Header
|
|
|
|
of the device specified.
|
|
|
|
|
|
|
|
@param[in] Session OPAL_SESSION data.
|
|
|
|
@param[in] BufferSize Size of Buffer provided (in bytes)
|
|
|
|
@param[in] BuffAddress Buffer address to fill with Level 0 Discovery response
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalRetrieveLevel0DiscoveryHeader(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
UINTN BufferSize,
|
|
|
|
VOID *BuffAddress
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Starts a session with a security provider (SP).
|
|
|
|
|
|
|
|
If a session is started successfully, the caller must end the session with OpalEndSession when finished
|
|
|
|
performing Opal actions.
|
|
|
|
|
|
|
|
@param[in/out] Session OPAL_SESSION to initialize.
|
|
|
|
@param[in] SpId Security provider ID to start the session with.
|
|
|
|
@param[in] Write Whether the session should be read-only (FALSE) or read/write (TRUE).
|
|
|
|
@param[in] HostChallengeLength Length of the host challenge. Length should be 0 if hostChallenge is NULL
|
|
|
|
@param[in] HostChallenge Host challenge for Host Signing Authority. If NULL, then no Host Challenge will be sent.
|
|
|
|
@param[in] HostSigningAuthority Host Signing Authority used for start session. If NULL, then no Host Signing Authority will be sent.
|
|
|
|
@param[in/out] MethodStatus Status of the StartSession method; only valid if TcgResultSuccess is returned.
|
|
|
|
|
|
|
|
@return TcgResultSuccess indicates that the function completed without any internal errors.
|
|
|
|
The caller must inspect the MethodStatus field to determine whether the method completed successfully.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalStartSession(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
TCG_UID SpId,
|
|
|
|
BOOLEAN Write,
|
|
|
|
UINT32 HostChallengeLength,
|
|
|
|
const VOID *HostChallenge,
|
|
|
|
TCG_UID HostSigningAuthority,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Close a session opened with OpalStartSession.
|
|
|
|
|
|
|
|
@param[in/out] Session OPAL_SESSION to end.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalEndSession(
|
|
|
|
OPAL_SESSION *Session
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
Reverts device using Admin SP Revert method.
|
|
|
|
|
|
|
|
@param[in] AdminSpSession OPAL_SESSION with OPAL_UID_ADMIN_SP as OPAL_ADMIN_SP_PSID_AUTHORITY to perform PSID revert.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalPsidRevert(
|
|
|
|
OPAL_SESSION *AdminSpSession
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function retrieves the MSID from the device specified
|
|
|
|
|
|
|
|
@param[in] AdminSpSession OPAL_SESSION with OPAL_UID_ADMIN_SP as OPAL_ADMIN_SP_PSID_AUTHORITY to perform PSID revert.
|
|
|
|
@param[in] MsidBufferSize Allocated buffer size (in bytes) for MSID allocated by caller
|
|
|
|
@param[in] Msid Variable length byte sequence representing MSID of device
|
|
|
|
@param[in] MsidLength Actual length of MSID retrieved from device
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalGetMsid(
|
|
|
|
OPAL_SESSION *AdminSpSession,
|
|
|
|
UINT32 MsidBufferSize,
|
|
|
|
UINT8 *Msid,
|
|
|
|
UINT32 *MsidLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function activates the Locking SP.
|
|
|
|
Once activated, per Opal spec, the ADMIN SP SID PIN is copied over to the ADMIN1 LOCKING SP PIN.
|
|
|
|
If the Locking SP is already enabled, then TcgResultSuccess is returned and no action occurs.
|
|
|
|
|
|
|
|
@param[in] AdminSpSession OPAL_SESSION with OPAL_UID_ADMIN_SP as OPAL_ADMIN_SP_SID_AUTHORITY to activate Locking SP
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalActivateLockingSp(
|
|
|
|
OPAL_SESSION *AdminSpSession,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function sets the PIN column of the specified cpinRowUid (authority) with the newPin value.
|
|
|
|
|
|
|
|
@param[in/out] Session OPAL_SESSION to set password
|
|
|
|
@param[in] CpinRowUid UID of row (authority) to update PIN column
|
|
|
|
@param[in] NewPin New Pin to set for cpinRowUid specified
|
|
|
|
@param[in] NewPinLength Length in bytes of newPin
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalSetPassword(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
TCG_UID CpinRowUid,
|
|
|
|
const VOID *NewPin,
|
|
|
|
UINT32 NewPinLength,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function retrieves the active key of the global locking range
|
|
|
|
and calls the GenKey method on the active key retrieved.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION with OPAL_UID_LOCKING_SP to generate key
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalGlobalLockingRangeGenKey(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function updates the ReadLocked and WriteLocked columns of the Global Locking Range.
|
2016-11-15 08:39:26 +01:00
|
|
|
This function is required for a user1 authority, since a user1 authority shall only have access to ReadLocked and WriteLocked columns
|
2016-03-29 08:42:13 +02:00
|
|
|
(not ReadLockEnabled and WriteLockEnabled columns).
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION with OPAL_UID_LOCKING_SP to generate key
|
|
|
|
@param[in] ReadLocked Value to set ReadLocked column for Global Locking Range
|
|
|
|
@param[in] WriteLocked Value to set WriteLocked column for Global Locking Range
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUpdateGlobalLockingRange(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
BOOLEAN ReadLocked,
|
|
|
|
BOOLEAN WriteLocked,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function updates the RangeStart, RangeLength, ReadLockedEnabled, WriteLockedEnabled, ReadLocked and WriteLocked columns
|
|
|
|
of the specified Locking Range. This function requires admin authority of a locking SP session.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION with OPAL_UID_LOCKING_SP to generate key
|
|
|
|
@param[in] LockingRangeUid Locking range UID to set values
|
|
|
|
@param[in] RangeStart Value to set RangeStart column for Locking Range
|
|
|
|
@param[in] RangeLength Value to set RangeLength column for Locking Range
|
|
|
|
@param[in] ReadLockEnabled Value to set readLockEnabled column for Locking Range
|
|
|
|
@param[in] WriteLockEnabled Value to set writeLockEnabled column for Locking Range
|
|
|
|
@param[in] ReadLocked Value to set ReadLocked column for Locking Range
|
|
|
|
@param[in] WriteLocked Value to set WriteLocked column for Locking Range
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalSetLockingRange(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
TCG_UID LockingRangeUid,
|
|
|
|
UINT64 RangeStart,
|
|
|
|
UINT64 RangeLength,
|
|
|
|
BOOLEAN ReadLockEnabled,
|
|
|
|
BOOLEAN WriteLockEnabled,
|
|
|
|
BOOLEAN ReadLocked,
|
|
|
|
BOOLEAN WriteLocked,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function sets the Enabled column to TRUE for the authorityUid provided and updates the PIN column for the cpinRowUid provided
|
|
|
|
using the newPin provided. AuthorityUid and cpinRowUid should describe the same authority.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION with OPAL_UID_LOCKING_SP as OPAL_LOCKING_SP_ADMIN1_AUTHORITY to update
|
|
|
|
@param[in] CpinRowUid Row UID of C_PIN table of Locking SP to update PIN
|
|
|
|
@param[in] AuthorityUid UID of Locking SP authority to update Pin column with
|
|
|
|
@param[in] NewPin New Password used to set Pin column
|
|
|
|
@param[in] NewPinLength Length in bytes of new password
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalSetLockingSpAuthorityEnabledAndPin(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
TCG_UID CpinRowUid,
|
|
|
|
TCG_UID AuthorityUid,
|
|
|
|
const VOID *NewPin,
|
|
|
|
UINT32 NewPinLength,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function sets the Enabled column to FALSE for the USER1 authority.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION with OPAL_UID_LOCKING_SP as OPAL_LOCKING_SP_ADMIN1_AUTHORITY to disable User1
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalDisableUser(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function calls the Admin SP RevertSP method on the Locking SP. If KeepUserData is True, then the optional parameter
|
|
|
|
to keep the user data is set to True, otherwise the optional parameter is not provided.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION with OPAL_UID_LOCKING_SP as OPAL_LOCKING_SP_ADMIN1_AUTHORITY to revertSP
|
|
|
|
@param[in] KeepUserData Specifies whether or not to keep user data when performing RevertSP action. True = keeps user data.
|
|
|
|
@param[in/out] MethodStatus Method status of last action performed. If action succeeded, it should be TCG_METHOD_STATUS_CODE_SUCCESS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalAdminRevert(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
BOOLEAN KeepUserData,
|
|
|
|
UINT8 *MethodStatus
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function retrieves the TryLimit column for the specified rowUid (authority).
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION with OPAL_UID_LOCKING_SP to retrieve try limit
|
|
|
|
@param[in] RowUid Row UID of the Locking SP C_PIN table to retrieve TryLimit column
|
|
|
|
@param[in/out] TryLimit Value from TryLimit column
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalGetTryLimit(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
TCG_UID RowUid,
|
|
|
|
UINT32 *TryLimit
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function populates the CreateStruct with a payload that will retrieve the global locking range active key.
|
|
|
|
It is intended to be called with a session that is already started with a valid credential.
|
|
|
|
The function does not send the payload.
|
|
|
|
|
|
|
|
@param[in] Session OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in/out] CreateStruct Structure to populate with encoded TCG command
|
|
|
|
@param[in/out] Size Size in bytes of the command created.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalCreateRetrieveGlobalLockingRangeActiveKey(
|
|
|
|
const OPAL_SESSION *Session,
|
|
|
|
TCG_CREATE_STRUCT *CreateStruct,
|
|
|
|
UINT32 *Size
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function acquires the activeKey specified for the Global Locking Range from the parseStruct.
|
|
|
|
|
|
|
|
@param[in] ParseStruct Structure that contains the device's response with the activekey
|
|
|
|
@param[in/out] ActiveKey The UID of the active key retrieved
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalParseRetrieveGlobalLockingRangeActiveKey(
|
|
|
|
TCG_PARSE_STRUCT *ParseStruct,
|
|
|
|
TCG_UID *ActiveKey
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
Get the support attribute info.
|
|
|
|
|
|
|
|
@param[in] Session OPAL_SESSION with OPAL_UID_LOCKING_SP to retrieve info.
|
|
|
|
@param[in/out] LockingFeature Return the Locking info.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalGetLockingInfo(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
TCG_LOCKING_FEATURE_DESCRIPTOR *LockingFeature
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function determines whether or not all of the requirements for the Opal Feature (not full specification)
|
|
|
|
are met by the specified device.
|
|
|
|
|
|
|
|
@param[in] SupportedAttributes Opal device attribute.
|
|
|
|
|
|
|
|
**/
|
|
|
|
BOOLEAN
|
|
|
|
EFIAPI
|
|
|
|
OpalFeatureSupported(
|
|
|
|
OPAL_DISK_SUPPORT_ATTRIBUTE *SupportedAttributes
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function returns whether or not the device is Opal Enabled.
|
|
|
|
TRUE means that the device is partially or fully locked.
|
|
|
|
This will perform a Level 0 Discovery and parse the locking feature descriptor
|
|
|
|
|
|
|
|
@param[in] SupportedAttributes Opal device attribute.
|
|
|
|
@param[in] LockingFeature Opal device locking status.
|
|
|
|
|
|
|
|
|
|
|
|
**/
|
|
|
|
BOOLEAN
|
|
|
|
EFIAPI
|
|
|
|
OpalFeatureEnabled(
|
|
|
|
OPAL_DISK_SUPPORT_ATTRIBUTE *SupportedAttributes,
|
|
|
|
TCG_LOCKING_FEATURE_DESCRIPTOR *LockingFeature
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function returns whether or not the device is Opal Locked.
|
|
|
|
TRUE means that the device is partially or fully locked.
|
|
|
|
This will perform a Level 0 Discovery and parse the locking feature descriptor
|
|
|
|
|
|
|
|
@param[in] SupportedAttributes Opal device attribute.
|
|
|
|
@param[in] LockingFeature Opal device locking status.
|
|
|
|
|
|
|
|
**/
|
|
|
|
BOOLEAN
|
|
|
|
OpalDeviceLocked(
|
|
|
|
OPAL_DISK_SUPPORT_ATTRIBUTE *SupportedAttributes,
|
|
|
|
TCG_LOCKING_FEATURE_DESCRIPTOR *LockingFeature
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Trig the block sid action.
|
|
|
|
|
|
|
|
@param[in] Session OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] HardwareReset Whether need to do hardware reset.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalBlockSid(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
BOOLEAN HardwareReset
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
Get the support attribute info.
|
|
|
|
|
|
|
|
@param[in] Session OPAL_SESSION with OPAL_UID_LOCKING_SP to retrieve info.
|
|
|
|
@param[in/out] SupportedAttributes Return the support attribute info.
|
|
|
|
@param[out] OpalBaseComId Return the base com id info.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalGetSupportedAttributesInfo(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
OPAL_DISK_SUPPORT_ATTRIBUTE *SupportedAttributes,
|
|
|
|
UINT16 *OpalBaseComId
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a session with OPAL_UID_ADMIN_SP as OPAL_ADMIN_SP_PSID_AUTHORITY, then reverts device using Admin SP Revert method.
|
|
|
|
|
|
|
|
@param[in] AdminSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] Psid PSID of device to revert.
|
|
|
|
@param[in] PsidLength Length of PSID in bytes.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilPsidRevert(
|
|
|
|
OPAL_SESSION *AdminSpSession,
|
|
|
|
const VOID *Psid,
|
|
|
|
UINT32 PsidLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Opens a session with OPAL_UID_ADMIN_SP as OPAL_ADMIN_SP_SID_AUTHORITY,
|
|
|
|
sets the OPAL_UID_ADMIN_SP_C_PIN_SID column with the new password,
|
|
|
|
and activates the locking SP to copy SID PIN to Admin1 Locking SP PIN.
|
|
|
|
|
|
|
|
@param[in] AdminSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] GeneratedSid Generated SID of disk
|
|
|
|
@param[in] SidLength Length of generatedSid in bytes
|
|
|
|
@param[in] Password New admin password to set
|
|
|
|
@param[in] PassLength Length of password in bytes
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilSetAdminPasswordAsSid(
|
|
|
|
OPAL_SESSION *AdminSpSession,
|
|
|
|
const VOID *GeneratedSid,
|
|
|
|
UINT32 SidLength,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PassLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
Opens a session with OPAL_UID_LOCKING_SP as OPAL_LOCKING_SP_ADMIN1_AUTHORITY,
|
|
|
|
and updates the specified locking range with the provided column values.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] Password New admin password to set
|
|
|
|
@param[in] PassLength Length of password in bytes
|
|
|
|
@param[in] LockingRangeUid Locking range UID to set values
|
|
|
|
@param[in] RangeStart Value to set RangeStart column for Locking Range
|
|
|
|
@param[in] RangeLength Value to set RangeLength column for Locking Range
|
|
|
|
@param[in] ReadLockEnabled Value to set readLockEnabled column for Locking Range
|
|
|
|
@param[in] WriteLockEnabled Value to set writeLockEnabled column for Locking Range
|
|
|
|
@param[in] ReadLocked Value to set ReadLocked column for Locking Range
|
|
|
|
@param[in] WriteLocked Value to set WriteLocked column for Locking Range
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilSetOpalLockingRange(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PassLength,
|
|
|
|
TCG_UID LockingRangeUid,
|
|
|
|
UINT64 RangeStart,
|
|
|
|
UINT64 RangeLength,
|
|
|
|
BOOLEAN ReadLockEnabled,
|
|
|
|
BOOLEAN WriteLockEnabled,
|
|
|
|
BOOLEAN ReadLocked,
|
|
|
|
BOOLEAN WriteLocked
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Opens a session with OPAL_UID_ADMIN_SP as OPAL_ADMIN_SP_SID_AUTHORITY,
|
|
|
|
sets OPAL_UID_ADMIN_SP_C_PIN_SID with the new password,
|
|
|
|
and sets OPAL_LOCKING_SP_C_PIN_ADMIN1 with the new password.
|
|
|
|
|
|
|
|
@param[in] AdminSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] OldPassword Current admin password
|
|
|
|
@param[in] OldPasswordLength Length of current admin password in bytes
|
|
|
|
@param[in] NewPassword New admin password to set
|
|
|
|
@param[in] NewPasswordLength Length of new password in bytes
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilSetAdminPassword(
|
|
|
|
OPAL_SESSION *AdminSpSession,
|
|
|
|
const VOID *OldPassword,
|
|
|
|
UINT32 OldPasswordLength,
|
|
|
|
const VOID *NewPassword,
|
|
|
|
UINT32 NewPasswordLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Starts a session with OPAL_UID_LOCKING_SP as OPAL_LOCKING_SP_USER1_AUTHORITY or OPAL_LOCKING_SP_ADMIN1_AUTHORITY
|
|
|
|
and sets the User1 SP authority to enabled and sets the User1 password.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] OldPassword Current admin password
|
|
|
|
@param[in] OldPasswordLength Length of current admin password in bytes
|
|
|
|
@param[in] NewPassword New admin password to set
|
|
|
|
@param[in] NewPasswordLength Length of new password in bytes
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilSetUserPassword(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
const VOID *OldPassword,
|
|
|
|
UINT32 OldPasswordLength,
|
|
|
|
const VOID *NewPassword,
|
|
|
|
UINT32 NewPasswordLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Verify whether user input the correct password.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] Password Admin password
|
|
|
|
@param[in] PasswordLength Length of password in bytes
|
|
|
|
@param[in/out] HostSigningAuthority Use the Host signing authority type.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilVerifyPassword (
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PasswordLength,
|
|
|
|
TCG_UID HostSigningAuthority
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Starts a session with OPAL_UID_LOCKING_SP as OPAL_LOCKING_SP_USER1_AUTHORITY or OPAL_LOCKING_SP_ADMIN1_AUTHORITY
|
|
|
|
and generates a new global locking range key to erase the Data.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] Password Admin or user password
|
|
|
|
@param[in] PasswordLength Length of password in bytes
|
|
|
|
@param[in/out] PasswordFailed indicates if password failed (start session didn't work)
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilSecureErase(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PasswordLength,
|
|
|
|
BOOLEAN *PasswordFailed
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Starts a session with OPAL_UID_LOCKING_SP as OPAL_LOCKING_SP_ADMIN1_AUTHORITY and disables the User1 authority.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] Password Admin password
|
|
|
|
@param[in] PasswordLength Length of password in bytes
|
|
|
|
@param[in/out] PasswordFailed indicates if password failed (start session didn't work)
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilDisableUser(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PasswordLength,
|
|
|
|
BOOLEAN *PasswordFailed
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Opens a session with OPAL_UID_ADMIN_SP as OPAL_ADMIN_SP_PSID_AUTHORITY, then reverts the device using the RevertSP method.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param[in] KeepUserData TRUE to keep existing Data on the disk, or FALSE to erase it
|
|
|
|
@param[in] Password Admin password
|
|
|
|
@param[in] PasswordLength Length of password in bytes
|
|
|
|
@param[in/out] PasswordFailed indicates if password failed (start session didn't work)
|
|
|
|
@param[in] Msid Input Msid info.
|
|
|
|
@param[in] MsidLength Input Msid info length.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilRevert(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
BOOLEAN KeepUserData,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PasswordLength,
|
|
|
|
BOOLEAN *PasswordFailed,
|
|
|
|
UINT8 *Msid,
|
|
|
|
UINT32 MsidLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
After revert success, set SID to MSID.
|
|
|
|
|
|
|
|
@param[in] AdminSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param Password, Input password info.
|
|
|
|
@param PasswordLength, Input password length.
|
|
|
|
@param[in] Msid Input Msid info.
|
|
|
|
@param[in] MsidLength Input Msid info length.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilSetSIDtoMSID (
|
|
|
|
OPAL_SESSION *AdminSpSession,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PasswordLength,
|
|
|
|
UINT8 *Msid,
|
|
|
|
UINT32 MsidLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Update global locking range.
|
|
|
|
|
|
|
|
@param[in] LockingSpSession OPAL_SESSION to populate command for, needs comId
|
|
|
|
@param Password, Input password info.
|
|
|
|
@param PasswordLength, Input password length.
|
|
|
|
@param ReadLocked, Read lock info.
|
|
|
|
@param WriteLocked write lock info.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilUpdateGlobalLockingRange(
|
|
|
|
OPAL_SESSION *LockingSpSession,
|
|
|
|
const VOID *Password,
|
|
|
|
UINT32 PasswordLength,
|
|
|
|
BOOLEAN ReadLocked,
|
|
|
|
BOOLEAN WriteLocked
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Update global locking range.
|
|
|
|
|
|
|
|
@param Session, The session info for one opal device.
|
|
|
|
@param Msid, The data buffer to save Msid info.
|
|
|
|
@param MsidBufferLength, The data buffer length for Msid.
|
|
|
|
@param MsidLength, The actual data length for Msid.
|
|
|
|
|
|
|
|
**/
|
|
|
|
TCG_RESULT
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilGetMsid(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
UINT8 *Msid,
|
|
|
|
UINT32 MsidBufferLength,
|
|
|
|
UINT32 *MsidLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function determines who owns the device by attempting to start a session with different credentials.
|
|
|
|
If the SID PIN matches the MSID PIN, the no one owns the device.
|
|
|
|
If the SID PIN matches the ourSidPin, then "Us" owns the device. Otherwise it is unknown.
|
|
|
|
|
|
|
|
|
|
|
|
@param[in] Session The session info for one opal device.
|
|
|
|
@param Msid, The Msid info.
|
|
|
|
@param MsidLength, The data length for Msid.
|
|
|
|
|
|
|
|
**/
|
|
|
|
OPAL_OWNER_SHIP
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilDetermineOwnership(
|
|
|
|
OPAL_SESSION *Session,
|
|
|
|
UINT8 *Msid,
|
|
|
|
UINT32 MsidLength
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
The function returns if admin password exists.
|
|
|
|
|
|
|
|
@param[in] OwnerShip The owner ship of the opal device.
|
|
|
|
@param[in] LockingFeature The locking info of the opal device.
|
|
|
|
|
|
|
|
@retval TRUE Admin password existed.
|
|
|
|
@retval FALSE Admin password not existed.
|
|
|
|
|
|
|
|
**/
|
|
|
|
BOOLEAN
|
|
|
|
EFIAPI
|
|
|
|
OpalUtilAdminPasswordExists(
|
|
|
|
IN UINT16 OwnerShip,
|
|
|
|
IN TCG_LOCKING_FEATURE_DESCRIPTOR *LockingFeature
|
|
|
|
);
|
|
|
|
|
|
|
|
#endif // _OPAL_CORE_H_
|