Get desktop application:
View/edit binary Protocol Buffers messages
ClientIdentification message used to authenticate the client device.
Used in:
Type of factory-provisioned device root of trust. Optional.
Factory-provisioned device root of trust. Required.
Optional client information name/value pairs.
Client token generated by the content provider. Optional.
Number of licenses received by the client to which the token above belongs. Only present if client_token is specified.
List of non-baseline client capabilities.
Serialized VmpData message. Optional.
Optional field that may contain additional provisioning credentials.
Capabilities which not all clients may support. Used for the license exchange protocol only.
Used in:
Client has hardware support for protecting the usage table, such as storing the generation number in secure memory. For Details, see: Widevine Modular DRM Security Integration Guide for CENC
The client shall report |srm_version| if available.
A device may have SRM data, and report a version, but may not be capable of updating SRM data.
Clients can indicate a performance level supported by OEMCrypto. This will allow applications and providers to choose an appropriate quality of content to serve. Currently defined tiers are 1 (low), 2 (medium) and 3 (high). Any other value indicates that the resource rating is unavailable or reporting erroneous values for that device. For details see, Widevine Modular DRM Security Integration Guide for CENC
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
,DRM certificate definition for user devices, intermediate, service, and root certificates.
Type of certificate. Required.
128-bit globally unique serial number of certificate. Value is 0 for root certificate. Required.
POSIX time, in seconds, when the certificate was created. Required.
POSIX time, in seconds, when the certificate should expire. Value of zero denotes indefinite expiry time. For more information on limited lifespan DRM certificates see (go/limited-lifespan-drm-certificates).
Device public key. PKCS#1 ASN.1 DER-encoded. Required.
Widevine system ID for the device. Required for intermediate and user device certificates.
Deprecated field, which used to indicate whether the device was a test (non-production) device. The test_device field in ProvisionedDeviceInfo below should be observed instead.
Service identifier (web origin) for the provider which owns the certificate. Required for service and provisioner certificates.
This field is used only when type = SERVICE to specify which SDK uses service certificate. This repeated field is treated as a set. A certificate may be used for the specified service SDK if the appropriate ServiceType is specified in this field.
Required. The algorithm field contains the curve used to create the |public_key| if algorithm is one of the ECC types. The |algorithm| is used for both to determine the if the certificate is ECC or RSA. The |algorithm| also specifies the parameters that were used to create |public_key| and are used to create an ephemeral session key.
Optional. May be present in DEVICE certificate types. This is the root of trust identifier that holds an encrypted value that identifies the keybox or other root of trust that was used to provision a DEVICE drm certificate.
Optional. May be present in devices that explicitly support dual keys. When present the |public_key| is used for verification of received license request messages.
Used in:
,Used in:
Device public key. PKCS#1 ASN.1 DER-encoded. Required.
Required. The algorithm field contains the curve used to create the |public_key| if algorithm is one of the ECC types. The |algorithm| is used for both to determine the if the certificate is ECC or RSA. The |algorithm| also specifies the parameters that were used to create |public_key| and are used to create an ephemeral session key.
Used in:
Used in:
ProtoBestPractices: ignore.
EncryptedClientIdentification message used to hold ClientIdentification messages encrypted for privacy purposes.
Used in:
Provider ID for which the ClientIdentifcation is encrypted (owner of service certificate).
Serial number for the service certificate for which ClientIdentification is encrypted.
Serialized ClientIdentification message, encrypted with the privacy key using AES-128-CBC with PKCS#5 padding.
Initialization vector needed to decrypt encrypted_client_id.
AES-128 privacy key, encrypted with the service public key using RSA-OAEP.
File Hashes for Verified Media Path (VMP) support.
Used in:
0 - release, 1 - testing
0 for dlls, 1 for exe, this is field 3 in file
Used in:
Unspecified hash algorithm: SHA_256 shall be used for ECC based algorithms and SHA_1 shall be used otherwise.
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.
Client token generated by the content provider. Optional.
4cc code specifying the CENC protection scheme as defined in the CENC 3.0 specification. Propagated from Widevine PSSH box. Optional.
8 byte verification field "HDCPDATA" followed by unsigned 32 bit minimum HDCP SRM version (whether the version is for HDCP1 SRM or HDCP2 SRM depends on client max_hdcp_version). Additional details can be found in Widevine Modular DRM Security Integration Guide for CENC.
If present this contains a signed SRM file (either HDCP1 SRM or HDCP2 SRM depending on client max_hdcp_version) that should be installed on the client device.
Indicates the status of any type of platform verification performed by the server.
IDs of the groups for which keys are delivered in this license, if any.
Used in:
NOTE: Use of requested_protection is not recommended as it is only supported on a small number of platforms.
Optional video resolution constraints. If the video resolution of the content being decrypted/decoded falls within one of the specified ranges, the optional required_protections may be applied. Otherwise an error will be reported. NOTE: Use of this feature is not recommended, as it is only supported on a small number of platforms.
Optional flag to indicate the key must only be used if the client supports anti rollback of the user table. Content provider can query the client capabilities to determine if the client support this feature.
Optional not limited to commonly known track types such as SD, HD. It can be some provider defined label to identify the track.
Used in:
|key_control| is documented in: Widevine Modular DRM Security Integration Guide for CENC If present, the key control must be communicated to the secure environment prior to any usage. This message is automatically generated by the Widevine License Server SDK.
Used in:
Exactly one key of this type must appear.
Content key.
Key control block for license renewals. No key.
wrapped keys for auxiliary crypto operations.
Entitlement keys.
Partner-specific content key.
Used in:
Permissions/key usage flags for operator service keys (type = OPERATOR_SESSION).
Used in:
,Optional requirement to indicate analog output is not allowed.
Optional requirement to indicate digital output is not allowed.
Indicate the CGMS setting to be inserted on analog output.
Used in:
Indicates whether HDCP is required on digital outputs, and which version should be used.
Used in:
Used in:
In 'required_protection', this means most current SRM is required. Update the SRM on the device. If update cannot happen, do not allow the key. In 'requested_protection', this means most current SRM is requested. Update the SRM on the device. If update cannot happen, allow use of the key anyway.
The SecurityLevel enumeration allows the server to communicate the level of robustness required by the client, in order to use the key.
Used in:
Software-based whitebox crypto is required.
Software crypto and an obfuscated decoder is required.
The key material and crypto operations must be performed within a hardware backed trusted execution environment.
The crypto and decoding of content must be performed within a hardware backed trusted execution environment.
The crypto, decoding and all handling of the media (compressed and uncompressed) must be handled within a hardware backed trusted execution environment.
Used in:
Minimum and maximum video resolutions in the range (height x width).
Optional output protection requirements for this range. If not specified, the OutputProtection in the KeyContainer applies.
Used in:
Indicates that playback of the content is allowed.
Indicates that the license may be persisted to non-volatile storage for offline use.
Indicates that renewal of this license is allowed.
Indicates the rental window.
Indicates the viewing window, once playback has begun.
Indicates the time window for this specific license.
The window of time, in which playback is allowed to continue while renewal is attempted, yet unsuccessful due to backend problems with the license server.
All renewal requests for this license shall be directed to the specified URL.
How many seconds after license_start_time, before renewal is first attempted.
Specifies the delay in seconds between subsequent license renewal requests, in case of failure.
Indicates that the license shall be sent for renewal when usage is started.
Indicates to client that license renewal and release requests ought to include ClientIdentification (client_id).
Duration of grace period before playback_duration_seconds (short window) goes into effect. Optional.
Enables "soft enforcement" of playback_duration_seconds, letting the user finish playback even if short window expires. Optional.
Enables "soft enforcement" of rental_duration_seconds. Initial playback must always start before rental duration expires. In order to allow subsequent playbacks to start after the rental duration expires, soft_enforce_playback_duration must be true. Otherwise, subsequent playbacks will not be allowed once rental duration expires. Optional.
LicenseIdentification is propagated from LicenseRequest to License, incrementing version with each iteration.
Used in:
,The client_id provides information authenticating the calling device. It contains the Widevine keybox token that was installed on the device at the factory. This field or encrypted_client_id below is required for a valid license request, but both should never be present in the same request.
Time of the request in seconds (UTC) as set by the client.
Old-style decimal-encoded string key control nonce.
New-style uint32 key control nonce, please use instead of key_control_nonce_deprecated.
Encrypted ClientIdentification message, used for privacy purposes.
Used in:
Exactly one of these must be present.
Used in:
Used in:
Used in:
Used in:
Opaque, client-specified.
Used in:
Opaque, client-specified.
Used in:
Used in:
, , ,License type decision is left to provider.
Used in:
'stage' that is currently processing the SignedMessage. Required.
metric and associated value.
Used in:
The time spent in the 'stage', specified in microseconds.
The UNIX epoch timestamp at which the 'stage' was first accessed in microseconds.
Used in:
The value associated with 'type'. For example if type == LATENCY, the value would be the time in microseconds spent in this 'stage'.
Used in:
The platform is not verified.
Tampering detected on the platform.
The platform has been verified by means of software.
The platform has been verified by means of hardware (e.g. secure boot).
Platform verification was not performed.
Platform and secure storage capability have been verified by means of software.
Used in:
DrmCertificate signed by a higher (CA) DRM certificate.
Serialized certificate. Required.
Signature of certificate. Signed with root or intermediate certificate specified below. Required.
SignedDrmCertificate used to sign this certificate.
Optional field that indicates the hash algorithm used in signature scheme.
Required field that contains the signature of the bytes of msg. For license requests, the signing algorithm is determined by the certificate contained in the request. For license responses, the signing algorithm is HMAC with signing key based on |session_key|.
If populated, the contents of this field will be signaled by the |session_key_type| type. If the |session_key_type| is WRAPPED_AES_KEY the key is the bytes of an encrypted AES key. If the |session_key_type| is EPHERMERAL_ECC_PUBLIC_KEY the field contains the bytes of an RFC5208 ASN1 serialized ECC public key.
Remote attestation data which will be present in the initial license request for ChromeOS client devices operating in verified mode. Remote attestation challenge data is |msg| field above. Optional.
Version information from the SDK and license service. This information is provided in the license response.
Optional field that contains the algorithm type used to generate the session_key and signature in a LICENSE message.
The core message is the simple serialization of fields used by OEMCrypto. This field was introduced in OEMCrypto API v16.
Used in:
Used in:
Used in:
License SDK version reported by the Widevine License SDK. This field is populated automatically by the SDK.
Version of the service hosting the license SDK. This field is optional. It may be provided by the hosting service.
Entitlement or content key IDs. Can onnly present in SINGLE or ENTITLEMENT PSSHs. May be repeated to facilitate delivery of multiple keys in a single license. Cannot be used in conjunction with content_id or group_ids, which are the preferred mechanism.
Content identifier which may map to multiple entitlement or content key IDs to facilitate the delivery of multiple keys in a single license. Cannot be present in conjunction with key_ids, but if used must be in all PSSHs.
Crypto period index, for media using key rotation. Always corresponds to The content key period. This means that if using entitlement licensing the ENTITLED_KEY PSSHs will have sequential crypto_period_index's, whereas the ENTITELEMENT PSSHs will have gaps in the sequence. Required if doing key rotation.
Protection scheme identifying the encryption algorithm. The protection scheme is represented as a uint32 value. The uint32 contains 4 bytes each representing a single ascii character in one of the 4CC protection scheme values. To be deprecated in favor of signaling from content. 'cenc' (AES-CTR) protection_scheme = 0x63656E63, 'cbc1' (AES-CBC) protection_scheme = 0x63626331, 'cens' (AES-CTR pattern encryption) protection_scheme = 0x63656E73, 'cbcs' (AES-CBC pattern encryption) protection_scheme = 0x63626373.
Optional. For media using key rotation, this represents the duration of each crypto period in seconds.
Type of PSSH. Required if not SINGLE.
Key sequence for Widevine-managed keys. Optional.
Group identifiers for all groups to which the content belongs. This can be used to deliver licenses to unlock multiple titles / channels. Optional, and may only be present in ENTITLEMENT and ENTITLED_KEY PSSHs, and not in conjunction with key_ids.
Copy/copies of the content key used to decrypt the media stream in which the PSSH box is embedded, each wrapped with a different entitlement key. May also contain sub-licenses to support devices with OEMCrypto 13 or older. May be repeated if using group entitlement keys. Present only in PSSHs of type ENTITLED_KEY.
Video feature identifier, which is used in conjunction with |content_id| to determine the set of keys to be returned in the license. Cannot be present in conjunction with |key_ids|. Current values are "HDR".
Content provider name.
Track type. Acceptable values are SD, HD and AUDIO. Used to differentiate content keys used by an asset.
The name of a registered policy to be used for this asset.
Optional protected context for group content. The grouped_license is a serialized SignedMessage.
////////////////////////// Deprecated Fields ////////////////////////////
Used in:
Used in:
ID of entitlement key used for wrapping |key|.
ID of the entitled key.
Wrapped key. Required.
IV used for wrapping |key|. Required.
Size of entitlement key used for wrapping |key|.
Used in:
Single PSSH to be used to retrieve content keys.
Primary PSSH used to retrieve entitlement keys.
Secondary PSSH containing entitled key(s).