// 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
        ) -> (Status status, vector<uint8>:MAX_HARDWARE_DERIVED_KEY_SIZE derived_key);
};
