// 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.kms;

const uint8 MAX_HARDWARE_DERIVE_KEY_INFO_SIZE = 32;
const uint8 MAX_HARDWARE_DERIVED_KEY_SIZE = 32;

[Discoverable]
protocol StatelessKeyManager {
    /// Get a hardware key derived key.
    ///
    /// Get a key derived from hardware root key using `key_info` as info and the trusted app ID
    /// as salt. This call is deterministic and always returns the same result if given the same
    /// `key_info` on the same device and would be different across different devices if they have
    /// different hardware keys.
    GetHardwareDerivedKey(
        vector<uint8>:MAX_HARDWARE_DERIVE_KEY_INFO_SIZE key_info
        ) -> (vector<uint8>:MAX_HARDWARE_DERIVED_KEY_SIZE derived_key) error Error;
};
