Compare commits
1 Commits
4ba59fb23f
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 022debfa5b |
@@ -38,4 +38,23 @@ namespace ColumnLynx::Utils {
|
|||||||
inline std::string uint8ArrayToString(const uint8_t* data, size_t length) {
|
inline std::string uint8ArrayToString(const uint8_t* data, size_t length) {
|
||||||
return std::string(reinterpret_cast<const char*>(data), length);
|
return std::string(reinterpret_cast<const char*>(data), length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline constexpr uint64_t bswap64(uint64_t x) {
|
||||||
|
return ((x & 0x00000000000000FFULL) << 56) |
|
||||||
|
((x & 0x000000000000FF00ULL) << 40) |
|
||||||
|
((x & 0x0000000000FF0000ULL) << 24) |
|
||||||
|
((x & 0x00000000FF000000ULL) << 8) |
|
||||||
|
((x & 0x000000FF00000000ULL) >> 8) |
|
||||||
|
((x & 0x0000FF0000000000ULL) >> 24) |
|
||||||
|
((x & 0x00FF000000000000ULL) >> 40) |
|
||||||
|
((x & 0xFF00000000000000ULL) >> 56);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline constexpr uint64_t htobe64(uint64_t x) {
|
||||||
|
return bswap64(x); // host -> big-endian (for little-endian hosts)
|
||||||
|
}
|
||||||
|
|
||||||
|
inline constexpr uint64_t be64toh(uint64_t x) {
|
||||||
|
return bswap64(x); // big-endian -> host (for little-endian hosts)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
@@ -63,7 +63,7 @@ int main(int argc, char** argv) {
|
|||||||
WintunInitialize();
|
WintunInitialize();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::shared_ptr<VirtualInterface> tun = std::make_shared<VirtualInterface>("utun0");
|
std::shared_ptr<VirtualInterface> tun = std::make_shared<VirtualInterface>("utun1");
|
||||||
log("Using virtual interface: " + tun->getName());
|
log("Using virtual interface: " + tun->getName());
|
||||||
|
|
||||||
LibSodiumWrapper sodiumWrapper = LibSodiumWrapper();
|
LibSodiumWrapper sodiumWrapper = LibSodiumWrapper();
|
||||||
|
|||||||
@@ -247,6 +247,9 @@ namespace ColumnLynx::Net::TCP {
|
|||||||
|
|
||||||
std::memcpy(&mConnectionSessionID, decrypted.data(), sizeof(mConnectionSessionID));
|
std::memcpy(&mConnectionSessionID, decrypted.data(), sizeof(mConnectionSessionID));
|
||||||
std::memcpy(&mTunConfig, decrypted.data() + sizeof(mConnectionSessionID), sizeof(Protocol::TunConfig));
|
std::memcpy(&mTunConfig, decrypted.data() + sizeof(mConnectionSessionID), sizeof(Protocol::TunConfig));
|
||||||
|
|
||||||
|
mConnectionSessionID = Utils::be64toh(mConnectionSessionID);
|
||||||
|
|
||||||
Utils::log("Connection established with Session ID: " + std::to_string(mConnectionSessionID));
|
Utils::log("Connection established with Session ID: " + std::to_string(mConnectionSessionID));
|
||||||
|
|
||||||
if (mSessionIDRef) { // Copy to the global reference
|
if (mSessionIDRef) { // Copy to the global reference
|
||||||
|
|||||||
@@ -173,8 +173,6 @@ namespace ColumnLynx::Net::TCP {
|
|||||||
// Make a Session ID
|
// Make a Session ID
|
||||||
randombytes_buf(&mConnectionSessionID, sizeof(mConnectionSessionID));
|
randombytes_buf(&mConnectionSessionID, sizeof(mConnectionSessionID));
|
||||||
|
|
||||||
// TODO: Make the session ID little-endian for network transmission
|
|
||||||
|
|
||||||
// Encrypt the Session ID with the established AES key (using symmetric encryption, nonce can be all zeros for this purpose)
|
// Encrypt the Session ID with the established AES key (using symmetric encryption, nonce can be all zeros for this purpose)
|
||||||
Nonce symNonce{}; // All zeros
|
Nonce symNonce{}; // All zeros
|
||||||
|
|
||||||
@@ -190,8 +188,10 @@ namespace ColumnLynx::Net::TCP {
|
|||||||
|
|
||||||
SessionRegistry::getInstance().lockIP(mConnectionSessionID, clientIP);
|
SessionRegistry::getInstance().lockIP(mConnectionSessionID, clientIP);
|
||||||
|
|
||||||
|
uint64_t sessionIDNet = Utils::htobe64(mConnectionSessionID);
|
||||||
|
|
||||||
std::vector<uint8_t> payload(sizeof(uint64_t) + sizeof(tunConfig));
|
std::vector<uint8_t> payload(sizeof(uint64_t) + sizeof(tunConfig));
|
||||||
std::memcpy(payload.data(), &mConnectionSessionID, sizeof(uint64_t));
|
std::memcpy(payload.data(), &sessionIDNet, sizeof(uint64_t));
|
||||||
std::memcpy(payload.data() + sizeof(uint64_t), &tunConfig, sizeof(tunConfig));
|
std::memcpy(payload.data() + sizeof(uint64_t), &tunConfig, sizeof(tunConfig));
|
||||||
|
|
||||||
std::vector<uint8_t> encryptedPayload = Utils::LibSodiumWrapper::encryptMessage(
|
std::vector<uint8_t> encryptedPayload = Utils::LibSodiumWrapper::encryptMessage(
|
||||||
|
|||||||
Reference in New Issue
Block a user