diff options
Diffstat (limited to 'CryptClass')
| -rw-r--r-- | CryptClass/AESCrypt.cpp | 126 | ||||
| -rw-r--r-- | CryptClass/AESCrypt.hpp | 101 | ||||
| -rw-r--r-- | CryptClass/AbstractSKA.hpp | 57 | ||||
| -rw-r--r-- | CryptClass/HASHCrypt.cpp | 116 | ||||
| -rw-r--r-- | CryptClass/HASHCrypt.hpp | 135 |
5 files changed, 0 insertions, 535 deletions
diff --git a/CryptClass/AESCrypt.cpp b/CryptClass/AESCrypt.cpp deleted file mode 100644 index d3ea949..0000000 --- a/CryptClass/AESCrypt.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/** - * @file AESCrypt.cpp - * @brief AESCrypt class definitions - * @author manzerbredes - * @date 8 Mars 2015 - * - * Contain all definitions of AESCrypt class. - * - */ - - -//----- class ----- -#include "AESCrypt.hpp" - - - -//Constructor -AESCrypt::AESCrypt(){ - this->hash=HASHCrypt(); //Init hash attribute -} - -//Destructor -AESCrypt::~AESCrypt(){ - -} - - - -//Encrypt string with string key -std::string AESCrypt::encrypt(std::string key, std::string data){ - - //Generate SHA-256 - byte digest[32]; - hash.getSHA_256(key, digest, (int)sizeof(digest)); - - return encryptRoutine(data, digest, sizeof(digest)); - -} - - - -//Encrypt string with byte* key -std::string AESCrypt::encrypt(byte* key, std::string data){ - return encryptRoutine(data, key, 32); -} - - - -//The encryptRoutine -std::string AESCrypt::encryptRoutine(std::string data, byte* digest, int size){ - //Contain data encrypted - std::string cipher; - - - //Use try, catch to be ensure no problems happening - try{ - //Create encoder to encrypt data - CryptoPP::ECB_Mode<CryptoPP::AES>::Encryption encoder; - encoder.SetKey( digest, size ); - - //Encrypt data with StreamTransformationFilter with NO PADDING - CryptoPP::StringSource ss1(data, true, - new CryptoPP::StreamTransformationFilter( encoder, - new CryptoPP::StringSink( cipher ), - CryptoPP::StreamTransformationFilter::ZEROS_PADDING - - ) - ); - } - catch( CryptoPP::Exception& e ) - { - std::cerr << e.what() << std::endl; - exit(EXIT_FAILURE); - } - - //return encrypted data - return cipher; - - -} - - - -//Decrypt string -std::string AESCrypt::decrypt(std::string key, std::string data){ - - //Get SHA-256 - byte digest[32]; - hash.getSHA_256(key, digest, (int)sizeof(digest)); - - - //Contain data decrypted - std::string cipher; - - //Use try, catch to be ensure no problems happening - try { - - //Create decoder to encrypt data - CryptoPP::ECB_Mode< CryptoPP::AES >::Decryption decoder; - decoder.SetKey( digest, sizeof(digest) ); - - //Decrypt data with StreamTransformationFilter with NO PADDING - CryptoPP::StringSource ss3( data, true, - new CryptoPP::StreamTransformationFilter( decoder, - new CryptoPP::StringSink( cipher ), - CryptoPP::StreamTransformationFilter::NO_PADDING - ) - ); - } - catch( CryptoPP::Exception& e ) - { - std::cerr << e.what() << std::endl; - exit(1); - } - - //Remove ZEROS padding - int i=0; - for(i=0;i<cipher.length();i++){ - if(cipher[i]=='\0') - break; - } - cipher.erase(i,cipher.length()-1); //Erase ZEROS - - //return decrypted data - return cipher; -} diff --git a/CryptClass/AESCrypt.hpp b/CryptClass/AESCrypt.hpp deleted file mode 100644 index c4d75aa..0000000 --- a/CryptClass/AESCrypt.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @file AESCrypt.hpp - * @brief AESCrypt class header - * @author manzerbredes - * @date 8 Mars 2015 - * - * Contain all prototypes of AESCrypt class. - * - */ - -#ifndef __AESCrypt__ -#define __AESCrypt__ - -//----- std ----- -#include "AbstractSKA.hpp" -#include "HASHCrypt.hpp" -#include <iostream> - -//----- crypto++ ----- -#include <crypto++/aes.h> -#include <crypto++/modes.h> -#include <crypto++/filters.h> - - -/** - * @class AESCrypt AESCrypt.hpp "/CryptClass/AESCrypt.hpp" - * @brief Class for Advanced Encryption Standard (AES) algorithm - * @author manzerbredes - * - * This class provide AES encrypt and decrypt. - * Key used is 32 bytes key (256 bits). - * - * \bug Find another solution for managing padding. - */ -class AESCrypt : public AbstractSKA { - - - public: - //Constructor - AESCrypt(); - - //Destructor - ~AESCrypt(); - - - /** - * @brief Run encryptRoutine. - * - * @param key : key used to encrypt data - * @param data : contain data to encrypt. - * - * @return string : correspond to crypted data - * - * Run encryptRoutine with byte* key or string key. - * Allow you to choose between string key or byte key. - * - */ - std::string encrypt(std::string key, std::string data); - std::string encrypt(byte* key, std::string data); - - - /** - * @brief Decrypt data from AES algorithm. - * - * @param key : key used to encrypt data - * @param data : contain data to decrypt from AES encrypt. - * - * @return string : correspond to decrypted data - * - * Decrypt data, and return them into a string. - * - */ - std::string decrypt(std::string key, std::string data); - - - - private: - - /** - * @brief Encrypt data with AES algorithm. - * - * @param key : key used to encrypt data - * @param data : contain data to encrypt. - * - * @return string : correspond to crypted data - * - * Encrypt data, and return them into a string. - * Padding are blank space. - * - */ - std::string encryptRoutine(std::string data, byte* digest, int size); - - - //Attributes: - - HASHCrypt hash; ///< hash instance to generate SHA-256 hash code. - - -}; - -#endif diff --git a/CryptClass/AbstractSKA.hpp b/CryptClass/AbstractSKA.hpp deleted file mode 100644 index 7622ab4..0000000 --- a/CryptClass/AbstractSKA.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @file AbstractSKA.hpp - * @brief Class for Symmetric-Key Algorithm (SKA) - * @author manzerbredes - * @date 8 Mars 2015 - * - * Specify which method the algorithm must be implement. - * - */ - -#ifndef __AbstractSKA__ -#define __AbstractSKA__ - - -//----- std ----- -#include <string> - - - -/** - * @class AbstractSKA AbstractSKA.hpp "/CryptClass/AbstractSKA.hpp" - * @brief Class for Symmetric-Key Algorithm (SKA) - * @author manzerbredes - * - * This class should not be instantiate directly. - * - */ -class AbstractSKA { - - public: - /** - * @brief Encrypt data. - * - * @param key : key used to encrypt data - * @param data : contain data to encrypt. - * - * This method must be overwritten. - * **Warning** data will be modified. - * - */ - virtual std::string encrypt(std::string key, std::string data) = 0; - - - /** - * @brief Decrypt data. - * - * @param key : key used to decrypt data - * @param data : contain data to decrypt. - * - * This method must be overwritten. - * **Warning** data will be modified. - * - */ - virtual std::string decrypt(std::string key, std::string data) = 0; -}; - -#endif diff --git a/CryptClass/HASHCrypt.cpp b/CryptClass/HASHCrypt.cpp deleted file mode 100644 index eed9cb5..0000000 --- a/CryptClass/HASHCrypt.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/** - * @file HASHCrypt.cpp - * @brief HASHCrypt class definitions - * @author manzerbredes - * @date 8 Mars 2015 - * - * Contain all definitions of HASHCrypt class. - * - */ - - -//----- class ----- -#include "HASHCrypt.hpp" - - - -//Constructor -HASHCrypt::HASHCrypt(){ -} - -//Destructor -HASHCrypt::~HASHCrypt(){ -} - - - -//Contruct MD5 over 128 bits and put it into digest -void HASHCrypt::getMD5_128(std::string chain, byte* digest, int size){ - - //Digest size controller - this->checkDigestSize(CryptoPP::Weak1::MD5::DIGESTSIZE,size); - - //Create the MD5 on digest parameter - CryptoPP::Weak1::MD5 hash; - hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() ); - -} - - - -//Contruct SHA-256 and put it into digest -void HASHCrypt::getSHA_256(std::string chain, byte* digest, int size){ - - //Digest size controller - this->checkDigestSize(CryptoPP::SHA256::DIGESTSIZE,size); - - //Create the SHA-256 on digest parameter - CryptoPP::SHA256 hash; - hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() ); - - -} - - - -//Compare 2 digest (same size) -bool HASHCrypt::compareDigest(byte* digest1, byte* digest2, int size){ - - //Try is more safe - try - { - //Compare the two digest - for(int i=0; i<size; i++){ - //Return false if digest are different - if(digest1[i] != digest2[i]){ - return false; - } - } - } - catch (std::exception& e) - { - std::cerr << "Exception catched : " << e.what() << std::endl; - } - - //Return true if digest are equals - return true; -} - - - -//Convert digest to string -std::string HASHCrypt::digestToString(byte* digest, int size){ - - CryptoPP::HexEncoder encoder; - std::string output; - encoder.Attach( new CryptoPP::StringSink( output ) ); - encoder.Put( digest, size ); - encoder.MessageEnd(); - - return output; -} - - - -//Check the size of the digest -void HASHCrypt::checkDigestSize(int sizeRequired, int size){ - try{ - if(size !=sizeRequired){ - throw this->getInvalidDigestSizeError(sizeRequired, size); - } - - } - catch(std::string erreur){ - std::cerr << erreur <<std::endl; - std::exit(EXIT_FAILURE); - } -} - - - -//Make the error -std::string HASHCrypt::getInvalidDigestSizeError(int sizeRequired, int size){ - std::ostringstream erreurStream; - erreurStream << "Invalid digest size ! ("<< sizeRequired <<" bytes required and "<< size <<" given)"; - return erreurStream.str(); -} diff --git a/CryptClass/HASHCrypt.hpp b/CryptClass/HASHCrypt.hpp deleted file mode 100644 index 3eafb2f..0000000 --- a/CryptClass/HASHCrypt.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/** - * @file HASHCrypt.hpp - * @brief HASHCrypt class header - * @author manzerbredes - * @date 8 Mars 2015 - * - * Contain all prototypes of HASHCrypt class. - * - */ - -#ifndef __HASHCrypt__ -#define __HASHCrypt__ - -//----- std ----- -#include <iostream> -#include <string> -#include <sstream> - -//----- crypto++ ----- -#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 -#include <crypto++/md5.h> //For MD5 -#include <crypto++/hex.h> //For Hex convertion -#include <crypto++/sha.h> //For SHA - - -/** - * @class HASHCrypt HASHCrypt.hpp "/CryptClass/HASHCrypt.hpp" - * @brief Hashing class - * @author manzerbredes - * - * Class who handle hashing functions on a byte* parameter. - * HASHCrypt try to detect errors and throw exceptions. - * HASHCrypt use crypto++ library. - */ -class HASHCrypt{ - - public: - /** - * @brief Contructor - */ - HASHCrypt(); - - /** - * @brief Destructor - */ - ~HASHCrypt(); - - - /** - * @brief Create an MD5 over 128 bits on a digest array of bytes. - * - * @param chain : Chain to hash - * @param digest : An array of bytes (8 bits) - * @param size : Length of digest - * - * **Warning** digest will be modified. - * Digest must be an array of byte with 16 entries - * Invalid size can cause "Segmentation Fault" - */ - void getMD5_128(std::string chain, byte* digest, int size); - - - /** - * @brief Create an SHA over 256 bits on a digest array of bytes. - * - * @param chain : Chain to hash - * @param digest : An array of bytes (8 bits) - * @param size : Length of digest - * - * **Warning** digest will be modified. - * Digest must be an array of byte with 32 entries - * Invalid size can cause "Segmentation Fault" - */ - void getSHA_256(std::string chain, byte* digest, int size); //Return SHA_256 - - - /** - * @brief Convert digest to a string of HEX characters - * - * @param digest : an array of bytes (8 bits) - * @param size : length of digest - * - * @return return a string of hex digest equivalent - * - * Digest must be an array of byte. - */ - std::string digestToString(byte* digest, int size); //Return a string - - - /** - * @brief Compare 2 digest - * - * @param digest1 : An array of bytes (8 bits) - * @param digest2 : An array of bytes (8 bits) - * @param size : Length of the array digest1 or digest2 - * - * @return return a boolean (true if digest1 equals to digest2 and false else) - * - * **Warning** if sizeof(digest1) != sizeof(digest 2) : segmentation fault ! - * Compare the two digest. - * - */ - bool compareDigest(byte* digest1, byte* digest2, int size); - - - private: - - /** - * @brief Check the digest size - * - * @param sizeRequired : Digest size expected - * @param size : Given digest size - * - * Throw an exception, and stop the program if - * sizeRequired != size - * Use getInvalidDigestSizeError method. - */ - void checkDigestSize(int sizeRequired, int size); - - - /** - * @brief Make "invalid digest size" error message. - * - * @param sizeRequired : Digest size expected - * @param size : Given digest size - * - * @return a string correspond to the error message - * - * Construct an error message with sizeRequired and size. - */ - std::string getInvalidDigestSizeError(int sizeRequired, int size); - -}; - -#endif |
