diff --git a/ExampleApp/main.cpp b/ExampleApp/main.cpp index 683978d..52851f2 100644 --- a/ExampleApp/main.cpp +++ b/ExampleApp/main.cpp @@ -41,7 +41,7 @@ void ExampleFiles() int main() { - //ExampleString(); + ExampleString(); //ExampleFiles(); return 0; diff --git a/GhettoCrypt/Cipher.cpp b/GhettoCrypt/Cipher.cpp index fd56f2c..c17ca0a 100644 --- a/GhettoCrypt/Cipher.cpp +++ b/GhettoCrypt/Cipher.cpp @@ -2,19 +2,22 @@ #include #include "Cipher.h" #include "Util.h" +#include "InitializationVector.h" GhettoCipher::Cipher::Cipher(const Block& key) : - key { key } + key { key }, + initializationVector(InitializationVector(key)) { return; } GhettoCipher::Cipher::Cipher(const std::string& password) + : + key { PasswordToKey(password) }, + initializationVector(InitializationVector(key)) { - key = PasswordToKey(password); - return; } @@ -61,7 +64,7 @@ GhettoCipher::Flexblock GhettoCipher::Cipher::Encipher(const Flexblock& data, bo if ((i % ((blocks.size() > 1000)? 100 : 10) == 0) && (printProgress)) std::cout << "Encrypting... (Block " << i << " / " << blocks.size() << " - " << ((float)i*100 / blocks.size()) << "%)" << std::endl; - const Block& lastBlock = (i>0) ? blocks[i-1] : emptyBlock; + const Block& lastBlock = (i>0) ? blocks[i-1] : initializationVector; blocks[i] = feistel.Encipher(blocks[i] ^ lastBlock); } @@ -88,7 +91,7 @@ GhettoCipher::Flexblock GhettoCipher::Cipher::Decipher(const Flexblock& data, bo Feistel feistel(key); // We can't do this in-loop for decryption, because we are decrypting the blocks in-place. - Block lastBlock = emptyBlock; + Block lastBlock = initializationVector; for (std::size_t i = 0; i < blocks.size(); i++) { @@ -129,5 +132,3 @@ void GhettoCipher::Cipher::ZeroKeyMemory() #elif defined __GNUG__ #pragma GCC pop_options #endif - -const GhettoCipher::Block GhettoCipher::Cipher::emptyBlock; diff --git a/GhettoCrypt/Cipher.h b/GhettoCrypt/Cipher.h index 8db9cc9..cea2985 100644 --- a/GhettoCrypt/Cipher.h +++ b/GhettoCrypt/Cipher.h @@ -36,6 +36,6 @@ namespace GhettoCipher void ZeroKeyMemory(); // Initial value for cipher block chaining - static const Block emptyBlock; + const Block initializationVector; }; } diff --git a/GhettoCrypt/InitializationVector.cpp b/GhettoCrypt/InitializationVector.cpp index 5cffcb7..c9e4a81 100644 --- a/GhettoCrypt/InitializationVector.cpp +++ b/GhettoCrypt/InitializationVector.cpp @@ -19,7 +19,7 @@ InitializationVector::InitializationVector(const Block& seed) for (std::size_t i = 0; i < BLOCK_SIZE; i++) ss << (mt() % 2 ? '1' : '0'); - // And create a bitset + // And create a block iv = Block(ss.str()); }