summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibTLS/Certificate.h2
-rw-r--r--Userland/Libraries/LibTLS/TLSv12.cpp27
2 files changed, 17 insertions, 12 deletions
diff --git a/Userland/Libraries/LibTLS/Certificate.h b/Userland/Libraries/LibTLS/Certificate.h
index 265cc4b789..97f84de0a4 100644
--- a/Userland/Libraries/LibTLS/Certificate.h
+++ b/Userland/Libraries/LibTLS/Certificate.h
@@ -137,7 +137,7 @@ public:
Vector<Certificate> const& certificates() const { return m_ca_certificates; }
- void reload_certificates(ByteBuffer&);
+ ErrorOr<Vector<Certificate>> reload_certificates(ByteBuffer&);
static DefaultRootCACertificates& the() { return s_the; }
diff --git a/Userland/Libraries/LibTLS/TLSv12.cpp b/Userland/Libraries/LibTLS/TLSv12.cpp
index d2ff01791b..7dc10f0c7f 100644
--- a/Userland/Libraries/LibTLS/TLSv12.cpp
+++ b/Userland/Libraries/LibTLS/TLSv12.cpp
@@ -499,18 +499,21 @@ DefaultRootCACertificates::DefaultRootCACertificates()
return;
}
auto data = data_result.release_value();
- reload_certificates(data);
-}
-void DefaultRootCACertificates::reload_certificates(ByteBuffer& data)
-{
- auto decode_result = Crypto::decode_pems(data);
- if (decode_result.is_error()) {
- dbgln("Failed to load CA Certificates: {}", decode_result.error());
+ auto reload_result = reload_certificates(data);
+ if (reload_result.is_error()) {
+ dbgln("Failed to load CA Certificates: {}", reload_result.error());
return;
}
- m_ca_certificates.clear();
- auto certs = decode_result.release_value();
+
+ m_ca_certificates = reload_result.release_value();
+}
+
+ErrorOr<Vector<Certificate>> DefaultRootCACertificates::reload_certificates(ByteBuffer& data)
+{
+ Vector<Certificate> certificates;
+
+ auto certs = TRY(Crypto::decode_pems(data));
for (auto& cert : certs) {
auto certificate_result = Certificate::parse_asn1(cert.bytes());
@@ -523,12 +526,14 @@ void DefaultRootCACertificates::reload_certificates(ByteBuffer& data)
}
auto certificate = certificate_result.release_value();
if (certificate.is_certificate_authority && certificate.is_self_signed()) {
- m_ca_certificates.append(move(certificate));
+ TRY(certificates.try_append(move(certificate)));
} else {
dbgln("Skipped '{}' because it is not a valid root CA", certificate.subject_identifier_string());
}
}
- dbgln("Loaded {} of {} ({:.2}%) provided CA Certificates", m_ca_certificates.size(), certs.size(), (m_ca_certificates.size() * 100.0) / certs.size());
+ dbgln("Loaded {} of {} ({:.2}%) provided CA Certificates", certificates.size(), certs.size(), (certificates.size() * 100.0) / certs.size());
+
+ return certificates;
}
}