// Copyright 2019 Google LLC. All rights reserved. This file and proprietary // source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_SRC_ODK_STRUCTS_PRIV_H_ #define WIDEVINE_ODK_SRC_ODK_STRUCTS_PRIV_H_ #include #include "OEMCryptoCENCCommon.h" #include "odk_structs.h" #ifdef __cplusplus extern "C" { #endif typedef enum { ODK_License_Request_Type = 1, ODK_License_Response_Type = 2, ODK_Renewal_Request_Type = 3, ODK_Renewal_Response_Type = 4, ODK_Provisioning_Request_Type = 5, ODK_Provisioning_Response_Type = 6, // Reserve future message types to support forward compatibility. ODK_Release_Request_Type = 7, ODK_Release_Response_Type = 8, ODK_Common_Request_Type = 9, ODK_Common_Response_Type = 10, } ODK_MessageType; typedef struct { uint32_t message_type; uint32_t message_length; ODK_NonceValues nonce_values; } ODK_CoreMessage; typedef struct { ODK_CoreMessage core_message; } ODK_PreparedLicenseRequest; typedef struct { ODK_CoreMessage core_message; uint64_t playback_time; } ODK_PreparedRenewalRequest; typedef struct { ODK_CoreMessage core_message; uint32_t device_id_length; uint8_t device_id[ODK_DEVICE_ID_LEN_MAX]; } ODK_PreparedProvisioningRequest; typedef struct { ODK_CoreMessage core_message; } ODK_PreparedCommonRequest; typedef struct { ODK_PreparedLicenseRequest request; ODK_ParsedLicense* parsed_license; uint8_t request_hash[ODK_SHA256_HASH_SIZE]; } ODK_LicenseResponse; typedef struct { ODK_PreparedRenewalRequest request; uint64_t renewal_duration_seconds; } ODK_RenewalResponse; typedef struct { ODK_PreparedProvisioningRequest request; ODK_ParsedProvisioning* parsed_provisioning; } ODK_ProvisioningResponse; // These are the sum of sizeof of each individual member of the request structs // without any padding added by the compiler. Make sure they get updated when // request structs change. Refer to test suite OdkSizeTest in // ../test/odk_test.cpp for validations of each of the defined request sizes. #define ODK_LICENSE_REQUEST_SIZE 20u #define ODK_RENEWAL_REQUEST_SIZE 28u #define ODK_PROVISIONING_REQUEST_SIZE 88u // These are the possible timer status values. #define ODK_CLOCK_TIMER_STATUS_UNDEFINED 0u // Should not happen. // When the structure has been initialized, but no license is loaded. #define ODK_CLOCK_TIMER_STATUS_LICENSE_NOT_LOADED 1u // After the license is loaded, before a successful decrypt. #define ODK_CLOCK_TIMER_STATUS_LICENSE_LOADED 2u // After the license is loaded, if a renewal has also been loaded. #define ODK_CLOCK_TIMER_STATUS_RENEWAL_LOADED 3u // The first decrypt has occurred and the timer is active. #define ODK_CLOCK_TIMER_STATUS_ACTIVE 4u // The first decrypt has occurred and the timer is unlimited. #define ODK_CLOCK_TIMER_STATUS_UNLIMITED 5u // The timer has transitioned from active to expired. #define ODK_CLOCK_TIMER_STATUS_EXPIRED 6u // The license has been marked as inactive. #define ODK_CLOCK_TIMER_STATUS_LICENSE_INACTIVE 7u // A helper function for computing timer limits when a renewal is loaded. OEMCryptoResult ODK_ComputeRenewalDuration(const ODK_TimerLimits* timer_limits, ODK_ClockValues* clock_values, uint64_t system_time_seconds, uint64_t new_renewal_duration, uint64_t* timer_value); #ifdef __cplusplus } #endif #endif // WIDEVINE_ODK_SRC_ODK_STRUCTS_PRIV_H_