libfilezilla
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
tls_info.hpp
Go to the documentation of this file.
1 #ifndef LIBFILEZILLA_TLS_INFO_HEADER
2 #define LIBFILEZILLA_TLS_INFO_HEADER
3 
8 #include "time.hpp"
9 
10 namespace fz {
14 class x509_certificate final
15 {
16 public:
17  class subject_name final
18  {
19  public:
20  std::string name;
21  bool is_dns{};
22  };
23 
24  x509_certificate() = default;
25  ~x509_certificate() noexcept = default;
26  x509_certificate(x509_certificate const&) = default;
27  x509_certificate(x509_certificate&&) noexcept = default;
28  x509_certificate& operator=(x509_certificate const&) = default;
29  x509_certificate& operator=(x509_certificate&&) noexcept = default;
30 
32  std::vector<uint8_t> const& rawData,
33  fz::datetime const& activation_time, fz::datetime const& expiration_time,
34  std::string const& serial,
35  std::string const& pkalgoname, unsigned int bits,
36  std::string const& signalgoname,
37  std::string const& fingerprint_sha256,
38  std::string const& fingerprint_sha1,
39  std::string const& issuer,
40  std::string const& subject,
41  std::vector<subject_name> const& alt_subject_names);
42 
44  std::vector<uint8_t> && rawdata,
45  fz::datetime const& activation_time, fz::datetime const& expiration_time,
46  std::string const& serial,
47  std::string const& pkalgoname, unsigned int bits,
48  std::string const& signalgoname,
49  std::string const& fingerprint_sha256,
50  std::string const& fingerprint_sha1,
51  std::string const& issuer,
52  std::string const& subject,
53  std::vector<subject_name> && alt_subject_names);
54 
55 
57  std::vector<uint8_t> get_raw_data() const { return raw_cert_; }
58 
59  fz::datetime const& get_activation_time() const { return activation_time_; }
60  fz::datetime const& get_expiration_time() const { return expiration_time_; }
61 
62  std::string const& get_serial() const { return serial_; }
63 
65  std::string const& get_pubkey_algorithm() const { return pkalgoname_; }
66 
68  unsigned int get_pubkey_bits() const { return pkalgobits_; }
69 
71  std::string const& get_signature_algorithm() const { return signalgoname_; }
72 
74  std::string const& get_fingerprint_sha256() const { return fingerprint_sha256_; }
75 
77  std::string const& get_fingerprint_sha1() const { return fingerprint_sha1_; }
78 
83  std::string const& get_subject() const { return subject_; }
84 
86  std::string const& get_issuer() const { return issuer_; }
87 
89  std::vector<subject_name> const& get_alt_subject_names() const { return alt_subject_names_; }
90 
91  explicit operator bool() const { return !raw_cert_.empty(); }
92 
93 private:
94  fz::datetime activation_time_;
95  fz::datetime expiration_time_;
96 
97  std::vector<uint8_t> raw_cert_;
98 
99  std::string serial_;
100  std::string pkalgoname_;
101  unsigned int pkalgobits_{};
102 
103  std::string signalgoname_;
104 
105  std::string fingerprint_sha256_;
106  std::string fingerprint_sha1_;
107 
108  std::string issuer_;
109  std::string subject_;
110 
111  std::vector<subject_name> alt_subject_names_;
112 };
113 
115 class tls_session_info final
116 {
117 public:
118  tls_session_info() = default;
119  ~tls_session_info() = default;
120  tls_session_info(tls_session_info const&) = default;
121  tls_session_info(tls_session_info&&) noexcept = default;
122  tls_session_info& operator=(tls_session_info const&) = default;
123  tls_session_info& operator=(tls_session_info&&) noexcept = default;
124 
125  tls_session_info(std::string const& host, unsigned int port,
126  std::string const& protocol,
127  std::string const& key_exchange,
128  std::string const& session_cipher,
129  std::string const& session_mac,
130  int algorithm_warnings,
131  std::vector<x509_certificate>&& certificates,
132  bool system_trust,
133  bool hostname_mismatch);
134 
136  std::string const& get_host() const { return host_; }
137 
139  unsigned int get_port() const { return port_; }
140 
142  std::string const& get_session_cipher() const { return session_cipher_; }
143 
145  std::string const& get_session_mac() const { return session_mac_; }
146 
154  std::vector<fz::x509_certificate> const& get_certificates() const { return certificates_; }
155 
157  std::string const& get_protocol() const { return protocol_; }
158 
160  std::string const& get_key_exchange() const { return key_exchange_; }
161 
162  enum algorithm_warnings_t
163  {
164  tlsver = 1,
165  cipher = 2,
166  mac = 4,
167  kex = 8
168  };
169 
171  int get_algorithm_warnings() const { return algorithm_warnings_; }
172 
175  bool system_trust() const { return system_trust_; }
176 
178  bool mismatched_hostname() const { return hostname_mismatch_; }
179 
180 private:
181  std::string host_;
182  unsigned int port_{};
183 
184  std::string protocol_;
185  std::string key_exchange_;
186  std::string session_cipher_;
187  std::string session_mac_;
188  int algorithm_warnings_{};
189 
190  std::vector<x509_certificate> certificates_;
191 
192  bool system_trust_{};
193  bool hostname_mismatch_{};
194 };
195 }
196 
197 #endif
Definition: tls_info.hpp:14
std::string const & get_pubkey_algorithm() const
The public key algorithm used by the certificate.
Definition: tls_info.hpp:65
int get_algorithm_warnings() const
Warnings about old algorithms used, which are considered weak.
Definition: tls_info.hpp:171
std::string const & get_session_mac() const
The MAC used for integrity-protect and authenticate the exchanged application data.
Definition: tls_info.hpp:145
std::vector< uint8_t > get_raw_data() const
The raw, DER-encoded X.509 certificate.
Definition: tls_info.hpp:57
std::string const & get_signature_algorithm() const
The algorithm used for signing, typically the public key algorithm combined with a hash...
Definition: tls_info.hpp:71
std::string const & get_session_cipher() const
The symmetric algorithm used to encrypt all exchanged application data.
Definition: tls_info.hpp:142
std::vector< fz::x509_certificate > const & get_certificates() const
The server's certificate chain.
Definition: tls_info.hpp:154
Information about a TLS session.
Definition: tls_info.hpp:115
unsigned int get_port() const
The server's port.
Definition: tls_info.hpp:139
std::string const & get_fingerprint_sha256() const
Gets fingerprint as hex-encoded sha256.
Definition: tls_info.hpp:74
unsigned int get_pubkey_bits() const
The number of bits of the public key algorithm.
Definition: tls_info.hpp:68
std::vector< subject_name > const & get_alt_subject_names() const
Gets the alternative subject names (SANSs) of the certificated, usually hostnames.
Definition: tls_info.hpp:89
Represents a point of time in wallclock, tracking the timestamps accuracy/precision.
Definition: time.hpp:40
Assorted classes dealing with time.
Definition: tls_info.hpp:17
std::string const & get_fingerprint_sha1() const
Gets fingerprint as hex-encoded sha1.
Definition: tls_info.hpp:77
The namespace used by libfilezilla.
Definition: apply.hpp:16
std::string const & get_protocol() const
TLS version.
Definition: tls_info.hpp:157
bool system_trust() const
Definition: tls_info.hpp:175
bool mismatched_hostname() const
True if the hostname in the SANs does not match the requested hostname.
Definition: tls_info.hpp:178
std::string const & get_issuer() const
Gets the issuer of the certificate as RDN as described in RFC4514.
Definition: tls_info.hpp:86
std::string const & get_key_exchange() const
Key exchange algorithm.
Definition: tls_info.hpp:160
std::string const & get_subject() const
Gets the subject of the certificate as RDN as described in RFC4514.
Definition: tls_info.hpp:83
std::string const & get_host() const
The server's hostname used to connect.
Definition: tls_info.hpp:136