[ Merge of http://go/wvgerrit/193190 ] This changes the persistent test storage to use protobufs instead of manual parsing. This simplifies the code but makes the files less "human readable". Files can be read using 'gqui' if needed. Bug: 312529037 Test: unit/integration tests Change-Id: I1b025eac96458c0061e0883e1e4fd05484842ff2
212 lines
6.9 KiB
Protocol Buffer
212 lines
6.9 KiB
Protocol Buffer
// ----------------------------------------------------------------------------
|
|
// device_files.proto
|
|
// ----------------------------------------------------------------------------
|
|
// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
//
|
|
// Description:
|
|
// Format of various files stored at the device.
|
|
//
|
|
syntax = "proto2";
|
|
|
|
package video_widevine_client.sdk;
|
|
|
|
// need this if we are using libprotobuf-cpp-2.3.0-lite
|
|
option optimize_for = LITE_RUNTIME;
|
|
|
|
message NameValue {
|
|
optional string name = 1;
|
|
optional string value = 2;
|
|
}
|
|
|
|
message SavedStorage {
|
|
map<string, string> files = 1;
|
|
}
|
|
|
|
message OemCertificate {
|
|
enum PrivateKeyType {
|
|
RSA = 0;
|
|
ECC = 1;
|
|
}
|
|
optional bytes certificate = 1;
|
|
optional bytes wrapped_private_key = 2;
|
|
optional PrivateKeyType key_type = 3 [default = RSA];
|
|
}
|
|
|
|
// DRM certificate.
|
|
message DeviceCertificate {
|
|
enum PrivateKeyType {
|
|
RSA = 0;
|
|
ECC = 1;
|
|
}
|
|
optional bytes certificate = 1;
|
|
optional bytes wrapped_private_key = 2;
|
|
optional PrivateKeyType key_type = 3 [default = RSA];
|
|
// Used by DRM certificates with an expiry time. Set by the client when
|
|
// the certificate is received. Aids expiration calculation at the
|
|
// client when provisioning server and client clocks are not aligned
|
|
optional int64 acquisition_time_seconds = 4;
|
|
// Used by DRM certificates without an expiration time. This is for
|
|
// upgrading devices with pre-existing DRM certificates. The client will
|
|
// calculate an expiration time 6 months into the future with a randomized
|
|
// +/-2 month window
|
|
optional int64 expiration_time_seconds = 5;
|
|
}
|
|
|
|
message License {
|
|
enum LicenseState {
|
|
ACTIVE = 1;
|
|
RELEASING = 2;
|
|
}
|
|
|
|
optional LicenseState state = 1;
|
|
optional bytes pssh_data = 2;
|
|
// |license_request|, |license|, |renewal_request|, |renewal| represents a
|
|
// serialized video_widevine::SignedMessage containing a
|
|
// video_widevine::License or video_widevine::LicenseRequest from
|
|
// license_protocol.proto
|
|
optional bytes license_request = 3;
|
|
optional bytes license = 4;
|
|
optional bytes renewal_request = 5;
|
|
optional bytes renewal = 6;
|
|
optional bytes release_server_url = 7;
|
|
optional int64 playback_start_time = 8 [default = 0];
|
|
optional int64 last_playback_time = 9 [default = 0];
|
|
repeated NameValue app_parameters = 10;
|
|
// This will be 0/missing if the grace period has not expired; otherwise it
|
|
// contains the playback_start_time we should use as an override. This is
|
|
// ignored if there is no grace period.
|
|
optional int64 grace_period_end_time = 11 [default = 0];
|
|
optional bytes usage_entry = 12;
|
|
optional int64 usage_entry_index = 13;
|
|
optional DeviceCertificate drm_certificate = 14;
|
|
}
|
|
|
|
message UsageInfo {
|
|
message ProviderSession {
|
|
optional bytes token = 1;
|
|
optional bytes license_request = 2;
|
|
// |license| represents a video_widevine::SignedMessage containing a
|
|
// video_widevine::License from license_protocol.proto
|
|
optional bytes license = 3;
|
|
optional bytes key_set_id = 4;
|
|
optional bytes usage_entry = 5;
|
|
optional int64 usage_entry_index = 6;
|
|
// If not present, use the legacy DRM certificate rather than
|
|
// one in DrmDeviceCertificate
|
|
optional uint32 drm_certificate_id = 7;
|
|
}
|
|
|
|
// A cache of DeviceCertificates associated with usage entries
|
|
message DrmUsageCertificate {
|
|
optional uint32 drm_certificate_id = 1;
|
|
optional DeviceCertificate drm_certificate = 2;
|
|
}
|
|
|
|
repeated ProviderSession sessions = 1;
|
|
repeated DrmUsageCertificate drm_certificate_cache = 2;
|
|
}
|
|
|
|
message HlsAttributes {
|
|
enum Method {
|
|
AES_128 = 1;
|
|
SAMPLE_AES = 2;
|
|
}
|
|
optional Method method = 1;
|
|
optional bytes media_segment_iv = 2;
|
|
}
|
|
|
|
message UsageTableInfo {
|
|
message UsageEntryInfo {
|
|
enum UsageEntryStorage {
|
|
LICENSE = 1;
|
|
USAGE_INFO = 2;
|
|
UNKNOWN = 3;
|
|
}
|
|
|
|
optional UsageEntryStorage storage = 1;
|
|
optional bytes key_set_id = 2;
|
|
optional bytes usage_info_file_name = 3; // hash of the app_id
|
|
|
|
// LRU table replacement data.
|
|
optional int64 last_use_time = 4 [default = 0];
|
|
// Only used if storage == LICENSE (offline license).
|
|
optional int64 offline_license_expiry_time = 5 [default = 0];
|
|
}
|
|
|
|
optional bytes table_header = 1;
|
|
repeated UsageEntryInfo entry_info_list = 2;
|
|
optional bool use_lru = 3 [default = false];
|
|
}
|
|
|
|
// Stores information related to a device's experience with OTA Keybox
|
|
// Provisioning (OKP). Only devices which both support OKP and require
|
|
// OKP should create this file. Otherwise, this information is not
|
|
// needed.
|
|
message OtaKeyboxProvisioningInfo {
|
|
enum OkpDeviceState {
|
|
// Not yet checked for provisioning state. This should be a
|
|
// transitory state only. Device which do not need OTA Keybox
|
|
// Provisioning should simply not store this file.
|
|
OKP_UNKNOWN = 0;
|
|
// OEMCrypto has reported that keybox provisioning is required and
|
|
// that the device supports OKP. Device may or may not be in the
|
|
// process of performing provisioning.
|
|
OKP_NEEDS_PROVISIONING = 1;
|
|
// Device still needs provisioning, but has reached a condition
|
|
// where it should backoff from attempting OKP for a period of
|
|
// time.
|
|
OKP_FALLBACK_MODE = 2;
|
|
// The device has successfully provisioned its keybox.
|
|
OKP_PROVISIONED = 3;
|
|
}
|
|
// Device-wide OKP state.
|
|
optional OkpDeviceState state = 1;
|
|
// Time when the CDM service first discovers that it needs to
|
|
// provision the L1 keybox.
|
|
optional int64 first_checked_time = 2;
|
|
// Beginning of a backoff period.
|
|
// Zero indicates that engine is not in a backoff state.
|
|
optional int64 backoff_start_time = 3;
|
|
// Intended length of “backoff period”. This will be assigned a
|
|
// random duration initially, then double each time an engine enters
|
|
// a backoff state. This is based on Google's recommended exponential
|
|
// backoff rules.
|
|
// Value of 0 indicates that backoff has not yet occurred.
|
|
optional int64 backoff_duration = 4;
|
|
// System time of when a successful provisioning request has been
|
|
// received. Only relevant if |state| is OKP_PROVISIONED.
|
|
optional int64 provisioning_time = 5;
|
|
}
|
|
|
|
message File {
|
|
enum FileType {
|
|
DEVICE_CERTIFICATE = 1;
|
|
LICENSE = 2;
|
|
USAGE_INFO = 3;
|
|
HLS_ATTRIBUTES = 4;
|
|
USAGE_TABLE_INFO = 5;
|
|
OKP_INFO = 6;
|
|
OEM_CERTIFICATE = 7;
|
|
}
|
|
|
|
enum FileVersion { VERSION_1 = 1; }
|
|
|
|
optional FileType type = 1;
|
|
optional FileVersion version = 2 [default = VERSION_1];
|
|
optional DeviceCertificate device_certificate = 3;
|
|
optional License license = 4;
|
|
optional UsageInfo usage_info = 5;
|
|
optional HlsAttributes hls_attributes = 6;
|
|
optional UsageTableInfo usage_table_info = 7;
|
|
optional OtaKeyboxProvisioningInfo okp_info = 8;
|
|
optional OemCertificate oem_certificate = 9;
|
|
}
|
|
|
|
message HashedFile {
|
|
optional bytes file = 1;
|
|
// A raw (not hex-encoded) SHA256, taken over the bytes of 'file'.
|
|
optional bytes hash = 2;
|
|
}
|