#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_V18( 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_V18(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, uint32_t crc32); 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); 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); OEMCryptoResult Haystack_LoadLicense( OEMCrypto_SESSION session, const uint8_t* context, size_t context_length, const uint8_t* derivation_key, size_t derivation_key_length, const uint8_t* message, size_t message_length, size_t core_message_length, const uint8_t* signature, size_t signature_length); OEMCryptoResult Haystack_LoadProvisioning( OEMCrypto_SESSION session, const uint8_t* provision_request, size_t provision_request_length, 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_LoadProvisioningCast( OEMCrypto_SESSION session, const uint8_t* derivation_key, size_t derivation_key_length, const uint8_t* provision_request, size_t provision_request_length, 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_PrepAndSignReleaseRequest( OEMCrypto_SESSION session, uint8_t* message, size_t message_length, size_t* core_message_size, uint8_t* signature, size_t* signature_length); OEMCryptoResult Haystack_LoadRelease(OEMCrypto_SESSION session, const uint8_t* message, size_t message_length, size_t core_message_length, const uint8_t* signature, size_t signature_length); } // namespace haystack #endif