Coverage Report

Created: 2020-02-14 15:38

/src/botan/src/lib/tls/tls_version.cpp
Line
Count
Source (jump to first uncovered line)
1
/*
2
* TLS Protocol Version Management
3
* (C) 2012 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#include <botan/tls_version.h>
9
#include <botan/tls_exceptn.h>
10
11
namespace Botan {
12
13
namespace TLS {
14
15
std::string Protocol_Version::to_string() const
16
122
   {
17
122
   const uint8_t maj = major_version();
18
122
   const uint8_t min = minor_version();
19
122
20
122
   if(maj == 3 && min == 0)
21
0
      return "SSL v3";
22
122
23
122
   if(maj == 3 && min >= 1) // TLS v1.x
24
11
      return "TLS v1." + std::to_string(min-1);
25
111
26
111
   if(maj == 254) // DTLS 1.x
27
5
      return "DTLS v1." + std::to_string(255 - min);
28
106
29
106
   // Some very new or very old protocol (or bogus data)
30
106
   return "Unknown " + std::to_string(maj) + "." + std::to_string(min);
31
106
   }
32
33
bool Protocol_Version::is_datagram_protocol() const
34
567k
   {
35
567k
   return major_version() > 250;
36
567k
   }
37
38
bool Protocol_Version::operator>(const Protocol_Version& other) const
39
20.8k
   {
40
20.8k
   if(this->is_datagram_protocol() != other.is_datagram_protocol())
41
7
      throw TLS_Exception(Alert::PROTOCOL_VERSION,
42
7
                          "Version comparing " + to_string() +
43
7
                          " with " + other.to_string());
44
20.8k
45
20.8k
   if(this->is_datagram_protocol())
46
85
      return m_version < other.m_version; // goes backwards
47
20.7k
48
20.7k
   return m_version > other.m_version;
49
20.7k
   }
50
51
bool Protocol_Version::known_version() const
52
54.2k
   {
53
54.2k
   return (m_version == Protocol_Version::TLS_V10 ||
54
54.2k
           m_version == Protocol_Version::TLS_V11 ||
55
54.2k
           m_version == Protocol_Version::TLS_V12 ||
56
54.2k
           m_version == Protocol_Version::DTLS_V10 ||
57
54.2k
           m_version == Protocol_Version::DTLS_V12);
58
54.2k
   }
59
60
bool Protocol_Version::supports_negotiable_signature_algorithms() const
61
6.91k
   {
62
6.91k
   return (m_version != Protocol_Version::TLS_V10 &&
63
6.91k
           m_version != Protocol_Version::TLS_V11 &&
64
6.91k
           m_version != Protocol_Version::DTLS_V10);
65
6.91k
   }
66
67
bool Protocol_Version::supports_explicit_cbc_ivs() const
68
2.00k
   {
69
2.00k
   return (m_version != Protocol_Version::TLS_V10);
70
2.00k
   }
71
72
bool Protocol_Version::supports_ciphersuite_specific_prf() const
73
18.9k
   {
74
18.9k
   return (m_version != Protocol_Version::TLS_V10 &&
75
18.9k
           m_version != Protocol_Version::TLS_V11 &&
76
18.9k
           m_version != Protocol_Version::DTLS_V10);
77
18.9k
   }
78
79
bool Protocol_Version::supports_aead_modes() const
80
5.14M
   {
81
5.14M
   return (m_version != Protocol_Version::TLS_V10 &&
82
5.14M
           m_version != Protocol_Version::TLS_V11 &&
83
5.14M
           m_version != Protocol_Version::DTLS_V10);
84
5.14M
   }
85
86
}
87
88
}