OpenVPN 3 Core Library
Loading...
Searching...
No Matches
ovpndcokocrypto.hpp
Go to the documentation of this file.
1
// OpenVPN -- An application to securely tunnel IP networks
2
// over a single port, with support for SSL/TLS-based
3
// session authentication and key exchange,
4
// packet encryption, packet authentication, and
5
// packet compression.
6
//
7
// Copyright (C) 2012- OpenVPN Inc.
8
// Copyright (C) 2020-2022 Lev Stipakov <lev@openvpn.net>
9
//
10
// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
11
//
12
13
14
// ovpn-dco crypto wrappers
15
16
#pragma once
17
18
namespace
openvpn::KoRekey
{
19
24
class
OvpnDcoKey
:
public
Key
25
{
26
public
:
27
OvpnDcoKey
(
const
CryptoDCInstance::RekeyType
rktype,
const
Info
&rkinfo)
28
{
29
std::memset(&
kc
, 0,
sizeof
(
kc
));
30
31
kc
.
remote_peer_id
= rkinfo.
remote_peer_id
;
32
33
const
CryptoDCSettingsData
ci = rkinfo.
dc_context_delegate
->
crypto_info
();
34
const
CryptoAlgs::Alg
&calg =
CryptoAlgs::get
(ci.
cipher
());
35
switch
(ci.
cipher
())
36
{
37
case
CryptoAlgs::NONE
:
38
kc
.
cipher_alg
=
OVPN_CIPHER_ALG_NONE
;
39
kc
.
encrypt
.
cipher_key_size
= 0;
40
break
;
41
case
CryptoAlgs::AES_128_GCM
:
42
kc
.
cipher_alg
=
OVPN_CIPHER_ALG_AES_GCM
;
43
kc
.
encrypt
.
cipher_key_size
= 128 / 8;
44
break
;
45
case
CryptoAlgs::AES_192_GCM
:
46
kc
.
cipher_alg
=
OVPN_CIPHER_ALG_AES_GCM
;
47
kc
.
encrypt
.
cipher_key_size
= 192 / 8;
48
break
;
49
case
CryptoAlgs::AES_256_GCM
:
50
kc
.
cipher_alg
=
OVPN_CIPHER_ALG_AES_GCM
;
51
kc
.
encrypt
.
cipher_key_size
= 256 / 8;
52
break
;
53
case
CryptoAlgs::CHACHA20_POLY1305
:
54
kc
.
cipher_alg
=
OVPN_CIPHER_ALG_CHACHA20_POLY1305
;
55
kc
.
encrypt
.
cipher_key_size
= 256 / 8;
56
break
;
57
default
:
58
OPENVPN_THROW
(korekey_error,
59
"cipher alg "
<< calg.
name
()
60
<<
" is not currently supported by ovpn-dco"
);
61
break
;
62
}
63
kc
.
decrypt
.
cipher_key_size
=
kc
.
encrypt
.
cipher_key_size
;
64
65
if
(calg.
mode
() ==
CryptoAlgs::AEAD
)
66
{
67
kc
.
encrypt
.
cipher_key
=
verify_key
(
"cipher encrypt"
,
68
rkinfo.
encrypt_cipher
,
69
kc
.
encrypt
.
cipher_key_size
);
70
kc
.
decrypt
.
cipher_key
=
verify_key
(
"cipher decrypt"
,
71
rkinfo.
decrypt_cipher
,
72
kc
.
decrypt
.
cipher_key_size
);
73
74
set_nonce_tail
(
"AEAD nonce tail encrypt"
,
75
kc
.
encrypt
.
nonce_tail
,
76
sizeof
(
kc
.
encrypt
.
nonce_tail
),
77
rkinfo.
encrypt_hmac
);
78
set_nonce_tail
(
"AEAD nonce tail decrypt"
,
79
kc
.
decrypt
.
nonce_tail
,
80
sizeof
(
kc
.
decrypt
.
nonce_tail
),
81
rkinfo.
decrypt_hmac
);
82
}
83
84
kc
.
key_id
= rkinfo.
key_id
;
85
}
86
87
const
struct
KeyConfig
*
operator()
()
const
88
{
89
return
&
kc
;
90
}
91
92
private
:
93
struct
KeyConfig
kc
;
94
};
95
96
}
// namespace openvpn::KoRekey
openvpn::CryptoAlgs::Alg
Definition
cryptoalgs.hpp:110
openvpn::CryptoAlgs::Alg::name
const char * name() const
Definition
cryptoalgs.hpp:130
openvpn::CryptoAlgs::Alg::mode
Mode mode() const
Definition
cryptoalgs.hpp:138
openvpn::CryptoDCContext::crypto_info
virtual CryptoDCSettingsData crypto_info()=0
openvpn::CryptoDCInstance::RekeyType
RekeyType
Definition
cryptodc.hpp:85
openvpn::CryptoDCSettingsData
Definition
cryptodc.hpp:99
openvpn::CryptoDCSettingsData::cipher
CryptoAlgs::Type cipher() const
Definition
cryptodc.hpp:120
openvpn::KoRekey::Key
Definition
kocrypto.hpp:57
openvpn::KoRekey::Key::verify_key
const unsigned char * verify_key(const char *title, const StaticKey &sk, const size_t size_required)
Definition
kocrypto.hpp:108
openvpn::KoRekey::Key::set_nonce_tail
void set_nonce_tail(const char *title, unsigned char *dest, const size_t dest_size, const StaticKey &src)
Definition
kocrypto.hpp:115
openvpn::KoRekey::OvpnDcoKey
Parses key information into format consumed by ovpn-dco.
Definition
ovpndcokocrypto.hpp:25
openvpn::KoRekey::OvpnDcoKey::operator()
const struct KeyConfig * operator()() const
Definition
ovpndcokocrypto.hpp:87
openvpn::KoRekey::OvpnDcoKey::kc
struct KeyConfig kc
Definition
ovpndcokocrypto.hpp:93
openvpn::KoRekey::OvpnDcoKey::OvpnDcoKey
OvpnDcoKey(const CryptoDCInstance::RekeyType rktype, const Info &rkinfo)
Definition
ovpndcokocrypto.hpp:27
OPENVPN_THROW
#define OPENVPN_THROW(exc, stuff)
Definition
exception.hpp:175
openvpn::CryptoAlgs::AES_128_GCM
@ AES_128_GCM
Definition
cryptoalgs.hpp:71
openvpn::CryptoAlgs::NONE
@ NONE
Definition
cryptoalgs.hpp:57
openvpn::CryptoAlgs::AES_256_GCM
@ AES_256_GCM
Definition
cryptoalgs.hpp:73
openvpn::CryptoAlgs::AES_192_GCM
@ AES_192_GCM
Definition
cryptoalgs.hpp:72
openvpn::CryptoAlgs::CHACHA20_POLY1305
@ CHACHA20_POLY1305
Definition
cryptoalgs.hpp:74
openvpn::CryptoAlgs::get
const Alg & get(const Type type)
Definition
cryptoalgs.hpp:237
openvpn::CryptoAlgs::AEAD
@ AEAD
Definition
cryptoalgs.hpp:92
openvpn::KoRekey
Definition
key.hpp:16
OVPN_CIPHER_ALG_CHACHA20_POLY1305
@ OVPN_CIPHER_ALG_CHACHA20_POLY1305
Definition
ovpn-dco.h:104
OVPN_CIPHER_ALG_AES_GCM
@ OVPN_CIPHER_ALG_AES_GCM
Definition
ovpn-dco.h:103
OVPN_CIPHER_ALG_NONE
@ OVPN_CIPHER_ALG_NONE
Definition
ovpn-dco.h:102
openvpn::KoRekey::Info
Definition
kocrypto.hpp:31
openvpn::KoRekey::Info::key_id
unsigned int key_id
Definition
kocrypto.hpp:47
openvpn::KoRekey::Info::decrypt_hmac
StaticKey decrypt_hmac
Definition
kocrypto.hpp:52
openvpn::KoRekey::Info::encrypt_cipher
StaticKey encrypt_cipher
Definition
kocrypto.hpp:49
openvpn::KoRekey::Info::dc_context_delegate
CryptoDCContext::Ptr dc_context_delegate
Definition
kocrypto.hpp:45
openvpn::KoRekey::Info::remote_peer_id
int remote_peer_id
Definition
kocrypto.hpp:48
openvpn::KoRekey::Info::encrypt_hmac
StaticKey encrypt_hmac
Definition
kocrypto.hpp:50
openvpn::KoRekey::Info::decrypt_cipher
StaticKey decrypt_cipher
Definition
kocrypto.hpp:51
openvpn::KoRekey::KeyConfig
Definition
key.hpp:26
openvpn::KoRekey::KeyConfig::cipher_alg
unsigned int cipher_alg
Definition
key.hpp:32
openvpn::KoRekey::KeyConfig::key_id
int key_id
Definition
key.hpp:30
openvpn::KoRekey::KeyConfig::encrypt
KeyDirection encrypt
Definition
key.hpp:27
openvpn::KoRekey::KeyConfig::decrypt
KeyDirection decrypt
Definition
key.hpp:28
openvpn::KoRekey::KeyConfig::remote_peer_id
int remote_peer_id
Definition
key.hpp:31
openvpn::KoRekey::KeyDirection::cipher_key
const unsigned char * cipher_key
Definition
key.hpp:20
openvpn::KoRekey::KeyDirection::cipher_key_size
unsigned int cipher_key_size
Definition
key.hpp:22
openvpn::KoRekey::KeyDirection::nonce_tail
unsigned char nonce_tail[8]
Definition
key.hpp:21
openvpn
dco
ovpndcokocrypto.hpp
Generated by
1.9.8