]> git.sesse.net Git - freerainbowtables/blobdiff - Client Applications/rcracki_mt/ChainWalkContext.cpp
0.6.5 release synced from rcracki.sourceforge.net
[freerainbowtables] / Client Applications / rcracki_mt / ChainWalkContext.cpp
index 1158dc6c648fa9450e1fefa49efae6f3da96558f..ae58f77894c6e074279bb38cf7487228df8af6b6 100644 (file)
@@ -8,7 +8,7 @@
  * Copyright 2009, 2010 James Nobis <frt@quelrod.net>\r
  * Copyright 2010 Yngve AAdlandsvik\r
  *\r
- * This file is part of racrcki_mt.\r
+ * This file is part of rcracki_mt.\r
  *\r
  * rcracki_mt is free software: you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
@@ -76,22 +76,18 @@ bool CChainWalkContext::LoadCharset(string sName)
                return true;\r
        }\r
        if(sName.substr(0, 6) == "hybrid") // Hybrid charset consisting of 2 charsets\r
-       {\r
                m_nHybridCharset = 1;           \r
-       }\r
        else\r
-       {\r
                m_nHybridCharset = 0;\r
-       }\r
        \r
        bool readCharset = false;\r
        vector<string> vLine;\r
-       if (ReadLinesFromFile("charset.txt", vLine)) {\r
+\r
+       if ( ReadLinesFromFile("charset.txt", vLine) )\r
                readCharset = true;\r
-       }\r
-       else if (ReadLinesFromFile(GetApplicationPath() + "charset.txt", vLine)) {\r
+       else if ( ReadLinesFromFile(GetApplicationPath() + "charset.txt", vLine) )\r
                readCharset = true;\r
-       }\r
+\r
        if (readCharset)\r
        {\r
                UINT4 i;\r
@@ -268,11 +264,11 @@ bool CChainWalkContext::SetupWithPathName(string sPathName, int& nRainbowChainLe
        // something like lm_alpha#1-7_0_100x16_test.rt\r
 \r
 #ifdef _WIN32\r
-       int nIndex = sPathName.find_last_of('\\');\r
+       string::size_type nIndex = sPathName.find_last_of('\\');\r
 #else\r
-       int nIndex = (int) sPathName.find_last_of('/');\r
+       string::size_type nIndex = sPathName.find_last_of('/');\r
 #endif\r
-       if (nIndex != -1)\r
+       if (nIndex != string::npos)\r
                sPathName = sPathName.substr(nIndex + 1);\r
 \r
        if (sPathName.size() < 3)\r
@@ -324,7 +320,7 @@ bool CChainWalkContext::SetupWithPathName(string sPathName, int& nRainbowChainLe
        }\r
        else\r
        {\r
-               if (sCharsetDefinition.find('#') == (unsigned long)-1)          // For backward compatibility, "#1-7" is implied\r
+               if ( sCharsetDefinition.find('#') == string::npos )             // For backward compatibility, "#1-7" is implied\r
                {                       \r
                        sCharsetName = sCharsetDefinition;\r
                        nPlainLenMin = 1;\r
@@ -473,10 +469,10 @@ void CChainWalkContext::IndexToPlain()
                m_nPlainLen = m_nPlainLenMinTotal;\r
        uint64 nIndexOfX = m_nIndex - m_nPlainSpaceUpToX[m_nPlainLen - 1];\r
 \r
-// this is the generic code for non x86/x86-64 platforms\r
-#if !defined(_M_X64) && !defined(_M_X86) && !defined(__i386__) && !defined(__x86_64__)\r
+// this is the generic code for non x86/x86_64 platforms\r
+#if !defined(_M_X64) && !defined(_M_IX86) && !defined(__i386__) && !defined(__x86_64__)\r
        \r
-       // Slow/generic version\r
+       // generic version (slow for non 64-bit platforms and gcc < 4.5.x)\r
        for (i = m_nPlainLen - 1; i >= 0; i--)\r
        {\r
                int nCharsetLen = 0;\r
@@ -491,14 +487,14 @@ void CChainWalkContext::IndexToPlain()
                        }\r
                }\r
        }\r
-#else\r
 \r
+#elif defined(_M_X64) || defined(_M_IX86) || defined(__i386__) || defined(__x86_64__)\r
 \r
        // Fast ia32 version\r
        for (i = m_nPlainLen - 1; i >= 0; i--)\r
        {\r
                // 0x100000000 = 2^32\r
-#if defined(_M_X64) || defined(_M_X86)\r
+#ifdef _M_IX86\r
                if (nIndexOfX < 0x100000000I64)\r
                        break;\r
 #else\r
@@ -519,7 +515,7 @@ void CChainWalkContext::IndexToPlain()
                }\r
        }\r
 \r
-       unsigned int nIndexOfX32 = (unsigned int)nIndexOfX;\r
+       UINT4 nIndexOfX32 = (UINT4)nIndexOfX;\r
        for (; i >= 0; i--)\r
        {\r
                int nCharsetLen = 0;\r
@@ -540,11 +536,14 @@ void CChainWalkContext::IndexToPlain()
 \r
 #if defined(_WIN32) && !defined(__GNUC__)\r
 \r
+               // VC++ still needs this\r
+               unsigned int nPlainCharsetLen = m_vCharset[j].m_nPlainCharsetLen;\r
+\r
                __asm\r
                {\r
                        mov eax, nIndexOfX32\r
                        xor edx, edx\r
-                       div m_vCharset[j].m_nPlainCharsetLen\r
+                       div nPlainCharsetLen\r
                        mov nIndexOfX32, eax\r
                        mov nTemp, edx\r
                }\r