105 lines
6.0 KiB
C++
105 lines
6.0 KiB
C++
// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
#ifndef WVCDM_CORE_OEMCRYPTO_ADAPTER_H_
|
|
#define WVCDM_CORE_OEMCRYPTO_ADAPTER_H_
|
|
|
|
#include <inttypes.h>
|
|
|
|
#include "OEMCryptoCENC.h"
|
|
#include "wv_cdm_types.h"
|
|
|
|
namespace wvcdm {
|
|
// Initialize OEMCrypto, then check the keybox and see if it is valid. If not,
|
|
// and OTA provisioning is supported, set needs_keybox_provisioning to true.
|
|
// If the keybox is not valid and OTA provisioning is not supported, set
|
|
// needs_keybox_provisioning to false and use L3 only.
|
|
OEMCryptoResult OEMCrypto_InitializeAndCheckKeybox(
|
|
bool* needs_keybox_provisioning);
|
|
|
|
// This tells the OEMCrypto adapter to ignore the next |count| keyboxes and
|
|
// report that it needs provisioning instead.
|
|
OEMCryptoResult OEMCrypto_SetDebugIgnoreKeyboxCount(uint32_t count);
|
|
|
|
// This attempts to open a session at the desired security level.
|
|
// If one level is not available, the other will be used instead.
|
|
OEMCryptoResult OEMCrypto_OpenSession(OEMCrypto_SESSION* session,
|
|
RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
|
size_t keyBoxLength,
|
|
RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_GetDeviceID(uint8_t* deviceID, size_t* idLength,
|
|
RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_GetKeyData(uint8_t* keyData, size_t* keyDataLength,
|
|
RequestedSecurityLevel level);
|
|
uint32_t OEMCrypto_APIVersion(RequestedSecurityLevel level);
|
|
uint32_t OEMCrypto_MinorAPIVersion(RequestedSecurityLevel level);
|
|
OEMCrypto_Security_Level OEMCrypto_SecurityLevel(RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_GetHDCPCapability(RequestedSecurityLevel level,
|
|
OEMCrypto_HDCP_Capability* current,
|
|
OEMCrypto_HDCP_Capability* maximum);
|
|
bool OEMCrypto_SupportsUsageTable(RequestedSecurityLevel level);
|
|
bool OEMCrypto_IsAntiRollbackHwPresent(RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(RequestedSecurityLevel level,
|
|
size_t* count);
|
|
OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(RequestedSecurityLevel level,
|
|
size_t* maximum);
|
|
uint8_t OEMCrypto_Security_Patch_Level(RequestedSecurityLevel level);
|
|
OEMCrypto_ProvisioningMethod OEMCrypto_GetProvisioningMethod(
|
|
RequestedSecurityLevel level);
|
|
uint32_t OEMCrypto_SupportedCertificates(RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_CreateUsageTableHeader(RequestedSecurityLevel level,
|
|
uint8_t* header_buffer,
|
|
size_t* header_buffer_length);
|
|
OEMCryptoResult OEMCrypto_LoadUsageTableHeader(RequestedSecurityLevel level,
|
|
const uint8_t* buffer,
|
|
size_t buffer_length);
|
|
OEMCryptoResult OEMCrypto_ShrinkUsageTableHeader(RequestedSecurityLevel level,
|
|
uint32_t new_table_size,
|
|
uint8_t* header_buffer,
|
|
size_t* header_buffer_length);
|
|
uint32_t OEMCrypto_GetAnalogOutputFlags(RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_BuildInformation(char* buffer, size_t* buffer_length,
|
|
RequestedSecurityLevel level);
|
|
uint32_t OEMCrypto_ResourceRatingTier(RequestedSecurityLevel level);
|
|
uint32_t OEMCrypto_SupportsDecryptHash(RequestedSecurityLevel level);
|
|
size_t OEMCrypto_MaximumUsageTableHeaderSize(RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_GetOEMPublicCertificate(uint8_t* public_cert,
|
|
size_t* public_cert_length,
|
|
RequestedSecurityLevel level);
|
|
OEMCrypto_WatermarkingSupport OEMCrypto_GetWatermarkingSupport(
|
|
RequestedSecurityLevel level);
|
|
OEMCryptoResult OEMCrypto_ProductionReady(RequestedSecurityLevel level);
|
|
|
|
OEMCryptoResult OEMCrypto_DecryptCENC(
|
|
RequestedSecurityLevel level, const uint8_t* key_handle,
|
|
size_t key_handle_length, const OEMCrypto_SampleDescription* samples,
|
|
size_t samples_length, const OEMCrypto_CENCEncryptPatternDesc* pattern);
|
|
OEMCryptoResult OEMCrypto_Generic_Encrypt(
|
|
RequestedSecurityLevel level, const uint8_t* key_handle,
|
|
size_t key_handle_length, const OEMCrypto_SharedMemory* in_buffer,
|
|
size_t in_buffer_length, const uint8_t* iv, OEMCrypto_Algorithm algorithm,
|
|
OEMCrypto_SharedMemory* out_buffer);
|
|
OEMCryptoResult OEMCrypto_Generic_Decrypt(
|
|
RequestedSecurityLevel level, const uint8_t* key_handle,
|
|
size_t key_handle_length, const OEMCrypto_SharedMemory* in_buffer,
|
|
size_t in_buffer_length, const uint8_t* iv, OEMCrypto_Algorithm algorithm,
|
|
OEMCrypto_SharedMemory* out_buffer);
|
|
OEMCryptoResult OEMCrypto_Generic_Sign(
|
|
RequestedSecurityLevel level, const uint8_t* key_handle,
|
|
size_t key_handle_length, const OEMCrypto_SharedMemory* buffer,
|
|
size_t buffer_length, OEMCrypto_Algorithm algorithm,
|
|
OEMCrypto_SharedMemory* signature, size_t* signature_length);
|
|
OEMCryptoResult OEMCrypto_Generic_Verify(
|
|
RequestedSecurityLevel level, const uint8_t* key_handle,
|
|
size_t key_handle_length, const OEMCrypto_SharedMemory* buffer,
|
|
size_t buffer_length, OEMCrypto_Algorithm algorithm,
|
|
const OEMCrypto_SharedMemory* signature, size_t signature_length);
|
|
OEMCryptoResult OEMCrypto_GetBCCType(RequestedSecurityLevel level,
|
|
OEMCrypto_BCCType* bcc_type);
|
|
OEMCryptoResult OEMCrypto_GetBCCSignatureType(
|
|
RequestedSecurityLevel level,
|
|
OEMCrypto_BCCSignatureType* bcc_signature_type);
|
|
} // namespace wvcdm
|
|
#endif // WVCDM_CORE_OEMCRYPTO_ADAPTER_H_
|