blob: c47bf415d1592c4c5134ebbe50a0182b3eb3e744 [file] [log] [blame]
// Copyright 2021 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.identity.credential;
/// Parameters to AddCredential method.
/// TODO(fxbug.dev/88343): Replace with anonymous tables when available as
/// parameter arguments.
type AddCredentialParams = table {
/// The low entropy credential.
1: le_secret LeSecret;
/// The rate at which `CheckCredential()` attempts are allowed as a function
/// of the number of successive failed attempts.
2: delay_schedule vector<DelayScheduleEntry>:32;
/// The high entropy secret locked in the CR50 by the `le_secret`.
3: he_secret HeSecret;
/// The reset secret for resetting credentials. Optional.
4: reset_secret HeSecret;
};
/// Parameters to CheckCredential method.
/// TODO(fxbug.dev/88343): Replace with anonymous tables when available as
/// parameter arguments.
type CheckCredentialParams = table {
/// The label of the credential you want to authenticate.
1: label Label;
/// The associated user inputed low entropy secret to unlock the credential.
2: le_secret LeSecret;
};
/// Response to CheckCredential method.
/// TODO(fxbug.dev/88343): Replace with anonymous tables when available as
/// parameter arguments.
type CheckCredentialResponse = table {
/// The high entropy secret associated with the label.
1: he_secret HeSecret;
};
/// Manager manages the overall state of low entropy secrets,
/// such as knowleged-based authentication factors, on a Fuchsia device.
/// This includes inserting, deleting and validating credentials. With
/// anti-hammering support built in to prevent pin brute forcing.
///
/// The Manager is the core of the credential management system and
/// is intended only for use by highly trusted components such as the
/// Password Authenticator.
@discoverable
protocol Manager {
/// Adds a low entropy credential into the system.
/// `params` see `AddCredentialParams`.
/// Success returns a label for the newly provisioned credential. This
/// acts as a identifier which is used to check the credential or remove it
/// later on. This should be stored by the caller.
AddCredential(struct {
params AddCredentialParams;
}) -> (struct {
label Label;
}) error CredentialError;
/// Removes a credential with the provided label.
///
/// On Failure:
/// INVALID_LABEL if a label is provided which is not in the tree.
RemoveCredential(struct {
label Label;
}) -> (struct {}) error CredentialError;
/// Attempts to authenticate a credential. It checks whether the `le_secret`
/// for a given `label` is correct.
///
/// On Success:
/// See `CheckCredentialResponse`.
/// On Failure:
/// INVALID_LABEL if an invalid label was entered.
/// TOO_MANY_ATTEMPTS if too many incorrect attempts are made defined by the
/// `delay_schedule` set on AddCredential.
/// INVALID_SECRET for an incorrect authentication attempt.
/// CORRUPT_METADATA for invalid credential metadata.
CheckCredential(struct {
params CheckCredentialParams;
}) -> (struct {
response CheckCredentialResponse;
}) error CredentialError;
};