• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 6548132566

17 Oct 2023 01:46PM UTC coverage: 91.704% (-0.006%) from 91.71%
6548132566

push

github

web-flow
Merge pull request #3762 from Rohde-Schwarz/fix/handshake_complete

Introduce TLS::Channel::is_handshake complete()

80122 of 87370 relevant lines covered (91.7%)

8608923.3 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

78.46
/src/lib/tls/tls_server.cpp
1
/*
2
* TLS Server
3
* (C) 2004-2011,2012,2016 Jack Lloyd
4
*     2016 Matthias Gierlings
5
*     2021 Elektrobit Automotive GmbH
6
*     2022 René Meusel, Hannes Rantzsch - neXenio GmbH
7
*
8
* Botan is released under the Simplified BSD License (see license.txt)
9
*/
10

11
#include <botan/tls_server.h>
12

13
#include <botan/tls_magic.h>
14
#include <botan/tls_messages.h>
15
#include <botan/internal/stl_util.h>
16
#include <botan/internal/tls_handshake_state.h>
17

18
#include <botan/internal/tls_server_impl_12.h>
19
#if defined(BOTAN_HAS_TLS_13)
20
   #include <botan/internal/tls_server_impl_13.h>
21
#endif
22

23
namespace Botan::TLS {
24

25
/*
26
* TLS Server Constructor
27
*/
28
Server::Server(const std::shared_ptr<Callbacks>& callbacks,
2,487✔
29
               const std::shared_ptr<Session_Manager>& session_manager,
30
               const std::shared_ptr<Credentials_Manager>& creds,
31
               const std::shared_ptr<const Policy>& policy,
32
               const std::shared_ptr<RandomNumberGenerator>& rng,
33
               bool is_datagram,
34
               size_t io_buf_sz) {
2,487✔
35
   const auto max_version = policy->latest_supported_version(is_datagram);
2,487✔
36

37
   if(!max_version.is_pre_tls_13()) {
2,487✔
38
#if defined(BOTAN_HAS_TLS_13)
39
      m_impl = std::make_unique<Server_Impl_13>(callbacks, session_manager, creds, policy, rng);
898✔
40

41
      if(m_impl->expects_downgrade()) {
898✔
42
         m_impl->set_io_buffer_size(io_buf_sz);
879✔
43
      }
44
#else
45
      throw Not_Implemented("TLS 1.3 server is not available in this build");
46
#endif
47
   } else {
48
      m_impl = std::make_unique<Server_Impl_12>(callbacks, session_manager, creds, policy, rng, is_datagram, io_buf_sz);
1,589✔
49
   }
50
}
2,487✔
51

52
Server::~Server() = default;
3,825✔
53

54
size_t Server::from_peer(std::span<const uint8_t> data) {
73,942✔
55
   auto read = m_impl->from_peer(data);
73,942✔
56

57
   if(m_impl->is_downgrading()) {
72,573✔
58
      auto info = m_impl->extract_downgrade_info();
474✔
59
      m_impl = std::make_unique<Server_Impl_12>(*info);
948✔
60

61
      // replay peer data received so far
62
      read = m_impl->from_peer(info->peer_transcript);
474✔
63
   }
474✔
64

65
   return read;
72,552✔
66
}
67

68
bool Server::is_handshake_complete() const {
128✔
69
   return m_impl->is_handshake_complete();
128✔
70
}
71

72
bool Server::is_active() const {
2,021✔
73
   return m_impl->is_active();
2,021✔
74
}
75

76
bool Server::is_closed() const {
197✔
77
   return m_impl->is_closed();
197✔
78
}
79

80
bool Server::is_closed_for_reading() const {
16✔
81
   return m_impl->is_closed_for_reading();
16✔
82
}
83

84
bool Server::is_closed_for_writing() const {
9✔
85
   return m_impl->is_closed_for_writing();
9✔
86
}
87

88
std::vector<X509_Certificate> Server::peer_cert_chain() const {
114✔
89
   return m_impl->peer_cert_chain();
114✔
90
}
91

92
std::optional<std::string> Server::external_psk_identity() const {
×
93
   return m_impl->external_psk_identity();
×
94
}
95

96
SymmetricKey Server::key_material_export(std::string_view label, std::string_view context, size_t length) const {
202✔
97
   return m_impl->key_material_export(label, context, length);
202✔
98
}
99

100
void Server::renegotiate(bool force_full_renegotiation) {
×
101
   m_impl->renegotiate(force_full_renegotiation);
×
102
}
×
103

104
bool Server::new_session_ticket_supported() const {
×
105
   return m_impl->new_session_ticket_supported();
×
106
}
107

108
size_t Server::send_new_session_tickets(const size_t tickets) {
1✔
109
   return m_impl->send_new_session_tickets(tickets);
1✔
110
}
111

112
void Server::update_traffic_keys(bool request_peer_update) {
1✔
113
   m_impl->update_traffic_keys(request_peer_update);
1✔
114
}
1✔
115

116
bool Server::secure_renegotiation_supported() const {
×
117
   return m_impl->secure_renegotiation_supported();
×
118
}
119

120
void Server::to_peer(std::span<const uint8_t> data) {
1,231✔
121
   m_impl->to_peer(data);
1,231✔
122
}
1,231✔
123

124
void Server::send_alert(const Alert& alert) {
896✔
125
   m_impl->send_alert(alert);
896✔
126
}
896✔
127

128
void Server::send_warning_alert(Alert::Type type) {
118✔
129
   m_impl->send_warning_alert(type);
118✔
130
}
118✔
131

132
void Server::send_fatal_alert(Alert::Type type) {
×
133
   m_impl->send_fatal_alert(type);
×
134
}
×
135

136
void Server::close() {
51✔
137
   m_impl->close();
51✔
138
}
51✔
139

140
bool Server::timeout_check() {
×
141
   return m_impl->timeout_check();
×
142
}
143

144
std::string Server::application_protocol() const {
1,027✔
145
   return m_impl->application_protocol();
1,027✔
146
}
147
}  // namespace Botan::TLS
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc