refactor: move SecureSocket::formatFingerprint -> SecureUtils std::string formatSSLFingerprint
based on0e406d49189d8e1faf59b793675ef8
This commit is contained in:
parent
524c3b0e7b
commit
a98f2d745e
6 changed files with 80 additions and 21 deletions
|
|
@ -18,6 +18,8 @@ add_library(net STATIC
|
||||||
SecureSocket.h
|
SecureSocket.h
|
||||||
SocketMultiplexer.cpp
|
SocketMultiplexer.cpp
|
||||||
SocketMultiplexer.h
|
SocketMultiplexer.h
|
||||||
|
SecureUtils.cpp
|
||||||
|
SecureUtils.h
|
||||||
TCPListenSocket.cpp
|
TCPListenSocket.cpp
|
||||||
TCPListenSocket.h
|
TCPListenSocket.h
|
||||||
TCPSocket.cpp
|
TCPSocket.cpp
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "SecureSocket.h"
|
#include "SecureSocket.h"
|
||||||
|
#include "SecureUtils.h"
|
||||||
|
|
||||||
#include "arch/XArch.h"
|
#include "arch/XArch.h"
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
|
|
@ -610,25 +611,6 @@ void SecureSocket::disconnect()
|
||||||
sendEvent(getEvents()->forIStream().inputShutdown());
|
sendEvent(getEvents()->forIStream().inputShutdown());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SecureSocket::formatFingerprint(std::string &fingerprint, bool hex, bool separator)
|
|
||||||
{
|
|
||||||
if (hex) {
|
|
||||||
// to hexidecimal
|
|
||||||
fingerprint = deskflow::string::toHex(fingerprint, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
// all uppercase
|
|
||||||
deskflow::string::uppercase(fingerprint);
|
|
||||||
|
|
||||||
if (separator) {
|
|
||||||
// add colon to separate each 2 charactors
|
|
||||||
size_t separators = fingerprint.size() / 2;
|
|
||||||
for (size_t i = 1; i < separators; i++) {
|
|
||||||
fingerprint.insert(i * 3 - 1, ":");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SecureSocket::verifyCertFingerprint()
|
bool SecureSocket::verifyCertFingerprint()
|
||||||
{
|
{
|
||||||
// calculate received certificate fingerprint
|
// calculate received certificate fingerprint
|
||||||
|
|
@ -646,7 +628,7 @@ bool SecureSocket::verifyCertFingerprint()
|
||||||
|
|
||||||
// format fingerprint into hexdecimal format with colon separator
|
// format fingerprint into hexdecimal format with colon separator
|
||||||
std::string fingerprint(static_cast<char *>(static_cast<void *>(tempFingerprint)), tempFingerprintLen);
|
std::string fingerprint(static_cast<char *>(static_cast<void *>(tempFingerprint)), tempFingerprintLen);
|
||||||
formatFingerprint(fingerprint);
|
fingerprint = deskflow::formatSSLFingerprint(fingerprint);
|
||||||
LOG((CLOG_NOTE "server fingerprint: %s", fingerprint.c_str()));
|
LOG((CLOG_NOTE "server fingerprint: %s", fingerprint.c_str()));
|
||||||
|
|
||||||
std::string trustedServersFilename;
|
std::string trustedServersFilename;
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,6 @@ private:
|
||||||
bool showCertificate() const;
|
bool showCertificate() const;
|
||||||
void checkResult(int n, int &retry);
|
void checkResult(int n, int &retry);
|
||||||
void disconnect();
|
void disconnect();
|
||||||
void formatFingerprint(std::string &fingerprint, bool hex = true, bool separator = true);
|
|
||||||
bool verifyCertFingerprint();
|
bool verifyCertFingerprint();
|
||||||
|
|
||||||
ISocketMultiplexerJob *serviceConnect(ISocketMultiplexerJob *, bool, bool, bool);
|
ISocketMultiplexerJob *serviceConnect(ISocketMultiplexerJob *, bool, bool, bool);
|
||||||
|
|
|
||||||
31
src/lib/net/SecureUtils.cpp
Normal file
31
src/lib/net/SecureUtils.cpp
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Deskflow -- mouse and keyboard sharing utility
|
||||||
|
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
|
||||||
|
* SPDX-FileCopyrightText: (C) 2021 Barrier Contributors
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SecureUtils.h"
|
||||||
|
#include "base/String.h"
|
||||||
|
|
||||||
|
namespace deskflow {
|
||||||
|
|
||||||
|
std::string formatSSLFingerprint(const std::string &fingerprint, bool convertToHex, bool enableSeparators)
|
||||||
|
{
|
||||||
|
std::string result = fingerprint;
|
||||||
|
|
||||||
|
if (convertToHex)
|
||||||
|
result = deskflow::string::toHex(fingerprint, 2);
|
||||||
|
|
||||||
|
deskflow::string::uppercase(result);
|
||||||
|
|
||||||
|
if (enableSeparators) {
|
||||||
|
const auto usedSpaces = 3;
|
||||||
|
size_t separators = result.size() / 2;
|
||||||
|
for (size_t i = 1; i < separators; i++)
|
||||||
|
result.insert(i * usedSpaces - 1, ":");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace deskflow
|
||||||
24
src/lib/net/SecureUtils.h
Normal file
24
src/lib/net/SecureUtils.h
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Deskflow -- mouse and keyboard sharing utility
|
||||||
|
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
|
||||||
|
* SPDX-FileCopyrightText: (C) 2021 Barrier Contributors
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace deskflow {
|
||||||
|
/**
|
||||||
|
|
||||||
|
* @brief formatSSLFingerprint Format an ssl Fingerprint
|
||||||
|
* @param fingerprint input string
|
||||||
|
* @param convertToHex when true converts the string to a hex string
|
||||||
|
* @param enableSeparators insert : seperator every byte when true
|
||||||
|
* @return a Formated Fingerprint String
|
||||||
|
*/
|
||||||
|
std::string
|
||||||
|
formatSSLFingerprint(const std::string &fingerprint, bool convertToHex = true, bool enableSeparators = true);
|
||||||
|
|
||||||
|
} // namespace deskflow
|
||||||
21
src/test/unittests/net/SecureUtilsTests.cpp
Normal file
21
src/test/unittests/net/SecureUtilsTests.cpp
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Deskflow -- mouse and keyboard sharing utility
|
||||||
|
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
|
||||||
|
* SPDX-FileCopyrightText: (C) 2021 Barrier Contributors
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "net/SecureUtils.h"
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
TEST(SecureUtilsTest, formatSSLFingerprints_fromHex_withSeperators)
|
||||||
|
{
|
||||||
|
std::string fingerprint = "(\xFD\n\x98\x8A\x0E\xA1l\xD7\xE8l\xA7\xEEXAq\xCA\xB2\x8EI%\x94\x90%&\x05\x8D\xAF"
|
||||||
|
"c\xED.0";
|
||||||
|
|
||||||
|
ASSERT_EQ(
|
||||||
|
deskflow::formatSSLFingerprint(fingerprint, true, true), "28:FD:0A:98:8A:0E:A1:6C:D7:E8:6C:A7:EE:58:41:71:"
|
||||||
|
"CA:B2:8E:49:25:94:90:25:26:05:8D:AF:63:ED:2E:30"
|
||||||
|
);
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue