|
|
|
@ -3,24 +3,10 @@
@@ -3,24 +3,10 @@
|
|
|
|
|
#include<getopt.h> |
|
|
|
|
#include<string> |
|
|
|
|
#include<boost/filesystem.hpp> |
|
|
|
|
//#include<boost/algorithm/string/predicate.hpp>
|
|
|
|
|
//#include<format> // is not supports for me
|
|
|
|
|
|
|
|
|
|
/// Crypto InitCrypto. TODO: to makefile/another place get the macro
|
|
|
|
|
#ifndef PRECOMPUTATION_CRYPTO |
|
|
|
|
#define PRECOMPUTATION_CRYPTO false |
|
|
|
|
#endif |
|
|
|
|
#ifndef AESNI_CRYPTO |
|
|
|
|
#define AESNI_CRYPTO false |
|
|
|
|
#endif |
|
|
|
|
#ifndef AVX_CRYPTO |
|
|
|
|
#define AVX_CRYPTO false |
|
|
|
|
#endif |
|
|
|
|
#ifndef FORCE_CRYPTO |
|
|
|
|
#define FORCE_CRYPTO false |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#define DEF_OUT_FILE "private.dat" |
|
|
|
|
|
|
|
|
|
// some global vars in vanitygen.hpp
|
|
|
|
|
static struct{ |
|
|
|
|
bool reg=false; |
|
|
|
|
int threads=-1; |
|
|
|
@ -240,6 +226,7 @@ void usage(void){
@@ -240,6 +226,7 @@ void usage(void){
|
|
|
|
|
"-o --output output file(default " DEF_OUT_FILE ")\n" |
|
|
|
|
//"--usage usage\n"
|
|
|
|
|
//"--prefix -p\n"
|
|
|
|
|
"--multiplymode -m - multiple addresses search" |
|
|
|
|
""; |
|
|
|
|
puts(help); |
|
|
|
|
} |
|
|
|
@ -253,18 +240,22 @@ void parsing(int argc, char ** args){
@@ -253,18 +240,22 @@ void parsing(int argc, char ** args){
|
|
|
|
|
{"threads", required_argument, 0, 't'}, |
|
|
|
|
{"signature", required_argument,0,'s'}, |
|
|
|
|
{"output", required_argument,0,'o'}, |
|
|
|
|
{"multiplymode", no_argument, 0, 'm'}, |
|
|
|
|
//{"usage", no_argument,0,0},
|
|
|
|
|
{0,0,0,0} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
int c; |
|
|
|
|
while( (c=getopt_long(argc,args, "hrt:s:o:", long_options, &option_index))!=-1){ |
|
|
|
|
while( (c=getopt_long(argc,args, "hrt:s:o:m", long_options, &option_index))!=-1){ |
|
|
|
|
switch(c){ |
|
|
|
|
//case 0:
|
|
|
|
|
// if ( std::string(long_options[option_index].name) == std::string("usage") ){
|
|
|
|
|
// usage();
|
|
|
|
|
// exit(1);
|
|
|
|
|
// }
|
|
|
|
|
case 'm': |
|
|
|
|
multipleSearchMode=true; |
|
|
|
|
break; |
|
|
|
|
case 'h': |
|
|
|
|
usage(); |
|
|
|
|
exit(0); |
|
|
|
@ -357,6 +348,10 @@ int main (int argc, char * argv[])
@@ -357,6 +348,10 @@ int main (int argc, char * argv[])
|
|
|
|
|
if ( !std::regex_match( std::string(argv[1]), std::regex("[a-zA-Z0-9\\.]{1,}")) ) { |
|
|
|
|
std::cerr << "Please, change the outputfile name" << std::endl; |
|
|
|
|
} |
|
|
|
|
//
|
|
|
|
|
if ( options . outputpath . empty () ) options . outputpath . assign ( DEF_OUT_FILE ) ; |
|
|
|
|
static std::string outPutFileName = options.outputpath; |
|
|
|
|
auto doSearch = [argc,argv] () { |
|
|
|
|
auto keys = i2p::data::PrivateKeys::CreateRandomKeys (options.signature); |
|
|
|
|
// IDK type, and don't want to check. so...
|
|
|
|
|
auto createDumpFile = [/*keys*/](std::string outFile, i2p::data::PrivateKeys keys){ |
|
|
|
@ -388,7 +383,7 @@ int main (int argc, char * argv[])
@@ -388,7 +383,7 @@ int main (int argc, char * argv[])
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//TODO: for other types.
|
|
|
|
|
//TODO: for other types.
|
|
|
|
|
switch(options.signature) |
|
|
|
|
{ |
|
|
|
|
case i2p::data::SIGNING_KEY_TYPE_ECDSA_SHA256_P256: |
|
|
|
@ -409,13 +404,13 @@ int main (int argc, char * argv[])
@@ -409,13 +404,13 @@ int main (int argc, char * argv[])
|
|
|
|
|
case i2p::data::SIGNING_KEY_TYPE_GOSTR3410_CRYPTO_PRO_A_GOSTR3411_256: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
// there we gen key to buffer. That we mem allocate...
|
|
|
|
|
// there we gen key to buffer. That we mem allocate...
|
|
|
|
|
KeyBuf = new uint8_t[keys.GetFullLen()]; |
|
|
|
|
keys.ToBuffer (KeyBuf, keys.GetFullLen ()); |
|
|
|
|
/// there was some things for cpu 665% usage, but is not helpful even
|
|
|
|
|
/// there was some things for cpu 665% usage, but is not helpful even
|
|
|
|
|
std::cout << "Start vanity generator in " << options.threads << " threads" << std::endl; |
|
|
|
|
// there we start to change byte in our private key. we can change another bytes too
|
|
|
|
|
// but we just change 1 byte in all key. So. TODO: change all bytes not one?
|
|
|
|
|
// there we start to change byte in our private key. we can change another bytes too
|
|
|
|
|
// but we just change 1 byte in all key. So. TODO: change all bytes not one?
|
|
|
|
|
unsigned short attempts = 0;// it can be disabled, it's just for a statistic. For CPU this is a trash?
|
|
|
|
|
while(!found) |
|
|
|
|
{//while
|
|
|
|
@ -460,7 +455,10 @@ int main (int argc, char * argv[])
@@ -460,7 +455,10 @@ int main (int argc, char * argv[])
|
|
|
|
|
// IDK. what for acetone change this line to if (options.output...empty() ... assign
|
|
|
|
|
// cplusplus.com/reference/string/string/assign yes we can. but I would don't change this
|
|
|
|
|
//if(options.outputpath.size() == 0) options.outputpath = DEF_OUT_FILE;
|
|
|
|
|
if ( options . outputpath . empty () ) options . outputpath . assign ( DEF_OUT_FILE ) ; |
|
|
|
|
options.outputpath = options.outputpath + std::to_string(foundKeys) + std::string(".dat"); |
|
|
|
|
|
|
|
|
|
//if ( ! boost::algorithm::ends_with(options.outputpath, ".dat") )
|
|
|
|
|
// options.outputpath = options.outputpath + ".dat";
|
|
|
|
|
|
|
|
|
|
// there we generate a key, like as in keygen.cpp
|
|
|
|
|
// before a mining we would to create a dump file
|
|
|
|
@ -477,8 +475,17 @@ int main (int argc, char * argv[])
@@ -477,8 +475,17 @@ int main (int argc, char * argv[])
|
|
|
|
|
else |
|
|
|
|
std::cout << "Can't create file " << options.outputpath << std::endl; |
|
|
|
|
|
|
|
|
|
i2p::crypto::TerminateCrypto (); |
|
|
|
|
}; // void doSearch lamda
|
|
|
|
|
|
|
|
|
|
do { |
|
|
|
|
doSearch(); |
|
|
|
|
foundKeys++; |
|
|
|
|
options.outputpath.assign(outPutFileName); |
|
|
|
|
found = false; |
|
|
|
|
FoundNonce = 0; |
|
|
|
|
} while(multipleSearchMode); |
|
|
|
|
|
|
|
|
|
i2p::crypto::TerminateCrypto (); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|