From 3503a42e777698dbb8332a05ae55f3429970e76a Mon Sep 17 00:00:00 2001 From: Matthew Ellison Date: Wed, 25 Apr 2018 18:58:05 -0400 Subject: [PATCH] Added the Caesar Cipher to the program --- Headers/Caesar.hpp | 35 ++++++++ SourceFiles/Caesar.cpp | 127 +++++++++++++++++++++++++++ libCaesar.lib | Bin 0 -> 53829 bytes main.cpp | 194 +++++++++++++++++++++++++++++++++++++++++ makefile | 24 +++++ 5 files changed, 380 insertions(+) create mode 100644 Headers/Caesar.hpp create mode 100644 SourceFiles/Caesar.cpp create mode 100644 libCaesar.lib create mode 100644 main.cpp create mode 100644 makefile diff --git a/Headers/Caesar.hpp b/Headers/Caesar.hpp new file mode 100644 index 0000000..e4f20ca --- /dev/null +++ b/Headers/Caesar.hpp @@ -0,0 +1,35 @@ +//Ciphers/Headers/Caesar.hpp +//Matthew Ellison +// Created: 4-25-18 +//Modified: 4-25-18 +//This file contains the declaration of the Caesar class +//This class implements the Caesar Cipher and is inteded to be turned into a library + + +#ifndef CAESAR_HPP +#define CAESAR_HPP + +#include + +class Caesar{ +private: + std::string input; + std::string output; + int shift; +public: + Caesar(); + ~Caesar(); + void setInput(std::string inputString); + std::string getInput() const; + void setShift(int shiftAmount); + int getShift() const; + std::string getOutput() const; + std::string encode(); + std::string encode(int shiftAmount, std::string inputString); + std::string decode(); + std::string decode(int shiftAmount, std::string inputString); + void reset(); +}; + + +#endif //CAESAR_HPP diff --git a/SourceFiles/Caesar.cpp b/SourceFiles/Caesar.cpp new file mode 100644 index 0000000..f970420 --- /dev/null +++ b/SourceFiles/Caesar.cpp @@ -0,0 +1,127 @@ +//Ciphers/SourceFiles/Caesar.hpp +//Matthew Ellison +// Created: 4-25-18 +//Modified: 4-25-18 +//This file contains the implementation of the Caesar class +//This class implements the Caesar Cipher and is inteded to be turned into a library + + +#include "../Headers/Caesar.hpp" +#include +#include + + +//std::string input; +//std::string output; +//int shift; + +Caesar::Caesar(){ + shift = 0; +} + +Caesar::~Caesar(){ +} + +void Caesar::setInput(std::string inputString){ + input = inputString; +} + +std::string Caesar::getInput() const{ + return input; +} + +void Caesar::setShift(int shiftAmount){ + //If you shift more than 26 you will just be wrapping back around again + shift = shiftAmount % 26; +} + +int Caesar::getShift() const{ + return shift; +} + +std::string Caesar::getOutput() const{ + return output; +} + +std::string Caesar::encode(){ + output = ""; + char temp; //A temperary holder for the current working character + for(int cnt = 0;cnt < input.size();++cnt){ + temp = input.at(cnt); + //If it is a upper case letter shift it and wrap if necessary + if(isupper(temp)){ + temp += shift; + //Wrap around if the letter is now out of bounds + if(temp < 'A'){ + temp += 26; + } + else if(temp > 'Z'){ + temp -= 26; + } + } + //If it is a lower case letter shift it and wrap if necessary + else if(islower(temp)){ + temp += shift; + //Wrap around if the letter is now out of bounds + if(temp < 'a'){ + temp += 26; + } + else if(temp > 'z'){ + temp -= 26; + } + } + //If it is whitespace, number, or punctuation just let it pass through + //Add it to the output string + output += temp; + } + return output; +} + +std::string Caesar::encode(int shiftAmount, std::string inputString){ + setShift(shiftAmount); + setInput(inputString); + return encode(); +} + +std::string Caesar::decode(){ + output = ""; + char temp; + for(int cnt = 0;cnt < input.size();++cnt){ + temp = input.at(cnt); + //If it is an upper case letter shift it and wrap if necessary + if(isupper(temp)){ + temp -= shift; + if(temp < 'A'){ + temp += 26; + } + else if(temp > 'Z'){ + temp -= 26; + } + } + //If it is a lower case letter shift it and wrap if necessary + else if(islower(temp)){ + temp -= shift; + if(temp < 'a'){ + temp += 26; + } + else if(temp > 'z'){ + temp -= 26; + } + } + //If it is whitespace, number, or punctuation just let it pass through + //Add it to the output string + output += temp; + } + return output; +} + +std::string Caesar::decode(int shiftAmount, std::string inputString){ + setShift(shiftAmount); + setInput(inputString); + return decode(); +} + +void Caesar::reset(){ + input = output = ""; + shift = 0; +} diff --git a/libCaesar.lib b/libCaesar.lib new file mode 100644 index 0000000000000000000000000000000000000000..8cac8cac9f625d6662c44411777d4ddc4fa63f0e GIT binary patch literal 53829 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 +#include + + +///Test definitions +#define TEST_VERSION + +#ifdef TEST_VERSION +#define CAESAR_TEST +//#define PLAYFAIR_TEST +enum codingState { ENCODE, DECODE }; +std::string testingError(codingState type, const std::string& input, const std::string& output, const std::string& cipher); +#endif //TEST_VERSION definition + +#ifdef CAESAR_TEST +bool caesarTest(std::string& errorString); +#endif //CAESAR_TEST + +#ifdef PLAYFAIR_TEST +bool playfairTest(std::string& errorString); +#endif //PLAYFAIR_TEST + + + +//Main functions +#ifdef TEST_VERSION +int main(int argc, char** argv){ + bool testResult = false; + std::string resultString = ""; + std::string errorString = ""; + + //Testing the Caesar Cipher + #ifdef CAESAR_TEST + testResult = caesarTest(errorString); + //If the test was successful + if(testResult){ + resultString += "Caesar Cipher completed successfully\n"; + } + else{ + resultString += "Caesar Cipher error:\n" + errorString; + } + //Reset the variables + errorString = ""; + testResult = false; + #endif //CAESAR_TEST + + //Testing the playfair cipher + #ifdef PLAYFAIR_TEST + testResult = playfairTest(errorString); + if(testResult){ + resultString += "Playfair Cipher completed successfully\n"; + } + else{ + resultString += "Playfair Cipher error: " + errorString; + } + errorString = ""; + testResult = false; + #endif //PLAYFAIR_TEST + + std::cout << "Results:\n" << resultString << std::endl; + std::cin.get(); + + return 0; +} + +std::string testingError(codingState type, const std::string& input, const std::string& output, const std::string& cipher){ + std::string errorMessage; + //Decide if it was encoding or decoding + if(type == ENCODE){ + errorMessage = "Encoding:"; + } + else if(type == DECODE){ + errorMessage = "Decoding:"; + } + else{ + errorMessage = "We gots problems"; + } + errorMessage += "\nError in: " + input + "\nExpected: " + output + "\nActual: " + cipher + '\n'; + + return errorMessage; +} + + +#ifdef CAESAR_TEST +bool caesarTest(std::string& errorString){ + ///Add something in error message about shift amount + Caesar cipher; + bool passed = true; + std::string inputString = ""; //Holds the string to be input into the cipher + std::string outputString = ""; //Holds the string that the cipher is expected to output + std::string cipherString = ""; //Holds the string that the cipher actually output + + ///All lowercase + inputString = "abcdefghijklmnopqrstuvwxyz"; //Shift = 3 + outputString = "defghijklmnopqrstuvwxyzabc"; //Shift = 3 + //Try it forwards + cipherString = cipher.encode(3, inputString); + if(cipherString != outputString){ + //errorString += "Encoding:\nError in: " + inputString + "\nExpected: " + outputString + "\nActual: " + cipherString + '\n'; + errorString += testingError(ENCODE, inputString, outputString, cipherString); + passed = false; + } + //Try it backwards + cipherString = cipher.decode(3, outputString); + if(cipherString != inputString){ + //errorString += "Decoding:\nError in: " + outputString + "\nExpected: " + inputString + "\nActual: " + cipherString + '\n'; + errorString += testingError(DECODE, outputString, inputString, cipherString); + passed = false; + } + + ///All upercase + inputString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + outputString = "XYZABCDEFGHIJKLMNOPQRSTUVW"; + //Try it forwards + cipherString = cipher.encode(-3, inputString); + if(cipherString != outputString){ + errorString += testingError(ENCODE, inputString, outputString, cipherString); + passed = false; + } + //Try it backwards + cipherString = cipher.decode(-3, outputString); + if(cipherString != inputString){ + errorString += testingError(DECODE, outputString, inputString, cipherString); + passed = false; + } + + ///Both cases + inputString = "AbCdEfGhIjKlMnOpQrStUvWxYz"; + outputString = "DeFgHiJkLmNoPqRsTuVwXyZaBc"; + //Try it forwards + cipherString = cipher.encode(3, inputString); + if(cipherString != outputString){ + errorString += testingError(ENCODE, inputString, outputString, cipherString); + passed = false; + } + //Try it backwards + cipherString = cipher.decode(3, outputString); + if(cipherString != inputString){ + errorString += testingError(DECODE, outputString, inputString, cipherString); + passed = false; + } + + ///Punctuation + inputString = "abc,def. rst; wxyz"; + outputString = "def,ghi. uvw; zabc"; + //Try it forwards + cipherString = cipher.encode(3, inputString); + if(cipherString != outputString){ + errorString += testingError(ENCODE, inputString, outputString, cipherString); + passed = false; + } + //Try it backwards + cipherString = cipher.decode(3, outputString); + if(cipherString != inputString){ + errorString += testingError(DECODE, outputString, inputString, cipherString); + passed = false; + } + + return passed; +} +#endif //CAESAR_TEST + +#ifdef PLAYFAIR_TEST +bool playfairTest(std::string& errorString){ + +} +#endif //PLAYFAIR_TEST + + +#else //TEST_VERSION main function + + +enum CipherFlagLocation { CAESAR, PLAYFAIR }; +void getFlags(bool flags[]); + +int main(int argc, char** argv){ + +} + +void getFlags(bool flags[]){ + +} +#endif //TEST_VERSION \ No newline at end of file diff --git a/makefile b/makefile new file mode 100644 index 0000000..fc0adde --- /dev/null +++ b/makefile @@ -0,0 +1,24 @@ +#For Linux +All: libCaesar.a libPlayfair.a Ciphers + +#For Windows +WindowsAll: libCaesar.lib libPlayfair.lib Ciphers.exe + + +libCaesar.a: SourceFiles/Caesar.cpp + (CXX) -shared -std=c++11 -O3 -fPIC -o $@ $< + +libPlayfair.a: SourceFiles/Playfair.cpp + (CXX) -shared -std=c++11 -O3 -fPIC -o $@ $< + +Ciphers: main.cpp + (CXX) -O3 -std=c++11 -o $@ $< -lCaesar -lPlayfair + +libCaesar.lib: SourceFiles/Caesar.cpp + g++ -shared -std=c++11 -O3 -fPIC -o $@ $< + +libPlayfair.lib: SourceFiles/Caesar.cpp + g++ -shared -std=c++11 -O3 -fPIC -o $@ $< + +Ciphers.exe: main.cpp + g++ -std=c++11 -O3 -o $@ $< -L./ -llibCaesar -llibPlayfair \ No newline at end of file