Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cSSLClient.h
Go to the documentation of this file.
1 //
3 //
4 #ifndef _INC_cSSLClient_H
5 #define _INC_cSSLClient_H
6 #ifndef NO_PRAGMA_ONCE
7 #pragma once
8 #endif
9 #include "cSSLCommon.h"
10 
11 #if defined(USE_SSL_CLIENT)
12 namespace GraySSL
13 {
15  {
19 
20  typedef cSSLCommon SUPER_t;
21  public:
23 
24  public:
25  cSSLClient(const cSSLConfig& rOpts) noexcept
26  : cSSLCommon(false, rOpts)
27  {
28  }
29 
31  {
32  m_sServerName.SetErase();
33  }
34 
35  virtual void SetSessionClear() override;
36  HRESULT put_ServerName(const char* pszServerName);
37 
38  virtual HRESULT ProcessStreamPacket() override; // entry point.
39 
48 
49  HRESULT parse_TLS_EXT_renegotiation_info(const BYTE* buf, size_t len);
50  HRESULT parse_TLS_EXT_MaxFragmentLength(const BYTE* buf, size_t len);
51  HRESULT parse_TLS_EXT_TruncatedHMAC(const BYTE* buf, size_t len);
52  HRESULT parse_TLS_EXT_EncryptThenMac(const BYTE* buf, size_t len);
53 
54  private:
55  size_t build_TLS_EXT_server_name(cSSLMsgHandExt* pExt);
56 #if defined(USE_SSL_RENEGOTIATION)
57  size_t build_TLS_EXT_renegotiation_info(cSSLMsgHandExt* pExt);
58 #endif
59 #if defined(USE_SSL_KeyExchange_Cert_SOME)
60  size_t build_TLS_EXT_signature_algorithms(BYTE* buf);
61 #endif
62 #if defined(USE_SSL_ECDH) || defined(USE_Key_ECDSA)
63  size_t build_TLS_EXT_supported_groups(BYTE* buf);
64  size_t build_TLS_EXT_ec_point_formats(cSSLMsgHandExt* pExt);
65 #endif
66 
67  size_t build_TLS_EXT_TruncatedHMAC(BYTE* buf);
68  size_t build_TLS_EXT_EncryptThenMac(BYTE* buf);
69  size_t build_TLS_EXT_ExtendedMasterSecret(cSSLMsgHandExt* pExt);
70 
71 #if defined(USE_SSL_SESSION_TICKETS)
72  size_t build_TLS_EXT_SessionTicket(cSSLMsgHandExt* pExt);
73 #endif
74 
75  size_t build_TLS_EXT_ALPN(cSSLMsgHandExt* pExt);
76  HRESULT parse_TLS_EXT_ALPN(const BYTE* buf, size_t len);
77 
78  HRESULT parse_TLS_EXT_ExtendedMasterSecret(const BYTE* buf, size_t len);
79 
80 #if defined(USE_SSL_SESSION_TICKETS)
81  HRESULT parse_TLS_EXT_SessionTicket(const BYTE* buf, size_t len);
82 #endif
83 #if defined(USE_SSL_ECDH) || defined(USE_Key_ECDSA)
84  HRESULT parse_TLS_EXT_ec_point_formats(const BYTE* buf, size_t len);
85 #endif
86 
87  HRESULT CheckServerECDHParams() const;
88  HRESULT parse_KeyEx_signature_algorithm(const BYTE* p, const BYTE* end, SSL_Hash_TYPE* eHashType, SSL_Key_TYPE* eKeyType) const;
89  HRESULT parse_KeyEx_signature(const BYTE* p, const BYTE* end, const cSSLCipherSuite* pCipherSuite) const;
90 
91 #if defined(USE_SSL_KeyExchange_PSK_SOME)
92  HRESULT parse_KeyEx_server_psk_hint(const BYTE* p, const BYTE* end);
93 #endif
94 #if defined(USE_SSL_KeyExchange_RSA) || defined(USE_SSL_KeyExchange_RSA_PSK)
95  HRESULT BuildKeyExPreMasterSecret(BYTE* pData, size_t nSizeMax, size_t pms_offset);
96 #endif
97  };
98 }
99 #endif // USE_SSL_CLIENT
100 #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: cSSLClient.h:15
HRESULT state_SSL_CERTIFICATE_VERIFY()
HRESULT state_SSL_ClientHello()
HRESULT parse_TLS_EXT_EncryptThenMac(const BYTE *buf, size_t len)
virtual void SetSessionClear() override
HRESULT state_SSL_CERTIFICATE_REQUEST()
HRESULT state_SSL_ServerHello_DONE()
HRESULT parse_TLS_EXT_renegotiation_info(const BYTE *buf, size_t len)
HRESULT state_SSL_SERVER_CHANGE_CIPHER_SPEC()
HRESULT state_SSL_ServerHello()
HRESULT state_SSL_SERVER_KEY_EXCHANGE()
HRESULT put_ServerName(const char *pszServerName)
HRESULT state_SSL_CLIENT_KEY_EXCHANGE()
~cSSLClient()
Definition: cSSLClient.h:30
HRESULT parse_TLS_EXT_MaxFragmentLength(const BYTE *buf, size_t len)
cSSLClient(const cSSLConfig &rOpts) noexcept
Definition: cSSLClient.h:25
HRESULT parse_TLS_EXT_TruncatedHMAC(const BYTE *buf, size_t len)
virtual HRESULT ProcessStreamPacket() override
cStringA m_sServerName
SNI extension TLS_EXT_server_name string.
Definition: cSSLClient.h:22
Definition: cSSLCommon.h:62
Definition: cSSLConfig.h:46
void SetErase()
Definition: cString.h:531
SSL_Key_TYPE
Definition: cKeyBase.h:24
SSL_Hash_TYPE
Definition: cHashCode.h:23
Definition: GraySSL.cpp:11