From 20870974152b31ae01bc5736ec5bc1ee4f22a5b4 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Sat, 22 Nov 2025 10:51:39 -0500 Subject: [PATCH] refactor: new static TlsUtility::certFingerprint to generate fingerprint on the fly --- src/lib/gui/tls/TlsUtility.cpp | 21 +++++++++++++++++++++ src/lib/gui/tls/TlsUtility.h | 8 ++++++++ 2 files changed, 29 insertions(+) diff --git a/src/lib/gui/tls/TlsUtility.cpp b/src/lib/gui/tls/TlsUtility.cpp index 9d6e51630..c116cca46 100644 --- a/src/lib/gui/tls/TlsUtility.cpp +++ b/src/lib/gui/tls/TlsUtility.cpp @@ -70,6 +70,27 @@ int TlsUtility::getCertKeyLength(const QString &certPath) return deskflow::getCertLength(certPath.toStdString()); } +QByteArray TlsUtility::certFingerprint(const QString &certPath) +{ + QByteArray fingerprint; + + const auto certs = QSslCertificate::fromPath(certPath); + if (certs.isEmpty()) { + //: %1 will be replaced by the certificate path + qDebug() << tr("failed to read key from certificate file: %1").arg(certPath); + return fingerprint; + } + + const auto cert = certs.first(); + if (cert.isNull()) { + //: %1 will be replaced by the certificate path + qWarning() << tr("failed to parse certificate file: %1").arg(certPath); + return fingerprint; + } + + return cert.digest(QCryptographicHash::Sha256); +} + bool TlsUtility::generateCertificate() const { qDebug( diff --git a/src/lib/gui/tls/TlsUtility.h b/src/lib/gui/tls/TlsUtility.h index 28bfb35be..2a36425a9 100644 --- a/src/lib/gui/tls/TlsUtility.h +++ b/src/lib/gui/tls/TlsUtility.h @@ -43,6 +43,14 @@ public: */ static int getCertKeyLength(const QString &certPath = Settings::value(Settings::Security::Certificate).toString()); + /** + * @brief get the SHA256 fingerprint of a certificatefile. + * @param certPath path of the file to fingerprint, when not set uses the vaule of Settings::Security::Certificate + * @return A QByteArray of the SHA256 fingerprint of the file or empty array if invalid file is passed + */ + // clang-format off + static QByteArray certFingerprint(const QString &certPath = Settings::value(Settings::Security::Certificate).toString()); + // clang-format on private: TlsCertificate m_certificate; };