Botan 1.10.17
tls_suites.cpp
Go to the documentation of this file.
1/*
2* TLS Cipher Suites
3* (C) 2004-2010 Jack Lloyd
4*
5* Released under the terms of the Botan license
6*/
7
8#include <botan/tls_suites.h>
9#include <botan/tls_exceptn.h>
10
11namespace Botan {
12
13/**
14* Convert an SSL/TLS ciphersuite to algorithm fields
15*/
17 {
18 if(suite == TLS_RSA_WITH_RC4_128_MD5)
23
24 if(suite == TLS_RSA_WITH_RC4_128_SHA)
29
35
41
47
48 if(suite == TLS_RSA_WITH_SEED_CBC_SHA)
53
59
65
71
77
83
89
95
101
107
113
119
125
131
137
143
149
155
161
167
173
179
185
191
197
203
209
210 return TLS_Ciphersuite_Algos(0);
211 }
212
213namespace {
214
215std::pair<std::string, size_t> cipher_code_to_name(TLS_Ciphersuite_Algos algo)
216 {
218 return std::make_pair("ARC4", 16);
219
221 return std::make_pair("3DES", 24);
222
224 return std::make_pair("AES-128", 16);
225
227 return std::make_pair("AES-256", 32);
228
230 return std::make_pair("SEED", 16);
231
233 "CipherSuite: Unknown cipher type " + to_string(algo));
234 }
235
236std::string mac_code_to_name(TLS_Ciphersuite_Algos algo)
237 {
238 if((algo & TLS_ALGO_MAC_MASK) == TLS_ALGO_MAC_MD5)
239 return "MD5";
240
242 return "SHA-1";
243
245 return "SHA-256";
246
248 return "SHA-384";
249
251 "CipherSuite: Unknown MAC type " + to_string(algo));
252 }
253
254}
255
256/**
257* CipherSuite Constructor
258*/
260 {
261 if(suite_code == 0)
262 return;
263
264 TLS_Ciphersuite_Algos algos = lookup_ciphersuite(suite_code);
265
266 if(algos == 0)
267 throw Invalid_Argument("Unknown ciphersuite: " + to_string(suite_code));
268
270
272
273 std::pair<std::string, size_t> cipher_info = cipher_code_to_name(algos);
274
275 cipher = cipher_info.first;
276 cipher_key_length = cipher_info.second;
277
278 mac = mac_code_to_name(algos);
279 }
280
281}
static TLS_Ciphersuite_Algos lookup_ciphersuite(u16bit suite)
TLS_Exception(Alert_Type type, const std::string &err_msg="Unknown error")
Definition tls_exceptn.h:24
@ INTERNAL_ERROR
Definition tls_magic.h:83
std::string to_string(u64bit n, size_t min_len)
Definition parsing.cpp:42
std::invalid_argument Invalid_Argument
Definition exceptn.h:20
TLS_Ciphersuite_Algos
Definition tls_magic.h:145
@ TLS_ALGO_MAC_SHA1
Definition tls_magic.h:160
@ TLS_ALGO_SIGNER_ECDSA
Definition tls_magic.h:150
@ TLS_ALGO_KEYEXCH_DH
Definition tls_magic.h:155
@ TLS_ALGO_MAC_SHA256
Definition tls_magic.h:161
@ TLS_ALGO_MAC_MASK
Definition tls_magic.h:158
@ TLS_ALGO_KEYEXCH_ECDH
Definition tls_magic.h:156
@ TLS_ALGO_SIGNER_MASK
Definition tls_magic.h:146
@ TLS_ALGO_CIPHER_SEED_CBC
Definition tls_magic.h:169
@ TLS_ALGO_CIPHER_3DES_CBC
Definition tls_magic.h:166
@ TLS_ALGO_CIPHER_AES256_CBC
Definition tls_magic.h:168
@ TLS_ALGO_CIPHER_AES128_CBC
Definition tls_magic.h:167
@ TLS_ALGO_CIPHER_MASK
Definition tls_magic.h:164
@ TLS_ALGO_KEYEXCH_NOKEX
Definition tls_magic.h:153
@ TLS_ALGO_SIGNER_RSA
Definition tls_magic.h:148
@ TLS_ALGO_CIPHER_RC4_128
Definition tls_magic.h:165
@ TLS_ALGO_MAC_MD5
Definition tls_magic.h:159
@ TLS_ALGO_KEYEXCH_MASK
Definition tls_magic.h:152
@ TLS_ALGO_MAC_SHA384
Definition tls_magic.h:162
@ TLS_ALGO_SIGNER_DSA
Definition tls_magic.h:149
unsigned short u16bit
Definition types.h:27
@ TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
Definition tls_magic.h:136
@ TLS_DHE_DSS_WITH_AES_256_CBC_SHA
Definition tls_magic.h:112
@ TLS_RSA_WITH_AES_128_CBC_SHA
Definition tls_magic.h:104
@ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Definition tls_magic.h:133
@ TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Definition tls_magic.h:134
@ TLS_RSA_WITH_AES_256_CBC_SHA
Definition tls_magic.h:105
@ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
Definition tls_magic.h:126
@ TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
Definition tls_magic.h:110
@ TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
Definition tls_magic.h:117
@ TLS_DHE_RSA_WITH_AES_128_CBC_SHA
Definition tls_magic.h:118
@ TLS_ECDHE_RSA_WITH_RC4_128_SHA
Definition tls_magic.h:131
@ TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
Definition tls_magic.h:127
@ TLS_RSA_WITH_RC4_128_MD5
Definition tls_magic.h:100
@ TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
Definition tls_magic.h:121
@ TLS_RSA_WITH_SEED_CBC_SHA
Definition tls_magic.h:108
@ TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
Definition tls_magic.h:124
@ TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
Definition tls_magic.h:114
@ TLS_DHE_DSS_WITH_AES_128_CBC_SHA
Definition tls_magic.h:111
@ TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
Definition tls_magic.h:129
@ TLS_DHE_RSA_WITH_AES_256_CBC_SHA
Definition tls_magic.h:119
@ TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
Definition tls_magic.h:132
@ TLS_RSA_WITH_AES_128_CBC_SHA256
Definition tls_magic.h:106
@ TLS_RSA_WITH_AES_256_CBC_SHA256
Definition tls_magic.h:107
@ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
Definition tls_magic.h:135
@ TLS_DHE_DSS_WITH_SEED_CBC_SHA
Definition tls_magic.h:115
@ TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
Definition tls_magic.h:120
@ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
Definition tls_magic.h:128
@ TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
Definition tls_magic.h:113
@ TLS_RSA_WITH_RC4_128_SHA
Definition tls_magic.h:101
@ TLS_RSA_WITH_3DES_EDE_CBC_SHA
Definition tls_magic.h:103
@ TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
Definition tls_magic.h:125