5 #ifndef _INC_cSSLCommon_H
6 #define _INC_cSSLCommon_H
18 #if defined(USE_Key_EC)
25 #if defined(USE_SSL_KeyExchange_PSK) || \
26 defined(USE_SSL_KeyExchange_RSA_PSK) || \
27 defined(USE_SSL_KeyExchange_DHE_PSK) || \
28 defined(USE_SSL_KeyExchange_ECDHE_PSK)
29 #define USE_SSL_KeyExchange_PSK_SOME
32 #if defined(USE_SSL_KeyExchange_ECDHE_RSA) || \
33 defined(USE_SSL_KeyExchange_ECDHE_ECDSA) || \
34 defined(USE_SSL_KeyExchange_ECDHE_PSK)
35 #define USE_SSL_KeyExchange_ECDHE_SOME
38 #if defined(USE_SSL_KeyExchange_RSA) || \
39 defined(USE_SSL_KeyExchange_DHE_RSA) || \
40 defined(USE_SSL_KeyExchange_ECDHE_RSA) || \
41 defined(USE_SSL_KeyExchange_ECDHE_ECDSA) || \
42 defined(USE_SSL_KeyExchange_RSA_PSK) || \
43 defined(USE_SSL_KeyExchange_ECDHE_PSK) || \
44 defined(USE_SSL_KeyExchange_ECDH_RSA) || \
45 defined(USE_SSL_KeyExchange_ECDH_ECDSA)
46 #define USE_SSL_KeyExchange_Cert_SOME
81 #if defined(USE_SSL_RENEGOTIATION)
83 int m_nRenegoRecordsSeen;
116 #if defined(USE_SSL_KeyExchange_PSK_SOME)
122 #if defined(USE_SSL_VER_SSL_3)
123 static const int k_VERIFY_DATA_MAX_LEN = 36;
125 static const int k_VERIFY_DATA_MAX_LEN = 12;
128 #if defined(USE_SSL_RENEGOTIATION)
129 BYTE m_VerifyDataOwn[k_VERIFY_DATA_MAX_LEN];
133 BYTE m_VerifyDataPeer[k_VERIFY_DATA_MAX_LEN];
135 #if defined(USE_SSL_CBC_RECORD_SPLITTING)
139 #if defined(USE_SSL_X509_CRT_PARSE)
166 void state_SSL_HANDSHAKE_WRAPUP();
173 this->m_pReader = pReader;
174 this->m_pWriter = pWriter;
177 virtual void SetSessionClear();
186 return this->m_pszAlpnChosen;
195 HRESULT Handshake(
bool bWait =
false);
202 HRESULT WriteMsgApp(
const BYTE* buf,
size_t len);
205 HRESULT WriteFlush(
bool bWait =
false);
208 HRESULT ReadFill(
size_t nSizeExpect);
211 HRESULT ReadProcessCompleteMsg();
216 #if defined(USE_SSL_CBC_RECORD_SPLITTING)
225 const char* get_CipherSuiteStr()
const;
227 const char* get_VersionStr()
const;
229 #if defined(USE_SSL_X509_CRT_PARSE)
235 #if defined(USE_SSL_RENEGOTIATION)
242 #if defined(USE_SSL_RENEGOTIATION)
243 HRESULT RenegotiationHandshake();
266 virtual HRESULT ReadX(OUT
void* pData,
size_t nDataSize)
override;
268 virtual size_t SetSeekSizeMin(
size_t nSizeMin = k_FILE_BLOCK_SIZE)
override;
285 virtual HRESULT WriteX(
const void* pData,
size_t nDataSize)
override;
288 HRESULT write_SSL_ALERT_SSL3_CLOSE_NOTIFY();
290 HRESULT write_SSL_ALERT_SSL3_HANDSHAKE_FAILURE();
294 HRESULT state_SSL_XXX_CERTIFICATE_r();
295 HRESULT state_SSL_XXX_CERTIFICATE_w();
297 HRESULT state_SSL_XXX_CHANGE_CIPHER_SPEC_r();
298 HRESULT state_SSL_XXX_CHANGE_CIPHER_SPEC_w();
300 HRESULT state_SSL_XXX_FINISHED_r();
301 HRESULT state_SSL_XXX_FINISHED_w();
305 #if defined(USE_SSL_KeyExchange_PSK_SOME)
309 #if defined(USE_SSL_X509_CRT_PARSE)
320 #if defined(USE_SSL_RENEGOTIATION) && defined(USE_SSL_SERVER)
321 HRESULT write_SSL_HS_HELLO_REQUEST();
#define GRAYSSL_LINK
Definition: GraySSLInt.h:25
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cKeyWrap.h:25
Definition: cSSLMsg.h:471
Definition: cSSLMsg.h:139
Definition: cSSLSession.h:175
Definition: cX509Crt.h:20
Definition: cX509KeyCrtPair.h:16
cRefPtr< cX509Crt > m_pCert
public key cert
Definition: cX509KeyCrtPair.h:22
cKeyWrap m_KeyPriv
private key for m_pCert
Definition: cX509KeyCrtPair.h:23
Definition: cSSLCommon.h:62
bool m_bRenegotiationSupported
does peer support legacy or secure renegotiation TLS_EXT_renegotiation_info
Definition: cSSLCommon.h:80
bool m_bClientAuth
flag for client auth. client optionally supplies a cert if servers asks.
Definition: cSSLCommon.h:110
bool isStateHandshake() const noexcept
Definition: cSSLCommon.h:189
cSSLHandshake * m_pHandshake
params required only during the handshake SSL_STATE_TYPE(s)
Definition: cSSLCommon.h:86
cKeyWrap * get_OwnKeyPriv() const noexcept
Definition: cSSLCommon.h:310
cSSLSession * m_pSessionIn
current session data (in) from m_pSessionNegotiate
Definition: cSSLCommon.h:91
virtual HRESULT ProcessStreamPacket()=0
cHeapBlock m_PSKIdentity
Definition: cSSLCommon.h:119
cRefPtr< cX509Crt > get_PeerCert() const
cX509Crt * get_OwnCert() const noexcept
Definition: cSSLCommon.h:314
const cSSLConfig & m_Cfg
Behavior controls.
Definition: cSSLCommon.h:69
const char * get_AlpnChosen() const noexcept
Definition: cSSLCommon.h:181
const char * m_pszAlpnChosen
extension RFC 7301 Application Layer Protocol Negotiation.
Definition: cSSLCommon.h:114
cX509KeyCrtPair * m_pKeyCrtPair
my own certificate(s)/key(s) pair. Not freed. (server only)
Definition: cSSLCommon.h:140
cStreamOutput * m_pWriter
writing operations raw stream
Definition: cSSLCommon.h:78
cSSLSession * m_pSessionOut
current session data (out)
Definition: cSSLCommon.h:92
SSL_VERSION_TYPE m_nVer
Version selected. either 0 (SSL3) or 1 (TLS1.0)
Definition: cSSLCommon.h:75
void put_State(SSL_STATE_TYPE e) noexcept
Definition: cSSLCommon.h:154
bool isRenegotiation() const noexcept
Definition: cSSLCommon.h:233
cSSLSession * m_pSessionCur
negotiated session data. swapped from m_pSessionNegotiate
Definition: cSSLCommon.h:90
cSSLTransform * m_pTransformCur
negotiated transform params. swapped from m_pTransformNegotiate
Definition: cSSLCommon.h:96
cSSLMsgBuilder m_out
message contents (out_iv+ivlen)
Definition: cSSLCommon.h:105
cHeapBlock m_PSK
Definition: cSSLCommon.h:118
const cObjectSignature m_SigCommon
All DLL consumers must agree this is the same. sizeof(*this)
Definition: cSSLCommon.h:67
const bool m_bThisIsServer
true = cSSLServer else cSSLClient
Definition: cSSLCommon.h:68
X509_Verify_t m_eVerifyResults
verification result for cert.
Definition: cSSLCommon.h:111
size_t m_nInReadPos
caller ReadX() offset in application data m_in.m_pMsg
Definition: cSSLCommon.h:102
cSSLTransform * m_pTransformOut
current transform params (in)
Definition: cSSLCommon.h:98
size_t m_nVerifyDataSize
length of verify data stored. <= k_VERIFY_DATA_MAX_LEN
Definition: cSSLCommon.h:132
BITOP_TYPE m_nCBCRecordSplitOp
flag for record splitting: BITOP_TOGGLE=disabled, BITOP_CLR=todo, BITOP_SET= done
Definition: cSSLCommon.h:136
SSL_STATE_TYPE get_State() const noexcept
Definition: cSSLCommon.h:150
cSSLMsgBuilder m_in
Definition: cSSLCommon.h:101
cSSLTransform * m_pTransformNegotiate
transform params in negotiation. Move to m_pHandshake ?
Definition: cSSLCommon.h:95
cStreamInput * m_pReader
reading operations raw stream
Definition: cSSLCommon.h:77
void IncState1(SSL_STATE_TYPE e)
Definition: cSSLCommon.h:158
cSSLSession * m_pSessionNegotiate
session data in negotiation. Move to m_pHandshake ?
Definition: cSSLCommon.h:89
cSSLTransform * m_pTransformIn
current transform params (in) from m_pTransformNegotiate
Definition: cSSLCommon.h:97
HRESULT BuildKeyExPremasterPSK(SSL_KeyExchange_TYPE key_ex)
void AttachStreams(cStreamInput *pReader, cStreamOutput *pWriter) noexcept
Definition: cSSLCommon.h:168
const char * m_pszPeerCN
expected peer CN in case we check this against cert.
Definition: cSSLCommon.h:141
int m_nEmptyMessages
count # of 0-length encrypted messages. Watch for DoS.
Definition: cSSLCommon.h:107
void put_CBCRecordSplitOp(BITOP_TYPE split)
Definition: cSSLConfig.h:46
Definition: cSSLHandshake.h:78
cX509KeyCrtPair * m_pKeyCrtHand
Definition: cSSLHandshake.h:105
Definition: cRefPtr.h:225
Definition: cStream.h:126
Definition: cStream.h:456
X509_Verify_t
Definition: cX509.h:41
SSL_MAX_FRAG_TYPE
Definition: SSLTypes.h:170
SSL_MSG_TYPE
Definition: SSLTypes.h:45
SSL_ALERT_TYPE
Definition: SSLTypes.h:235
SSL_KeyExchange_TYPE
Definition: SSLTypes.h:113
SSL_VERSION_TYPE
Definition: SSLTypes.h:66
SSL_STATE_TYPE
Definition: SSLTypes.h:20
@ SSL_HANDSHAKE_COMPLETE
Definition: SSLTypes.h:40
SSL_ALERT_LEVEL_TYPE
Definition: SSLTypes.h:227
Definition: GraySSL.cpp:11
SSL_RENEGOTIATION_TYPE
Definition: cSSLCommon.h:52
@ SSL_RENEGOTIATION
Definition: cSSLCommon.h:56
@ SSL_RENEGOTIATION_DONE
Definition: cSSLCommon.h:57
@ SSL_RENEGOTIATION_PENDING
Definition: cSSLCommon.h:58
@ SSL_INITIAL_HANDSHAKE
Definition: cSSLCommon.h:55
LONG_PTR STREAM_OFFSET_t
Might be 64 or 32 bit. TODO SET USE_FILE_POS64.
Definition: cOSHandle.h:52
BITOP_TYPE
Definition: cBits.h:22
LONG_PTR STREAM_SEEKRET_t
return from Seek()
Definition: cOSHandle.h:53
ULONG_PTR STREAM_POS_t
NOT same as FILE_SIZE_t in 32 bit. Why not ?
Definition: cOSHandle.h:54
SEEK_ORIGIN_TYPE
Definition: cOSHandle.h:34
@ SEEK_Set
SEEK_SET = FILE_BEGIN = STREAM_SEEK_SET = 0 = relative to the start of the file.
Definition: cOSHandle.h:39
Definition: SSLTypes.h:270