// 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.
/// Defines the protocols used to enroll and interact with user
/// authentication mechanisms. This library includes three sets of protocols:
/// 1. Protocols between the core account system and an authenticator component
///    (authenticator.fidl)
/// 2. Per-authentication-mechanism protocols between a user interface and an
///    authenticator component (mechanisms.fidl)
/// 3. A top-level protocol between a user interface and the account system
///    (interaction.fidl)
library fuchsia.identity.authentication;
