Solution to issue #6

This commit is contained in:
amazing-username
2017-08-12 17:02:43 -05:00
parent c1d17799cd
commit 353a1dfef1
10 changed files with 186 additions and 48 deletions
+40 -4
View File
@@ -4,8 +4,12 @@
#include<string>
#include"Encryption.h"
#include"GenerateKeys.h"
#include"GeneratePasswordFileName.h"
#include"KeyRetrieval.h"
#include"FileNameRetrieval.h"
#include"FolderStructure.h"
/**
Encryption::Encryption(const std::string& message)
{
this->message = message;
@@ -13,14 +17,21 @@ Encryption::Encryption(const std::string& message)
encryptMessage();
}
*/
Encryption::Encryption(const std::string& message, const std::string& keyPath)
{
this->message = message;
setupMap(keyPath);
configurePasswordFileName();
encryptMessage();
}
void Encryption::setEncryptedMessage(const std::string& encryptedMessage) { this->encryptedMessage = encryptedMessage; }
void Encryption::setMessage(const std::string& message) { this->message = message; }
void Encryption::encryptMessage()
{
std::fstream ioEvent{};
ioEvent.open("encryptedFile.txt", std::ios::out);
ioEvent.open(passwordFileName, std::ios::out);
for (auto indexOfString = 0u; indexOfString!=message.size(); ++indexOfString)
{
@@ -32,15 +43,40 @@ void Encryption::encryptMessage()
}
void Encryption::setupMap()
void Encryption::setupMap(const std::string& keyPath)
{
KeyRetrieval kr{};
KeyRetrieval kr{keyPath};
std::vector<std::string> k{kr.keyStructure()};
std::vector<int> c{kr.codeCharacterStructure()};
for (auto index = 0u; index!=k.size(); ++index)
encryptedCharacters[c[index]] = k[index];
}
void Encryption::configurePasswordFileName()
{
for (auto passwordNameDoesNotExist = true; passwordNameDoesNotExist; passwordNameDoesNotExist = repetitive())
{
GeneratePasswordFileName gp{};
passwordFileName.assign(gp.passwordFileNameString());
}
std::string tmpString{passwordFileName};
passwordFileName.assign(FolderStructure::passwordDirectory);
passwordFileName.append(tmpString);
}
bool Encryption::repetitive()
{
passwordFileName.append(".txt");
FileNameRetrieval fnr;
fnr.retrievePasswordNames();
std::vector<std::string> createdPasswordNames{fnr.passwordNameContainer()};
auto count = 0;
for (auto cPNBegin = createdPasswordNames.begin(); cPNBegin!=createdPasswordNames.end(); ++cPNBegin)
{
if (passwordFileName.compare(*cPNBegin)==0) ++count;
if (count>0) return true;
}
return false;
}
std::string Encryption::getEncryptedMessage() const { return encryptedMessage; }
std::string Encryption::getMessage() const { return message; }
std::map<char, std::string> Encryption::encryptedCharactersStructure() { return encryptedCharacters; }
+6 -2
View File
@@ -10,7 +10,8 @@ class Encryption : public Cryption
public:
Encryption() = default;
~Encryption() = default;
Encryption(const std::string&);
//Encryption(const std::string&);
explicit Encryption(const std::string&, const std::string&);
void setEncryptedMessage(const std::string&);
void setMessage(const std::string&) override;
@@ -20,8 +21,11 @@ public:
std::string getMessage() const override;
std::map<char, std::string> encryptedCharactersStructure();
private:
void setupMap();
void setupMap(const std::string&);
void configurePasswordFileName();
bool repetitive();
std::string encryptedMessage;
std::string passwordFileName;
std::map<char, std::string> encryptedCharacters;
};
#endif
+10 -2
View File
@@ -6,6 +6,7 @@
FileNameRetrieval::FileNameRetrieval() { }
std::vector<std::string> FileNameRetrieval::fileNameContainer() const { return fileNames; }
std::vector<std::string> FileNameRetrieval::passwordNameContainer() const { return passwordNames; }
void FileNameRetrieval::retrieveFileNames()
{
boost::filesystem::path directory(FolderStructure::keyDirectory);
@@ -14,6 +15,13 @@ void FileNameRetrieval::retrieveFileNames()
for (; beg!=end; ++beg)
if (beg->path().extension()==".txt")
fileNames.push_back(beg->path().filename().string());
for (auto fl: fileNames)
std::cout<< fl<<std::endl;
}
void FileNameRetrieval::retrievePasswordNames()
{
boost::filesystem::path directory(FolderStructure::passwordDirectory);
boost::filesystem::directory_iterator beg(directory), end;
for (; beg!=end; ++beg)
if (beg->path().extension()==".txt")
passwordNames.push_back(beg->path().filename().string());
}
+3
View File
@@ -10,8 +10,11 @@ public:
FileNameRetrieval();
void retrieveFileNames();
void retrievePasswordNames();
std::vector<std::string> fileNameContainer() const;
std::vector<std::string> passwordNameContainer() const;
private:
std::vector<std::string> fileNames;
std::vector<std::string> passwordNames;
};
#endif
+55
View File
@@ -0,0 +1,55 @@
#include<iostream>
#include<ctime>
#include<cstdlib>
#include"GeneratePasswordFileName.h"
GeneratePasswordFileName::GeneratePasswordFileName()
{
srand(time(0));
generatedFileName();
}
void GeneratePasswordFileName::generatedFileName()
{
time_t epochTime = time(0);
tm* currentTime = localtime(&epochTime);
auto year = 1900 + currentTime->tm_year;
auto month = 1 + currentTime->tm_mon;
auto dayOfMonth = currentTime->tm_mday;
if (month<10 && dayOfMonth<10)
{
filename.assign(std::to_string(year));
filename.append("0"+std::to_string(month));
filename.append("0"+std::to_string(dayOfMonth));
}
else if (month<10 && dayOfMonth>=10)
{
filename.assign(std::to_string(year));
filename.append("0"+std::to_string(month));
filename.append(std::to_string(dayOfMonth));
}
else if (month>=10 && dayOfMonth<10)
{
filename.assign(std::to_string(year));
filename.append(std::to_string(month));
filename.append("0"+std::to_string(dayOfMonth));
}
else
{
filename.assign(std::to_string(year));
filename.append(std::to_string(month));
filename.append(std::to_string(dayOfMonth));
}
for (auto index = 0; index!=8; ++index)
{
if (index==0) filename.append("_");
else
{
auto randomInteger = rand() % 10;
filename.append(std::to_string(randomInteger));
}
}
}
std::string GeneratePasswordFileName::passwordFileNameString() const { return filename; }
+15
View File
@@ -0,0 +1,15 @@
#ifndef GENERATEPASSWORDFILENAME_H_
#define GENERATEPASSWORDFILENAME_H_
#include<string>
class GeneratePasswordFileName
{
public:
GeneratePasswordFileName();
std::string passwordFileNameString() const;
private:
void generatedFileName();
std::string filename;
};
#endif
+21 -2
View File
@@ -55,8 +55,25 @@ void KeyManagementWindow::setContentOfKeyView()
{
if (column==0)
{
std::string val{*asciiKeysIter++};
QString s{val.c_str()};
std::string val;
QString s;
switch (*asciiKeysIter)
{
case 10:
val.assign("New Line");
s.append(val.c_str());
++asciiKeysIter;
break;
case 32:
val.assign("White space");
s.append(val.c_str());
++asciiKeysIter;
break;
default:
val.assign(std::string{static_cast<char>(*asciiKeysIter++)});
s.append(val.c_str());
break;
}
elementView.get()->setItem(row, column, new QTableWidgetItem(s));
}
else
@@ -126,6 +143,7 @@ void KeyManagementWindow::connections()
QObject::connect(closeButton.get(), SIGNAL(clicked()), this, SLOT(exitApplication()));
QObject::connect(actionButton.get(), SIGNAL(clicked()), this, SLOT(setContentOfKeyView()));
}
/**
void KeyManagementWindow::test()
{
std::string emp{"d"};
@@ -142,6 +160,7 @@ void KeyManagementWindow::test()
std::string value{encrypted[f]};
QString v{QString::fromStdString(value)};
}
*/
void KeyManagementWindow::generation()
{
GenerateKeys gk{};
+1 -1
View File
@@ -14,7 +14,7 @@ public:
KeyManagementWindow(QWidget* parent = 0);
~KeyManagementWindow() = default;
private slots:
void test();
//void test();
void generation();
void exitApplication();
void setContentOfKeyView();
+32 -32
View File
@@ -4,6 +4,8 @@
#include"Encryption.h"
#include"Decryption.h"
#include"KeyRetrieval.h"
#include"FileNameRetrieval.h"
#include"FolderStructure.h"
MainWindow::MainWindow()
{
@@ -38,6 +40,7 @@ void MainWindow::setupMainWindow()
addDockWidget(Qt::LeftDockWidgetArea, cryptionArea.get());
createMenus();
setupContentOfComboBox();
setWindowTitle("Encryption Decryption Messaging");
setFixedHeight(windowHeight);
@@ -45,6 +48,19 @@ void MainWindow::setupMainWindow()
actionButton.get()->setEnabled(false);
connections();
}
void MainWindow::setupContentOfComboBox()
{
selectionBox.get()->clear();
FileNameRetrieval fnr;
fnr.retrieveFileNames();
std::vector<std::string> fn{fnr.fileNameContainer()};
for (auto fle: fn)
{
QString bl{QString::fromStdString(fle)};
selectionBox.get()->addItem(bl);
}
}
void MainWindow::createMenus()
{
fileMenu = unique_ptr<QMenu>{menuBar()->addMenu(tr("File"))};
@@ -67,41 +83,20 @@ void MainWindow::connections()
QObject::connect(closeApplication.get(), SIGNAL(triggered()), this, SLOT(exitApplication()));
QObject::connect(keyEdit.get(), SIGNAL(triggered()), this, SLOT(keyManagementWindow()));
QObject::connect(passwordManage.get(), SIGNAL(triggered()), this, SLOT(passwordManageWindow()));
QObject::connect(actionButton.get(), SIGNAL(clicked()), this, SLOT(test()));
QObject::connect(actionButton.get(), SIGNAL(clicked()), this, SLOT(encryptPassword()));
QObject::connect(textForCryption.get(), SIGNAL(textChanged()), this, SLOT(activateButton()));
}
void MainWindow::changeCryptionType()
void MainWindow::encryptPassword()
{
/**
(cryptionChoice) ? cryptionSwitch->setText("decrypt chosen") : cryptionSwitch->setText("encrypt chosen");
cryptionChoice = (cryptionChoice) ? false : true;
*/
}
void MainWindow::determineCryption()
{
/**
if (cryptionChoice)
{
Encryption ec{grabCryptionText()};
textForCryption.get()->clear();
textForCryption.get()->setText(QString::fromStdString(ec.getEncryptedMessage()));
cryptionSwitch.get()->setText("decrypt chosen");
cryptionChoice = false;
}
else
{
Decryption dc{grabCryptionText()};
textForCryption.get()->clear();
textForCryption.get()->setText(QString::fromStdString(dc.getDecryptedMessage()));
cryptionSwitch.get()->setText("encrypt chosen");
cryptionChoice = true;
}
*/
QString passwordToEncrypt{textForCryption.get()->toPlainText()}, keyForEncryption{selectionBox.get()->currentText()};
auto passwordToEncryptString = passwordToEncrypt.toStdString(), keyForEncryptionString = FolderStructure::keyDirectory+keyForEncryption.toStdString();
std::cout<<"Will encrypt \""<<passwordToEncryptString<<"\""<<std::endl;
std::cout<<"With key \""<<keyForEncryptionString<<"\""<<std::endl;
std::cout<<"Encrypting..."<<std::endl;
Encryption ec{passwordToEncryptString, keyForEncryptionString};
std::cout<<"Encrypted"<<std::endl;
}
void MainWindow::keyManagementWindow() { kh.get()->show(); }
void MainWindow::passwordManageWindow() { ph.get()->show(); }
@@ -114,4 +109,9 @@ std::string MainWindow::grabCryptionText()
return placeHolder.toStdString();
}
void MainWindow::test() { std::cout<<"Action button Works"<<std::endl; }
void MainWindow::activateButton()
{
QString content{textForCryption.get()->toPlainText()};
if (content.size()>0 && selectionBox.get()->count()>0) actionButton.get()->setEnabled(true);
else actionButton.get()->setEnabled(false);
}
+3 -5
View File
@@ -27,14 +27,14 @@ public:
signals:
private slots:
void changeCryptionType();
void determineCryption();
void encryptPassword();
void keyManagementWindow();
void passwordManageWindow();
void exitApplication();
void test();
void activateButton();
private:
void setupMainWindow();
void setupContentOfComboBox();
void createMenus();
void connections();
@@ -59,7 +59,5 @@ private:
unique_ptr<PasswordManagementWindow> ph;
std::string grabCryptionText();
bool cryptionChoice;
};
#endif