From 783197aaa13abbfb7757ecec912dfe9cb6e52c75 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Wed, 11 Mar 2015 09:51:03 +0400 Subject: Implement FileManIOFileClass, general bug correction. --- IOFileClass/FileManIOFile.cpp | 98 +++++++++++++++++++++++++++++++++++++++++++ IOFileClass/FileManIOFile.hpp | 90 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+) (limited to 'IOFileClass') diff --git a/IOFileClass/FileManIOFile.cpp b/IOFileClass/FileManIOFile.cpp index e69de29..d0ae1f2 100644 --- a/IOFileClass/FileManIOFile.cpp +++ b/IOFileClass/FileManIOFile.cpp @@ -0,0 +1,98 @@ +/** + * @file FileManIOFile.cpp + * @brief FileManIOFile class definitions + * @author manzerbredes + * @date 9 Mars 2015 + * + * Contain all definitions of FileManIOFile class. + * + */ + + +#include "FileManIOFile.hpp" +#include // This might be necessary + +FileManIOFile::FileManIOFile(std::string filename){ + this->filename=filename; + this->readable=false; + this->data=""; +} +FileManIOFile::~FileManIOFile(){ +} + + +bool FileManIOFile::isReadable(){ + return this->readable; +} + + +void FileManIOFile::read(std::string key){ + + AESCrypt aes; + HASHCrypt hash; + + std::ifstream file; + this->data.clear(); + + file.open (this->filename, std::ios::in | std::ios::binary); + + byte fileMD5[16]; + file.read((char*) fileMD5, sizeof(fileMD5)); + + char car; + file.read(&car, sizeof(car)); + + while(file){ + this->data+=car, + file.read(&car, sizeof(car)); + + } + + this->data=aes.decrypt(key, this->data); + + byte currentMD5[16]; + hash.getMD5_128(this->data, currentMD5, sizeof(currentMD5)); + + if(hash.compareDigest(fileMD5, currentMD5, sizeof(currentMD5))){ + this->readable=true; + } + else{ + this->readable=false; + } + + + file.close(); + + +} + +void FileManIOFile::write(std::string key, std::string data){ + + AESCrypt aes; + HASHCrypt hash; + + std::string dataEncrypted=aes.encrypt(key, data); + byte digest[16]; + hash.getMD5_128(data, digest, sizeof(digest)); + + + std::ofstream file; + file.open(this->filename, std::ios::out | std::ios::binary); + + file.write((char *) digest,sizeof(digest)); + + + file.write(dataEncrypted.c_str(), dataEncrypted.size()); + + + + file.close(); + + this->data=data; + +} + + +std::string FileManIOFile::getData(){ + return this->data; +} diff --git a/IOFileClass/FileManIOFile.hpp b/IOFileClass/FileManIOFile.hpp index e69de29..8a102c7 100644 --- a/IOFileClass/FileManIOFile.hpp +++ b/IOFileClass/FileManIOFile.hpp @@ -0,0 +1,90 @@ +/** + * @file FileManIOFile.hpp + * @brief FileManIOFile class definitions + * @author manzerbredes + * @date 9 Mars 2015 + * + * Contain all definitions of FileManIOFile class. + * + */ + +//--- std ----- +#include +#include +#include + +//----- class ----- +#include "HASHCrypt.hpp" +#include "AESCrypt.hpp" + + +/** + * @class FileManIOFile FileManIOFile.hpp "/CryptClass/FileManIOFile.hpp" + * @brief Class for quick open and close encrypted file. + * @author manzerbredes + * + * -----File organisation----- + * + * 16 first bytes : md5 of decrypted file + * rest of the file : data encrypted (ASE for now) + * + */ +class FileManIOFile { + + public: + FileManIOFile(std::string filename); + ~FileManIOFile(); + + /** + * @brief Read encrypted file. + * + * @param key : key to encrypt data + * + * Read data from "filename" attribute. + * If file fully decrypted, readable var switch to true. + * + */ + void read(std::string key); + + /** + * @brief Read encrypted file. + * + * @param key : key to encrypt data + * + * Save data to "filename" attribute. + * + */ + void write(std::string key, std::string data); + + /** + * @brief True if file fully decrypted. + * + * Return "readable" attribute. + * + */ + bool isReadable(); + + + /** + * @brief Get data attribute. + * + * Return "data" attribute. + * + * **Warning** if data not fully decrypted (readable!=true), + * data will be unreadable. + */ + std::string getData(); + + private: + + std::string filename; ///< Filename attribute + + std::string data; ///< Data attribute + + bool readable; ///< Readable attribute + + + + + +}; -- cgit v1.2.3