Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cSSLCipherSuite.h
Go to the documentation of this file.
1 //
5 //
6 #ifndef _INC_cSSLCipherSuite_H
7 #define _INC_cSSLCipherSuite_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 #include "SSLTypes.h" // SSL_CipherSuite_TYPE SSL_KeyExchange_TYPE
12 #include "../Hash/cHashCode.h" // SSL_Hash_TYPE
13 #include "../Cipher/cCipherTypeDef.h" // SSL_Cipher_TYPE
14 #include "../Key/cKeyBase.h" // SSL_Key_TYPE
15 #include "../Cert/cX509.h" // X509_KeyUsage_TYPE
17 
18 namespace GrayLib
19 {
21  {
25  };
26 
27  class GRAYLIB_LINK cSSLCipherSuite // static const
28  {
32 
33  public:
35  const char* m_pszName;
36 
40 
42 
44 
45  public:
47  {
48  return (SSL_CipherSuite_TYPE)m_id;
49  }
50  SSL_Key_TYPE get_KeyExchangeKeyType() const;
51  X509_KeyUsage_TYPE get_ServerKeyUsage() const;
52 
53  bool isECDH() const; // ECP ?
54  bool isPSK() const;
55  };
56 
57  class GRAYLIB_LINK cSSLCipherSuites : public cSingleton<cSSLCipherSuites>
58  {
61 
62  public:
63  enum ENUM_TYPE
64  {
66 
67 #define CIPHERSUITEDEF(a,b,c,d,e,f,g,h,i) ENUM_##a,
68 #include "cSSLCipherSuite.tbl"
69 #undef CIPHERSUITEDEF
70 
72  };
73 
74  static const cSSLCipherSuite k_definitions[ENUM_QTY + 1]; // All suites I know about. supported or not.
75 
76  private:
78 
79  public:
80  cSSLCipherSuites() noexcept
82  {
83  }
84 
85  static const cSSLCipherSuite* GRAYCALL FindCipherSuiteById(SSL_CipherSuite_TYPE eCipherSuite);
86 
87  void InitCipherSuitesSupported();
88  void LoadAllCipherSuites();
89 
90  static bool GRAYCALL IsInList(const SSL_CipherSuite_t* pSuites, SSL_CipherSuite_t nCipherSuite) noexcept;
91  bool IsSupportedSuite(SSL_CipherSuite_TYPE eCipherSuite) const;
92  const SSL_CipherSuite_t* get_SupportedCipherSuiteIds() const;
93  const cSSLCipherSuite* GetSupportedCipherSuite(SSL_CipherSuite_TYPE eCipherSuite) const;
94 
95  static SSL_CipherSuite_TYPE GRAYCALL GetCipherSuiteIdByName(const char* pszCiphersuiteName);
96  static const char* GRAYCALL GetCipherSuiteName(SSL_CipherSuite_TYPE eCipherSuite);
97  };
98 }
99 
100 #endif // _INC_cSSLCipherSuite_H
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
Definition: cSSLCipherSuite.h:28
SSL_Hash_TYPE m_eHashType
hash/mac we support
Definition: cSSLCipherSuite.h:38
SSL_CipherSuite_TYPE get_Id() const
Definition: cSSLCipherSuite.h:46
SSL_Cipher_TYPE m_eCipherType
cipher we support
Definition: cSSLCipherSuite.h:37
SSL_KeyExchange_TYPE m_eKeyExchange
Key Exchange and therefore the SSL_Key_TYPE we support.
Definition: cSSLCipherSuite.h:39
CipherSuiteFlag_t m_uSuiteFlags
flags, e.g. CipherSuiteFlag_SHORT_TAG
Definition: cSSLCipherSuite.h:43
SSL_CipherSuite_t m_id
Unique id for this cSSLCipherSuite. e.g. TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA.
Definition: cSSLCipherSuite.h:34
const char * m_pszName
e.g. "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA"
Definition: cSSLCipherSuite.h:35
cRangeT< SSL_VERSION_TYPE > m_VerRange
What SSL versions is this good for ?
Definition: cSSLCipherSuite.h:41
Definition: cSSLCipherSuite.h:58
ENUM_TYPE
Definition: cSSLCipherSuite.h:64
@ ENUM_QTY
Definition: cSSLCipherSuite.h:71
cSSLCipherSuites() noexcept
Definition: cSSLCipherSuite.h:80
Definition: cSingleton.h:127
Definition: cMesh.h:22
SSL_Cipher_TYPE
Definition: cCipherTypeDef.h:22
X509_KeyUsage_TYPE
Definition: cX509.h:27
SSL_KeyExchange_TYPE
Definition: SSLTypes.h:113
CipherSuiteFlag_t
Definition: cSSLCipherSuite.h:21
@ CipherSuiteFlag_NULL
Definition: cSSLCipherSuite.h:22
@ CipherSuiteFlag_WEAK
This is a Weak CipherSuite. Don't use it.
Definition: cSSLCipherSuite.h:23
@ CipherSuiteFlag_SHORT_TAG
Short authentication tag, eg for CCM_8.
Definition: cSSLCipherSuite.h:24
WORD SSL_CipherSuite_t
SSL_CipherSuite_TYPE stored as 2 bytes.
Definition: SSLTypes.h:110
SSL_CipherSuite_TYPE
Definition: SSLTypes.h:88
SSL_Key_TYPE
Definition: cKeyBase.h:24
SSL_Hash_TYPE
Definition: cHashCode.h:23
void GRAYSSL_LINK LoadAllCipherSuites()
Definition: GraySSLSuites.cpp:35