gloox
1.0.28
src
tlsopensslclient.cpp
1
/*
2
Copyright (c) 2005-2023 by Jakob Schröter <js@camaya.net>
3
This file is part of the gloox library. http://camaya.net/gloox
4
5
This software is distributed under a license. The full license
6
agreement can be found in the file LICENSE in this distribution.
7
This software may not be copied, modified, sold or distributed
8
other than expressed in the named license agreement.
9
10
This software is distributed without any warranty.
11
*/
12
13
14
15
#include "tlsopensslclient.h"
16
17
#ifdef HAVE_OPENSSL
18
19
namespace
gloox
20
{
21
22
OpenSSLClient::OpenSSLClient
(
TLSHandler
* th,
const
std::string& server )
23
:
OpenSSLBase
( th, server )
24
{
25
}
26
27
OpenSSLClient::~OpenSSLClient
()
28
{
29
}
30
31
bool
OpenSSLClient::setType()
32
{
33
m_ctx = SSL_CTX_new( SSLv23_client_method() );
34
if
( !m_ctx )
35
return
false
;
36
37
SSL_CTX_set_options( m_ctx, SSL_OP_NO_SSLv3 );
38
39
return
true
;
40
}
41
42
bool
OpenSSLClient::hasChannelBinding
()
const
43
{
44
return
true
;
45
}
46
47
const
std::string
OpenSSLClient::channelBinding
()
const
48
{
49
50
if
( SSL_version( m_ssl ) == TLS1_3_VERSION )
51
{
52
unsigned
char
buf[32];
53
const
char
*
const
label =
"EXPORTER-Channel-Binding"
;
54
SSL_export_keying_material( m_ssl, buf, 32, label, strlen( label ), { 0 }, 1, 0 );
55
return
std::string(
reinterpret_cast<
char
* const
>
( buf ), 32 );
56
}
57
else
58
{
59
unsigned
char
* buf[128];
60
long
res = SSL_get_finished( m_ssl, buf, 128 );
61
return
std::string(
reinterpret_cast<
char
*
>
( buf ), res );
62
}
63
}
64
65
const
std::string
OpenSSLClient::channelBindingType
()
const
66
{
67
if
( SSL_version( m_ssl ) == TLS1_3_VERSION ) {
68
return
"tls-exporter"
;
69
}
70
else
71
{
72
return
"tls-unique"
;
73
}
74
}
75
76
int
OpenSSLClient::handshakeFunction()
77
{
78
return
SSL_connect( m_ssl );
79
}
80
81
}
82
83
#endif
// HAVE_OPENSSL
gloox::OpenSSLBase
Definition
tlsopensslbase.h:37
gloox::OpenSSLClient::channelBinding
virtual const std::string channelBinding() const
Definition
tlsopensslclient.cpp:47
gloox::OpenSSLClient::hasChannelBinding
virtual bool hasChannelBinding() const
Definition
tlsopensslclient.cpp:42
gloox::OpenSSLClient::~OpenSSLClient
virtual ~OpenSSLClient()
Definition
tlsopensslclient.cpp:27
gloox::OpenSSLClient::channelBindingType
virtual const std::string channelBindingType() const
Definition
tlsopensslclient.cpp:65
gloox::OpenSSLClient::OpenSSLClient
OpenSSLClient(TLSHandler *th, const std::string &server)
Definition
tlsopensslclient.cpp:22
gloox::TLSHandler
An interface that allows for interacting with TLS implementations derived from TLSBase.
Definition
tlshandler.h:35
gloox
The namespace for the gloox library.
Definition
adhoc.cpp:28
Generated on Fri Nov 24 2023 15:05:28 for gloox by
1.9.8