diff options
| author | Loic GUEGAN <loic@debian> | 2015-03-07 19:59:15 +0400 |
|---|---|---|
| committer | Loic GUEGAN <loic@debian> | 2015-03-07 19:59:15 +0400 |
| commit | bbfdf67777b9f78bdd5592b863d93b0448ce2fd3 (patch) | |
| tree | 2eb8d268fbdd24288101653036c3c2dfd6ad0eb6 /CryptClass/HASHCrypt.cpp | |
| parent | 80261321e887e2d8ffb71173a517f4e50c8ce93a (diff) | |
Classe HASHCrypt totalement revue et pensée.
Diffstat (limited to 'CryptClass/HASHCrypt.cpp')
| -rw-r--r-- | CryptClass/HASHCrypt.cpp | 86 |
1 files changed, 49 insertions, 37 deletions
diff --git a/CryptClass/HASHCrypt.cpp b/CryptClass/HASHCrypt.cpp index ec25bf6..d77ee05 100644 --- a/CryptClass/HASHCrypt.cpp +++ b/CryptClass/HASHCrypt.cpp @@ -1,11 +1,8 @@ #include "HASHCrypt.hpp" - //Constructeur -HASHCrypt::HASHCrypt(std::string chain){ - this->MD5_32=this->initMD5_32(chain); //Initialisation MD5 sur 32bits - this->MD5_128=this->initMD5_128(chain); //Initialisation MD5 sur 128bits +HASHCrypt::HASHCrypt(){ } @@ -14,52 +11,67 @@ HASHCrypt::~HASHCrypt(){ } +/* + chain : objet de type string à hacher à l'aide de l'algorithme MD5 + digest: tableau de type byte* contenant les données hasher + size: int faisant référence à la taille du tableau + + Attention si size!=sizeof(digest) risque d'erreur de type Segmentation fault + +*/ +void HASHCrypt::getMD5_128(std::string chain, byte* digest, int size){ -//Retourne la somme de controle MD5 sur 32 bits -std::string HASHCrypt::initMD5_32(std::string chain){ + //Contrôle de la taille du digest + this->checkDigestSize(CryptoPP::Weak1::MD5::DIGESTSIZE,size); - //Calcule de la somme de controle MD5 dans un type byte à partir du paramètre chain + //Calcule de la somme de controle MD5 dans un type byte* à partir du paramètre chain CryptoPP::Weak1::MD5 hash; - byte digest[ CryptoPP::Weak1::MD5::DIGESTSIZE ]; hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() ); - //Convertion du hash en std::string - CryptoPP::HexEncoder encoder; - std::string output; - encoder.Attach( new CryptoPP::StringSink( output ) ); - encoder.Put( digest, sizeof(digest) ); - encoder.MessageEnd(); - - //Retourne la sortie de la convertion - return output; } -//Retourne la somme de controle MD5 sur 128 bits -std::string HASHCrypt::initMD5_128(std::string chain){ - //Calcule de la somme de controle MD5 dans un type byte à partir du paramètre chain - CryptoPP::Weak1::MD5 hash; - byte digest[ CryptoPP::Weak1::MD5::DIGESTSIZE * 4 ]; - hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() ); +/* + chain : objet de type string à hacher à l'aide de l'algorithme SHA-256 + digest: tableau de type byte* contenant les données hasher + size : int faisant référence à la taille du tableau + + Attention si size!=sizeof(digest) risque d'erreur de type Segmentation fault - //Convertion du hash en std::string - CryptoPP::HexEncoder encoder; - std::string output; - encoder.Attach( new CryptoPP::StringSink( output ) ); - encoder.Put( digest, sizeof(digest) ); - encoder.MessageEnd(); +*/ +void HASHCrypt::getSHA_256(std::string chain, byte* digest, int size){ - //Retourne la sortie de la convertion - return output; + //Contrôle de la taille du digest + this->checkDigestSize(CryptoPP::SHA256::DIGESTSIZE,size); + + //Calcule du SHA-256 dans un type byte* à partir du paramètre chain + CryptoPP::SHA256 hash; + hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() ); } -//Getter MD5_32 -std::string HASHCrypt::getMD5_32(){ - return this->MD5_32; +/* + size : contient la taille des données passer en paramètre à la méthode de hashage choisi +*/ +std::string HASHCrypt::getInvalidDigestSizeError(int sizeRequired, int size){ + std::ostringstream erreurStream; + erreurStream << "Taille de digest invalide ! ("<< sizeRequired <<" octets requis et "<< size <<" donner)"; + return erreurStream.str(); } -//Getter MD5_128 -std::string HASHCrypt::getMD5_128(){ - return this->MD5_128; +/* + sizeRequired : Taille du disgest attendu + size : Taille du digest donné +*/ +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); + } } |
