diff --git a/Makefile b/Makefile index df89e2c..9a108bd 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ regaddr: $(OBJECTS) $(CXX) -o regaddr regaddr.o $(LDFLAGS) $(LIBS) vain: $(OBJECTS) - $(CXX) -o vain vanitygen.o $(LDFLAGS) -mavx $(LIBS) + $(CXX) -o vain vanitygen.o $(LDFLAGS) $(LIBS) $(OBJECTS): libi2pd.a diff --git a/vanity.hpp b/vanity.hpp index e3f758f..a14ebbb 100644 --- a/vanity.hpp +++ b/vanity.hpp @@ -28,8 +28,16 @@ static uint8_t * KeyBuf; //static uint8_t * PaddingBuf; static unsigned long long hashescounter; + #ifdef MODES unsigned short count_cpu __attribute__((__mode__(QI))); // 1 byte i think don't usefful #else unsigned short count_cpu; #endif + + + +//Functions visible and don't need. + + + diff --git a/vanitygen.cpp b/vanitygen.cpp index 8d91e36..0ed9fe7 100644 --- a/vanitygen.cpp +++ b/vanitygen.cpp @@ -1,6 +1,9 @@ #include "vanity.hpp" #define CPU_ONLY + + + static bool check_prefix(const char * buf){ unsigned short size_str=0; while(*buf) @@ -67,11 +70,16 @@ For idea and example ^-^ Orignal is sensei of crypto ;) */ std::cout << "Thread " << id_thread << " binded" << std::endl; + #ifdef MODES uint8_t b[391] __attribute__((__mode__(SI))); // 4 byte == 32 bits, not usefull. i think. #else uint8_t b[391]; #endif + + + uint8_t b[391] __attribute__((aligned(4))); + memcpy (b, buf, 391); int len = strlen (prefix); @@ -114,7 +122,7 @@ int main (int argc, char * argv[]) { if ( argc < 3 ) { - std::cout << "Usage: " << argv[0] << " filename generatestring " << std::endl; + std::cout << "Usage: " << argv[0] << " filename generatestring " << std::endl; return 0; } if(!check_prefix(argv[2])){ @@ -122,17 +130,9 @@ int main (int argc, char * argv[]) return 0; } i2p::crypto::InitCrypto (false); - type = i2p::data::SIGNING_KEY_TYPE_EDDSA_SHA512_ED25519; - if ( argc > 3 ){ - unsigned int tmp = atoi(argv[3]); - if(tmp > 255) { - std::cout << "Really more than 255 threads?:D Nope, sorry" << std::endl; - return 0; - } - count_cpu=atoi(argv[3]); - }if ( argc > 4 ) { - type = NameToSigType(std::string(argv[4])); - } + type = i2p::data::SIGNING_KEY_TYPE_EDDSA_SHA512_ED25519; + if ( argc > 3 ) + type = NameToSigType(std::string(argv[3])); /////////////// //For while @@ -156,7 +156,6 @@ if(type != i2p::data::SIGNING_KEY_TYPE_EDDSA_SHA512_ED25519){ return 0; break; } -//TODO: for other types. switch(type){ case i2p::data::SIGNING_KEY_TYPE_ECDSA_SHA256_P256: @@ -165,7 +164,7 @@ if(type != i2p::data::SIGNING_KEY_TYPE_EDDSA_SHA512_ED25519){ break; case i2p::data::SIGNING_KEY_TYPE_ECDSA_SHA512_P521: - + break; case i2p::data::SIGNING_KEY_TYPE_RSA_SHA256_2048: @@ -189,6 +188,7 @@ if(type != i2p::data::SIGNING_KEY_TYPE_EDDSA_SHA512_ED25519){ KeyBuf = new uint8_t[keys.GetFullLen()]; keys.ToBuffer (KeyBuf, keys.GetFullLen ()); + if(!count_cpu) count_cpu = sysconf(_SC_NPROCESSORS_ONLN); @@ -198,27 +198,33 @@ if(type != i2p::data::SIGNING_KEY_TYPE_EDDSA_SHA512_ED25519){ unsigned short attempts = 0; while(!found) -{//while -{//stack(for destructors(vector/thread)) - + unsigned int count_cpu = sysconf(_SC_NPROCESSORS_ONLN); std::vector threads(count_cpu); - unsigned long long thoughtput = 0x4F4B5A37; + + + std::cout << "Start vanity generator in " << count_cpu << " threads" << std::endl; + +unsigned long long thoughtput = 0x4F4B5A37; for ( unsigned int j = count_cpu;j--;){ threads[j] = std::thread(thread_find,KeyBuf,argv[2],j,thoughtput); thoughtput+=1000; - }//for + } for(unsigned int j = 0; j < count_cpu;j++) threads[j].join(); + if(FoundNonce == 0){ RAND_bytes( KeyBuf+MutateByte , 90 ); std::cout << "Attempts #" << ++attempts << std::endl; } -}//stack -}//while + + if(FindedNonce == 0){ + std::cout << "Don't finded " << std::endl; + return 0; + } memcpy (KeyBuf + MutateByte, &FoundNonce, 4); std::cout << "Hashes: " << hashescounter << std::endl;