]> git.sesse.net Git - freerainbowtables/blob - Client Applications/rcracki_mt/CrackEngine.h
rcracki_mt updated to rti2
[freerainbowtables] / Client Applications / rcracki_mt / CrackEngine.h
1 /*
2    RainbowCrack - a general propose implementation of Philippe Oechslin's faster time-memory trade-off technique.
3
4    Copyright (C) Zhu Shuanglei <shuanglei@hotmail.com>
5 */
6
7 #ifndef _CRACKENGINE_H
8 #define _CRACKENGINE_H
9
10 #include "Public.h"
11 #include "HashSet.h"
12 #include "ChainWalkContext.h"
13 #include "MemoryPool.h"
14 #include "ChainWalkSet.h"
15 #include "rcrackiThread.h"
16 #ifdef _WIN32
17 #include <conio.h>
18 #include <windows.h>
19 #endif
20 #include <pthread.h>
21
22 class CCrackEngine
23 {
24 public:
25         CCrackEngine();
26         virtual ~CCrackEngine();
27
28 private:
29         CChainWalkSet m_cws;
30         int maxThreads;
31         bool writeOutput;
32         bool resumeSession;
33         string outputFile;
34         string sSessionPathName;
35         string sProgressPathName;
36         string sPrecalcPathName;
37         //string sPrecalcIndexPathName;
38         bool debug;
39         bool keepPrecalcFiles;
40
41         // Statistics
42         float m_fTotalDiskAccessTime;
43         float m_fTotalCryptanalysisTime;
44         int m_nTotalChainWalkStep;
45         int m_nTotalFalseAlarm;
46         int m_nTotalChainWalkStepDueToFalseAlarm;
47         FILE *m_fChains;
48
49 private:
50         void ResetStatistics();
51         RainbowChain *BinarySearch(RainbowChain *pChain, int nChainCountRead, uint64 nIndex, IndexChain *pIndex, int nIndexSize, int nIndexStart);
52         int BinarySearchOld(RainbowChainO* pChain, int nRainbowChainCount, uint64 nIndex);
53         void GetChainIndexRangeWithSameEndpoint(RainbowChainO* pChain,
54                                                                                     int nRainbowChainCount,
55                                                                                     int nChainIndex,
56                                                                                     int& nChainIndexFrom,
57                                                                                     int& nChainIndexTo);
58         void SearchTableChunk(RainbowChain* pChain, int nRainbowChainLen, int nRainbowChainCount, CHashSet& hs, IndexChain *pIndex, int nIndexSize, int nChainStart);
59         void SearchTableChunkOld(RainbowChainO* pChain, int nRainbowChainLen, int nRainbowChainCount, CHashSet& hs);
60         //bool CheckAlarm(RainbowChain* pChain, int nGuessedPos, unsigned char* pHash, CHashSet& hs);
61         //bool CheckAlarmOld(RainbowChainO* pChain, int nGuessedPos, unsigned char* pHash, CHashSet& hs);
62
63 public:
64         void SearchRainbowTable(string sPathName, CHashSet& hs);
65         void Run(vector<string> vPathName, CHashSet& hs, int i_maxThreads, bool resume, bool bDebug);
66         float GetStatTotalDiskAccessTime();
67         float GetStatTotalCryptanalysisTime();
68         int   GetStatTotalChainWalkStep();
69         int   GetStatTotalFalseAlarm();
70         int   GetStatTotalChainWalkStepDueToFalseAlarm();
71         void setOutputFile(string sPathName);
72         void setSession(string sSessionPathName, string sProgressPathName, string sPrecalcPathName, bool keepPrecalc);
73 };
74
75 #endif