Bonjour,

Je suis en train de peaufiner un crypteur par courbe elliptique en mettant dans celui-ci un ... crackeur . C'est un crackage par force brute (de toute façon on peut pas faire mieux ). Pour améliorer la vitesse de crackage j'ai eu l'idée d'utiliser plusieurs threads ce qui distribue les calculs sur les coeurs du processeur (autant que ça tourne à 100%).

Le problème, c'est que ça plante: un bel segmentation fault dans les règles de l'art du crash.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
template<typename T>
class InfoPackage
{
    public:
 
        InfoPackage(){}
        InfoPackage(Cracker<T>* cracker, User<T>* user, User<T>* connectedUser, int offset, int iterateBy):
         m_cracker(cracker),
         m_user(user),
         m_connectedUser(connectedUser),
         m_offset(offset),
         m_iterateBy(iterateBy)
        {}
 
        Cracker<T>* m_cracker;
        User<T>* m_user;
        User<T>* m_connectedUser;
        int m_offset;
        int m_iterateBy;
};
 
template<typename T>
void* CrackKey(void* infos)
{
    InfoPackage<T> informations = *(static_cast<InfoPackage<T>*>(infos));
    Cracker<T>* cracker = informations.m_cracker;
    std::pair<T,T> point = cracker->m_connections[informations.m_user].m_refPoint;
    std::pair<T,T> researchedPoint = informations.m_user->GetComputedPoint(informations.m_connectedUser);
    EllipticCurve<T> curve = cracker->m_connections[informations.m_user].m_curve;
 
    for(long long i = informations.m_offset;; i+= informations.m_iterateBy)
    {
        cracker->m_mutex.Lock();
        if(cracker->keyA != 0)
        {
            cracker->m_mutex.UnLock();
            break;
        }
 
        if(curve.QuickExponentiation(i, point) == researchedPoint)
        {
            cracker->keyA = i;
            break;
            cracker->m_mutex.UnLock();
            return (void*)0;
        }
    }
}
Ce n'est pas du aux boucles mais aux opérations précédentes.

Voila, si vous pouviez m'aider.
Merci.