158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/**
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * This file defines the API for platform verification. Currently, it only
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * supports Chrome OS.
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)[generate_thunk]
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)label Chrome {
148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  M32 = 0.2
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/**
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * The <code>PPB_PlatformVerification_Private</code> interface allows authorized
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * services to verify that the underlying platform is trusted. An example of a
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * trusted platform is a Chrome OS device in verified boot mode.
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)interface PPB_PlatformVerification_Private {
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  /**
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Create() creates a <code>PPB_PlatformVerification_Private</code> object.
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @pram[in] instance A <code>PP_Instance</code> identifying one instance of
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * a module.
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @return A <code>PP_Resource</code> corresponding to a
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PPB_PlatformVerification_Private</code> if successful, 0 if creation
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * failed.
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   */
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  PP_Resource Create([in] PP_Instance instance);
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  /**
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * IsPlatformVerification() determines if the provided resource is a
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PPB_PlatformVerification_Private</code>.
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PPB_PlatformVerification_Private</code>.
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @return <code>PP_TRUE</code> if the resource is a
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PPB_PlatformVerification_Private</code>, <code>PP_FALSE</code> if the
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * resource is invalid or some type other than
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PPB_PlatformVerification_Private</code>.
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   */
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  PP_Bool IsPlatformVerification([in] PP_Resource resource);
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  /**
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Requests a platform challenge for a given service id.
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] service_id A <code>PP_Var</code> of type
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PP_VARTYPE_STRING</code> containing the service_id for the challenge.
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] challenge A <code>PP_Var</code> of type
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PP_VARTYPE_ARRAY_BUFFER</code> that contains the challenge data.
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[out] signed_data A <code>PP_Var</code> of type
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PP_VARTYPE_ARRAY_BUFFER</code> that contains the data signed by the
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * platform.
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[out] signed_data_signature A <code>PP_Var</code> of type
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PP_VARTYPE_ARRAY_BUFFER</code> that contains the signature of the
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * signed data block.
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[out] platform_key_certificate A <code>PP_Var</code> of type
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PP_VARTYPE_STRING</code> that contains the device specific
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * certificate for the requested service_id.
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called after
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * the platform challenge has been completed. This callback will only run if
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * the return code is <code>PP_OK_COMPLETIONPENDING</code>.
7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   */
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  int32_t ChallengePlatform(
7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      [in] PP_Resource instance,
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      [in] PP_Var service_id,
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      [in] PP_Var challenge,
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      [out] PP_Var signed_data,
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      [out] PP_Var signed_data_signature,
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      [out] PP_Var platform_key_certificate,
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      [in] PP_CompletionCallback callback);
8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
86