aboutsummaryrefslogtreecommitdiff
path: root/server/src/util
diff options
context:
space:
mode:
authoralpine <[email protected]>2020-06-13 22:27:52 +0200
committeralpine <[email protected]>2020-06-13 22:27:52 +0200
commitbad7b4f2d19f95b278fdcb3056be01cae9af1dbb (patch)
tree5bef91f910a2c03d74df9693a077ee33b2fe7886 /server/src/util
parentInitial commit (diff)
downloadloader-bad7b4f2d19f95b278fdcb3056be01cae9af1dbb.tar.xz
loader-bad7b4f2d19f95b278fdcb3056be01cae9af1dbb.zip
Client.
Message encryption. Packet handler. Disconnect event handler.
Diffstat (limited to 'server/src/util')
-rw-r--r--server/src/util/xor.cpp39
-rw-r--r--server/src/util/xor.h12
2 files changed, 51 insertions, 0 deletions
diff --git a/server/src/util/xor.cpp b/server/src/util/xor.cpp
new file mode 100644
index 0000000..a00ecc9
--- /dev/null
+++ b/server/src/util/xor.cpp
@@ -0,0 +1,39 @@
+#include "../include.h"
+#include "xor.h"
+
+char enc::gen_key() {
+ std::random_device r;
+
+ std::default_random_engine e1(r());
+ std::uniform_real_distribution<> uniform_dist(0, 255);
+ return static_cast<char>(uniform_dist(e1));
+}
+
+void enc::encrypt_message(std::string &str) {
+ std::array<char, key_len> keys;
+ for (size_t i = 0; i < key_len; i++) {
+ keys[i] = gen_key();
+ str.insert(str.end(), keys[i]);
+ }
+
+ for (auto &key : keys) {
+ for (size_t i = 0; i < str.size() - key_len; i++) {
+ str[i] ^= key;
+ }
+ }
+}
+
+void enc::decrypt_message(std::string &str) {
+ if (str.size() <= key_len) return;
+
+ std::string keys = str.substr(0, key_len);
+ std::reverse(keys.begin(), keys.end());
+
+ for (auto &key : keys) {
+ for (size_t i = key_len; i < str.size(); i++) {
+ str[i] ^= key;
+ }
+ }
+
+ str.erase(str.begin(), str.begin() + key_len);
+} \ No newline at end of file
diff --git a/server/src/util/xor.h b/server/src/util/xor.h
new file mode 100644
index 0000000..7180945
--- /dev/null
+++ b/server/src/util/xor.h
@@ -0,0 +1,12 @@
+#pragma once
+
+namespace enc {
+constexpr size_t key_len = 50;
+
+char gen_key();
+
+void encrypt_message(std::string &str);
+
+void decrypt_message(std::string &str);
+
+} // namespace enc \ No newline at end of file