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

randombit / botan / 5587580523

18 Jul 2023 12:45PM UTC coverage: 91.72% (+0.03%) from 91.691%
5587580523

Pull #3618

github

web-flow
Merge b6d23d19e into 65b754862
Pull Request #3618: [TLS 1.3] PSK Support

78438 of 85519 relevant lines covered (91.72%)

12184016.91 hits per line

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

74.6
/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,481✔
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,481✔
35
   const auto max_version = policy->latest_supported_version(is_datagram);
2,481✔
36

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

41
      if(m_impl->expects_downgrade()) {
892✔
42
         m_impl->set_io_buffer_size(io_buf_sz);
874✔
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,481✔
51

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

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

57
   if(m_impl->is_downgrading()) {
75,550✔
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;
75,529✔
66
}
67

68
bool Server::is_active() const {
2,138✔
69
   return m_impl->is_active();
2,138✔
70
}
71

72
bool Server::is_closed() const {
180✔
73
   return m_impl->is_closed();
180✔
74
}
75

76
bool Server::is_closed_for_reading() const {
×
77
   return m_impl->is_closed_for_reading();
×
78
}
79

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

84
std::vector<X509_Certificate> Server::peer_cert_chain() const {
118✔
85
   return m_impl->peer_cert_chain();
118✔
86
}
87

88
std::optional<std::string> Server::external_psk_identity() const {
×
89
   return m_impl->external_psk_identity();
×
90
}
91

92
SymmetricKey Server::key_material_export(std::string_view label, std::string_view context, size_t length) const {
206✔
93
   return m_impl->key_material_export(label, context, length);
206✔
94
}
95

96
void Server::renegotiate(bool force_full_renegotiation) {
×
97
   m_impl->renegotiate(force_full_renegotiation);
×
98
}
×
99

100
bool Server::new_session_ticket_supported() const {
×
101
   return m_impl->new_session_ticket_supported();
×
102
}
103

104
size_t Server::send_new_session_tickets(const size_t tickets) {
1✔
105
   return m_impl->send_new_session_tickets(tickets);
1✔
106
}
107

108
void Server::update_traffic_keys(bool request_peer_update) {
1✔
109
   m_impl->update_traffic_keys(request_peer_update);
1✔
110
}
1✔
111

112
bool Server::secure_renegotiation_supported() const {
×
113
   return m_impl->secure_renegotiation_supported();
×
114
}
115

116
void Server::to_peer(std::span<const uint8_t> data) {
1,224✔
117
   m_impl->to_peer(data);
1,224✔
118
}
1,224✔
119

120
void Server::send_alert(const Alert& alert) {
894✔
121
   m_impl->send_alert(alert);
894✔
122
}
894✔
123

124
void Server::send_warning_alert(Alert::Type type) {
122✔
125
   m_impl->send_warning_alert(type);
122✔
126
}
122✔
127

128
void Server::send_fatal_alert(Alert::Type type) {
×
129
   m_impl->send_fatal_alert(type);
×
130
}
×
131

132
void Server::close() {
50✔
133
   m_impl->close();
50✔
134
}
50✔
135

136
bool Server::timeout_check() {
×
137
   return m_impl->timeout_check();
×
138
}
139

140
std::string Server::application_protocol() const {
1,029✔
141
   return m_impl->application_protocol();
1,029✔
142
}
143
}  // 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