No-Typo-Check: Not related to this change. Bug: 161477208 Change-Id: I99e4780f6855b7045aa0cd5a49c13d2d0d51ed64
129 lines
4.4 KiB
C
129 lines
4.4 KiB
C
// 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 <stdint.h>
|
|
|
|
#include "OEMCryptoCENCCommon.h"
|
|
#include "odk_structs.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// We use a typedef here so `ODK_CoreMessage` will contain "simple types" which
|
|
// should work better with the auto code generator.
|
|
typedef uint32_t ODK_MessageType;
|
|
|
|
#define ODK_License_Request_Type ((ODK_MessageType)1u)
|
|
#define ODK_License_Response_Type ((ODK_MessageType)2u)
|
|
#define ODK_Renewal_Request_Type ((ODK_MessageType)3u)
|
|
#define ODK_Renewal_Response_Type ((ODK_MessageType)4u)
|
|
#define ODK_Provisioning_Request_Type ((ODK_MessageType)5u)
|
|
#define ODK_Provisioning_Response_Type ((ODK_MessageType)6u)
|
|
|
|
// Reserve future message types to support forward compatibility.
|
|
#define ODK_Release_Request_Type ((ODK_MessageType)7u)
|
|
#define ODK_Release_Response_Type ((ODK_MessageType)8u)
|
|
#define ODK_Common_Request_Type ((ODK_MessageType)9u)
|
|
#define ODK_Common_Response_Type ((ODK_MessageType)10u)
|
|
|
|
typedef struct {
|
|
ODK_MessageType message_type; // Type of core message (defined above)
|
|
uint32_t message_length; // Length of core message.
|
|
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 {
|
|
OEMCrypto_Substring enc_mac_keys_iv;
|
|
OEMCrypto_Substring enc_mac_keys;
|
|
OEMCrypto_Substring pst;
|
|
OEMCrypto_Substring srm_restriction_data;
|
|
OEMCrypto_LicenseType license_type;
|
|
bool nonce_required;
|
|
ODK_TimerLimits timer_limits;
|
|
uint32_t key_array_length;
|
|
OEMCrypto_KeyObject key_array[ODK_MAX_NUM_KEYS];
|
|
} ODK_ParsedLicenseV16;
|
|
|
|
typedef struct {
|
|
ODK_PreparedLicenseRequest request;
|
|
ODK_ParsedLicense* parsed_license;
|
|
} ODK_LicenseResponse;
|
|
|
|
typedef struct {
|
|
ODK_PreparedLicenseRequest request;
|
|
ODK_ParsedLicenseV16 parsed_license;
|
|
uint8_t request_hash[ODK_SHA256_HASH_SIZE];
|
|
} ODK_LicenseResponseV16;
|
|
|
|
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_
|