aboutsummaryrefslogtreecommitdiffstats
path: root/src/tls/tls_ciphersuite.h
blob: dcb4b6a6fb3d1405582eb74724bfd9d3b805aac6 (plain)
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
/*
* TLS Cipher Suites
* (C) 2004-2011 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>

namespace Botan {

namespace TLS {

/**
* Ciphersuite Information
*/
class BOTAN_DLL Ciphersuite
   {
   public:
      /**
      * Convert an SSL/TLS ciphersuite to algorithm fields
      */
      static Ciphersuite by_id(u16bit suite);

      static Ciphersuite by_name(const std::string& name);

      /**
      * Formats the ciphersuite back to an RFC-style ciphersuite string
      */
      std::string to_string() const;

      bool psk_ciphersuite() const;
      bool ecc_ciphersuite() const;

      std::string kex_algo() const { return m_kex_algo; }
      std::string sig_algo() const { return m_sig_algo; }

      std::string cipher_algo() const { return m_cipher_algo; }
      std::string mac_algo() const { return m_mac_algo; }

      size_t cipher_keylen() const { return m_cipher_keylen; }

      bool valid() const { return (m_cipher_keylen > 0); }

      Ciphersuite() : m_cipher_keylen(0) {}

      Ciphersuite(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_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:
      std::string m_sig_algo, m_kex_algo, m_mac_algo, m_cipher_algo;
      size_t m_cipher_keylen;
   };

}

}

#endif