Botan
3.8.1
Crypto and TLS for C&
Toggle main menu visibility
Main Page
Related Pages
Topics
Namespaces
Namespace List
Namespace Members
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
z
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
z
Variables
Typedefs
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
Enumerations
a
c
d
e
f
g
h
k
l
m
n
o
p
r
s
t
u
v
w
Enumerator
c
d
f
i
m
n
r
s
t
Concepts
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
f
h
i
m
n
o
p
r
s
t
u
v
w
Enumerations
b
c
d
e
k
m
n
o
p
s
t
x
Enumerator
_
a
b
c
d
e
f
g
h
k
l
m
n
p
q
r
s
t
u
v
w
x
Related Symbols
b
c
d
e
f
k
o
p
s
t
x
Files
File List
File Members
All
_
a
b
c
d
e
f
k
m
n
p
t
w
Functions
b
c
Typedefs
b
c
e
p
t
Enumerations
Enumerator
b
c
d
e
k
n
Macros
_
a
b
c
f
m
n
t
w
src
lib
tls
tls13
tls_handshake_state_13.cpp
Go to the documentation of this file.
1
/*
2
* TLS handshake state (machine) implementation for TLS 1.3
3
* (C) 2022 Jack Lloyd
4
* 2022 Hannes Rantzsch, René Meusel - neXenio GmbH
5
*
6
* Botan is released under the Simplified BSD License (see license.txt)
7
*/
8
9
#include <botan/internal/tls_handshake_state_13.h>
10
11
namespace
Botan::TLS::Internal
{
12
13
Client_Hello_13
&
Handshake_State_13_Base::store
(
Client_Hello_13
client_hello
,
const
bool
) {
14
if
(m_client_hello) {
15
// Make sure that the updated Client Hello is compatible to the initial one.
16
BOTAN_STATE_CHECK
(
has_hello_retry_request
());
17
m_client_hello->validate_updates(
client_hello
);
18
}
19
20
m_client_hello = std::move(
client_hello
);
21
return
m_client_hello.value();
22
}
13
Client_Hello_13
&
Handshake_State_13_Base::store
(
Client_Hello_13
client_hello
,
const
bool
) {
…
}
23
24
Client_Hello_12
&
Handshake_State_13_Base::store
(
Client_Hello_12
client_hello
,
const
bool
) {
25
m_client_hello_12 = std::move(
client_hello
);
26
return
m_client_hello_12.value();
27
}
24
Client_Hello_12
&
Handshake_State_13_Base::store
(
Client_Hello_12
client_hello
,
const
bool
) {
…
}
28
29
Server_Hello_13
&
Handshake_State_13_Base::store
(
Server_Hello_13
server_hello
,
const
bool
) {
30
m_server_hello = std::move(
server_hello
);
31
return
m_server_hello.value();
32
}
29
Server_Hello_13
&
Handshake_State_13_Base::store
(
Server_Hello_13
server_hello
,
const
bool
) {
…
}
33
34
Server_Hello_12
&
Handshake_State_13_Base::store
(
Server_Hello_12
server_hello
,
const
bool
) {
35
m_server_hello_12 = std::move(
server_hello
);
36
return
m_server_hello_12.value();
37
}
34
Server_Hello_12
&
Handshake_State_13_Base::store
(
Server_Hello_12
server_hello
,
const
bool
) {
…
}
38
39
Hello_Retry_Request
&
Handshake_State_13_Base::store
(
Hello_Retry_Request
hello_retry_request
,
const
bool
) {
40
m_hello_retry_request = std::move(
hello_retry_request
);
41
return
m_hello_retry_request.value();
42
}
39
Hello_Retry_Request
&
Handshake_State_13_Base::store
(
Hello_Retry_Request
hello_retry_request
,
const
bool
) {
…
}
43
44
Encrypted_Extensions
&
Handshake_State_13_Base::store
(
Encrypted_Extensions
encrypted_extensions
,
const
bool
) {
45
m_encrypted_extensions = std::move(
encrypted_extensions
);
46
return
m_encrypted_extensions.value();
47
}
44
Encrypted_Extensions
&
Handshake_State_13_Base::store
(
Encrypted_Extensions
encrypted_extensions
,
const
bool
) {
…
}
48
49
Certificate_Request_13
&
Handshake_State_13_Base::store
(
Certificate_Request_13
certificate_request
,
const
bool
) {
50
m_certificate_request = std::move(
certificate_request
);
51
return
m_certificate_request.value();
52
}
49
Certificate_Request_13
&
Handshake_State_13_Base::store
(
Certificate_Request_13
certificate_request
,
const
bool
) {
…
}
53
54
Certificate_13
&
Handshake_State_13_Base::store
(
Certificate_13
certificate,
const
bool
from_peer) {
55
auto
& target = ((m_side ==
Connection_Side::Client
) == from_peer) ? m_server_certificate : m_client_certificate;
56
target = std::move(certificate);
57
return
target.value();
58
}
54
Certificate_13
&
Handshake_State_13_Base::store
(
Certificate_13
certificate,
const
bool
from_peer) {
…
}
59
60
Certificate_Verify_13
&
Handshake_State_13_Base::store
(
Certificate_Verify_13
certificate_verify,
const
bool
from_peer) {
61
auto
& target =
62
((m_side ==
Connection_Side::Client
) == from_peer) ? m_server_certificate_verify : m_client_certificate_verify;
63
target = std::move(certificate_verify);
64
return
target.value();
65
}
60
Certificate_Verify_13
&
Handshake_State_13_Base::store
(
Certificate_Verify_13
certificate_verify,
const
bool
from_peer) {
…
}
66
67
Finished_13
&
Handshake_State_13_Base::store
(
Finished_13
finished,
const
bool
from_peer) {
68
auto
& target = ((m_side ==
Connection_Side::Client
) == from_peer) ? m_server_finished : m_client_finished;
69
target = std::move(finished);
70
return
target.value();
71
}
67
Finished_13
&
Handshake_State_13_Base::store
(
Finished_13
finished,
const
bool
from_peer) {
…
}
72
73
}
// namespace Botan::TLS::Internal
11
namespace
Botan::TLS::Internal
{
…
}
BOTAN_STATE_CHECK
#define BOTAN_STATE_CHECK(expr)
Definition
assert.h:43
Botan::TLS::Certificate_13
Definition
tls_messages.h:549
Botan::TLS::Certificate_Request_13
Definition
tls_messages.h:725
Botan::TLS::Certificate_Verify_13
Definition
tls_messages.h:801
Botan::TLS::Client_Hello_12
Definition
tls_messages.h:147
Botan::TLS::Client_Hello_13
Definition
tls_messages.h:218
Botan::TLS::Encrypted_Extensions
Definition
tls_messages.h:465
Botan::TLS::Finished_13
Definition
tls_messages.h:855
Botan::TLS::Hello_Retry_Request
Definition
tls_messages.h:453
Botan::TLS::Internal::Handshake_State_13_Base::store
Client_Hello_13 & store(Client_Hello_13 client_hello, bool from_peer)
Definition
tls_handshake_state_13.cpp:13
Botan::TLS::Internal::Handshake_State_13_Base::has_hello_retry_request
bool has_hello_retry_request() const
Definition
tls_handshake_state_13.h:35
Botan::TLS::Internal::Handshake_State_13_Base::client_hello
Client_Hello_13 & client_hello()
Definition
tls_handshake_state_13.h:46
Botan::TLS::Internal::Handshake_State_13_Base::hello_retry_request
const Hello_Retry_Request & hello_retry_request() const
Definition
tls_handshake_state_13.h:52
Botan::TLS::Internal::Handshake_State_13_Base::certificate_request
const Certificate_Request_13 & certificate_request() const
Definition
tls_handshake_state_13.h:56
Botan::TLS::Internal::Handshake_State_13_Base::encrypted_extensions
const Encrypted_Extensions & encrypted_extensions() const
Definition
tls_handshake_state_13.h:54
Botan::TLS::Internal::Handshake_State_13_Base::server_hello
const Server_Hello_13 & server_hello() const
Definition
tls_handshake_state_13.h:50
Botan::TLS::Server_Hello_12
Definition
tls_messages.h:307
Botan::TLS::Server_Hello_13
Definition
tls_messages.h:400
Botan::TLS::Internal
Definition
tls_handshake_state_13.cpp:11
Botan::TLS::Connection_Side::Client
@ Client
Definition
tls_magic.h:44
Generated by
1.13.2