// 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 LE Security Mode of a BLE device determines the possible security properties of the device.
/// The security mode does not make specific guarantees about the current security properties of a
/// device's connections; it sets restrictions on the allowable security properties. See Core Spec
/// v5.2 Vol. 3, Part C 10.2 for more details.
type LeSecurityMode = strict enum {
    /// In LE Security Mode 1, communication is secured by encryption, and BLE-based services may
    /// specify varying requirements for authentication, key size, or Secure Connections protection
    /// on the encryption keys.
    MODE_1 = 1;

    /// In Secure Connections Only mode, all secure communication must use 128 bit, authenticated,
    /// and LE Secure Connections-generated encryption keys. If these encryption key properties
    /// cannot be satisfied by a device due to system constraints, any connection involving such
    /// a device will not be able to secure the link at all. This mode does not prevent unencrypted
    /// communication; it merely enforces stricter policies on all encrypted communication.
    SECURE_CONNECTIONS_ONLY = 2;
};
