diff options
| author | alpine <[email protected]> | 2020-06-25 15:27:55 +0200 |
|---|---|---|
| committer | alpine <[email protected]> | 2020-06-25 15:27:55 +0200 |
| commit | 7067cac3b6d62ae17d02c636f7c5b92f8f587641 (patch) | |
| tree | 8953389cb128e8a3cdca70283bcdb75b63bc7d48 /client/src | |
| parent | Added client version control. (diff) | |
| download | loader-7067cac3b6d62ae17d02c636f7c5b92f8f587641.tar.xz loader-7067cac3b6d62ae17d02c636f7c5b92f8f587641.zip | |
Added 2 key xor encryption for streams.
Diffstat (limited to 'client/src')
| -rw-r--r-- | client/src/client/client.cpp | 11 | ||||
| -rw-r--r-- | client/src/client/client.h | 16 | ||||
| -rw-r--r-- | client/src/main.cpp | 2 | ||||
| -rw-r--r-- | client/src/util/enc.cpp | 34 | ||||
| -rw-r--r-- | client/src/util/enc.h | 8 |
5 files changed, 64 insertions, 7 deletions
diff --git a/client/src/client/client.cpp b/client/src/client/client.cpp index 30d3c9e..3757b7e 100644 --- a/client/src/client/client.cpp +++ b/client/src/client/client.cpp @@ -53,14 +53,17 @@ int tcp::client::read_stream(std::vector<char>& out) { while (size > 0) { auto to_read = std::min(size, chunk_size); - - int ret = read(&out[total], to_read); + std::string chunk; + chunk.resize(to_read + 2); + int ret = read(&chunk[0], to_read + 2); if (ret <= 0) { break; } + enc::decrypt_message(chunk); + std::memcpy(&out[total], chunk.data(), chunk.size()); - size -= ret; - total += ret; + size -= ret - 2; + total += ret - 2; } return total; diff --git a/client/src/client/client.h b/client/src/client/client.h index 34eee84..60a0e6c 100644 --- a/client/src/client/client.h +++ b/client/src/client/client.h @@ -1,6 +1,7 @@ #pragma once #include "../util/io.h" #include "../util/events.h" +#include "../util/enc.h" #include "packet.h" namespace tcp { @@ -28,15 +29,25 @@ class client { int write(const packet_t& packet) { if (!packet) return 0; - return SSL_write(m_server_ssl, packet.message.data(), + return write(packet.message.data(), packet.message.size()); } - int write(void* data, size_t size) { + int write(const void* data, size_t size) { return SSL_write(m_server_ssl, data, size); } + // +- 2 is to account for xor keys int read(void* data, size_t size) { + /*std::string chunk; + chunk.resize(size + 2); + int ret = SSL_read(m_server_ssl, &chunk[0], size + 2); + chunk.resize(ret); + + io::logger->info(chunk); + enc::decrypt_message(chunk); + + std::memcpy(data, &chunk[0], chunk.size());*/ return SSL_read(m_server_ssl, data, size); } @@ -73,3 +84,4 @@ class client { } }; } // namespace tcp + diff --git a/client/src/main.cpp b/client/src/main.cpp index fef9fca..410197f 100644 --- a/client/src/main.cpp +++ b/client/src/main.cpp @@ -23,8 +23,8 @@ int main(int argc, char* argv[]) { if(version != packet.message) { io::logger->error("please update your client"); client.shutdown(); - return; } + return; } io::logger->info("{}:{}->{}", packet.id, packet.session_id, packet.message); diff --git a/client/src/util/enc.cpp b/client/src/util/enc.cpp new file mode 100644 index 0000000..6a7baed --- /dev/null +++ b/client/src/util/enc.cpp @@ -0,0 +1,34 @@ +#include "../include.h" +#include "enc.h" + +namespace enc { + +void encrypt_message(std::string &str) { + std::random_device r; + std::default_random_engine e1(r()); + std::uniform_int_distribution<int> gen(0, 255); + + char k1 = static_cast<char>(gen(e1)); + char k2 = static_cast<char>(gen(e1)); + for (int i = 0; i < str.size(); i++) { + char k = (i % 2) ? k1 : k2; + str[i] ^= k; + } + str.insert(str.begin(), k1); + str.insert(str.end(), k2); +} + +void decrypt_message(std::string &str) { + char k1 = str[0]; + char k2 = str[str.size() - 1]; + + str.erase(str.begin()); + str.erase(str.end() - 1); + + for (int i = 0; i < str.size(); i++) { + char k = (i % 2) ? k1 : k2; + str[i] ^= k; + } +} + +}; // namespace enc
\ No newline at end of file diff --git a/client/src/util/enc.h b/client/src/util/enc.h new file mode 100644 index 0000000..ae8d5a6 --- /dev/null +++ b/client/src/util/enc.h @@ -0,0 +1,8 @@ +#pragma once + +namespace enc { + +void encrypt_message(std::string &str); +void decrypt_message(std::string &str); + +}; // namespace enc
\ No newline at end of file |