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