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;
}
}
} |
Partager