blob: aa405a5517dd97046058099487742dc3cbef1677 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.media.drm;
using fuchsia.mem;
using fuchsia.url;
enum ProvisioningStatus {
NOT_PROVISIONED = 1;
PROVISIONED = 2;
};
/// Message passed to a [`ProvisioningFetcher`] by a DRM system, to pass on to
/// the provisioning server.
struct ProvisioningRequest {
/// A suggested server to send the `message` to.
fuchsia.url.Url? default_provisioning_server_url;
/// 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
fuchsia.mem.Buffer message;
};
/// Message originating from the provisioning server that the
/// [`ProvisioningFetcher`] must pass back to the DRM system.
struct ProvisioningResponse {
/// 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
fuchsia.mem.Buffer message;
};
/// Fetches provisioning from a server.
///
/// 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.
///
/// DRM systems use the [`ProvisioningFetcher`] to fetch the provisioning when
/// the system determines that it is needed.
protocol ProvisioningFetcher {
/// Fetches provisioning from a server.
///
/// Called by the DRM system when it is in need of provisioning.
///
/// + request `request` a [`ProvisioningRequest`] message to be provided to
/// a provisioning server.
/// - response `response` a [`ProvisioningResponse`] message from the
/// provisioning server.
Fetch(ProvisioningRequest request) -> (ProvisioningResponse response);
};
/// A protocol for exchanging messages pertaining to the establishment of a
/// provisioning certificate.
///
/// DEPRECATED: See [`KeySystem.AddDataStore`] instead.
[Deprecated]
protocol Provisioner {
/// Gets the current status of provisioning for this service instance.
///
/// - response `status` indicates whether the service instance is
/// sufficiently provisioned.
GetStatus() -> (ProvisioningStatus status);
/// Sets the certificate to be used for encrypting outgoing messages.
///
/// + request `certificate` a buffer containing the certificate to be used.
/// * error an [`Error`] indicating the reason for failure.
SetServerCertificate(bytes certificate) -> () error Error;
/// Generates a provisioning request for this service instance.
///
/// If the underlying DRM system requires provisioning for individual
/// providers (the owner of the service instance), then this method can be
/// used to generate [`ProvisioningRequest`]s. This message must be routed
/// to the provisioning server by the client and the server's response must
/// be routed back to `ProcessProvisioningResponse`.
///
/// - response `request` a `ProvisioningRequest` message to be provided to a
/// provisioning server in order to receiving a provisioning certificate.
GenerateProvisioningRequest() -> (ProvisioningRequest request);
/// Updates the [`Provisioner`] with a message from the provisioning server.
///
/// Not all underlying DRM systems will require provisioning for individual
/// providers. If they do, this method will carry the provisioning message
/// to the service instance so that it may persistently store the provider
/// certificate.
///
/// + request `response` a [`ProvisioningResponse`] from the provisioning
/// server. It should contain the provisioning certificate.
/// * error an [`Error`] indicating the reason for failure.
ProcessProvisioningResponse(ProvisioningResponse response)
-> () error Error;
/// Removes all provider based provisioning for this service instance.
///
/// Any active [`ContentDecryptionModule`]s on this service instance that
/// relied on this provisioning will be closed, as they will no longer be
/// usable without it. This does not impact any factory provisioning.
RemoveProvisioning();
};