Comments and some minor clean-up
This commit is contained in:
parent
8beb7bd27a
commit
a5b3914a09
@ -512,28 +512,3 @@ namespace eap
|
|||||||
hmac_padding m_padding_hmac; ///< Padding (key) for HMAC calculation
|
hmac_padding m_padding_hmac; ///< Padding (key) for HMAC calculation
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const eap::tls_conn_state &val)
|
|
||||||
//{
|
|
||||||
// cursor << val.m_master_secret;
|
|
||||||
// cursor << val.m_random_client;
|
|
||||||
// cursor << val.m_random_server;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//inline size_t pksizeof(_In_ const eap::tls_conn_state &val)
|
|
||||||
//{
|
|
||||||
// return
|
|
||||||
// pksizeof(val.m_master_secret) +
|
|
||||||
// pksizeof(val.m_random_client) +
|
|
||||||
// pksizeof(val.m_random_server);
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ eap::tls_conn_state &val)
|
|
||||||
//{
|
|
||||||
// cursor >> val.m_master_secret;
|
|
||||||
// cursor >> val.m_random_client;
|
|
||||||
// cursor >> val.m_random_server;
|
|
||||||
//}
|
|
||||||
|
@ -216,6 +216,7 @@ void eap::method_tls::begin_session(
|
|||||||
const config_method_tls *cfg_method = dynamic_cast<const config_method_tls*>(cfg_prov.m_methods.front().get());
|
const config_method_tls *cfg_method = dynamic_cast<const config_method_tls*>(cfg_prov.m_methods.front().get());
|
||||||
assert(cfg_method);
|
assert(cfg_method);
|
||||||
|
|
||||||
|
// Restore previous session ID and master secret. We might get lucky.
|
||||||
m_session_id = cfg_method->m_session_id;
|
m_session_id = cfg_method->m_session_id;
|
||||||
m_master_secret = cfg_method->m_master_secret;
|
m_master_secret = cfg_method->m_master_secret;
|
||||||
}
|
}
|
||||||
@ -248,7 +249,7 @@ void eap::method_tls::process_request_packet(
|
|||||||
packet_data_size = dwReceivedPacketSize - 6;
|
packet_data_size = dwReceivedPacketSize - 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do the TLS defragmentation.
|
// Do the EAP-TLS defragmentation.
|
||||||
if (pReceivedPacket->Data[1] & flags_req_more_frag) {
|
if (pReceivedPacket->Data[1] & flags_req_more_frag) {
|
||||||
if (m_packet_req.m_data.empty()) {
|
if (m_packet_req.m_data.empty()) {
|
||||||
// Start a new packet.
|
// Start a new packet.
|
||||||
@ -310,7 +311,7 @@ void eap::method_tls::process_request_packet(
|
|||||||
m_packet_res.m_flags = 0;
|
m_packet_res.m_flags = 0;
|
||||||
|
|
||||||
if (pReceivedPacket->Code == EapCodeRequest && (m_packet_req.m_flags & flags_req_start)) {
|
if (pReceivedPacket->Code == EapCodeRequest && (m_packet_req.m_flags & flags_req_start)) {
|
||||||
// This is the TLS start message: (re)initialize method.
|
// This is the EAP-TLS start message: (re)initialize method.
|
||||||
m_module.log_event(&EAPMETHOD_TLS_HANDSHAKE_START2, event_data((unsigned int)eap_type_tls), event_data::blank);
|
m_module.log_event(&EAPMETHOD_TLS_HANDSHAKE_START2, event_data((unsigned int)eap_type_tls), event_data::blank);
|
||||||
|
|
||||||
m_key_mppe_client.clear();
|
m_key_mppe_client.clear();
|
||||||
@ -433,7 +434,7 @@ void eap::method_tls::process_request_packet(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Request packet was processed. Clear its data since we use the absence of data to detect first of fragmented message packages.
|
// EAP-Request packet was processed. Clear its data since we use the absence of data to detect first of fragmented message packages.
|
||||||
m_packet_req.m_data.clear();
|
m_packet_req.m_data.clear();
|
||||||
|
|
||||||
pEapOutput->fAllowNotifications = FALSE;
|
pEapOutput->fAllowNotifications = FALSE;
|
||||||
@ -512,7 +513,7 @@ void eap::method_tls::get_result(
|
|||||||
if (!m_server_finished)
|
if (!m_server_finished)
|
||||||
throw invalid_argument(__FUNCTION__ " Premature success.");
|
throw invalid_argument(__FUNCTION__ " Premature success.");
|
||||||
|
|
||||||
// Derive MSK.
|
// Derive MSK/EMSK for line encryption.
|
||||||
derive_msk();
|
derive_msk();
|
||||||
|
|
||||||
// Fill array with RADIUS attributes.
|
// Fill array with RADIUS attributes.
|
||||||
@ -582,19 +583,23 @@ eap::sanitizing_blob eap::method_tls::make_client_hello()
|
|||||||
0x00, 0x2f, // TLS_RSA_WITH_AES_128_CBC_SHA (required by TLS 1.2)
|
0x00, 0x2f, // TLS_RSA_WITH_AES_128_CBC_SHA (required by TLS 1.2)
|
||||||
0x00, 0x0a, // TLS_RSA_WITH_3DES_EDE_CBC_SHA (required by EAP-TLS)
|
0x00, 0x0a, // TLS_RSA_WITH_3DES_EDE_CBC_SHA (required by EAP-TLS)
|
||||||
};
|
};
|
||||||
|
static const unsigned char s_compression_suite[] = {
|
||||||
|
0x00, // No compression
|
||||||
|
};
|
||||||
|
|
||||||
size_t size_data;
|
size_t size_data;
|
||||||
sanitizing_blob msg;
|
sanitizing_blob msg;
|
||||||
msg.reserve(
|
msg.reserve(
|
||||||
4 + // SSL header
|
4 + // SSL header
|
||||||
(size_data =
|
(size_data =
|
||||||
2 + // SSL version
|
2 + // SSL version
|
||||||
sizeof(tls_random) + // Client random
|
sizeof(tls_random) + // Client random
|
||||||
1 + // Session ID size
|
1 + // Session ID size
|
||||||
m_session_id.size() + // Session ID
|
m_session_id.size() + // Session ID
|
||||||
2 + // Length of cypher suite list
|
2 + // Length of cypher suite list
|
||||||
sizeof(s_cipher_suite) + // Cipher suite list
|
sizeof(s_cipher_suite) + // Cipher suite list
|
||||||
1 + // Length of compression suite
|
1 + // Length of compression suite
|
||||||
1)); // Compression suite
|
sizeof(s_compression_suite))); // Compression suite
|
||||||
|
|
||||||
// SSL header
|
// SSL header
|
||||||
assert(size_data <= 0xffffff);
|
assert(size_data <= 0xffffff);
|
||||||
@ -619,8 +624,8 @@ eap::sanitizing_blob eap::method_tls::make_client_hello()
|
|||||||
msg.insert(msg.end(), s_cipher_suite, s_cipher_suite + _countof(s_cipher_suite));
|
msg.insert(msg.end(), s_cipher_suite, s_cipher_suite + _countof(s_cipher_suite));
|
||||||
|
|
||||||
// Compression
|
// Compression
|
||||||
msg.push_back(0x01); // Length of compression section
|
msg.push_back((unsigned char)sizeof(s_compression_suite));
|
||||||
msg.push_back(0x00); // No compression (0)
|
msg.insert(msg.end(), s_compression_suite, s_compression_suite + _countof(s_compression_suite));
|
||||||
|
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
@ -667,7 +672,7 @@ eap::sanitizing_blob eap::method_tls::make_client_cert() const
|
|||||||
|
|
||||||
eap::sanitizing_blob eap::method_tls::make_client_key_exchange(_In_ const tls_master_secret &pms) const
|
eap::sanitizing_blob eap::method_tls::make_client_key_exchange(_In_ const tls_master_secret &pms) const
|
||||||
{
|
{
|
||||||
// Encrypt pre-master key first.
|
// Encrypt pre-master key with server public key first.
|
||||||
sanitizing_blob pms_enc((const unsigned char*)&pms, (const unsigned char*)(&pms + 1));
|
sanitizing_blob pms_enc((const unsigned char*)&pms, (const unsigned char*)(&pms + 1));
|
||||||
crypt_key key;
|
crypt_key key;
|
||||||
if (!key.import_public(m_cp_enc, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &(m_server_cert_chain.front()->pCertInfo->SubjectPublicKeyInfo)))
|
if (!key.import_public(m_cp_enc, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &(m_server_cert_chain.front()->pCertInfo->SubjectPublicKeyInfo)))
|
||||||
@ -819,7 +824,7 @@ void eap::method_tls::process_packet(_In_bytecount_(size_pck) const void *_pck,
|
|||||||
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete message data.");
|
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete message data.");
|
||||||
|
|
||||||
if (hdr->version >= tls_version_1_0) {
|
if (hdr->version >= tls_version_1_0) {
|
||||||
// Process TLS 1.0 message.
|
// Process TLS message.
|
||||||
switch (hdr->type) {
|
switch (hdr->type) {
|
||||||
case tls_message_type_change_cipher_spec:
|
case tls_message_type_change_cipher_spec:
|
||||||
process_change_cipher_spec(msg, msg_end - msg);
|
process_change_cipher_spec(msg, msg_end - msg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user