//////////////////////////////////////////////////////////////////////////////// // Copyright 2019 Google LLC. // // This software is licensed under the terms defined in the Widevine Master // License Agreement. For a copy of this agreement, please contact // widevine-licensing@google.com. //////////////////////////////////////////////////////////////////////////////// // // Description: // Definitions of the protocol buffer messages used in the Widevine license // exchange protocol to support DRM systems native to a device other than // Widevine. syntax = "proto2"; package widevine; import "protos/public/client_identification.proto"; import "protos/public/license_protocol.proto"; option java_package = "com.google.video.widevine.externallicense"; option java_multiple_files = true; enum ExternalLicenseType { EXTERNAL_LICENSE_TYPE_UNDEFINED = 0; PLAYREADY_LICENSE_NEW = 1; PLAYREADY_LICENSE_RENEWAL = 2; PLAYREADY_LICENSE_RELEASE = 3; } message EncryptedLicenseRequest { // Provider ID for which the license request is encrypted (owner of // service certificate). optional string provider_id = 1; // Serial number for the service certificate for which license_request is // encrypted. optional bytes service_certificate_serial_number = 2; // Serialized license request message, encrypted with the privacy key // using AES-128-CBC with PKCS#5 padding. optional bytes encrypted_license_request = 3; // Initialization vector needed to decrypt encrypted_license_request. optional bytes encrypted_license_request_iv = 4; // AES-128 privacy key, encrypted with the service public key using RSA-OAEP. optional bytes encrypted_privacy_key = 5; } message ExternalLicenseRequest { optional ExternalLicenseType request_type = 1; // The license request. oneof clear_or_encrypted_request { // License request from the client. bytes request = 2; // Encrypted request from the client. EncryptedLicenseRequest encrypted_request = 7; } oneof clear_or_encrypted_client_id { // Information about the device. ClientIdentification client_id = 3; // Encrypted ClientIdentification message, used for privacy purposes. EncryptedClientIdentification encrypted_client_id = 4; } // Information about the content, including the PSSH data. optional LicenseRequest.ContentIdentification content_id = 5; // Time of the request in seconds (UTC) as set by the client. optional int64 request_time = 6; } message ExternalLicense { optional ExternalLicenseType license_type = 1; // The license representing the license type. optional bytes license = 2; // Widevine specific policy for renewals and expiry. optional License.Policy policy = 3; // Time of the request in seconds (UTC) as set in // LicenseRequest.request_time. If this time is not set in the request, // the local time at the license service is used in this field. optional int64 license_start_time = 4; // List of key Identifiers associated with this license. repeated bytes key_id = 5; }