// Copyright 2022 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.tpm;

using zx;

/// Defines the ownership status of the TPM.
type OwnershipStatus = flexible enum : uint8 {
    /// The TPM does not have an owner.
    UNOWNED = 1;
    /// The TPM is owned by Fuchsia.
    OWNED = 2;
    /// The TPM is owned by a non-Fuchsia operating system.
    PRE_OWNED = 3;
};

/// The fuchsia.tpm.Provision interface is intended to check if the TPM has
/// an owner and to take ownership of the TPM if it isn't owned.
@discoverable
closed protocol Provision {
    /// Returns the OwnershipStatus of the TPM.
    strict IsOwned() -> (struct {
        ownership OwnershipStatus;
    }) error zx.Status;

    /// TakeOwnership is a one time setup call that is required on operating
    /// system install or after a factory reset.
    strict TakeOwnership(table {}) -> () error zx.Status;
};
