// Copyright 2020 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.sys;

/// 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;
};

/// Whether or not the device should form a bluetooth bond during the pairing prodecure.
/// As described in Core Spec v5.2 | Vol 3, Part C, Sec 4.3
enum BondableMode {
    /// The device will form a bond during pairing with peers
    BONDABLE = 1;
    /// The device will not form a bond during pairing with peers
    NON_BONDABLE = 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, interpreted as PairingSecurityLevel.AUTHENTICATED.
    1: PairingSecurityLevel le_security_level;

    /// If transport is LOW_ENERGY or DUAL_MODE, whether the device should form a bond or not during
    /// pairing. If not present, interpreted as bondable mode.
    ///
    /// If transport is CLASSIC, this option must be absent or otherwise the value BONDABLE.
    /// NON_BONDABLE mode is not currently supported for the CLASSIC transport
    // TODO(fxbug.dev/42403): Support NON_BONDABLE for the CLASSIC transport.
    2: BondableMode bondable_mode;

    /// If transport is LOW_ENERGY, indicate a desire to pair over the LE transport.
    /// If transport is CLASSIC, indicate a desire to pair over the Br/Edr transport.
    /// If transport is DUAL_MODE, indicate a desire to pair over both transports.
    /// If not present, interpreted as TechnologyType.DUAL_MODE
    3: TechnologyType transport;
};
