// 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.bluetooth.control;

/// The security level required for this pairing - corresponds to the security
/// levels defined in the Security Manager Protocol in Vol 3, Part H, Section 2.3.1
enum PairingSecurityLevel {
    /// Encrypted without MITM protection (unauthenticated)
    ENCRYPTED = 1;

    /// Encrypted with MITM protection (authenticated), although this level of security does not
    /// fully protect against passive eavesdroppers
    AUTHENTICATED = 2;
};

/// Parameters that give a caller more fine-grained control over the pairing process. All of the
/// fields of this table are optional and pairing can still succeed if none of them are set.
table PairingOptions {
    /// Only relevant for LE. If present, determines the Security Manager security level to pair
    /// with. If not present, defaults to PairingSecurityLevel.AUTHENTICATED.
    1: PairingSecurityLevel le_security_level;

    /// If not present or false, the pairing will default to bondable mode. Otherwise, setting this
    /// parameter to true will initiate a non-bondable pairing.
    ///
    /// TODO(fxb/42403): Only implemented for LE transport. Support this for BR/EDR.
    2: bool non_bondable;

    /// If transport is LOW_ENERGY or CLASSIC, pairing will be performed over the transport
    /// corresponding to the specified technology, which must already be connected. If transport
    /// is not present or DUAL_MODE, the pairing will be performed over whichever transport is
    /// connected, and defaults to LE for dual-mode connections.
    3: TechnologyType transport;
};
