/* Copyright 2019 Google LLC. All rights reserved. This file and proprietary */ /* source code may only be used and distributed under the Widevine Master */ /* 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, } 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_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 20 #define ODK_RENEWAL_REQUEST_SIZE 28 #define ODK_PROVISIONING_REQUEST_SIZE 88 /* These are the possible timer status values. */ #define ODK_CLOCK_TIMER_STATUS_UNDEFINED 0 /* Should not happen. */ /* When the structure has been initialized, but no license is loaded. */ #define ODK_CLOCK_TIMER_STATUS_LICENSE_NOT_LOADED 1 /* After the license is loaded, before a successful decrypt. */ #define ODK_CLOCK_TIMER_STATUS_LICENSE_LOADED 2 /* After the license is loaded, if a renewal has also been loaded. */ #define ODK_CLOCK_TIMER_STATUS_RENEWAL_LOADED 3 /* The first decrypt has occurred and the timer is active. */ #define ODK_CLOCK_TIMER_STATUS_ACTIVE 4 /* The first decrypt has occurred and the timer is unlimited. */ #define ODK_CLOCK_TIMER_STATUS_UNLIMITED 5 /* The timer has transitioned from active to expired. */ #define ODK_CLOCK_TIMER_STATUS_EXPIRED 6 /* The license has been marked as inactive. */ #define ODK_CLOCK_TIMER_STATUS_LICENSE_INACTIVE 7 /* 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_ */