//////////////////////////////////////////////////////////////////////////////// // Copyright 2018 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. //////////////////////////////////////////////////////////////////////////////// // Protocol buffer definitions for Widevine CAS. syntax = "proto2"; package widevine; import "protos/public/hash_algorithm.proto"; option java_package = "com.google.video.widevine.mediacasencryption"; message CasEncryptionRequest { optional bytes content_id = 1; optional string provider = 2; // Optional track types such as "AUDIO", SD" or "HD". repeated string track_types = 3; // Indicates if the client is using key rotation. If true, the server will // return one key for EVEN and one key for ODD, otherwise only a single key is // returned. optional bool key_rotation = 4; // Optional value which can be used to indicate a group. // If present, the CasEncryptionResponse will return keys based on this group // id, instead of |content_id|. optional bytes group_id = 5; // Entitlement period index for media using entitlement key rotation. It // always corresponds to the entitlement key period. If present, the // entitlement keys returned will corresponds to the specified entitlement // period index. optional uint32 entitlement_period_index = 6; } message CasEncryptionResponse { enum Status { STATUS_UNSPECIFIED = 0; OK = 1; SIGNATURE_FAILED = 2; ACCESS_DENIED = 3; INTERNAL_ERROR = 4; INVALID_ARGUMENT = 5; PROVIDER_ID_MISSING = 6; CONTENT_ID_MISSING = 7; TRACK_TYPE_MISSING = 8; } message KeyInfo { enum KeySlot { KEY_SLOT_UNSPECIFIED = 0; SINGLE = 1; EVEN = 2; ODD = 3; } optional bytes key_id = 1; optional bytes key = 2; // Optional label used for the key. optional string track_type = 3; optional KeySlot key_slot = 4; } optional Status status = 1; optional string status_message = 2; optional bytes content_id = 3; repeated KeyInfo entitlement_keys = 4; // If this is a group key license, this is the group identifier. optional bytes group_id = 5; } message SignedCasEncryptionRequest { optional bytes request = 1; optional bytes signature = 2; // Identifies the entity sending / signing the request. optional string signer = 3; // Optional field that indicates the hash algorithm used in signature scheme. optional HashAlgorithmProto hash_algorithm = 4; } message SignedCasEncryptionResponse { // Serialized CasEncryptionResponse message. optional bytes response = 1; optional bytes signature = 2; } message HttpResponse { optional bytes response = 1; }