* 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
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
- readCharset = true;\r
- }\r
- else if (ReadLinesFromFile(GetApplicationPath() + "charset.txt", vLine)) {\r
- readCharset = true;\r
- }\r
- if (readCharset)\r
+\r
+ #ifdef BOINC\r
+ if ( boinc_ReadLinesFromFile( "charset.txt", vLine ) )\r
+ readCharset = true;\r
+ #else\r
+ if ( ReadLinesFromFile("charset.txt", vLine) )\r
+ readCharset = true;\r
+ else if ( ReadLinesFromFile(GetApplicationPath() + "charset.txt", vLine) )\r
+ readCharset = true;\r
+ #endif\r
+\r
+ if ( readCharset )\r
{\r
- UINT4 i;\r
+ uint32 i;\r
for (i = 0; i < vLine.size(); i++)\r
{\r
// Filter comment\r
\r
// sCharsetName charset check\r
bool fCharsetNameCheckPass = true;\r
- UINT4 j;\r
+ uint32 j;\r
for (j = 0; j < sCharsetName.size(); j++)\r
{\r
if ( !isalpha(sCharsetName[j])\r
}\r
else\r
printf("can't open charset configuration file\n");\r
+\r
return false;\r
}\r
\r
m_nPlainLenMaxTotal = 0;\r
m_nPlainLenMinTotal = 0;\r
uint64 nTemp = 1;\r
- UINT4 j, k = 1;\r
+ uint32 j, k = 1;\r
for(j = 0; j < m_vCharset.size(); j++)\r
{\r
int i;\r
// 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
}\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
printf("hash routine: %s\n", m_sHashRoutineName.c_str());\r
printf("hash length: %d\n", m_nHashLen);\r
\r
+ printf( "m_vCharset[0].m_nPlainCharSetLen: %d\n", m_vCharset[0].m_nPlainCharsetLen );\r
+ printf( "m_vCharset[1].m_nPlainCharSetLen: %d\n", m_vCharset[1].m_nPlainCharsetLen );\r
+\r
printf("plain charset: ");\r
unsigned int i;\r
+ \r
for (i = 0; i < m_vCharset[0].m_nPlainCharsetLen; i++)\r
{\r
if (isprint(m_vCharset[0].m_PlainCharset[i]))\r
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
- for(UINT4 j = 0; j < m_vCharset.size(); j++)\r
+ for(uint32 j = 0; j < m_vCharset.size(); j++)\r
{\r
nCharsetLen += m_vCharset[j].m_nPlainLenMax;\r
if(i < nCharsetLen) // We found the correct charset\r
}\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
#endif\r
\r
int nCharsetLen = 0;\r
- for(UINT4 j = 0; j < m_vCharset.size(); j++)\r
+ for(uint32 j = 0; j < m_vCharset.size(); j++)\r
{\r
nCharsetLen += m_vCharset[j].m_nPlainLenMax;\r
if(i < nCharsetLen) // We found the correct charset\r
}\r
}\r
\r
- unsigned int nIndexOfX32 = (unsigned int)nIndexOfX;\r
+ uint32 nIndexOfX32 = (uint32)nIndexOfX;\r
for (; i >= 0; i--)\r
{\r
int nCharsetLen = 0;\r
- for(UINT4 j = 0; j < m_vCharset.size(); j++)\r
+ for(uint32 j = 0; j < m_vCharset.size(); j++)\r
{\r
nCharsetLen += m_vCharset[j].m_nPlainLenMax;\r
if(i < nCharsetLen) // We found the correct charset\r
// m_Plain[i] = m_vCharset[j].m_PlainCharset[nIndexOfX32 % m_vCharset[j].m_nPlainCharsetLen];\r
// nIndexOfX32 /= m_vCharset[j].m_nPlainCharsetLen;\r
\r
-\r
// moving nPlainCharsetLen into the asm body and avoiding the extra temp\r
// variable results in a performance gain\r
// unsigned int nPlainCharsetLen = m_vCharset[j].m_nPlainCharsetLen;\r
unsigned int nTemp;\r
\r
#if defined(_WIN32) && !defined(__GNUC__)\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
m_Plain[i] = m_vCharset[j].m_PlainCharset[nTemp];\r
#else\r
- __asm__ __volatile__ ( "mov %2, %%eax;"\r
- "xor %%edx, %%edx;"\r
+ __asm__ __volatile__ ("xor %%edx, %%edx;"\r
"divl %3;"\r
- "mov %%eax, %0;"\r
- "mov %%edx, %1;"\r
- : "=m"(nIndexOfX32), "=m"(nTemp)\r
- : "m"(nIndexOfX32), "m"(m_vCharset[j].m_nPlainCharsetLen)\r
- : "%eax", "%edx"\r
- );\r
+ : "=a"(nIndexOfX32), "=d"(nTemp)\r
+ : "a"(nIndexOfX32), "rm"(m_vCharset[j].m_nPlainCharsetLen)\r
+ : );\r
m_Plain[i] = m_vCharset[j].m_PlainCharset[nTemp];\r
#endif\r
break;\r