// 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 "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 tells the OEMCrypto adapter to allow the device to continue with a // test keybox. Otherwise, the keybox is reported as invalid. OEMCryptoResult OEMCrypto_SetAllowTestKeybox(bool allow); // 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); } // namespace wvcdm #endif // WVCDM_CORE_OEMCRYPTO_ADAPTER_H_