1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:07:45 +00:00

LibTLS: Avoid unnecessary HashMap copies, improve const-correctness

This commit is contained in:
Ben Wiederhake 2023-05-13 20:51:24 +02:00 committed by Jelle Raaijmakers
parent f866c80222
commit 2bb2a7097d
4 changed files with 11 additions and 11 deletions

View file

@ -794,7 +794,7 @@ ErrorOr<Certificate> Certificate::parse_certificate(ReadonlyBytes buffer, bool)
#undef DROP_OBJECT #undef DROP_OBJECT
#undef REWRITE_TAG #undef REWRITE_TAG
ErrorOr<String> RelativeDistinguishedName::to_string() ErrorOr<String> RelativeDistinguishedName::to_string() const
{ {
#define ADD_IF_RECOGNIZED(identifier, shorthand_code) \ #define ADD_IF_RECOGNIZED(identifier, shorthand_code) \
if (it->key == identifier) { \ if (it->key == identifier) { \

View file

@ -192,29 +192,29 @@ struct BasicConstraints {
class RelativeDistinguishedName { class RelativeDistinguishedName {
public: public:
ErrorOr<String> to_string(); ErrorOr<String> to_string() const;
ErrorOr<AK::HashSetResult> set(String key, String value) ErrorOr<AK::HashSetResult> set(String key, String value)
{ {
return m_members.try_set(key, value); return m_members.try_set(key, value);
} }
Optional<String> get(StringView key) Optional<String> get(StringView key) const
{ {
return m_members.get(key); return m_members.get(key);
} }
Optional<String> get(AttributeType key) Optional<String> get(AttributeType key) const
{ {
return m_members.get(enum_value(key)); return m_members.get(enum_value(key));
} }
Optional<String> get(ObjectClass key) Optional<String> get(ObjectClass key) const
{ {
return m_members.get(enum_value(key)); return m_members.get(enum_value(key));
} }
String common_name() String common_name() const
{ {
auto entry = get(AttributeType::Cn); auto entry = get(AttributeType::Cn);
if (entry.has_value()) { if (entry.has_value()) {

View file

@ -78,7 +78,7 @@ ssize_t TLSv12::handle_certificate(ReadonlyBytes buffer)
auto certificate = Certificate::parse_certificate(buffer.slice(res_cert, certificate_size_specific), false); auto certificate = Certificate::parse_certificate(buffer.slice(res_cert, certificate_size_specific), false);
if (!certificate.is_error()) { if (!certificate.is_error()) {
m_context.certificates.append(certificate.value()); m_context.certificates.empend(certificate.value());
valid_certificate = true; valid_certificate = true;
} else { } else {
dbgln("Failed to parse client cert: {}", certificate.error()); dbgln("Failed to parse client cert: {}", certificate.error());

View file

@ -231,7 +231,7 @@ static bool wildcard_matches(StringView host, StringView subject)
return false; return false;
} }
static bool certificate_subject_matches_host(Certificate& cert, StringView host) static bool certificate_subject_matches_host(Certificate const& cert, StringView host)
{ {
if (wildcard_matches(host, cert.subject.common_name())) if (wildcard_matches(host, cert.subject.common_name()))
return true; return true;
@ -269,7 +269,7 @@ bool Context::verify_chain(StringView host) const
// it in any case. // it in any case.
if (!host.is_empty()) { if (!host.is_empty()) {
auto first_certificate = local_chain->first(); auto const& first_certificate = local_chain->first();
auto subject_matches = certificate_subject_matches_host(first_certificate, host); auto subject_matches = certificate_subject_matches_host(first_certificate, host);
if (!subject_matches) { if (!subject_matches) {
dbgln("verify_chain: First certificate does not match the hostname"); dbgln("verify_chain: First certificate does not match the hostname");
@ -282,7 +282,7 @@ bool Context::verify_chain(StringView host) const
} }
for (size_t cert_index = 0; cert_index < local_chain->size(); ++cert_index) { for (size_t cert_index = 0; cert_index < local_chain->size(); ++cert_index) {
auto cert = local_chain->at(cert_index); auto const& cert = local_chain->at(cert_index);
auto subject_string = MUST(cert.subject.to_string()); auto subject_string = MUST(cert.subject.to_string());
auto issuer_string = MUST(cert.issuer.to_string()); auto issuer_string = MUST(cert.issuer.to_string());
@ -316,7 +316,7 @@ bool Context::verify_chain(StringView host) const
return false; return false;
} }
auto parent_certificate = local_chain->at(cert_index + 1); auto const& parent_certificate = local_chain->at(cert_index + 1);
if (issuer_string != MUST(parent_certificate.subject.to_string())) { if (issuer_string != MUST(parent_certificate.subject.to_string())) {
dbgln("verify_chain: Next certificate in the chain is not the issuer of this certificate"); dbgln("verify_chain: Next certificate in the chain is not the issuer of this certificate");
return false; return false;