mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:27:45 +00:00
LibTLS: Add OutOfMemory error that will send an InternalError alert
This commit is contained in:
parent
610b380515
commit
ab84aa6fb2
3 changed files with 8 additions and 7 deletions
|
@ -473,7 +473,8 @@ ssize_t TLSv12::handle_handshake_payload(ReadonlyBytes vbuffer)
|
||||||
write_packet(packet);
|
write_packet(packet);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Error::NotUnderstood: {
|
case Error::NotUnderstood:
|
||||||
|
case Error::OutOfMemory: {
|
||||||
auto packet = build_alert(true, (u8)AlertDescription::InternalError);
|
auto packet = build_alert(true, (u8)AlertDescription::InternalError);
|
||||||
write_packet(packet);
|
write_packet(packet);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -225,8 +225,7 @@ ssize_t TLSv12::handle_server_key_exchange(ReadonlyBytes buffer)
|
||||||
TODO();
|
TODO();
|
||||||
break;
|
break;
|
||||||
case KeyExchangeAlgorithm::DHE_RSA:
|
case KeyExchangeAlgorithm::DHE_RSA:
|
||||||
handle_dhe_rsa_server_key_exchange(buffer);
|
return handle_dhe_rsa_server_key_exchange(buffer);
|
||||||
break;
|
|
||||||
case KeyExchangeAlgorithm::DH_anon:
|
case KeyExchangeAlgorithm::DH_anon:
|
||||||
dbgln("Server key exchange for DH_anon is not implemented");
|
dbgln("Server key exchange for DH_anon is not implemented");
|
||||||
TODO();
|
TODO();
|
||||||
|
@ -255,7 +254,7 @@ ssize_t TLSv12::handle_dhe_rsa_server_key_exchange(ReadonlyBytes buffer)
|
||||||
auto p_result = ByteBuffer::copy(dh_p);
|
auto p_result = ByteBuffer::copy(dh_p);
|
||||||
if (p_result.is_error()) {
|
if (p_result.is_error()) {
|
||||||
dbgln("dhe_rsa_server_key_exchange failed: Not enough memory");
|
dbgln("dhe_rsa_server_key_exchange failed: Not enough memory");
|
||||||
return 0;
|
return (i8)Error::OutOfMemory;
|
||||||
}
|
}
|
||||||
m_context.server_diffie_hellman_params.p = p_result.release_value();
|
m_context.server_diffie_hellman_params.p = p_result.release_value();
|
||||||
|
|
||||||
|
@ -264,7 +263,7 @@ ssize_t TLSv12::handle_dhe_rsa_server_key_exchange(ReadonlyBytes buffer)
|
||||||
auto g_result = ByteBuffer::copy(dh_g);
|
auto g_result = ByteBuffer::copy(dh_g);
|
||||||
if (g_result.is_error()) {
|
if (g_result.is_error()) {
|
||||||
dbgln("dhe_rsa_server_key_exchange failed: Not enough memory");
|
dbgln("dhe_rsa_server_key_exchange failed: Not enough memory");
|
||||||
return 0;
|
return (i8)Error::OutOfMemory;
|
||||||
}
|
}
|
||||||
m_context.server_diffie_hellman_params.g = g_result.release_value();
|
m_context.server_diffie_hellman_params.g = g_result.release_value();
|
||||||
|
|
||||||
|
@ -273,7 +272,7 @@ ssize_t TLSv12::handle_dhe_rsa_server_key_exchange(ReadonlyBytes buffer)
|
||||||
auto Ys_result = ByteBuffer::copy(dh_Ys);
|
auto Ys_result = ByteBuffer::copy(dh_Ys);
|
||||||
if (Ys_result.is_error()) {
|
if (Ys_result.is_error()) {
|
||||||
dbgln("dhe_rsa_server_key_exchange failed: Not enough memory");
|
dbgln("dhe_rsa_server_key_exchange failed: Not enough memory");
|
||||||
return 0;
|
return (i8)Error::OutOfMemory;
|
||||||
}
|
}
|
||||||
m_context.server_diffie_hellman_params.Ys = Ys_result.release_value();
|
m_context.server_diffie_hellman_params.Ys = Ys_result.release_value();
|
||||||
|
|
||||||
|
@ -310,7 +309,7 @@ ssize_t TLSv12::handle_ecdhe_rsa_server_key_exchange(ReadonlyBytes buffer)
|
||||||
auto server_public_key_copy_result = ByteBuffer::copy(server_public_key);
|
auto server_public_key_copy_result = ByteBuffer::copy(server_public_key);
|
||||||
if (server_public_key_copy_result.is_error()) {
|
if (server_public_key_copy_result.is_error()) {
|
||||||
dbgln("ecdhe_rsa_server_key_exchange failed: Not enough memory");
|
dbgln("ecdhe_rsa_server_key_exchange failed: Not enough memory");
|
||||||
return 0;
|
return (i8)Error::OutOfMemory;
|
||||||
}
|
}
|
||||||
m_context.server_diffie_hellman_params.p = server_public_key_copy_result.release_value();
|
m_context.server_diffie_hellman_params.p = server_public_key_copy_result.release_value();
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,7 @@ enum class Error : i8 {
|
||||||
DecryptionFailed = -20,
|
DecryptionFailed = -20,
|
||||||
NeedMoreData = -21,
|
NeedMoreData = -21,
|
||||||
TimedOut = -22,
|
TimedOut = -22,
|
||||||
|
OutOfMemory = -23,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class AlertLevel : u8 {
|
enum class AlertLevel : u8 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue