1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
/*
* TLS Cipher Suites
* (C) 2004-2011,2012 Jack Lloyd
*
* Released under the terms of the Botan license
*/
#ifndef BOTAN_TLS_CIPHER_SUITES_H__
#define BOTAN_TLS_CIPHER_SUITES_H__
#include <botan/types.h>
#include <string>
#include <vector>
namespace Botan {
namespace TLS {
/**
* Ciphersuite Information
*/
class BOTAN_DLL Ciphersuite
{
public:
/**
* Convert an SSL/TLS ciphersuite to algorithm fields
* @param suite the ciphersuite code number
* @return ciphersuite object
*/
static Ciphersuite by_id(u16bit suite);
/**
* Lookup a ciphersuite by name
* @param name the name (eg TLS_RSA_WITH_RC4_128_SHA)
* @return ciphersuite object
*/
static Ciphersuite by_name(const std::string& name);
/**
* Generate a static list of all known ciphersuites and return it.
*
* @return list of all known ciphersuites
*/
static const std::vector<Ciphersuite>& all_known_ciphersuites();
/**
* Formats the ciphersuite back to an RFC-style ciphersuite string
* @return RFC ciphersuite string identifier
*/
std::string to_string() const;
/**
* @return ciphersuite number
*/
u16bit ciphersuite_code() const { return m_ciphersuite_code; }
/**
* @return true if this is a PSK ciphersuite
*/
bool psk_ciphersuite() const;
/**
* @return true if this is an ECC ciphersuite
*/
bool ecc_ciphersuite() const;
/**
* @return key exchange algorithm used by this ciphersuite
*/
std::string kex_algo() const { return m_kex_algo; }
/**
* @return signature algorithm used by this ciphersuite
*/
std::string sig_algo() const { return m_sig_algo; }
/**
* @return symmetric cipher algorithm used by this ciphersuite
*/
std::string cipher_algo() const { return m_cipher_algo; }
/**
* @return message authentication algorithm used by this ciphersuite
*/
std::string mac_algo() const { return m_mac_algo; }
/**
* @return cipher key length used by this ciphersuite
*/
size_t cipher_keylen() const { return m_cipher_keylen; }
/**
* @return true if this is a valid/known ciphersuite
*/
bool valid() const { return (m_cipher_keylen > 0); }
Ciphersuite() : m_cipher_keylen(0) {}
Ciphersuite(u16bit ciphersuite_code,
const std::string& sig_algo,
const std::string& kex_algo,
const std::string& mac_algo,
const std::string& cipher_algo,
size_t cipher_algo_keylen) :
m_ciphersuite_code(ciphersuite_code),
m_sig_algo(sig_algo),
m_kex_algo(kex_algo),
m_mac_algo(mac_algo),
m_cipher_algo(cipher_algo),
m_cipher_keylen(cipher_algo_keylen)
{
}
private:
u16bit m_ciphersuite_code;
std::string m_sig_algo, m_kex_algo, m_mac_algo, m_cipher_algo;
size_t m_cipher_keylen;
};
}
}
#endif
|