* RainbowCrack\r
*\r
* Copyright (C) Zhu Shuanglei <shuanglei@hotmail.com>\r
- * Copyright Martin Westergaard Jørgensen <martinwj2005@gmail.com>\r
+ * Copyright 2009, 2010 Martin Westergaard Jørgensen <martinwj2005@gmail.com>\r
* Copyright 2009, 2010 Daniël Niggebrugge <niggebrugge@fox-it.com>\r
- * Copyright 2009, 2010 James Nobis <frt@quelrod.net>\r
+ * Copyright 2009, 2010, 2011 James Nobis <frt@quelrod.net>\r
* Copyright 2010 uroskn\r
*\r
* This file is part of rcracki_mt.\r
\r
bool pausing = false;\r
\r
- UINT4 nHashIndex;\r
+ uint32 nHashIndex;\r
for (nHashIndex = 0; nHashIndex < vHash.size(); nHashIndex++)\r
{\r
#ifdef _WIN32\r
threadPool.clear();\r
pThreads.clear();\r
\r
- UINT4 thread_ID;\r
+ uint32 thread_ID;\r
for (thread_ID = 0; thread_ID < (unsigned long)maxThreads; thread_ID++)\r
{\r
rcrackiThread* r_Thread = new rcrackiThread(TargetHash, thread_ID, nRainbowChainLen, maxThreads, pStartPosIndexE);\r
threadPool.push_back(r_Thread);\r
}\r
\r
- UINT4 thread_ID = 0;\r
+ uint32 thread_ID = 0;\r
int nPos;\r
for (nPos = nRainbowChainLen - 2; nPos >= 0; nPos--)\r
{\r
\r
bool pausing = false;\r
\r
- UINT4 nHashIndex;\r
+ uint32 nHashIndex;\r
for (nHashIndex = 0; nHashIndex < vHash.size(); nHashIndex++)\r
{\r
#ifdef _WIN32\r
threadPool.clear();\r
pThreads.clear();\r
\r
- UINT4 thread_ID;\r
+ uint32 thread_ID;\r
for (thread_ID = 0; thread_ID < (unsigned long)maxThreads; thread_ID++)\r
{\r
rcrackiThread* r_Thread = new rcrackiThread(TargetHash, thread_ID, nRainbowChainLen, maxThreads, pStartPosIndexE);\r
threadPool.push_back(r_Thread);\r
}\r
\r
- UINT4 thread_ID = 0;\r
+ uint32 thread_ID = 0;\r
int nPos;\r
for (nPos = nRainbowChainLen - 2; nPos >= 0; nPos--)\r
{\r
vector<string> sessionFinishedPathNames;\r
if (ReadLinesFromFile(sProgressPathName.c_str(), sessionFinishedPathNames))\r
{\r
- UINT4 i;\r
+ uint32 i;\r
for (i = 0; i < sessionFinishedPathNames.size(); i++)\r
{\r
if (sessionFinishedPathNames[i] == sPathName)\r
FILE* file = fopen(sPathName.c_str(), "rb");\r
if (file != NULL)\r
{\r
+ // XXX file type detection code needs a serious overhaul\r
// File length check\r
bool doOldFormat = CChainWalkContext::isOldFormat();\r
bool doRti2Format = CChainWalkContext::isRti2Format();\r
- UINT4 sizeOfChain;\r
+ uint32 sizeOfChain;\r
bool fVerified = false;\r
- UINT4 nFileLen = GetFileLen(file);\r
+ long nFileLen = GetFileLen(file);\r
\r
if (doOldFormat)\r
sizeOfChain = 16;\r
else\r
sizeOfChain = 8;\r
\r
- //if (nFileLen % 8 != 0 || nRainbowChainCount * 8 != nFileLen)\r
- if ( (nFileLen % sizeOfChain != 0 || nRainbowChainCount * sizeOfChain != nFileLen) && doRti2Format == false )\r
+ if ( ( (unsigned long)nFileLen % sizeOfChain != 0 || nRainbowChainCount * sizeOfChain != (unsigned long)nFileLen) && doRti2Format == false )\r
printf("file length mismatch\n");\r
else\r
{\r
{\r
RTI2Reader *pReader = NULL;\r
\r
- if(doRti2Format) {\r
- pReader = new RTI2Reader(sPathName);\r
-\r
- }\r
+ if(doRti2Format)\r
\r
if (debug)\r
{\r
}\r
\r
static CMemoryPool mp(bytesForChainWalkSet, debug, maxMem);\r
- RainbowChainO* pChain = (RainbowChainO*)mp.Allocate(nFileLen, nAllocatedSize);\r
- #ifdef _WIN32\r
- if (debug) printf("Allocated %I64u bytes, filelen %lu\n", nAllocatedSize, (unsigned long)nFileLen);\r
+ RainbowChainO* pChain = NULL;\r
+ if(doRti2Format)\r
+ pChain = (RainbowChainO*)mp.Allocate(pReader->GetChainsLeft() * 16, nAllocatedSize);\r
+ else\r
+ pChain = (RainbowChainO*)mp.Allocate(nFileLen, nAllocatedSize);\r
+\r
+ #if defined(_WIN32) && !defined(__GNUC__)\r
+ if (debug) printf("Allocated %I64 bytes, filelen %ld\n", nAllocatedSize, nFileLen);\r
#else\r
- if (debug) printf("Allocated %llu bytes, filelen %lu\n", nAllocatedSize, (unsigned long)nFileLen);\r
+ if (debug) printf("Allocated %llu bytes, filelen %ld\n", nAllocatedSize, nFileLen);\r
#endif\r
\r
if (pChain != NULL)\r
//bool fVerified = false;\r
while (true) // Chunk read loop\r
{\r
- if ((unsigned long)ftell(file) == nFileLen)\r
+ if (ftell(file) == nFileLen)\r
break;\r
\r
// Load table chunk\r
if ( doRti2Format )\r
{\r
nDataRead = nAllocatedSize / 16;\r
+ if(pReader->GetChainsLeft() <= 0) // No more data\r
+ break; \r
pReader->ReadChains(nDataRead, pChain);\r
- nDataRead *= 8; // Convert from chains read to bytes\r
\r
- if ( nDataRead == 0 ) // No more data\r
- break;\r
+ nDataRead *= 8; // Convert from chains read to bytes\r
}\r
else\r
{\r
printf("%u bytes read, disk access time: %.2f s\n", nDataRead, fTime);\r
m_fTotalDiskAccessTime += fTime;\r
\r
- int nRainbowChainCountRead = nDataRead / 16;\r
+ int nRainbowChainCountRead;\r
+\r
+ if(doRti2Format)\r
+ nRainbowChainCountRead = nDataRead / 8;\r
+ else\r
+ nRainbowChainCountRead = nDataRead / 16;\r
\r
// Verify table chunk\r
if (!fVerified)\r
// Already finished?\r
if (!hs.AnyHashLeftWithLen(CChainWalkContext::GetHashLen()))\r
break;\r
+\r
+/*\r
+ // XXX eliminated by PB - check correctness\r
+ // finished the current table\r
+ if( doRti2Format && nDataToRead > (nDataRead / 8) )\r
+ {\r
+ delete pReader;\r
+ break;\r
+ }\r
+*/\r
}\r
}\r
else\r
if(fIndex != NULL)\r
{\r
// File length check\r
- unsigned int nFileLenIndex = GetFileLen(fIndex);\r
+ long nFileLenIndex = GetFileLen(fIndex);\r
//unsigned int nRows = nFileLenIndex / 11;\r
//unsigned int nSize = nRows * sizeof(IndexChain);\r
//printf("Debug: 8\n");\r
if (nFileLenIndex % 11 != 0)\r
- printf("index file length mismatch (%u bytes)\n", nFileLenIndex);\r
+ printf("index file length mismatch (%ld bytes)\n", nFileLenIndex);\r
else\r
{\r
//printf("index nSize: %d\n", nSize);\r
//pIndex = (IndexChain*)new unsigned char[nSize];\r
IndexChain *pIndex = (IndexChain*)mpIndex.Allocate(nFileLenIndex, nAllocatedSizeIndex);\r
#ifdef _WIN32\r
- if (debug) printf("Debug: Allocated %I64u bytes for index with filelen %u\n", nAllocatedSizeIndex, nFileLenIndex);\r
+ if (debug) printf("Debug: Allocated %I64u bytes for index with filelen %ld\n", nAllocatedSizeIndex, nFileLenIndex);\r
#else\r
- if (debug) printf("Debug: Allocated %llu bytes for index with filelen %u\n", nAllocatedSizeIndex, nFileLenIndex);\r
+ if (debug) printf("Debug: Allocated %llu bytes for index with filelen %ld\n", nAllocatedSizeIndex, nFileLenIndex);\r
#endif\r
\r
static CMemoryPool mp(bytesForChainWalkSet + nAllocatedSizeIndex, debug, maxMem);\r
\r
fseek(fIndex, 0, SEEK_SET);\r
\r
- while ( (unsigned long)ftell(fIndex) != nFileLenIndex ) // Index chunk read loop\r
+ while ( ftell(fIndex) != nFileLenIndex ) // Index chunk read loop\r
{\r
// Load index chunk\r
#ifdef _WIN32\r
{\r
nAllocatedSize = nAllocatedSize / sizeOfChain * sizeOfChain; // Round to sizeOfChain boundary\r
\r
- //fseek(file, 0, SEEK_SET);\r
//bool fVerified = false;\r
- UINT4 nProcessedChains = 0;\r
- while ( (unsigned long)ftell(file) != nFileLen \r
+ uint32 nProcessedChains = 0;\r
+ while ( ftell(file) != nFileLen \r
&& nProcessedChains < nCoveredRainbowTableChains ) // Chunk read loop\r
{\r
// Load table chunk\r
// Reset statistics\r
ResetStatistics();\r
\r
+ // XXX it's not like the STL has a sort method...\r
// Sort vPathName (CChainWalkSet need it)\r
- UINT4 i, j;\r
+ uint32 i, j;\r
for (i = 0; i < vPathName.size() - 1; i++)\r
for (j = 0; j < vPathName.size() - i - 1; j++)\r
{\r
return m_fTotalPrecalculationTime;\r
}\r
\r
-int CCrackEngine::GetStatTotalChainWalkStep()\r
+uint64 CCrackEngine::GetStatTotalChainWalkStep()\r
{\r
return m_nTotalChainWalkStep;\r
}\r
return m_nTotalFalseAlarm;\r
}\r
\r
-int CCrackEngine::GetStatTotalChainWalkStepDueToFalseAlarm()\r
+uint64 CCrackEngine::GetStatTotalChainWalkStepDueToFalseAlarm()\r
{\r
return m_nTotalChainWalkStepDueToFalseAlarm;\r
}\r