// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// TODO(xhwang): Move this out of media if it is needed anywhere else.
module media.mojom;

interface PlatformVerification {
  // Allows authorized services to verify that the underlying platform is
  // trusted. An example of a trusted platform is a Chrome OS device in
  // verified boot mode. This can be used for protected content playback.
  //
  // Input parameters:
  // - |service_id|: the service ID for the |challenge|.
  // - |challenge|: the challenge data.
  //
  // Output parameters:
  // - |success|: whether the platform is successfully verified. If true/false
  //              the following 3 parameters should be non-empty/empty.
  // - |signed_data|: the data signed by the platform.
  // - |signed_data_signature|: the signature of the signed data block.
  // - |platform_key_certificate|: the device specific certificate for the
  //                               requested service.
  ChallengePlatform(string service_id, string challenge) =>
      (bool success,
       string signed_data,
       string signed_data_signature,
       string platform_key_certificate);

  // Requests a particular version of the device's Storage Id (or latest
  // available version if 0 is specified). This returns the requested
  // |storage_id|, which may be empty if it is not supported by the platform.
  GetStorageId(uint32 version) => (uint32 version, array<uint8> storage_id);
};
