From 40a6b0c4eae3cff792548f60fd32c15550b525e4 Mon Sep 17 00:00:00 2001 From: Leonetienne Date: Sun, 6 Feb 2022 18:38:09 +0100 Subject: [PATCH] Implemented initialization vector --- ExampleApp/main.cpp | 4 +++- GhettoCrypt/Config.h | 2 +- GhettoCrypt/InitializationVector.cpp | 29 ++++++++++++++++++++++++++++ GhettoCrypt/InitializationVector.h | 16 +++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 GhettoCrypt/InitializationVector.cpp create mode 100644 GhettoCrypt/InitializationVector.h diff --git a/ExampleApp/main.cpp b/ExampleApp/main.cpp index 70273fd..683978d 100644 --- a/ExampleApp/main.cpp +++ b/ExampleApp/main.cpp @@ -2,6 +2,8 @@ #include #include #include +#include +#include using namespace GhettoCipher; @@ -39,7 +41,7 @@ void ExampleFiles() int main() { - ExampleString(); + //ExampleString(); //ExampleFiles(); return 0; diff --git a/GhettoCrypt/Config.h b/GhettoCrypt/Config.h index 8ac8945..3f09408 100644 --- a/GhettoCrypt/Config.h +++ b/GhettoCrypt/Config.h @@ -1,5 +1,5 @@ #pragma once -#include +#include namespace GhettoCipher { diff --git a/GhettoCrypt/InitializationVector.cpp b/GhettoCrypt/InitializationVector.cpp new file mode 100644 index 0000000..5cffcb7 --- /dev/null +++ b/GhettoCrypt/InitializationVector.cpp @@ -0,0 +1,29 @@ +#include "InitializationVector.h" +#include +#include + +using namespace GhettoCipher; + +InitializationVector::InitializationVector(const Block& seed) +{ + // Since an initialization vector does not have to be a secret, + // we should be fine just using a mersenne twister seeded with + // for example the key to fill it up to fit BLOCK_SIZE. + + // Loosely seed mersenne twister with seed + // Here is nothing copied. Both Block::Get, and Hash<>::operator() take refs. + std::mt19937 mt = std::mt19937(std::hash>()(seed.Get())); + + // Now generate BLOCK_SIZE urandom bits + std::stringstream ss; + for (std::size_t i = 0; i < BLOCK_SIZE; i++) + ss << (mt() % 2 ? '1' : '0'); + + // And create a bitset + iv = Block(ss.str()); +} + +InitializationVector::operator GhettoCipher::Block() const +{ + return iv; +} diff --git a/GhettoCrypt/InitializationVector.h b/GhettoCrypt/InitializationVector.h new file mode 100644 index 0000000..959504f --- /dev/null +++ b/GhettoCrypt/InitializationVector.h @@ -0,0 +1,16 @@ +#pragma once +#include "Config.h" +#include "Block.h" + +/** Will create a sudo-random Block based on a seed +*/ +class InitializationVector +{ +public: + InitializationVector(const GhettoCipher::Block& seed); + + operator GhettoCipher::Block() const; + +private: + GhettoCipher::Block iv; +};