blob: 32e7a1ebd2f46412e17f72cefc7d019f8f62bd41 [file] [log] [blame] [view]
<link rel="stylesheet" href="../style.css" />
[TOC]
# fuchsia.media.drm
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>
## **PROTOCOLS**
## ClearKey {#ClearKey}
*Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=110)*
<p>A service hub providing access to the ClearKey key system. This key system
is defined by the <a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a>. It uses plain-text
keys to decrypt the source.</p>
<p>If the client closes the <code>ClearKey</code> channel, derived
<code>ContentDecryptionModule</code>s will remain active.</p>
<p><a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a>:
https://www.w3.org/TR/encrypted-media</p>
### AddDataStore {#ClearKey.AddDataStore}
<p>Adds a client data store to the <code>KeySystem</code>.</p>
<p>DRM systems generate data on behalf of clients as part of provisioning
and license management. This data is only usable by the DRM system, but
the client is the owner of the data. The client controls the lifetime of
the data and can select which data set is to be used for a
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<ul>
<li>request <code>data_store_id</code> a client-assigned identifier for the data
store. The identifier is scoped to the <code>KeySystem</code> channel. It is
invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already
added <code>data_store_id</code> and the server should close the channel.</li>
<li>request <code>data_store_params</code> the parameters to be used for this data
store.</li>
</ul>
#### Request {#ClearKey.AddDataStore_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>data_store_params</code></td>
<td>
<code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code>
</td>
</tr>
</table>
#### Response {#ClearKey.AddDataStore_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code>
</td>
</tr>
</table>
### CreateContentDecryptionModule2 {#ClearKey.CreateContentDecryptionModule2}
<p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<p>Creates a <code>ContentDecryptionModule</code> that will use the associated data
store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the
<code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only
support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type.
If a <code>data_store_id</code> is provided, then the created
<code>ContentDecryptionModule</code> will persist data to that data store. If the
<code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or
the <code>KeySystem</code> does not support data stores and one was provided, then
the server should close the <code>cdm</code>.</p>
<p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a
<code>ZX_ERR_NOT_FOUND</code> epitaph.</p>
<ul>
<li>request <code>data_store_id</code> the data store that should be used by the
<code>ContentDecryptionModule</code>.</li>
<li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li>
</ul>
#### Request {#ClearKey.CreateContentDecryptionModule2_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>cdm</code></td>
<td>
<code>server_end&lt;<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>&gt;</code>
</td>
</tr>
</table>
### DestroyDataStoreAndConfirm {#ClearKey.DestroyDataStoreAndConfirm}
<p>Destroys the client data store.</p>
<p>This method permanently removes this data store and all of its contents.
All provisioning and license data will be removed and any active
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p>
<ul>
<li>request <code>data_store_id</code> the client-assigned identifier for the data
store to be removed. It is invalid for the client to provide
<a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously
been added or has been previously destroyed.</li>
</ul>
#### Request {#ClearKey.DestroyDataStoreAndConfirm_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
</table>
#### Response {#ClearKey.DestroyDataStoreAndConfirm_Response}
&lt;EMPTY&gt;
### GetProperties {#ClearKey.GetProperties}
<p>Get various static properties of the <code>KeySystem</code> implementation.</p>
<p>The properties include the capabilities and requirements of the
<code>KeySystem</code>, such as whether the implementation is hardware-based or
whether it requires client-provided data stores to operate.</p>
<ul>
<li>response <code>properties</code> the properties of the <code>KeySystem</code>
implementation.</li>
</ul>
#### Request {#ClearKey.GetProperties_Request}
&lt;EMPTY&gt;
#### Response {#ClearKey.GetProperties_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>properties</code></td>
<td>
<code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code>
</td>
</tr>
</table>
## ContentDecryptionModule {#ContentDecryptionModule}
*Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=24)*
<p>A protocol for managing content license sessions and providing decryption of
media content. There may be zero to many active <a class='link' href='#LicenseSession'>LicenseSession</a>s
associated with a <code>ContentDecryptionModule</code>, each with their own sets of
keys.</p>
<p>From an EME client's perspective, this protocol has a 1:1 relationship with
the MediaKeys object.</p>
### CreateDecryptor {#ContentDecryptionModule.CreateDecryptor}
<p>Creates a Decryptor <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a> to be used to
decrypt content.</p>
<p>This <code>decryptor</code> would have access to the union of keys created by all
the active sessions for this <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<ul>
<li>request <code>params</code> the parameters with which to create the <code>decryptor</code>.</li>
<li>request <code>decryptor</code> the server endpoint of the
<code>fuchsia.media/StreamProcessor</code>.</li>
</ul>
#### Request {#ContentDecryptionModule.CreateDecryptor_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>params</code></td>
<td>
<code><a class='link' href='#DecryptorParams'>DecryptorParams</a></code>
</td>
</tr>
<tr>
<td><code>decryptor</code></td>
<td>
<code>server_end&lt;<a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a>&gt;</code>
</td>
</tr>
</table>
### CreateLicenseSession {#ContentDecryptionModule.CreateLicenseSession}
<p>Creates a new session for the given type.</p>
<p>The <code>session_id</code> will be generated by the <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>
and can be used to reload the session after closing. If the
<code>session_type</code> is not supported by the underlying DRM system, it will
immediately close the <code>license_session</code>.</p>
<ul>
<li>request <code>session_type</code> a field containing either
<a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> or
<a class='link' href='#LicenseSessionType.PERSISTENT_LICENSE'>LicenseSessionType.PERSISTENT_LICENSE</a></li>
<li>request <code>license_session</code> the server endpoint of the
<a class='link' href='#LicenseSession'>LicenseSession</a></li>
</ul>
<ul>
<li>response <code>session_id</code> an identifier that can be used to reload the
session later (if persistent).</li>
</ul>
#### Request {#ContentDecryptionModule.CreateLicenseSession_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>session_type</code></td>
<td>
<code><a class='link' href='#LicenseSessionType'>LicenseSessionType</a></code>
</td>
</tr>
<tr>
<td><code>license_session</code></td>
<td>
<code>server_end&lt;<a class='link' href='#LicenseSession'>LicenseSession</a>&gt;</code>
</td>
</tr>
</table>
#### Response {#ContentDecryptionModule.CreateLicenseSession_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>session_id</code></td>
<td>
<code><a class='link' href='#SessionId'>SessionId</a></code>
</td>
</tr>
</table>
### GetKeyStatusForHdcpVersion {#ContentDecryptionModule.GetKeyStatusForHdcpVersion}
<p>Queries the status of a hypothetical key associated with an HDCP policy.</p>
<p>This aids clients in determining which content type to fetch prior to
establishing a <a class='link' href='#LicenseSession'>LicenseSession</a>. For example, if the device would
restrict output for HDCP 1.x, then the client can choose to fetch SD
content rather than HD.</p>
<ul>
<li>request <code>hdcp_version</code> a field containing the HDCP version to check,
such as &quot;1.2&quot; or &quot;2.0&quot;.</li>
</ul>
<ul>
<li>response <code>key_status</code> a field indicating what the status of a
hypothetical key would be for this device if one could be licensed.</li>
</ul>
#### Request {#ContentDecryptionModule.GetKeyStatusForHdcpVersion_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>hdcp_version</code></td>
<td>
<code><a class='link' href='#HdcpVersion'>HdcpVersion</a></code>
</td>
</tr>
</table>
#### Response {#ContentDecryptionModule.GetKeyStatusForHdcpVersion_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>key_status</code></td>
<td>
<code><a class='link' href='#KeyStatus'>KeyStatus</a></code>
</td>
</tr>
</table>
### GetSupportedEncryptionSchemes {#ContentDecryptionModule.GetSupportedEncryptionSchemes}
<p>Queries for the list of supported encryption schemes.</p>
<p>This returns a list of the supported encryption schemes that the
<code>ContentDecryptionModule</code> supports, such as 'cenc' or 'cbcs'. If the
implementation supports passing unencrypted frames through decryption
prior to license arrival, it should also report
<code>fuchsia.media.UNENCRYPTED</code> as a supported scheme.</p>
<ul>
<li>response <code>encryption_schemes</code> a list of the supported encryption
schemes.</li>
</ul>
#### Request {#ContentDecryptionModule.GetSupportedEncryptionSchemes_Request}
&lt;EMPTY&gt;
#### Response {#ContentDecryptionModule.GetSupportedEncryptionSchemes_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>encryption_schemes</code></td>
<td>
<code>vector&lt;string&gt;</code>
</td>
</tr>
</table>
### LoadLicenseSession {#ContentDecryptionModule.LoadLicenseSession}
<p>Loads an existing session from storage using the given <code>session_id</code>.</p>
<p>If the session is not found, then the <code>license_session</code> will be closed.</p>
<ul>
<li>request <code>session_id</code> contains an identifier of which session should be
loaded from storage.</li>
<li>request <code>license_session</code> the server endpoint of the
<a class='link' href='#LicenseSession'>LicenseSession</a>.</li>
</ul>
#### Request {#ContentDecryptionModule.LoadLicenseSession_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>session_id</code></td>
<td>
<code><a class='link' href='#SessionId'>SessionId</a></code>
</td>
</tr>
<tr>
<td><code>license_session</code></td>
<td>
<code>server_end&lt;<a class='link' href='#LicenseSession'>LicenseSession</a>&gt;</code>
</td>
</tr>
</table>
### OnProvisioned {#ContentDecryptionModule.OnProvisioned}
<p>Indicates that the <code>ContentDecryptionModule</code> is provisioned.</p>
<p>In order to create <code>LicenseSession</code>s, a <code>ContentDecryptionModule</code> must
be provisioned. A <code>ContentDecryptionModule</code> is not considered
provisioned until it meets the requirements for the underlying DRM
system. The DRM system may not require provisioning, may only require
factory provisioning or may require both factory provisioning and
service instance provisioning.</p>
<p>If the <code>ContentDecryptionModule</code> has already has sufficient
provisioning, this event will be sent immediately upon creation. If the
<code>ContentDecryptionModule</code> has its provisioning removed, then the server
will close the channel and also close any active <code>LicenseSession</code>s or
Decryptors.</p>
<p>If the DRM system does not require provisioning at all, this
event should still be sent to notify the client that it can create
<code>LicenseSession</code>s.</p>
#### Response {#ContentDecryptionModule.OnProvisioned_Response}
&lt;EMPTY&gt;
### SetServerCertificate {#ContentDecryptionModule.SetServerCertificate}
<p>Sets the certificate to be used for encrypting outgoing messages.</p>
<ul>
<li>request <code>certificate</code> a buffer containing the certificate to be used.</li>
</ul>
<ul>
<li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li>
</ul>
#### Request {#ContentDecryptionModule.SetServerCertificate_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>certificate</code></td>
<td>
<code>vector&lt;uint8&gt;</code>
</td>
</tr>
</table>
#### Response {#ContentDecryptionModule.SetServerCertificate_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#ContentDecryptionModule_SetServerCertificate_Result'>ContentDecryptionModule_SetServerCertificate_Result</a></code>
</td>
</tr>
</table>
## KeySystem {#KeySystem}
*Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=12)*
### AddDataStore {#KeySystem.AddDataStore}
<p>Adds a client data store to the <code>KeySystem</code>.</p>
<p>DRM systems generate data on behalf of clients as part of provisioning
and license management. This data is only usable by the DRM system, but
the client is the owner of the data. The client controls the lifetime of
the data and can select which data set is to be used for a
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<ul>
<li>request <code>data_store_id</code> a client-assigned identifier for the data
store. The identifier is scoped to the <code>KeySystem</code> channel. It is
invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already
added <code>data_store_id</code> and the server should close the channel.</li>
<li>request <code>data_store_params</code> the parameters to be used for this data
store.</li>
</ul>
#### Request {#KeySystem.AddDataStore_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>data_store_params</code></td>
<td>
<code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code>
</td>
</tr>
</table>
#### Response {#KeySystem.AddDataStore_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code>
</td>
</tr>
</table>
### CreateContentDecryptionModule2 {#KeySystem.CreateContentDecryptionModule2}
<p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<p>Creates a <code>ContentDecryptionModule</code> that will use the associated data
store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the
<code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only
support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type.
If a <code>data_store_id</code> is provided, then the created
<code>ContentDecryptionModule</code> will persist data to that data store. If the
<code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or
the <code>KeySystem</code> does not support data stores and one was provided, then
the server should close the <code>cdm</code>.</p>
<p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a
<code>ZX_ERR_NOT_FOUND</code> epitaph.</p>
<ul>
<li>request <code>data_store_id</code> the data store that should be used by the
<code>ContentDecryptionModule</code>.</li>
<li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li>
</ul>
#### Request {#KeySystem.CreateContentDecryptionModule2_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>cdm</code></td>
<td>
<code>server_end&lt;<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>&gt;</code>
</td>
</tr>
</table>
### DestroyDataStoreAndConfirm {#KeySystem.DestroyDataStoreAndConfirm}
<p>Destroys the client data store.</p>
<p>This method permanently removes this data store and all of its contents.
All provisioning and license data will be removed and any active
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p>
<ul>
<li>request <code>data_store_id</code> the client-assigned identifier for the data
store to be removed. It is invalid for the client to provide
<a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously
been added or has been previously destroyed.</li>
</ul>
#### Request {#KeySystem.DestroyDataStoreAndConfirm_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
</table>
#### Response {#KeySystem.DestroyDataStoreAndConfirm_Response}
&lt;EMPTY&gt;
### GetProperties {#KeySystem.GetProperties}
<p>Get various static properties of the <code>KeySystem</code> implementation.</p>
<p>The properties include the capabilities and requirements of the
<code>KeySystem</code>, such as whether the implementation is hardware-based or
whether it requires client-provided data stores to operate.</p>
<ul>
<li>response <code>properties</code> the properties of the <code>KeySystem</code>
implementation.</li>
</ul>
#### Request {#KeySystem.GetProperties_Request}
&lt;EMPTY&gt;
#### Response {#KeySystem.GetProperties_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>properties</code></td>
<td>
<code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code>
</td>
</tr>
</table>
## LicenseSession {#LicenseSession}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=83)*
<p>A protocol for exchanging messages pertaining to the establishment of a
media license and the encryption keys associated with it.</p>
<p>If the client closes the <code>LicenseSession</code>, any derived Decryptors will also
be closed as the encryption keys will no longer be maintained.</p>
### CreateDecryptor {#LicenseSession.CreateDecryptor}
<p>Creates a Decryptor <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a> to be used to
decrypt content.</p>
<p>This <code>decryptor</code> would be restricted to only having access to the
keys maintained by this <a class='link' href='#LicenseSession'>LicenseSession</a>.</p>
<ul>
<li>request <code>params</code> the parameters with which to create the <code>decryptor</code>.</li>
<li>request <code>decryptor</code> the server endpoint of the
<code>fuchsia.media/StreamProcessor</code>.</li>
</ul>
#### Request {#LicenseSession.CreateDecryptor_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>params</code></td>
<td>
<code><a class='link' href='#DecryptorParams'>DecryptorParams</a></code>
</td>
</tr>
<tr>
<td><code>decryptor</code></td>
<td>
<code>server_end&lt;<a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a>&gt;</code>
</td>
</tr>
</table>
### GenerateLicenseRelease {#LicenseSession.GenerateLicenseRelease}
<p>Initiates the release process for the license session.</p>
<p>This will cause the <a class='link' href='#LicenseSession'>LicenseSession</a> to destroy the license and/or
keys associated with the session. If the session is temporary, the
session will send the reply for this request once the license has been
destroyed and then close the <code>LicenseSession</code> channel. If the session is
persistent, the session will send the reply for this request once the
license has been destroyed and then it will generate a license release
type <a class='link' href='#LicenseMessage'>LicenseMessage</a> through the <code>OnLicenseMessageGenerated</code> event.
The client must route that message to the license server and the
server's response to <code>ProcessLicenseServerMessage</code>. Once the
<code>LicenseSession</code> has received the license server's reply, it will close
the <code>LicenseSession</code> channel.</p>
<ul>
<li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li>
</ul>
#### Request {#LicenseSession.GenerateLicenseRelease_Request}
&lt;EMPTY&gt;
#### Response {#LicenseSession.GenerateLicenseRelease_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#LicenseSession_GenerateLicenseRelease_Result'>LicenseSession_GenerateLicenseRelease_Result</a></code>
</td>
</tr>
</table>
### GenerateLicenseRequest {#LicenseSession.GenerateLicenseRequest}
<p>Generates a license request for a session based on the <code>init_data</code>.</p>
<p>When the <a class='link' href='#LicenseMessage'>LicenseMessage</a> has been created, the
<code>OnLicenseMessageGenerated</code> event will be triggered with the message to
be sent to the license server.</p>
<ul>
<li>request <code>init_data</code> container-specific data that is used to generate a
<a class='link' href='#LicenseMessageType.REQUEST'>LicenseMessageType.REQUEST</a> <code>LicenseMessage</code>.</li>
</ul>
<ul>
<li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li>
</ul>
#### Request {#LicenseSession.GenerateLicenseRequest_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>init_data</code></td>
<td>
<code><a class='link' href='#LicenseInitData'>LicenseInitData</a></code>
</td>
</tr>
</table>
#### Response {#LicenseSession.GenerateLicenseRequest_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#LicenseSession_GenerateLicenseRequest_Result'>LicenseSession_GenerateLicenseRequest_Result</a></code>
</td>
</tr>
</table>
### OnKeyStatesChanged {#LicenseSession.OnKeyStatesChanged}
<p>Provides updated key state information.</p>
<p>Some examples on when this might occur would be on license creation,
expiration, renewal, or load of a persistent license session.</p>
<ul>
<li>response <code>key_states</code> a list of the key_ids and their related
<a class='link' href='#KeyStatusCode'>KeyStatusCode</a>s</li>
</ul>
#### Response {#LicenseSession.OnKeyStatesChanged_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>key_states</code></td>
<td>
<code>vector&lt;<a class='link' href='#KeyState'>KeyState</a>&gt;</code>
</td>
</tr>
</table>
### OnLicenseMessageGenerated {#LicenseSession.OnLicenseMessageGenerated}
<p>Provides a <a class='link' href='#LicenseMessage'>LicenseMessage</a> that should be sent to the license server.</p>
<p>The client is responsible for transporting this message to the license
server.</p>
<ul>
<li>response <code>request</code> a message from the <code>LicenseSession</code> that the client
should send to the license server.</li>
</ul>
#### Response {#LicenseSession.OnLicenseMessageGenerated_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>request</code></td>
<td>
<code><a class='link' href='#LicenseMessage'>LicenseMessage</a></code>
</td>
</tr>
</table>
### OnReady {#LicenseSession.OnReady}
<p>Indicates that the <a class='link' href='#LicenseSession'>LicenseSession</a> has successfully initialized.</p>
<p>This is always the first message sent by the <code>LicenseSession</code>.</p>
#### Response {#LicenseSession.OnReady_Response}
&lt;EMPTY&gt;
### ProcessLicenseResponse {#LicenseSession.ProcessLicenseResponse}
<p>Updates the <a class='link' href='#LicenseSession'>LicenseSession</a> with a message from the license server.</p>
<p>All responses from license requests, renewals, and releases should be
routed to the <code>LicenseSession</code> through this method.</p>
<ul>
<li>request <code>response</code> a message from the license server to update the
state of the <code>LicenseSession</code>.</li>
</ul>
<ul>
<li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li>
</ul>
#### Request {#LicenseSession.ProcessLicenseResponse_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>response</code></td>
<td>
<code><a class='link' href='#LicenseServerMessage'>LicenseServerMessage</a></code>
</td>
</tr>
</table>
#### Response {#LicenseSession.ProcessLicenseResponse_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#LicenseSession_ProcessLicenseResponse_Result'>LicenseSession_ProcessLicenseResponse_Result</a></code>
</td>
</tr>
</table>
## PlayReady {#PlayReady}
*Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=128)*
<p>A service hub providing access to the PlayReady key system.</p>
<p>If the client closes the <code>PlayReady</code> channel, derived
<code>ContentDecryptionModule</code>s will remain active.</p>
### AddDataStore {#PlayReady.AddDataStore}
<p>Adds a client data store to the <code>KeySystem</code>.</p>
<p>DRM systems generate data on behalf of clients as part of provisioning
and license management. This data is only usable by the DRM system, but
the client is the owner of the data. The client controls the lifetime of
the data and can select which data set is to be used for a
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<ul>
<li>request <code>data_store_id</code> a client-assigned identifier for the data
store. The identifier is scoped to the <code>KeySystem</code> channel. It is
invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already
added <code>data_store_id</code> and the server should close the channel.</li>
<li>request <code>data_store_params</code> the parameters to be used for this data
store.</li>
</ul>
#### Request {#PlayReady.AddDataStore_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>data_store_params</code></td>
<td>
<code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code>
</td>
</tr>
</table>
#### Response {#PlayReady.AddDataStore_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code>
</td>
</tr>
</table>
### CreateContentDecryptionModule2 {#PlayReady.CreateContentDecryptionModule2}
<p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<p>Creates a <code>ContentDecryptionModule</code> that will use the associated data
store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the
<code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only
support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type.
If a <code>data_store_id</code> is provided, then the created
<code>ContentDecryptionModule</code> will persist data to that data store. If the
<code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or
the <code>KeySystem</code> does not support data stores and one was provided, then
the server should close the <code>cdm</code>.</p>
<p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a
<code>ZX_ERR_NOT_FOUND</code> epitaph.</p>
<ul>
<li>request <code>data_store_id</code> the data store that should be used by the
<code>ContentDecryptionModule</code>.</li>
<li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li>
</ul>
#### Request {#PlayReady.CreateContentDecryptionModule2_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>cdm</code></td>
<td>
<code>server_end&lt;<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>&gt;</code>
</td>
</tr>
</table>
### DestroyDataStoreAndConfirm {#PlayReady.DestroyDataStoreAndConfirm}
<p>Destroys the client data store.</p>
<p>This method permanently removes this data store and all of its contents.
All provisioning and license data will be removed and any active
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p>
<ul>
<li>request <code>data_store_id</code> the client-assigned identifier for the data
store to be removed. It is invalid for the client to provide
<a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously
been added or has been previously destroyed.</li>
</ul>
#### Request {#PlayReady.DestroyDataStoreAndConfirm_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
</table>
#### Response {#PlayReady.DestroyDataStoreAndConfirm_Response}
&lt;EMPTY&gt;
### GetProperties {#PlayReady.GetProperties}
<p>Get various static properties of the <code>KeySystem</code> implementation.</p>
<p>The properties include the capabilities and requirements of the
<code>KeySystem</code>, such as whether the implementation is hardware-based or
whether it requires client-provided data stores to operate.</p>
<ul>
<li>response <code>properties</code> the properties of the <code>KeySystem</code>
implementation.</li>
</ul>
#### Request {#PlayReady.GetProperties_Request}
&lt;EMPTY&gt;
#### Response {#PlayReady.GetProperties_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>properties</code></td>
<td>
<code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code>
</td>
</tr>
</table>
## ProvisioningFetcher {#ProvisioningFetcher}
*Defined in [fuchsia.media.drm/provisioning.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/provisioning.fidl;l=43)*
<p>Fetches provisioning from a server.</p>
<p>Some DRM systems require additional runtime provisioning (also known as
individualization). This is a process by which a device receives DRM
credentials (e.g. a certificate) to use for license acquisition for an
individual content provider.</p>
<p>DRM systems use the <a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> to fetch the provisioning when
the system determines that it is needed.</p>
### Fetch {#ProvisioningFetcher.Fetch}
<p>Fetches provisioning from a server.</p>
<p>Called by the DRM system when it is in need of provisioning.</p>
<ul>
<li>request <code>request</code> a <a class='link' href='#ProvisioningRequest'>ProvisioningRequest</a> message to be provided to
a provisioning server.</li>
</ul>
<ul>
<li>response <code>response</code> a <a class='link' href='#ProvisioningResponse'>ProvisioningResponse</a> message from the
provisioning server.</li>
</ul>
#### Request {#ProvisioningFetcher.Fetch_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>request</code></td>
<td>
<code><a class='link' href='#ProvisioningRequest'>ProvisioningRequest</a></code>
</td>
</tr>
</table>
#### Response {#ProvisioningFetcher.Fetch_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>response</code></td>
<td>
<code><a class='link' href='#ProvisioningResponse'>ProvisioningResponse</a></code>
</td>
</tr>
</table>
## Widevine {#Widevine}
*Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=119)*
<p>A service hub providing access to the Widevine key system.</p>
<p>If the client closes the <code>Widevine</code> channel, derived
<code>ContentDecryptionModule</code>s will remain active.</p>
### AddDataStore {#Widevine.AddDataStore}
<p>Adds a client data store to the <code>KeySystem</code>.</p>
<p>DRM systems generate data on behalf of clients as part of provisioning
and license management. This data is only usable by the DRM system, but
the client is the owner of the data. The client controls the lifetime of
the data and can select which data set is to be used for a
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<ul>
<li>request <code>data_store_id</code> a client-assigned identifier for the data
store. The identifier is scoped to the <code>KeySystem</code> channel. It is
invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already
added <code>data_store_id</code> and the server should close the channel.</li>
<li>request <code>data_store_params</code> the parameters to be used for this data
store.</li>
</ul>
#### Request {#Widevine.AddDataStore_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>data_store_params</code></td>
<td>
<code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code>
</td>
</tr>
</table>
#### Response {#Widevine.AddDataStore_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code>
</td>
</tr>
</table>
### CreateContentDecryptionModule2 {#Widevine.CreateContentDecryptionModule2}
<p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p>
<p>Creates a <code>ContentDecryptionModule</code> that will use the associated data
store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the
<code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only
support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type.
If a <code>data_store_id</code> is provided, then the created
<code>ContentDecryptionModule</code> will persist data to that data store. If the
<code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or
the <code>KeySystem</code> does not support data stores and one was provided, then
the server should close the <code>cdm</code>.</p>
<p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a
<code>ZX_ERR_NOT_FOUND</code> epitaph.</p>
<ul>
<li>request <code>data_store_id</code> the data store that should be used by the
<code>ContentDecryptionModule</code>.</li>
<li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li>
</ul>
#### Request {#Widevine.CreateContentDecryptionModule2_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>cdm</code></td>
<td>
<code>server_end&lt;<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>&gt;</code>
</td>
</tr>
</table>
### DestroyDataStoreAndConfirm {#Widevine.DestroyDataStoreAndConfirm}
<p>Destroys the client data store.</p>
<p>This method permanently removes this data store and all of its contents.
All provisioning and license data will be removed and any active
<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p>
<ul>
<li>request <code>data_store_id</code> the client-assigned identifier for the data
store to be removed. It is invalid for the client to provide
<a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously
been added or has been previously destroyed.</li>
</ul>
#### Request {#Widevine.DestroyDataStoreAndConfirm_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>data_store_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
</table>
#### Response {#Widevine.DestroyDataStoreAndConfirm_Response}
&lt;EMPTY&gt;
### GetProperties {#Widevine.GetProperties}
<p>Get various static properties of the <code>KeySystem</code> implementation.</p>
<p>The properties include the capabilities and requirements of the
<code>KeySystem</code>, such as whether the implementation is hardware-based or
whether it requires client-provided data stores to operate.</p>
<ul>
<li>response <code>properties</code> the properties of the <code>KeySystem</code>
implementation.</li>
</ul>
#### Request {#Widevine.GetProperties_Request}
&lt;EMPTY&gt;
#### Response {#Widevine.GetProperties_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>properties</code></td>
<td>
<code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code>
</td>
</tr>
</table>
## **STRUCTS**
### ContentDecryptionModule_SetServerCertificate_Response {#ContentDecryptionModule_SetServerCertificate_Response data-text="ContentDecryptionModule_SetServerCertificate_Response"}
*Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=51)*
&lt;EMPTY&gt;
### KeySystem_AddDataStore_Response {#KeySystem_AddDataStore_Response data-text="KeySystem_AddDataStore_Response"}
*Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=42)*
&lt;EMPTY&gt;
### LicenseInitData {#LicenseInitData data-text="LicenseInitData"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=32)*
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="LicenseInitData.type">
<td><code>type</code></td>
<td>
<code><a class='link' href='#LicenseInitDataType'>LicenseInitDataType</a></code>
</td>
<td><p>The type is a string that indicates the format of the accompanying init
data. Common types include &quot;cenc&quot;, &quot;keyids&quot;, &quot;webm&quot;, and &quot;hls&quot;. CDMs may
also define their own.</p>
</td>
<td>No default</td>
</tr>
<tr id="LicenseInitData.data">
<td><code>data</code></td>
<td>
<code>vector&lt;uint8&gt;</code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
### LicenseMessage [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#LicenseMessage data-text="LicenseMessage"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=42)*
<p>A message originating from the <a class='link' href='#LicenseSession'>LicenseSession</a> that the caller must route
to the license server.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="LicenseMessage.type">
<td><code>type</code></td>
<td>
<code><a class='link' href='#LicenseMessageType'>LicenseMessageType</a></code>
</td>
<td></td>
<td>No default</td>
</tr>
<tr id="LicenseMessage.message">
<td><code>message</code></td>
<td>
<code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
### LicenseServerMessage [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#LicenseServerMessage data-text="LicenseServerMessage"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=49)*
<p>A message originating from the license server that the caller must provide
to the <a class='link' href='#LicenseSession'>LicenseSession</a> via <code>ProcessLicenseServerMessage</code>.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="LicenseServerMessage.message">
<td><code>message</code></td>
<td>
<code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
### LicenseSession_GenerateLicenseRelease_Response {#LicenseSession_GenerateLicenseRelease_Response data-text="LicenseSession_GenerateLicenseRelease_Response"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=117)*
&lt;EMPTY&gt;
### LicenseSession_GenerateLicenseRequest_Response {#LicenseSession_GenerateLicenseRequest_Response data-text="LicenseSession_GenerateLicenseRequest_Response"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=100)*
&lt;EMPTY&gt;
### LicenseSession_ProcessLicenseResponse_Response {#LicenseSession_ProcessLicenseResponse_Response data-text="LicenseSession_ProcessLicenseResponse_Response"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=129)*
&lt;EMPTY&gt;
### ProvisioningRequest [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#ProvisioningRequest data-text="ProvisioningRequest"}
*Defined in [fuchsia.media.drm/provisioning.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/provisioning.fidl;l=11)*
<p>Message passed to a <a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> by a DRM system, to pass on to
the provisioning server.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="ProvisioningRequest.default_provisioning_server_url">
<td><code>default_provisioning_server_url</code></td>
<td>
<code><a class='link' href='../fuchsia.url/'>fuchsia.url</a>/<a class='link' href='../fuchsia.url/#Url'>Url</a></code>
</td>
<td><p>A suggested server to send the <code>message</code> to.</p>
</td>
<td>No default</td>
</tr>
<tr id="ProvisioningRequest.message">
<td><code>message</code></td>
<td>
<code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code>
</td>
<td><p>The DRM system specific provisioning request message body to be
delivered to the provisioning server. The VMO must at least have the
following rights:
ZX_RIGHT_READ
ZX_RIGHT_TRANSFER</p>
</td>
<td>No default</td>
</tr>
</table>
### ProvisioningResponse [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#ProvisioningResponse data-text="ProvisioningResponse"}
*Defined in [fuchsia.media.drm/provisioning.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/provisioning.fidl;l=25)*
<p>Message originating from the provisioning server that the
<a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> must pass back to the DRM system.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="ProvisioningResponse.message">
<td><code>message</code></td>
<td>
<code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code>
</td>
<td><p>The DRM system specific provisioning response message body received from
the provisioning server. The VMO must at least have the following
rights:
ZX_RIGHT_READ
ZX_RIGHT_TRANSFER</p>
</td>
<td>No default</td>
</tr>
</table>
## **ENUMS**
### Error [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Error data-text="Error"}
Type: <code>uint32</code>
*Defined in [fuchsia.media.drm/error.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/error.fidl;l=12)*
<p>Standard error codes for DRM related protocols. Many of the error code names
originate from the <a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a> specification to cover
common CDM exception cases.</p>
<p><a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a>:
https://www.w3.org/TR/encrypted-media</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="Error.TYPE">
<td><h3 id="Error.TYPE" class="add-link hide-from-toc">TYPE</h3></td>
<td><code>1</code></td>
<td><p>An error that occurs when the client provides invalid parameter data to
the server, such as an invalid license response message.</p>
</td>
</tr>
<tr id="Error.NOT_SUPPORTED">
<td><h3 id="Error.NOT_SUPPORTED" class="add-link hide-from-toc">NOT_SUPPORTED</h3></td>
<td><code>2</code></td>
<td><p>An error that occurs when a requested operation is not supported by the
CDM, such as a license generation request with an unknown initialization
data type.</p>
</td>
</tr>
<tr id="Error.INVALID_STATE">
<td><h3 id="Error.INVALID_STATE" class="add-link hide-from-toc">INVALID_STATE</h3></td>
<td><code>3</code></td>
<td><p>An error that occurs when the CDM is not in a proper state to perform
the requested operation, such as calling
<a class='link' href='#LicenseSession.GenerateLicenseRequest'>LicenseSession.GenerateLicenseRequest</a> when the <a class='link' href='#LicenseSession'>LicenseSession</a>
has already started the license release process.</p>
</td>
</tr>
<tr id="Error.QUOTA_EXCEEDED">
<td><h3 id="Error.QUOTA_EXCEEDED" class="add-link hide-from-toc">QUOTA_EXCEEDED</h3></td>
<td><code>4</code></td>
<td><p>An error that occurs when a requested action would exceed allowable
limits, such as attempting to load an already opened session. </p>
</td>
</tr>
<tr id="Error.INTERNAL">
<td><h3 id="Error.INTERNAL" class="add-link hide-from-toc">INTERNAL</h3></td>
<td><code>100</code></td>
<td><p>An internal, unexpected error that is not actionable by the client.</p>
</td>
</tr>
<tr id="Error.NOT_PROVISIONED">
<td><h3 id="Error.NOT_PROVISIONED" class="add-link hide-from-toc">NOT_PROVISIONED</h3></td>
<td><code>101</code></td>
<td><p>An error that occurs when the CDM is not usable because it requires
additional provisioning.</p>
</td>
</tr>
</table>
### KeyStatus [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#KeyStatus data-text="KeyStatus"}
Type: <code>uint32</code>
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=53)*
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="KeyStatus.USABLE">
<td><h3 id="KeyStatus.USABLE" class="add-link hide-from-toc">USABLE</h3></td>
<td><code>0</code></td>
<td><p>The key is currently usable for decryption.</p>
</td>
</tr>
<tr id="KeyStatus.EXPIRED">
<td><h3 id="KeyStatus.EXPIRED" class="add-link hide-from-toc">EXPIRED</h3></td>
<td><code>1</code></td>
<td><p>The Key is no longer usable for decryption because it has expired.</p>
</td>
</tr>
<tr id="KeyStatus.RELEASED">
<td><h3 id="KeyStatus.RELEASED" class="add-link hide-from-toc">RELEASED</h3></td>
<td><code>2</code></td>
<td><p>The Key is no longer usable for decryption, but is still known to the
CDM.</p>
</td>
</tr>
<tr id="KeyStatus.OUTPUT_RESTRICTED">
<td><h3 id="KeyStatus.OUTPUT_RESTRICTED" class="add-link hide-from-toc">OUTPUT_RESTRICTED</h3></td>
<td><code>3</code></td>
<td><p>The Key has output restrictions that cannot currently be met and may be
unusable for decryption.</p>
</td>
</tr>
<tr id="KeyStatus.OUTPUT_DOWNSCALED">
<td><h3 id="KeyStatus.OUTPUT_DOWNSCALED" class="add-link hide-from-toc">OUTPUT_DOWNSCALED</h3></td>
<td><code>4</code></td>
<td><p>The Key has output restrictions that cannot currently be met. The Key
may be usable for decryption with lower quality content.</p>
</td>
</tr>
<tr id="KeyStatus.STATUS_PENDING">
<td><h3 id="KeyStatus.STATUS_PENDING" class="add-link hide-from-toc">STATUS_PENDING</h3></td>
<td><code>5</code></td>
<td><p>The Key is not yet known or usable for decryption.</p>
</td>
</tr>
<tr id="KeyStatus.INTERNAL_ERROR">
<td><h3 id="KeyStatus.INTERNAL_ERROR" class="add-link hide-from-toc">INTERNAL_ERROR</h3></td>
<td><code>6</code></td>
<td><p>The Key is not usable for decryption because of an internal error.</p>
</td>
</tr>
</table>
### LicenseMessageType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseMessageType data-text="LicenseMessageType"}
Type: <code>uint32</code>
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=26)*
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="LicenseMessageType.REQUEST">
<td><h3 id="LicenseMessageType.REQUEST" class="add-link hide-from-toc">REQUEST</h3></td>
<td><code>1</code></td>
<td></td>
</tr>
<tr id="LicenseMessageType.RENEWAL">
<td><h3 id="LicenseMessageType.RENEWAL" class="add-link hide-from-toc">RENEWAL</h3></td>
<td><code>2</code></td>
<td></td>
</tr>
<tr id="LicenseMessageType.RELEASE">
<td><h3 id="LicenseMessageType.RELEASE" class="add-link hide-from-toc">RELEASE</h3></td>
<td><code>3</code></td>
<td></td>
</tr>
</table>
### LicenseSessionType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSessionType data-text="LicenseSessionType"}
Type: <code>uint32</code>
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=16)*
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="LicenseSessionType.TEMPORARY">
<td><h3 id="LicenseSessionType.TEMPORARY" class="add-link hide-from-toc">TEMPORARY</h3></td>
<td><code>1</code></td>
<td><p>A session for which the license, keys, and record of the session are not
persisted.</p>
</td>
</tr>
<tr id="LicenseSessionType.PERSISTENT_LICENSE">
<td><h3 id="LicenseSessionType.PERSISTENT_LICENSE" class="add-link hide-from-toc">PERSISTENT_LICENSE</h3></td>
<td><code>2</code></td>
<td><p>A session for which the license, keys, and record of the session will be
persisted for offline use and can subsequently be loaded using
LoadSession().</p>
</td>
</tr>
</table>
### Requirement [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Requirement data-text="Requirement"}
Type: <code>uint32</code>
*Defined in [fuchsia.media.drm/properties.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/properties.fidl;l=15)*
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="Requirement.NOT_SUPPORTED">
<td><h3 id="Requirement.NOT_SUPPORTED" class="add-link hide-from-toc">NOT_SUPPORTED</h3></td>
<td><code>1</code></td>
<td></td>
</tr>
<tr id="Requirement.OPTIONAL">
<td><h3 id="Requirement.OPTIONAL" class="add-link hide-from-toc">OPTIONAL</h3></td>
<td><code>2</code></td>
<td></td>
</tr>
<tr id="Requirement.REQUIRED">
<td><h3 id="Requirement.REQUIRED" class="add-link hide-from-toc">REQUIRED</h3></td>
<td><code>3</code></td>
<td></td>
</tr>
</table>
## **TABLES**
### DataStoreParams [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#DataStoreParams data-text="DataStoreParams"}
*Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=82)*
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="DataStoreParams.data_directory">
<td><h3 id="DataStoreParams.data_directory" class="add-link hide-from-toc">1</h3></td>
<td><code>data_directory</code></td>
<td>
<code><a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Directory'>Directory</a></code>
</td>
<td><p>Directory into which this data store should write persistent
provisioning and licenses, or their proxy. This field is required.</p>
</td>
</tr>
<tr id="DataStoreParams.provision_server_certificate">
<td><h3 id="DataStoreParams.provision_server_certificate" class="add-link hide-from-toc">2</h3></td>
<td><code>provision_server_certificate</code></td>
<td>
<code>vector&lt;uint8&gt;</code>
</td>
<td><p>Certificate to use for encrypting provisioning messages. This field is
optional.</p>
</td>
</tr>
<tr id="DataStoreParams.provisioning_fetcher">
<td><h3 id="DataStoreParams.provisioning_fetcher" class="add-link hide-from-toc">3</h3></td>
<td><code>provisioning_fetcher</code></td>
<td>
<code><a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a></code>
</td>
<td><p>The client endpoint of the <a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> to be used when this
data store requires provisioning. If the DRM system requires data store
provisioning, then this field is required to be set. Otherwise, it is
optional.</p>
</td>
</tr>
</table>
### DecryptorParams {#DecryptorParams data-text="DecryptorParams"}
*Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=8)*
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="DecryptorParams.require_secure_mode">
<td><h3 id="DecryptorParams.require_secure_mode" class="add-link hide-from-toc">1</h3></td>
<td><code>require_secure_mode</code></td>
<td>
<code>bool</code>
</td>
<td><p>Requires the decryptor <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a> to only output
to secure buffers.</p>
</td>
</tr>
<tr id="DecryptorParams.input_details">
<td><h3 id="DecryptorParams.input_details" class="add-link hide-from-toc">2</h3></td>
<td><code>input_details</code></td>
<td>
<code><a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#FormatDetails'>FormatDetails</a></code>
</td>
<td><p>Initial format details for the <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a>.</p>
</td>
</tr>
</table>
### KeyState {#KeyState data-text="KeyState"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=73)*
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="KeyState.key_id">
<td><h3 id="KeyState.key_id" class="add-link hide-from-toc">1</h3></td>
<td><code>key_id</code></td>
<td>
<code><a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#KeyId'>KeyId</a></code>
</td>
<td></td>
</tr>
<tr id="KeyState.status">
<td><h3 id="KeyState.status" class="add-link hide-from-toc">2</h3></td>
<td><code>status</code></td>
<td>
<code><a class='link' href='#KeyStatus'>KeyStatus</a></code>
</td>
<td></td>
</tr>
</table>
### KeySystemProperties {#KeySystemProperties data-text="KeySystemProperties"}
*Defined in [fuchsia.media.drm/properties.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/properties.fidl;l=21)*
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="KeySystemProperties.features">
<td><h3 id="KeySystemProperties.features" class="add-link hide-from-toc">1</h3></td>
<td><code>features</code></td>
<td>
<code><a class='link' href='#Features'>Features</a></code>
</td>
<td><p>Various flags indicating supported features of the <a class='link' href='#KeySystem'>KeySystem</a>. This
field is required.</p>
</td>
</tr>
<tr id="KeySystemProperties.data_store_requirement">
<td><h3 id="KeySystemProperties.data_store_requirement" class="add-link hide-from-toc">2</h3></td>
<td><code>data_store_requirement</code></td>
<td>
<code><a class='link' href='#Requirement'>Requirement</a></code>
</td>
<td><p>Indicates the data store requirements of the <a class='link' href='#KeySystem'>KeySystem</a>.</p>
<p>See <a class='link' href='#KeySystem.ContentDecryptionModule2'>KeySystem.ContentDecryptionModule2</a> for implications of different
values. This field is required.</p>
</td>
</tr>
<tr id="KeySystemProperties.license_session_types">
<td><h3 id="KeySystemProperties.license_session_types" class="add-link hide-from-toc">3</h3></td>
<td><code>license_session_types</code></td>
<td>
<code>vector&lt;<a class='link' href='#LicenseSessionType'>LicenseSessionType</a>&gt;</code>
</td>
<td><p>Indicates the supported license session types. This field is required
and the list must not be empty.</p>
</td>
</tr>
<tr id="KeySystemProperties.init_data_types">
<td><h3 id="KeySystemProperties.init_data_types" class="add-link hide-from-toc">4</h3></td>
<td><code>init_data_types</code></td>
<td>
<code>vector&lt;string&gt;</code>
</td>
<td><p>Indicates the supported init data types. This field is required and the
list must not be empty.</p>
</td>
</tr>
<tr id="KeySystemProperties.encryption_schemes">
<td><h3 id="KeySystemProperties.encryption_schemes" class="add-link hide-from-toc">5</h3></td>
<td><code>encryption_schemes</code></td>
<td>
<code>vector&lt;string&gt;</code>
</td>
<td><p>Indicates the supported encryption schemes. This field is required and
the list must not be empty.</p>
</td>
</tr>
</table>
## **UNIONS**
### ContentDecryptionModule_SetServerCertificate_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#ContentDecryptionModule_SetServerCertificate_Result data-text="ContentDecryptionModule_SetServerCertificate_Result"}
*Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=51)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="ContentDecryptionModule_SetServerCertificate_Result.response">
<td><h3 id="ContentDecryptionModule_SetServerCertificate_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#ContentDecryptionModule_SetServerCertificate_Response'>ContentDecryptionModule_SetServerCertificate_Response</a></code>
</td>
<td></td>
</tr>
<tr id="ContentDecryptionModule_SetServerCertificate_Result.err">
<td><h3 id="ContentDecryptionModule_SetServerCertificate_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### KeySystem_AddDataStore_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#KeySystem_AddDataStore_Result data-text="KeySystem_AddDataStore_Result"}
*Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=42)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="KeySystem_AddDataStore_Result.response">
<td><h3 id="KeySystem_AddDataStore_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#KeySystem_AddDataStore_Response'>KeySystem_AddDataStore_Response</a></code>
</td>
<td></td>
</tr>
<tr id="KeySystem_AddDataStore_Result.err">
<td><h3 id="KeySystem_AddDataStore_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### LicenseSession_GenerateLicenseRelease_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSession_GenerateLicenseRelease_Result data-text="LicenseSession_GenerateLicenseRelease_Result"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=117)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="LicenseSession_GenerateLicenseRelease_Result.response">
<td><h3 id="LicenseSession_GenerateLicenseRelease_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#LicenseSession_GenerateLicenseRelease_Response'>LicenseSession_GenerateLicenseRelease_Response</a></code>
</td>
<td></td>
</tr>
<tr id="LicenseSession_GenerateLicenseRelease_Result.err">
<td><h3 id="LicenseSession_GenerateLicenseRelease_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### LicenseSession_GenerateLicenseRequest_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSession_GenerateLicenseRequest_Result data-text="LicenseSession_GenerateLicenseRequest_Result"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=100)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="LicenseSession_GenerateLicenseRequest_Result.response">
<td><h3 id="LicenseSession_GenerateLicenseRequest_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#LicenseSession_GenerateLicenseRequest_Response'>LicenseSession_GenerateLicenseRequest_Response</a></code>
</td>
<td></td>
</tr>
<tr id="LicenseSession_GenerateLicenseRequest_Result.err">
<td><h3 id="LicenseSession_GenerateLicenseRequest_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### LicenseSession_ProcessLicenseResponse_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSession_ProcessLicenseResponse_Result data-text="LicenseSession_ProcessLicenseResponse_Result"}
*Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=129)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="LicenseSession_ProcessLicenseResponse_Result.response">
<td><h3 id="LicenseSession_ProcessLicenseResponse_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#LicenseSession_ProcessLicenseResponse_Response'>LicenseSession_ProcessLicenseResponse_Response</a></code>
</td>
<td></td>
</tr>
<tr id="LicenseSession_ProcessLicenseResponse_Result.err">
<td><h3 id="LicenseSession_ProcessLicenseResponse_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
## **BITS**
### Features [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Features}
Type: <code>uint32</code>
*Defined in [fuchsia.media.drm/properties.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/properties.fidl;l=6)*
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="Features.HARDWARE_CRYPTO">
<td><h3 id="Features.HARDWARE_CRYPTO" class="add-link hide-from-toc">HARDWARE_CRYPTO</h3></td>
<td>1</td>
<td><p>All key management and crypto operations are performed in a hardware
based trusted execution environment. If not set, a software
implementation is used.</p>
</td>
</tr>
<tr id="Features.SECURE_OUTPUT">
<td><h3 id="Features.SECURE_OUTPUT" class="add-link hide-from-toc">SECURE_OUTPUT</h3></td>
<td>2</td>
<td><p>Decrypted data can be written to hardware secure buffers.</p>
</td>
</tr>
</table>
## **CONSTANTS**
<table>
<tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr>
<tr id="LICENSE_INIT_DATA_TYPE_CENC">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=11">LICENSE_INIT_DATA_TYPE_CENC</a></td>
<td><code>cenc</code></td>
<td><code>String</code></td>
<td></td>
</tr>
<tr id="LICENSE_INIT_DATA_TYPE_HLS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=14">LICENSE_INIT_DATA_TYPE_HLS</a></td>
<td><code>hls</code></td>
<td><code>String</code></td>
<td></td>
</tr>
<tr id="LICENSE_INIT_DATA_TYPE_KEYIDS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=12">LICENSE_INIT_DATA_TYPE_KEYIDS</a></td>
<td><code>keyids</code></td>
<td><code>String</code></td>
<td></td>
</tr>
<tr id="LICENSE_INIT_DATA_TYPE_WEBM">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=13">LICENSE_INIT_DATA_TYPE_WEBM</a></td>
<td><code>webm</code></td>
<td><code>String</code></td>
<td></td>
</tr>
<tr id="MAX_HDCP_VERSION_SIZE">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=10">MAX_HDCP_VERSION_SIZE</a></td>
<td>
<code>16</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
<tr id="MAX_LICENSE_INIT_DATA_TYPE_SIZE">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=9">MAX_LICENSE_INIT_DATA_TYPE_SIZE</a></td>
<td>
<code>100</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
<tr id="MAX_SESSION_ID_SIZE">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=8">MAX_SESSION_ID_SIZE</a></td>
<td>
<code>512</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
<tr id="NO_DATA_STORE">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=10">NO_DATA_STORE</a></td>
<td>
<code>0</code>
</td>
<td><code>uint32</code></td>
<td><p>A sentinel value for use with <a class='link' href='#KeySystem.CreateContentDecryptionModule2'>KeySystem.CreateContentDecryptionModule2</a>
to create a <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> without a client data store.</p>
</td>
</tr>
</table>
## **ALIASES**
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="EncryptionScheme">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=15">EncryptionScheme</a></td>
<td>
<code>string</code></td>
<td></td>
</tr>
<tr id="HdcpVersion">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=14">HdcpVersion</a></td>
<td>
<code>string</code>[<code><a class='link' href='#MAX_HDCP_VERSION_SIZE'>MAX_HDCP_VERSION_SIZE</a></code>]</td>
<td></td>
</tr>
<tr id="LicenseInitDataType">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=13">LicenseInitDataType</a></td>
<td>
<code>string</code>[<code><a class='link' href='#MAX_LICENSE_INIT_DATA_TYPE_SIZE'>MAX_LICENSE_INIT_DATA_TYPE_SIZE</a></code>]</td>
<td></td>
</tr>
<tr id="SessionId">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=12">SessionId</a></td>
<td>
<code>string</code>[<code><a class='link' href='#MAX_SESSION_ID_SIZE'>MAX_SESSION_ID_SIZE</a></code>]</td>
<td></td>
</tr>
</table>