diff --git a/README.md b/README.md index 1f0c4b4..3a55aa1 100755 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ print iptables firewall rules to allow 1 nodes in netdb through firewall includi ### keygen -Generate an i2p private key +Generate an I2P private key #### Usage @@ -76,6 +76,9 @@ or | EDDSA-SHA512-ED25519 | 7 | | GOSTR3410_CRYPTO_PRO_A-GOSTR3411-256 | 9 | | GOSTR3410_TC26_A_512-GOSTR3411-512 | 10 | +| RED25519-SHA512 | 11 | + +For more information on the types of signatures, see the [documentation](https://i2pd.readthedocs.io/en/latest/user-guide/tunnels/#signature-types). ### vain @@ -88,17 +91,17 @@ Vanity generation address. #### Time to Generate on a 2.70GHz Processor | characters| time to generate (approx.) | | -------------------- | --------------- | -| 1 | ~0.082s | -| 2 | ~0.075s | -| 3 | ~0.100s | -| 4 | ~0.394s | -| 5 | ~6.343s | -| 6 | ~1m-5m | -| 7 | ~30m | +| 1 | ~0.082s | +| 2 | ~0.075s | +| 3 | ~0.100s | +| 4 | ~0.394s | +| 5 | ~6.343s | +| 6 | ~1m-5m | +| 7 | ~30m | ### keyinfo -Prints information about an i2p private key +Prints information about an I2P private key #### Usage diff --git a/keygen.cpp b/keygen.cpp index 9105d92..81d184c 100644 --- a/keygen.cpp +++ b/keygen.cpp @@ -17,6 +17,7 @@ int main (int argc, char * argv[]) if (argc > 2) { std::string str(argv[2]); type = NameToSigType(str); + if (SigTypeToName(type).find("unknown") != std::string::npos) { std::cerr << "Incorrect signature type" << std::endl; return -2; } } auto keys = i2p::data::PrivateKeys::CreateRandomKeys (type); std::ofstream f (argv[1], std::ofstream::binary | std::ofstream::out); @@ -28,6 +29,7 @@ int main (int argc, char * argv[]) f.write ((char *)buf, len); delete[] buf; std::cout << "Destination " << keys.GetPublic ()->GetIdentHash ().ToBase32 () << " created" << std::endl; + std::cout << "Signature type: " << SigTypeToName(type) << " (" << type << ")" << std::endl; } else std::cout << "Can't create file " << argv[1] << std::endl; diff --git a/vanitygen.cpp b/vanitygen.cpp index 982d09d..5030ec1 100644 --- a/vanitygen.cpp +++ b/vanitygen.cpp @@ -1,6 +1,7 @@ #include "vanity.hpp" -#include -#include +#include +#include +#include static struct @@ -10,8 +11,17 @@ static struct i2p::data::SigningKeyType signature; std::string outputpath=""; std::regex regex; + bool sig_type = true; } options; +void check_sig_type() +{ + if (SigTypeToName(options.signature).find("unknown") != std::string::npos) + { + std::cerr << "Incorrect signature type" << std::endl; + options.sig_type = false; + } +} static void inline CalculateW (const uint8_t block[64], uint32_t W[64]) { @@ -124,6 +134,7 @@ static inline bool NotThat(const char * a, const char *b) return false; } +std::mutex mtx; static inline bool thread_find(uint8_t * buf, const char * prefix, int id_thread, unsigned long long throughput) { /** @@ -131,7 +142,9 @@ static inline bool thread_find(uint8_t * buf, const char * prefix, int id_thread * For idea and example ^-^ * Orignal is sensei of crypto ;) */ + mtx.lock(); std::cout << "Thread " << id_thread << " binded" << std::endl; + mtx.unlock(); /* union { @@ -187,7 +200,7 @@ static inline bool thread_find(uint8_t * buf, const char * prefix, int id_thread // if(result) { ByteStreamToBase32 ((uint8_t*)hash, 32, addr, 52); - std::cout << "Address found " << addr << " in " << id_thread << std::endl; + std::cout << "Address found " << addr << std::endl; found=true; FoundNonce=*nonce; // free(hash); @@ -210,13 +223,11 @@ static inline bool thread_find(uint8_t * buf, const char * prefix, int id_thread void usage(void){ const constexpr char * help="vain [text-pattern|regex-pattern] [options]\n" - "-h --help, help menu\n" - "-r --reg, regexp instead just text pattern (e.g. '(one|two).*')\n" - "--threads -t, (default count of system)\n" - "--signature -s, (signature type)\n" - "-o --output output file (default private.dat)\n" - "--usage usage\n" - // "--prefix -p\n" + "-h --help help menu\n" + "-r --reg regexp instead just text pattern (e.g. '(one|two).*')\n" + "-t --threads (default count of system)\n" +// "--signature -s, (signature type)\n" NOT IMPLEMENTED FUCKING PLAZ! + "-o --output output file (default private.dat)\n" ""; puts(help); } @@ -253,6 +264,7 @@ void parsing(int argc, char ** args){ break; case 's': options.signature = NameToSigType(std::string(optarg)); + check_sig_type(); break; case 'o': options.outputpath=optarg; @@ -302,6 +314,7 @@ int main (int argc, char * argv[]) /////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + if (!options.sig_type) return -2; auto keys = i2p::data::PrivateKeys::CreateRandomKeys (options.signature); switch(options.signature) { @@ -311,7 +324,7 @@ int main (int argc, char * argv[]) case i2p::data::SIGNING_KEY_TYPE_RSA_SHA384_3072: case i2p::data::SIGNING_KEY_TYPE_RSA_SHA512_4096: case i2p::data::SIGNING_KEY_TYPE_GOSTR3410_TC26_A_512_GOSTR3411_512: - std::cout << "Sorry, i don't can generate address for this signature type" << std::endl; + std::cout << "Sorry, I don't can generate address for this signature type" << std::endl; return 0; break; }