blob: dbc77ffb68589fd5acb782a4c2c03015a86bea8f [file] [log] [blame] [edit]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CRYPTOHOME_AUTH_IO_AUTH_INPUT_H_
#define CRYPTOHOME_AUTH_IO_AUTH_INPUT_H_
#include <optional>
#include <brillo/secure_blob.h>
#include <cryptohome/proto_bindings/auth_factor.pb.h>
#include <libstorage/platform/platform.h>
#include "cryptohome/auth_factor/type.h"
#include "cryptohome/key_objects.h"
#include "cryptohome/username.h"
namespace cryptohome {
// Converts an AuthInput protobuf into the equivalent struct, if possible.
// Returns null if the conversion fails.
//
// The `cryptohome_recovery_ephemeral_pub_key` parameter can be null if it is
// not available.
std::optional<AuthInput> CreateAuthInput(
libstorage::Platform* platform,
const user_data_auth::AuthInput& auth_input_proto,
const Username& username,
const ObfuscatedUsername& obfuscated_username,
bool locked_to_single_user,
const brillo::Blob* cryptohome_recovery_ephemeral_pub_key);
// Infers the `AuthFactorType` that the given `AuthInput` should be used with.
// Returns `nullopt` un unexpected inputs.
std::optional<AuthFactorType> DetermineFactorTypeFromAuthInput(
const user_data_auth::AuthInput& auth_input_proto);
} // namespace cryptohome
#endif // CRYPTOHOME_AUTH_IO_AUTH_INPUT_H_