summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-05-26 09:21:54 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-05-26 09:26:03 -0700
commit68d950c3443b3454fdcdd301e339a5692967c7b1 (patch)
tree81f676b4eae97962007377ee19e37ce9cfea7bff
parent0bcc7d46a3355e05c3f79a0e1bc4f6a000395e9b (diff)
downloadinfinitytier-68d950c3443b3454fdcdd301e339a5692967c7b1.tar.gz
infinitytier-68d950c3443b3454fdcdd301e339a5692967c7b1.zip
Hack in zerotier-idtool to allow generation of vanity addresses.
-rw-r--r--one.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/one.cpp b/one.cpp
index f68e3cec..9e03daa6 100644
--- a/one.cpp
+++ b/one.cpp
@@ -571,7 +571,7 @@ static void idtoolPrintHelp(FILE *out,const char *pn)
COPYRIGHT_NOTICE ZT_EOL_S
LICENSE_GRANT ZT_EOL_S);
fprintf(out,"Usage: %s <command> [<args>]"ZT_EOL_S""ZT_EOL_S"Commands:"ZT_EOL_S,pn);
- fprintf(out," generate [<identity.secret>] [<identity.public>]"ZT_EOL_S);
+ fprintf(out," generate [<identity.secret>] [<identity.public>] [<vanity>]"ZT_EOL_S);
fprintf(out," validate <identity.secret/public>"ZT_EOL_S);
fprintf(out," getpublic <identity.secret>"ZT_EOL_S);
fprintf(out," sign <identity.secret> <file>"ZT_EOL_S);
@@ -607,8 +607,28 @@ static int idtool(int argc,char **argv)
}
if (!strcmp(argv[1],"generate")) {
+ uint64_t vanity = 0;
+ int vanityBits = 0;
+ if (argc >= 5) {
+ vanity = Utils::hexStrToU64(argv[4]) & 0xffffffffffULL;
+ vanityBits = 4 * strlen(argv[4]);
+ if (vanityBits > 40)
+ vanityBits = 40;
+ }
+
Identity id;
- id.generate();
+ for(;;) {
+ id.generate();
+ if ((id.address().toInt() >> (40 - vanityBits)) == vanity) {
+ if (vanityBits > 0) {
+ fprintf(stderr,"vanity address: found %.10llx !\n",(unsigned long long)id.address().toInt());
+ }
+ break;
+ } else {
+ fprintf(stderr,"vanity address: tried %.10llx looking for first %d bits of %.10llx\n",(unsigned long long)id.address().toInt(),vanityBits,(unsigned long long)(vanity << (40 - vanityBits)));
+ }
+ }
+
std::string idser = id.toString(true);
if (argc >= 3) {
if (!OSUtils::writeFile(argv[2],idser)) {