1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_ASH_COMPONENTS_CRYPTOHOME_AUTH_FACTOR_INPUT_H_
#define CHROMEOS_ASH_COMPONENTS_CRYPTOHOME_AUTH_FACTOR_INPUT_H_
#include <string>
#include <variant>
#include <vector>
#include "base/component_export.h"
#include "chromeos/ash/components/cryptohome/auth_factor.h"
#include "chromeos/ash/components/login/auth/public/challenge_response_key.h"
#include "google_apis/gaia/gaia_id.h"
namespace cryptohome {
using ::ash::ChallengeResponseKey;
class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_CRYPTOHOME) AuthFactorInput {
public:
struct Password {
std::string hashed_password;
};
struct Pin {
std::string hashed_pin;
};
struct RecoveryCreation {
RecoveryCreation(const std::string& pub_key,
const GaiaId& user_gaia_id,
const std::string& device_user_id,
bool ensure_fresh_recovery_id);
RecoveryCreation(const RecoveryCreation& other);
RecoveryCreation& operator=(const RecoveryCreation&);
~RecoveryCreation();
std::string pub_key;
GaiaId user_gaia_id;
std::string device_user_id;
bool ensure_fresh_recovery_id;
};
struct RecoveryAuthentication {
std::string epoch_data;
std::string recovery_data;
};
struct SmartCard {
SmartCard(std::vector<ChallengeResponseKey::SignatureAlgorithm>
signature_algorithms,
std::string key_delegate_dbus_service_name);
SmartCard(const SmartCard& other);
SmartCard& operator=(const SmartCard&);
~SmartCard();
std::vector<ChallengeResponseKey::SignatureAlgorithm> signature_algorithms;
std::string key_delegate_dbus_service_name;
};
struct Kiosk {};
struct LegacyFingerprint {};
struct Fingerprint {};
using InputVariant = std::variant<Password,
Pin,
RecoveryCreation,
RecoveryAuthentication,
SmartCard,
Kiosk,
LegacyFingerprint,
Fingerprint>;
explicit AuthFactorInput(InputVariant input);
AuthFactorInput(AuthFactorInput&&) noexcept;
AuthFactorInput& operator=(AuthFactorInput&&) noexcept;
// AuthFactorInput should not be copied.
AuthFactorInput(const AuthFactorInput&) = delete;
AuthFactorInput& operator=(const AuthFactorInput&) = delete;
~AuthFactorInput();
AuthFactorType GetType() const;
bool UsableForCreation() const;
bool UsableForAuthentication() const;
// Fails if type does not match:
const Password& GetPasswordInput() const;
const Pin& GetPinInput() const;
const RecoveryCreation& GetRecoveryCreationInput() const;
const RecoveryAuthentication& GetRecoveryAuthenticationInput() const;
const SmartCard& GetSmartCardInput() const;
private:
InputVariant factor_input_;
};
} // namespace cryptohome
#endif // CHROMEOS_ASH_COMPONENTS_CRYPTOHOME_AUTH_FACTOR_INPUT_H_
|