From 915efa9894b06e3f76f69350e8e070973fd264b4 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Wed, 9 Nov 2022 15:44:02 -0800 Subject: [PATCH] Sync license_protocol.proto [ Merge of http://go/wvgerrit/159982 ] Add in TimerDelayBase, initial_renewal_delay_base, client version and DTCPUsageRules. Bug: 256038127 Test: WV unit/integration tests Change-Id: I0ea7490ff2663a3df15d150836b06277f14eaa0f --- .../cdm/core/src/license_protocol.proto | 213 +++++++++++++++++- 1 file changed, 209 insertions(+), 4 deletions(-) diff --git a/libwvdrmengine/cdm/core/src/license_protocol.proto b/libwvdrmengine/cdm/core/src/license_protocol.proto index 9101ae7c..1d0ec510 100644 --- a/libwvdrmengine/cdm/core/src/license_protocol.proto +++ b/libwvdrmengine/cdm/core/src/license_protocol.proto @@ -29,6 +29,156 @@ message RemoteAttestation { optional bytes signature = 3; } +// ---------------------------------------------------------------------------- +// dtcp_usage.proto +// ---------------------------------------------------------------------------- +// Description of section: +// Definitions of the protocol buffer message used for DTCP2 usage rules. + +message DTCPUsageRules { + // This field indicates the value of Retention_State. + enum RetentionState { + // (-- api-linter: core::0126::unspecified=disabled + // aip.dev/not-precedent: name and values are defined in the DTCP + // specification. --) + // Forever + RETENTION_STATE_FOREVER = 0; + // 1 week + RETENTION_STATE_1_WEEK = 1; + // 2 day + RETENTION_STATE_2_DAYS = 2; + // 1 day + RETENTION_STATE_1_DAY = 3; + // 12 hours + RETENTION_STATE_12_HOURS = 4; + // 6 hours + RETENTION_STATE_6_HOURS = 5; + // 3 hours + RETENTION_STATE_3_HOURS = 6; + // 90 minutes + RETENTION_STATE_90_MINUTES = 7; + } + + // This field indicates Copy Control Information (CCI). + enum CopyControlInfo { + // Copy freely + COPY_FREE = 0; + // No more copies + COPY_NO_MORE = 1; + // One time copy + COPY_ONE = 2; + // Copy not allowed + COPY_NEVER = 3; + } + + // This field indicates Analog Protection System (APS) used to block + // recording devices. + enum AnalogProtectionSystem { + // Copy freely, APS is off + APS_OFF = 0; + // APS is on, Type 1 (AGC) + APS_TYPE1 = 1; + // APS is on, Type 2 (AGC + 2L Colorstripe) + APS_TYPE2 = 2; + // APS is on, Type 3 (AGC + 4L Colorstripe) + APS_TYPE3 = 3; + } + + // This field indicates the value of the Image Constraint Token (ICT) that + // controls downsampling of high-definition video. + enum ImageConstraintToken { + // HD analog output, Constrained Image + ICT_CONSTRAINED = 0; + // HD analog out + ICT_HD_ANALOG = 1; + } + + // This field indicates the value of Analog Sunset Token (AST) used to limit + // playback to standard definition (SD) only + enum AnalogSunsetToken { + // Asserted + AST_ASSERTED = 0; + // Unasserted + AST_UNASERTED = 1; + } + + // This field indicates the value of Digital Only Token (DOT) used to restrict + // output to digital only. + enum DigitalOnlyToken { + // Asserted + DOT_ASSERTED = 0; + // Unasserted + DOT_UNASSERTED = 1; + } + + // This field indicates the value of Audio Enhanced Token (AET). + enum AudioEnhancedToken { + // Asserted + AET_ASSERTED = 0; + // Unasserted + AET_UNASSERTED = 1; + } + + // This field indicates the value of Standard Digital Output (SDO) token. + enum StandardDigitalOutputToken { + // Unasserted + SDO_UNASSEERTED = 0; + // Asserted, L2 protection is permitted + SDO_ASSEERTED = 1; + } + + // This field indicates the value of High Dynamic Rnage (HDR) token. + enum HighDynamicRangeToken { + // Unasserted, SDR conversion is permitted + HDR_UNASSERTED = 0; + // Unasserted, SDR conversion is not permitted + HDR_ASSERTED = 1; + } + + // This field indicates the value of the L2 Protection Only token. + enum L2ProtectionOnlyToken { + // Unasserted + L2_ONLY_UNASSERTED = 0; + // Aasserted (L2 protection onl) + L2_ONLY_ASSERTED = 1; + } + + // This field indicates the value of the Enhanced Image (EI) token + enum EnhancedImageToken { + // Unasserted, Non-Enhanced Image + EI_UNASSERTED = 0; + // Asserted, Enhanced Image + EI_ASSERTED = 1; + } + + // This field indicates whether a further Bound Copy can be made from a + // Bound Copy retained in accordance with the RetentionStatefield. + enum FurtherBoundCopy { + // Further Bound Copy Prohibited + FBC_PROHIBITED = 0; + // Further Bound Copy Permitted + FBC_PERMITTED = 1; + } + + // Indicates if Digital Transmission Control Protection 2 (DTCP2) is required. + optional bool require_dtcp2 = 1 [default = false]; + optional CopyControlInfo copy_control = 2; + optional bool encryption_plus = 3; + optional RetentionState retention_state = 4; + optional AnalogProtectionSystem analog_protection_system = 5; + optional ImageConstraintToken image_constraint_token = 6; + optional AnalogSunsetToken analog_sunset_token = 7; + optional DigitalOnlyToken digital_only_token = 8; + optional AudioEnhancedToken audio_enhanced_token = 9; + optional uint32 copy_count = 10; + optional StandardDigitalOutputToken standard_digital_token = 11; + optional HighDynamicRangeToken high_dynamic_token = 12; + optional L2ProtectionOnlyToken l2_only_token = 13; + optional EnhancedImageToken enhaned_image_token = 14; + optional uint32 retention_time = 15; + optional FurtherBoundCopy further_copy = 16; +} + // ---------------------------------------------------------------------------- // license_protocol.proto // ---------------------------------------------------------------------------- @@ -134,6 +284,26 @@ message License { WATERMARKING_REQUIRED = 2; } + // The base for (delayed) timers, i.e. the time from which the delayed timer + // starts. + enum TimerDelayBase { + // Not specified + TIMER_DELAY_BASE_UNSPECIFIED = 0; + // The timer delay is based on |license_start_time|. + LICENSE_START = 1; + // The timer delay is based on the time the license is received by the + // client, whether the license is newly issued by the server or loaded + // from the disk (for persistent licenses). + // IMPORTANT: The playback window also begins immediately at license load + // time. + LICENSE_LOAD = 2; + // The timer delay is based on the time of first decryption. + // NOTE: For persistent licenses, the first decryption time should be + // persisted so that the "first decrypt" should only happen once even when + // the license is loaded repeatedly. + FIRST_DECRYPT = 3; + } + // Indicates that playback of the content is allowed. optional bool can_play = 1 [default = false]; @@ -169,10 +339,17 @@ message License { // specified URL. optional string renewal_server_url = 8; - // How many seconds after |license_start_time| before renewal is first - // attempted. If |renew_with_usage| is true in a new license, then this is - // the optional number of seconds after first playback, before renewal is - // first attempted. + // How many seconds after the "renewal delay base" before renewal is first + // attempted. For an initial license, see comments on + // |initial_renewal_delay_base| on how the "renewal delay base" is + // determined. For a renewal license, the "renewal delay base" is always the + // |license_start_time| of the renewal license. + // NOTE: + // - Renewal should not be attempted if |can_renew| or |can_play| is false, + // or if the license has expired. + // - When the "renewal delay base" is first time of decryption + // (|FIRST_DECRYPT|), this delay is optional: the client can attempt the + // renewal without the delay. optional int64 renewal_delay_seconds = 9 [default = 0]; // Specifies the delay in seconds between subsequent license @@ -207,6 +384,19 @@ message License { // Optional requirement to indicate watermarking is allowed. optional WatermarkingControl watermarking_control = 16 [default = WATERMARKING_CONTROL_UNSPECIFIED]; + + // Optional DTCP2 requirements. Default is to not allow dtcp2. + optional DTCPUsageRules dtcp2 = 17; + + // The base for |renewal_delay_seconds| for the initial license. For renewal + // licenses this field will be ignored and |renewal_delay_seconds| is always + // be based on |license_start_time|. + // NOTE: For backward compatibility, when set to + // TIMER_DELAY_BASE_UNSPECIFIED or has no value, the actual "renewal delay + // base" will be FIRST_DECRYPT if |renew_with_usage| is true, or + // LICENSE_START otherwise. + optional TimerDelayBase initial_renewal_delay_base = 18 + [default = TIMER_DELAY_BASE_UNSPECIFIED]; } message KeyContainer { @@ -247,6 +437,14 @@ message License { HW_SECURE_ALL = 5; } + // The EncryptionScheme to be used for the content keys. This is applicable + // only to Moho API. + enum EncryptionScheme { + ENCRYPTION_SCHEME_UNSPECIFIED = 0; + AES128_CTR = 1; + AES128_CBC = 2; + } + message KeyControl { // If present, the key control must be communicated to the secure // environment prior to any usage. This message is automatically generated @@ -368,6 +566,10 @@ message License { // single content or a group of contents. Currently it is only used in CAS // request. optional KeyCategorySpec key_category_spec = 13; + // Optional. Used by Moho API for Content key encryption. If unspecified, + // the Moho code uses the encryption scheme of type AES128_CTR. + optional EncryptionScheme encryption_scheme = 14 + [default = ENCRYPTION_SCHEME_UNSPECIFIED]; } optional LicenseIdentification id = 1; @@ -479,6 +681,9 @@ message LicenseRequest { optional uint32 key_control_nonce = 7; // Encrypted ClientIdentification message, used for privacy purposes. optional EncryptedClientIdentification encrypted_client_id = 8; + // The version of the client implementation. This field is optional and + // informational only. + optional string client_version = 9; } message LicenseError {