From 00cfd2750d39795e4c205aee2a33b92b1da2524d Mon Sep 17 00:00:00 2001 From: David Skoland Date: Wed, 26 Dec 2018 16:43:08 +0100 Subject: moved headers into include and cpp files into src + logo into resource --- src/encryption_functions.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/encryption_functions.cpp (limited to 'src/encryption_functions.cpp') diff --git a/src/encryption_functions.cpp b/src/encryption_functions.cpp new file mode 100644 index 00000000..ffbe0cdb --- /dev/null +++ b/src/encryption_functions.cpp @@ -0,0 +1,63 @@ +#include "encryption_functions.h" + +#include "hex_functions.h" + +QString fanta_encrypt(QString temp_input, unsigned int p_key) +{ + //using standard stdlib types is actually easier here because of implicit char<->int conversion + //which in turn makes encryption arithmetic easier + + unsigned int key = p_key; + unsigned int C1 = 53761; + unsigned int C2 = 32618; + + QVector temp_result; + std::string input = temp_input.toUtf8().constData(); + + for (unsigned int pos = 0 ; pos < input.size() ; ++pos) + { + uint_fast8_t output = input.at(pos) ^ (key >> 8) % 256; + temp_result.append(output); + key = (temp_result.at(pos) + key) * C1 + C2; + } + + std::string result = ""; + + for (uint_fast8_t i_int : temp_result) + { + result += omni::int_to_hex(i_int); + } + + QString final_result = QString::fromStdString(result); + + return final_result; +} + +QString fanta_decrypt(QString temp_input, unsigned int key) +{ + std::string input = temp_input.toUtf8().constData(); + + QVector unhexed_vector; + + for(unsigned int i=0; i< input.length(); i+=2) + { + std::string byte = input.substr(i,2); + unsigned int hex_int = strtoul(byte.c_str(), nullptr, 16); + unhexed_vector.append(hex_int); + } + + unsigned int C1 = 53761; + unsigned int C2 = 32618; + + std::string result = ""; + + for (int pos = 0 ; pos < unhexed_vector.size() ; ++pos) + { + unsigned char output = unhexed_vector.at(pos) ^ (key >> 8) % 256; + result += output; + key = (unhexed_vector.at(pos) + key) * C1 + C2; + } + + return QString::fromStdString(result); + +} -- cgit