summaryrefslogtreecommitdiff
path: root/CryptClass/HASHCrypt.cpp
blob: d77ee0573226bd2e41066be9d21982636a08f3e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "HASHCrypt.hpp"


//Constructeur
HASHCrypt::HASHCrypt(){
}


//Destructeur
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){

    //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
    CryptoPP::Weak1::MD5 hash;
    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

*/
void HASHCrypt::getSHA_256(std::string chain, byte* digest, int size){

    //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() );
}


/*
    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();
}

/*
    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);
    }
}