From 45f7cc5d27b338dae1d36c211cc5720c82f3de35 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Fri, 20 Mar 2015 10:57:03 +0400 Subject: Change file architecture --- CryptClass/AESCrypt.cpp | 126 ------------------------------------------ CryptClass/AESCrypt.hpp | 101 --------------------------------- CryptClass/AbstractSKA.hpp | 57 ------------------- CryptClass/HASHCrypt.cpp | 116 -------------------------------------- CryptClass/HASHCrypt.hpp | 135 --------------------------------------------- 5 files changed, 535 deletions(-) delete mode 100644 CryptClass/AESCrypt.cpp delete mode 100644 CryptClass/AESCrypt.hpp delete mode 100644 CryptClass/AbstractSKA.hpp delete mode 100644 CryptClass/HASHCrypt.cpp delete mode 100644 CryptClass/HASHCrypt.hpp (limited to 'CryptClass') 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::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 - -//----- crypto++ ----- -#include -#include -#include - - -/** - * @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 - - - -/** - * @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; igetInvalidDigestSizeError(sizeRequired, size); - } - - } - catch(std::string erreur){ - std::cerr << erreur < -#include -#include - -//----- crypto++ ----- -#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 -#include //For MD5 -#include //For Hex convertion -#include //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 -- cgit v1.2.3