Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cSSLServer.h
Go to the documentation of this file.
1 //
3 //
4 #ifndef _INC_cSSLServer_H
5 #define _INC_cSSLServer_H
6 #ifndef NO_PRAGMA_ONCE
7 #pragma once
8 #endif
9 #include "cSSLCommon.h"
10 
11 #if defined(USE_SSL_SERVER)
12 namespace GraySSL
13 {
14  class cSSLTicketKeys;
15  class cSSLServer;
16 
18  {
21 
22  virtual HRESULT OnCallback(cSSLServer* pSSL, const BYTE* pszName, size_t nSizeName) = 0;
23  };
24 
26  {
29 
30  typedef cSSLCommon SUPER_t;
31 
32  public:
34 
35 #if defined(USE_SSL_SESSION_TICKETS)
36  // Support for generating and checking session tickets
38 #endif // USE_SSL_SESSION_TICKETS
39 
40 
41 #if defined(USE_SSL_SERVER_NAME_INDICATION)
43 #endif
44 #if defined(USE_SSL_KeyExchange_PSK_SOME)
46 #endif
47 
48  private:
49  HRESULT state_SSL_ServerHello();
50 
51  HRESULT ReadSessionTicket(BYTE* buf, size_t len);
52  HRESULT WriteSessionTicket(BYTE* pStart);
53 
54  const cSSLCipherSuite* FindCipherSuiteMatch(SSL_CipherSuite_TYPE eCipherSuite) const;
55  HRESULT FindCipherSuite(const BYTE* pCiph, size_t nCiphLen, const cSSLCipherSuite** ppCipherSuite) const;
56 
57  size_t build_TLS_EXT_renegotiation_info(cSSLMsgHandExt* pExt);
58  HRESULT parse_TLS_EXT_renegotiation_info(const BYTE* buf, size_t len);
59 
60 #if defined(USE_SSL_KeyExchange_PSK_SOME)
61  HRESULT parse_KeyEx_client_PSKIdentity(const BYTE* p, const BYTE* end);
62 #endif
63 #if defined(USE_SSL_KeyExchange_RSA) || defined(USE_SSL_KeyExchange_RSA_PSK)
64  HRESULT parse_KeyEx_encrypted_pms(const BYTE* p, const BYTE* end, size_t pms_offset);
65 #endif
66 
67 #if defined(USE_SSL_ECDH) || defined(USE_Key_ECDSA)
68  HRESULT parse_TLS_EXT_supported_groups(const BYTE* buf, size_t len);
69  HRESULT parse_TLS_EXT_ec_point_formats(const BYTE* buf, size_t len);
70 #endif
71  HRESULT parse_TLS_EXT_MaxFragmentLength(const BYTE* buf, size_t len);
72 
73  HRESULT parse_TLS_EXT_EncryptThenMac(const BYTE* buf, size_t len);
74 
75 #if defined(USE_SSL_SESSION_TICKETS)
76  HRESULT parse_TLS_EXT_SessionTicket(BYTE* buf, size_t len);
77 #endif
78 
79  HRESULT parse_TLS_EXT_ExtendedMasterSecret(const BYTE* buf, size_t len);
80  HRESULT parse_TLS_EXT_TruncatedHMAC(const BYTE* buf, size_t len);
81 
82  size_t build_TLS_EXT_ALPN(cSSLMsgHandExt* pExt);
83  HRESULT parse_TLS_EXT_ALPN(const BYTE* buf, size_t len);
84 
85 #if defined(USE_SSL_KeyExchange_Cert_SOME)
86  HRESULT parse_TLS_EXT_signature_algorithms(const BYTE* buf, size_t len);
87 #endif
88 #if defined(USE_SSL_ECDH) || defined(USE_Key_ECDSA)
89  size_t build_TLS_EXT_ec_point_formats(cSSLMsgHandExt* pExt);
90 #endif
91 
92  size_t build_TLS_EXT_TruncatedHMAC(BYTE* buf);
93 
94  size_t build_TLS_EXT_EncryptThenMac(BYTE* buf);
95 
96 #if defined(USE_SSL_KeyExchange_DHE_RSA) || defined(USE_SSL_KeyExchange_DHE_PSK)
97  HRESULT parse_KeyEx_client_dh_public(const BYTE* p, const BYTE* end);
98 #endif
99 
100  public:
101  cSSLServer(const cSSLConfig& rOpts) noexcept;
103 
104  virtual HRESULT ProcessStreamPacket() override; // process handshake.
105 
106 #if defined(USE_SSL_SERVER_NAME_INDICATION)
107  void put_SNICallback(ISSLServerExt* pSNICallback);
108 #endif // USE_SSL_SERVER_NAME_INDICATION
109 
110 #if defined(USE_SSL_KeyExchange_PSK_SOME)
111  void put_PSKCallback(ISSLServerExt* pPSKCallback);
112 #endif // USE_SSL_KeyExchange_PSK_SOME
113 
114 #if defined(USE_SSL_KeyExchange_PSK_SOME)
115  HRESULT SetPSKIdentity(const BYTE* psk, size_t psk_len, const BYTE* psk_identity, size_t psk_identity_len);
116 #endif
117 
127 
128  HRESULT parse_TLS_EXT_server_name(const BYTE* buf, size_t len);
131 
133  {
135  this->m_pCache = pCache;
136  }
137 
138 #if defined(USE_SSL_SESSION_TICKETS)
139  HRESULT put_UseSessionTickets(bool bUseTickets);
140 #endif
142 
143  };
144 }
145 #endif // USE_SSL_SERVER
146 #endif
#define GRAYSSL_LINK
Definition: GraySSLInt.h:25
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cSSLCipherSuite.h:28
Definition: cSSLMsg.h:139
Definition: cSSLSession.h:199
Definition: cX509KeyCrtPair.h:16
Definition: cSSLCommon.h:62
Definition: cSSLConfig.h:46
Definition: cSSLServer.h:26
size_t build_TLS_EXT_SessionTicket(cSSLMsgHandExt *pExt)
HRESULT state_SSL_SERVER_KEY_EXCHANGE()
void put_SessionCache(cSSLSessionCache *pCache)
Definition: cSSLServer.h:132
HRESULT state_SSL_SERVER_CHANGE_CIPHER_SPEC()
HRESULT state_SSL_ClientHello()
HRESULT state_SSL_CERTIFICATE_VERIFY()
HRESULT parse_SSL_ClientHello_v2()
HRESULT parse_TLS_EXT_server_name(const BYTE *buf, size_t len)
HRESULT state_SSL_CERTIFICATE_REQUEST()
cSSLServer(const cSSLConfig &rOpts) noexcept
ISSLServerExt * m_pSNICallback
Definition: cSSLServer.h:42
cSSLSessionCache * m_pCache
Server Session cache.
Definition: cSSLServer.h:33
void state_SSL_HANDSHAKE_WRAPUP()
HRESULT put_UseSessionTickets(bool bUseTickets)
size_t build_TLS_EXT_ExtendedMasterSecret(cSSLMsgHandExt *pExt)
ISSLServerExt * m_pPSKCallback
Definition: cSSLServer.h:45
cNewPtr< cSSLTicketKeys > m_pTicketKeys
allocated keys for ticket encryption
Definition: cSSLServer.h:37
void put_PSKCallback(ISSLServerExt *pPSKCallback)
HRESULT AddKeyCrt(cX509KeyCrtPair *pKeyCrt)
HRESULT state_SSL_ServerHello_DONE()
HRESULT state_SSL_CLIENT_KEY_EXCHANGE()
void put_SNICallback(ISSLServerExt *pSNICallback)
HRESULT SetPSKIdentity(const BYTE *psk, size_t psk_len, const BYTE *psk_identity, size_t psk_identity_len)
virtual HRESULT ProcessStreamPacket() override
SSL_CipherSuite_TYPE
Definition: SSLTypes.h:88
Definition: GraySSL.cpp:11
Definition: cSSLServer.h:18
virtual HRESULT OnCallback(cSSLServer *pSSL, const BYTE *pszName, size_t nSizeName)=0