libsshpp v0.1.7
Modern C++17 wrapper for libssh
Loading...
Searching...
No Matches
host_key_verifier.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2#pragma once
3
4#include <sshpp/config.hpp>
5
6#include <sshpp/export.hpp>
7#include <sshpp/fwd.hpp>
8#include <sshpp/key.hpp>
10
11#include <cstdint>
12#include <functional>
13#include <string>
14#include <string_view>
15#include <vector>
16
17namespace sshpp {
18
21struct InsecureOptIn { explicit InsecureOptIn() = default; };
23
25class SSHPP_API HostKeyVerifier {
26public:
27 struct Context {
28 std::string_view host;
29 std::uint16_t port;
34 };
35 enum class Decision { accept, accept_and_remember, reject };
36
37 virtual ~HostKeyVerifier() = default;
38 virtual Decision verify(const Context&) const = 0;
39};
40
42class SSHPP_API StrictHostKeyPolicy final : public HostKeyVerifier {
43public:
44 Decision verify(const Context&) const override;
45};
46
48class SSHPP_API TofuHostKeyPolicy final : public HostKeyVerifier {
49public:
50 Decision verify(const Context&) const override;
51};
52
54class SSHPP_API AcceptAnyHostKeyPolicy final : public HostKeyVerifier {
55public:
57 Decision verify(const Context&) const override;
58};
59
61class SSHPP_API PinnedHostKeyPolicy final : public HostKeyVerifier {
62public:
63 explicit PinnedHostKeyPolicy(std::vector<Fingerprint> fps) : pins_(std::move(fps)) {}
64 Decision verify(const Context&) const override;
65
66private:
67 std::vector<Fingerprint> pins_;
68};
69
71class SSHPP_API CallbackHostKeyPolicy final : public HostKeyVerifier {
72public:
73 explicit CallbackHostKeyPolicy(std::function<Decision(const Context&)> cb) : cb_(std::move(cb)) {}
74 Decision verify(const Context& ctx) const override { return cb_(ctx); }
75
76private:
77 std::function<Decision(const Context&)> cb_;
78};
79
80} // namespace sshpp
81
82#if SSHPP_HEADER_ONLY
84#endif
Accept everything. Requires the i_understand_this_is_insecure() tag.
Definition host_key_verifier.hpp:54
AcceptAnyHostKeyPolicy(InsecureOptIn)
Definition host_key_verifier.hpp:56
Delegates to a user callback (e.g. a GUI prompt).
Definition host_key_verifier.hpp:71
CallbackHostKeyPolicy(std::function< Decision(const Context &)> cb)
Definition host_key_verifier.hpp:73
Decision verify(const Context &ctx) const override
Definition host_key_verifier.hpp:74
Definition key.hpp:38
Policy object consulted by Session::verify_host_key(). See docs/design/04 ยง4.6.
Definition host_key_verifier.hpp:25
virtual Decision verify(const Context &) const =0
Decision
Definition host_key_verifier.hpp:35
virtual ~HostKeyVerifier()=default
Definition key.hpp:59
Pin one or more fingerprints; ignores known_hosts entirely.
Definition host_key_verifier.hpp:61
PinnedHostKeyPolicy(std::vector< Fingerprint > fps)
Definition host_key_verifier.hpp:63
Definition session.hpp:41
Reject anything not already in known_hosts. The only safe default.
Definition host_key_verifier.hpp:42
Accept-and-remember on first use; reject on change (OpenSSH accept-new).
Definition host_key_verifier.hpp:48
const PassphraseCallback * cb
Definition key.ipp:68
Definition auth.hpp:18
InsecureOptIn i_understand_this_is_insecure()
Definition host_key_verifier.hpp:22
KnownHostsStatus
Definition known_hosts.hpp:18
Definition error.hpp:110
Definition host_key_verifier.hpp:27
KnownHostsStatus status
Definition host_key_verifier.hpp:30
Session & session
Definition host_key_verifier.hpp:33
Fingerprint sha256
Definition host_key_verifier.hpp:32
std::string_view host
Definition host_key_verifier.hpp:28
const Key & presented_key
Definition host_key_verifier.hpp:31
std::uint16_t port
Definition host_key_verifier.hpp:29
Definition host_key_verifier.hpp:21