mirror of
https://bitbucket.org/Mattrixwv/cipherstream.git
synced 2025-12-06 18:33:58 -05:00
Added function for Autokey
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
//Ciphers/helperFunctions.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 4-29-18
|
||||
//Modified: 4-29-18
|
||||
//Modified: 5-2-18
|
||||
//This file contains the driver function and the test functions for the Cipher program
|
||||
//This program will use some simple ciphers that are no longer widely used but still fun to play with
|
||||
|
||||
@@ -16,20 +16,17 @@
|
||||
#include "Headers/Vigenere.hpp"
|
||||
#include "Headers/Atbash.hpp"
|
||||
#include "Headers/Morse.hpp"
|
||||
#include "Headers/Autokey.hpp"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
|
||||
|
||||
enum CipherFlagLocation { CAESAR, PLAYFAIR, VIGENERE, ATBASH, MORSE, NUM_CIPHERS,
|
||||
enum CipherFlagLocation { CAESAR, PLAYFAIR, VIGENERE, ATBASH, MORSE, AUTOKEY, NUM_CIPHERS,
|
||||
ENCODE, DECODE, INPUT_FILE, OUTPUT_FILE, SIZE };
|
||||
std::string flagStrings[SIZE];
|
||||
//Error handling
|
||||
bool failFlag = false; //Set if something fails
|
||||
//The functions that will run the ciphers
|
||||
std::string runCaesar(std::ifstream& infile, bool encode);
|
||||
std::string runPlayfair(std::ifstream& infile, bool encode);
|
||||
std::string runVigenere(std::ifstream& infile, bool encode);
|
||||
|
||||
//For the getCipher function
|
||||
typedef std::string (*Fn)(std::ifstream&, bool);
|
||||
@@ -99,6 +96,7 @@ void setFlagStrings(){
|
||||
flagStrings[VIGENERE] = "-v";
|
||||
flagStrings[ATBASH] = "-a";
|
||||
flagStrings[MORSE] = "-m";
|
||||
flagStrings[AUTOKEY] = "-u";
|
||||
flagStrings[ENCODE] = "-e";
|
||||
flagStrings[DECODE] = "-d";
|
||||
flagStrings[INPUT_FILE] = "-i";
|
||||
@@ -127,6 +125,10 @@ std::string runCaesar(std::ifstream& infile, bool encode){
|
||||
std::getline(std::cin, inputString);
|
||||
}
|
||||
|
||||
//Check if there was an error reading the file
|
||||
if(failFlag){
|
||||
return cipherString;
|
||||
}
|
||||
//Run the correct cipher
|
||||
if(encode){
|
||||
cipherString = cipher.encode(offset, inputString);
|
||||
@@ -158,6 +160,10 @@ std::string runPlayfair(std::ifstream& infile, bool encode){
|
||||
std::getline(std::cin, inputString);
|
||||
}
|
||||
|
||||
//Check if there was an error reading the file
|
||||
if(failFlag){
|
||||
return cipherString;
|
||||
}
|
||||
//Run the correct cipher
|
||||
if(encode){
|
||||
cipherString = cipher.encode(keyword, inputString);
|
||||
@@ -189,6 +195,10 @@ std::string runVigenere(std::ifstream& infile, bool encode){
|
||||
std::getline(std::cin, inputString);
|
||||
}
|
||||
|
||||
//Check if there was an error reading the file
|
||||
if(failFlag){
|
||||
return cipherString;
|
||||
}
|
||||
//Run the correct cipher
|
||||
if(encode){
|
||||
cipherString = cipher.encode(keyword, inputString);
|
||||
@@ -217,6 +227,10 @@ std::string runAtbash(std::ifstream& infile, bool encode){
|
||||
std::getline(std::cin, inputString);
|
||||
}
|
||||
|
||||
//Check if there was an error reading the file
|
||||
if(failFlag){
|
||||
return cipherString;
|
||||
}
|
||||
//Run the correct cipher
|
||||
if(encode){
|
||||
cipherString = cipher.encode(inputString);
|
||||
@@ -245,6 +259,10 @@ std::string runMorse(std::ifstream& infile, bool encode){
|
||||
std::getline(std::cin, inputString);
|
||||
}
|
||||
|
||||
//Check if there was an error reading the file
|
||||
if(failFlag){
|
||||
return cipherString;
|
||||
}
|
||||
//Run the correct cipher
|
||||
if(encode){
|
||||
cipherString = cipher.encode(inputString);
|
||||
@@ -256,6 +274,41 @@ std::string runMorse(std::ifstream& infile, bool encode){
|
||||
return cipherString;
|
||||
}
|
||||
|
||||
std::string runAutokey(std::ifstream& infile, bool encode){
|
||||
std::string keyword, inputString, cipherString;
|
||||
Autokey cipher;
|
||||
//Check if the input file is open
|
||||
if(infile.is_open()){
|
||||
std::getline(infile, keyword);
|
||||
std::getline(infile, inputString);
|
||||
if(infile.fail()){
|
||||
failFlag = true;
|
||||
cipherString = "Input file has an incorrect format\n";
|
||||
}
|
||||
}
|
||||
//Otherwise prompt for the appropriate strings
|
||||
else{
|
||||
std::cout << "Enter the keyword: ";
|
||||
std::getline(std::cin, keyword);
|
||||
std::cout << "Enter the input string: ";
|
||||
std::getline(std::cin, inputString);
|
||||
}
|
||||
|
||||
//Check if there was an error reading the file
|
||||
if(failFlag){
|
||||
return cipherString;
|
||||
}
|
||||
//Run the correct cipher
|
||||
if(encode){
|
||||
cipherString = cipher.encode(keyword, inputString);
|
||||
}
|
||||
else{
|
||||
cipherString = cipher.decode(keyword, inputString);
|
||||
}
|
||||
|
||||
return cipherString;
|
||||
}
|
||||
|
||||
//Returns the correct function for the flags that are set
|
||||
Fn getCipher(const bool cipherFlags[]){
|
||||
if(cipherFlags[CAESAR]){
|
||||
|
||||
Reference in New Issue
Block a user