Key loading from files
This commit is contained in:
@@ -127,6 +127,28 @@ int main(int argc, char** argv) {
|
||||
initialState.virtualInterface = tun;
|
||||
|
||||
std::shared_ptr<LibSodiumWrapper> sodiumWrapper = std::make_shared<LibSodiumWrapper>();
|
||||
const std::string clientPublicKeyPath = configPath + "public.key";
|
||||
const std::string clientPrivateKeyPath = configPath + "private.key";
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
bool clientKeyFilesPresent = fs::exists(clientPublicKeyPath) && fs::exists(clientPrivateKeyPath);
|
||||
if (clientKeyFilesPresent) {
|
||||
Utils::log("Loading client keypair from key files.");
|
||||
|
||||
PublicKey pk = Utils::loadHexArrayFromFile<crypto_sign_PUBLICKEYBYTES>(clientPublicKeyPath, "client public key");
|
||||
PrivateSeed seed = Utils::loadHexArrayFromFile<crypto_sign_SEEDBYTES>(clientPrivateKeyPath, "client private key", true);
|
||||
|
||||
if (!sodiumWrapper->recomputeKeys(seed, pk)) {
|
||||
throw std::runtime_error("Failed to recompute client keypair from key files!");
|
||||
}
|
||||
} else {
|
||||
#if defined(DEBUG)
|
||||
Utils::warn("No client keypair files found! Using random key.");
|
||||
#else
|
||||
throw std::runtime_error("No client keypair files found! Cannot start client without keys.");
|
||||
#endif
|
||||
}
|
||||
|
||||
debug("Public Key: " + Utils::bytesToHexString(sodiumWrapper->getPublicKey(), 32));
|
||||
debug("Private Key: " + Utils::bytesToHexString(sodiumWrapper->getPrivateKey(), 64));
|
||||
initialState.sodiumWrapper = sodiumWrapper;
|
||||
|
||||
@@ -6,6 +6,20 @@
|
||||
//#include <arpa/inet.h>
|
||||
|
||||
namespace ColumnLynx::Net::TCP {
|
||||
TCPClient::TCPClient(asio::io_context& ioContext, const std::string& host, const std::string& port)
|
||||
: mResolver(ioContext),
|
||||
mSocket(ioContext),
|
||||
mHost(host),
|
||||
mPort(port),
|
||||
mHeartbeatTimer(mSocket.get_executor()),
|
||||
mLastHeartbeatReceived(std::chrono::steady_clock::now()),
|
||||
mLastHeartbeatSent(std::chrono::steady_clock::now())
|
||||
{
|
||||
if (!ClientSession::getInstance().getSodiumWrapper()) {
|
||||
throw std::runtime_error("ClientSession sodium wrapper is not initialized");
|
||||
}
|
||||
}
|
||||
|
||||
void TCPClient::start() {
|
||||
auto self = shared_from_this();
|
||||
mResolver.async_resolve(mHost, mPort,
|
||||
|
||||
Reference in New Issue
Block a user