<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>

## **TYPE 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>