aboutsummaryrefslogtreecommitdiff
path: root/client/src
diff options
context:
space:
mode:
authoralpine <[email protected]>2020-06-25 15:27:55 +0200
committeralpine <[email protected]>2020-06-25 15:27:55 +0200
commit7067cac3b6d62ae17d02c636f7c5b92f8f587641 (patch)
tree8953389cb128e8a3cdca70283bcdb75b63bc7d48 /client/src
parentAdded client version control. (diff)
downloadloader-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.cpp11
-rw-r--r--client/src/client/client.h16
-rw-r--r--client/src/main.cpp2
-rw-r--r--client/src/util/enc.cpp34
-rw-r--r--client/src/util/enc.h8
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