As part of the new L3, we need to select between the new Zimperium-based CDM and Haystack. This will happen with an adapter; this adds a basic adapter that only calls to haystack directly. Bug: 315358872 Change-Id: I970646d687dadbe4ae04bdf0da00730fd882cd65
175 lines
10 KiB
C++
175 lines
10 KiB
C++
#ifndef _LEVEL3_HAYSTACK_H_
|
|
#define _LEVEL3_HAYSTACK_H_
|
|
|
|
#include "OEMCryptoCENC.h"
|
|
#include "level3.h"
|
|
|
|
namespace haystack {
|
|
|
|
bool Haystack_IsInApp();
|
|
OEMCryptoResult Haystack_Initialize();
|
|
OEMCryptoResult Haystack_Terminate();
|
|
OEMCryptoResult Haystack_OpenSession(OEMCrypto_SESSION* session);
|
|
OEMCryptoResult Haystack_CloseSession(OEMCrypto_SESSION session);
|
|
OEMCryptoResult Haystack_GenerateDerivedKeys(OEMCrypto_SESSION session,
|
|
const uint8_t* mac_key_context,
|
|
size_t mac_key_context_length,
|
|
const uint8_t* enc_key_context,
|
|
size_t enc_key_context_length);
|
|
OEMCryptoResult Haystack_GenerateNonce(OEMCrypto_SESSION session,
|
|
uint32_t* nonce);
|
|
OEMCryptoResult Haystack_PrepAndSignProvisioningRequest(
|
|
OEMCrypto_SESSION session, uint8_t* message, size_t message_length,
|
|
size_t* core_message_length, uint8_t* signature, size_t* signature_length);
|
|
OEMCryptoResult Haystack_PrepAndSignLicenseRequest(
|
|
OEMCrypto_SESSION session, uint8_t* message, size_t message_length,
|
|
size_t* core_message_length, uint8_t* signature, size_t* signature_length);
|
|
OEMCryptoResult Haystack_PrepAndSignRenewalRequest(
|
|
OEMCrypto_SESSION session, uint8_t* message, size_t message_length,
|
|
size_t* core_message_length, uint8_t* signature, size_t* signature_length);
|
|
OEMCryptoResult Haystack_QueryKeyControl(OEMCrypto_SESSION session,
|
|
const uint8_t* key_id,
|
|
size_t key_id_length,
|
|
uint8_t* key_control_block,
|
|
size_t* key_control_block_length);
|
|
OEMCryptoResult Haystack_DecryptCENC_V17(
|
|
OEMCrypto_SESSION session, const OEMCrypto_SampleDescription* samples,
|
|
size_t samples_length, const OEMCrypto_CENCEncryptPatternDesc* pattern);
|
|
OEMCryptoResult Haystack_IsKeyboxOrOEMCertValid();
|
|
OEMCryptoResult Haystack_GetOEMPublicCertificate(uint8_t* public_cert,
|
|
size_t* public_cert_length);
|
|
OEMCryptoResult Haystack_GetDeviceID(uint8_t* deviceID, size_t* idLength);
|
|
OEMCryptoResult Haystack_LoadOEMPrivateKey(OEMCrypto_SESSION session);
|
|
OEMCryptoResult Haystack_LoadProvisioning(
|
|
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
|
size_t core_message_length, const uint8_t* signature,
|
|
size_t signature_length, uint8_t* wrapped_private_key,
|
|
size_t* wrapped_private_key_length);
|
|
OEMCryptoResult Haystack_LoadDRMPrivateKey(OEMCrypto_SESSION session,
|
|
OEMCrypto_PrivateKeyType key_type,
|
|
const uint8_t* wrapped_rsa_key,
|
|
size_t wrapped_rsa_key_length);
|
|
OEMCryptoResult Haystack_DeriveKeysFromSessionKey(
|
|
OEMCrypto_SESSION session, const uint8_t* enc_session_key,
|
|
size_t enc_session_key_length, const uint8_t* mac_key_context,
|
|
size_t mac_key_context_length, const uint8_t* enc_key_context,
|
|
size_t enc_key_context_length);
|
|
OEMCryptoResult Haystack_GetNumberOfOpenSessions(size_t* count);
|
|
OEMCryptoResult Haystack_GetMaxNumberOfSessions(size_t* csebepqt);
|
|
OEMCryptoResult Haystack_Generic_Encrypt_V17(
|
|
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
|
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer);
|
|
OEMCryptoResult Haystack_Generic_Decrypt_V17(
|
|
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
|
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer);
|
|
OEMCryptoResult Haystack_Generic_Sign_V17(OEMCrypto_SESSION session,
|
|
const uint8_t* in_buffer,
|
|
size_t buffer_length,
|
|
OEMCrypto_Algorithm algorithm,
|
|
uint8_t* signature,
|
|
size_t* signature_length);
|
|
OEMCryptoResult Haystack_Generic_Verify_V17(OEMCrypto_SESSION session,
|
|
const uint8_t* in_buffer,
|
|
size_t buffer_length,
|
|
OEMCrypto_Algorithm algorithm,
|
|
const uint8_t* signature,
|
|
size_t signature_length);
|
|
OEMCryptoResult Haystack_DeactivateUsageEntry(OEMCrypto_SESSION session,
|
|
const uint8_t* pst,
|
|
size_t pst_length);
|
|
OEMCryptoResult Haystack_ReportUsage(OEMCrypto_SESSION session,
|
|
const uint8_t* pst, size_t pst_length,
|
|
uint8_t* buffer, size_t* buffer_length);
|
|
OEMCryptoResult Haystack_CreateUsageTableHeader(uint8_t* header_buffer,
|
|
size_t* header_buffer_length);
|
|
OEMCryptoResult Haystack_LoadUsageTableHeader(const uint8_t* buffer,
|
|
size_t buffer_length);
|
|
OEMCryptoResult Haystack_CreateNewUsageEntry(OEMCrypto_SESSION session,
|
|
uint32_t* usage_entry_number);
|
|
OEMCryptoResult Haystack_ReuseUsageEntry(OEMCrypto_SESSION session,
|
|
uint32_t usage_entry_number);
|
|
OEMCryptoResult Haystack_LoadUsageEntry(OEMCrypto_SESSION session,
|
|
uint32_t index, const uint8_t* buffer,
|
|
size_t buffer_size);
|
|
OEMCryptoResult Haystack_UpdateUsageEntry(OEMCrypto_SESSION session,
|
|
uint8_t* header_buffer,
|
|
size_t* header_buffer_length,
|
|
uint8_t* entry_buffer,
|
|
size_t* entry_buffer_length);
|
|
OEMCryptoResult Haystack_ShrinkUsageTableHeader(uint32_t new_table_size,
|
|
uint8_t* header_buffer,
|
|
size_t* header_buffer_length);
|
|
OEMCryptoResult Haystack_MoveEntry(OEMCrypto_SESSION session,
|
|
uint32_t new_index);
|
|
OEMCryptoResult Haystack_SelectKey(const OEMCrypto_SESSION session,
|
|
const uint8_t* key_id, size_t key_id_length,
|
|
OEMCryptoCipherMode cipher_mode);
|
|
OEMCryptoResult Haystack_LoadLicense(OEMCrypto_SESSION session,
|
|
const uint8_t* message,
|
|
size_t message_length,
|
|
size_t core_message_length,
|
|
const uint8_t* signature,
|
|
size_t signature_length);
|
|
OEMCryptoResult Haystack_SetDecryptHash(OEMCrypto_SESSION session,
|
|
uint32_t frame_number,
|
|
const uint8_t* hash,
|
|
size_t hash_length);
|
|
OEMCryptoResult Haystack_GetHashErrorCode(OEMCrypto_SESSION session,
|
|
uint32_t* failed_frame_number);
|
|
OEMCryptoResult Haystack_BuildInformation(char* buffer, size_t* buffer_length);
|
|
OEMCryptoResult Haystack_LoadRenewal(OEMCrypto_SESSION session,
|
|
const uint8_t* message,
|
|
size_t message_length,
|
|
size_t core_message_length,
|
|
const uint8_t* signature,
|
|
size_t signature_length);
|
|
OEMCryptoResult Haystack_LoadEntitledContentKeys(
|
|
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
|
size_t num_keys, const OEMCrypto_EntitledContentKeyObject* key_array);
|
|
wvoec3::Level3InitializationState Haystack_GetInitializationState();
|
|
void Haystack_OutputErrorLogs();
|
|
OEMCryptoResult Haystack_CreateEntitledKeySession(
|
|
OEMCrypto_SESSION oec_session, OEMCrypto_SESSION* key_session);
|
|
OEMCryptoResult Haystack_RemoveEntitledKeySession(
|
|
OEMCrypto_SESSION key_session);
|
|
OEMCryptoResult Haystack_ReassociateEntitledKeySession(
|
|
OEMCrypto_SESSION key_session, OEMCrypto_SESSION oec_session);
|
|
OEMCryptoResult Haystack_GetKeyHandle(OEMCrypto_SESSION session,
|
|
const uint8_t* content_key_id,
|
|
size_t content_key_id_length,
|
|
OEMCryptoCipherMode cipher_mode,
|
|
uint8_t* key_handle,
|
|
size_t* key_handle_length);
|
|
OEMCryptoResult Haystack_DecryptCENC(
|
|
const uint8_t* key_handle, size_t key_handle_length,
|
|
const OEMCrypto_SampleDescription* samples, size_t samples_length,
|
|
const OEMCrypto_CENCEncryptPatternDesc* pattern);
|
|
OEMCryptoResult Haystack_Generic_Encrypt(
|
|
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 Haystack_Generic_Decrypt(
|
|
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 Haystack_Generic_Sign(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 Haystack_Generic_Verify(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 haystack
|
|
|
|
#endif
|