diff --git a/CMakeLists.txt b/CMakeLists.txt index 4906a70..2396237 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,6 @@ set (PROGRAM_EXE ${CMAKE_PROJECT_NAME}) set (PROGRAM_SOURCE src/string.cpp - src/ec/openssl.cpp src/base58.cpp src/checksum.cpp src/WIF.cpp @@ -46,6 +45,10 @@ endif() # Libraries find_package(OpenSSL 1.1 REQUIRED) +set (PROGRAM_SOURCE ${PROGRAM_SOURCE} + src/crypto/openssl/ec.cpp + src/crypto/openssl/hash.cpp +) if (USE_THREADS) find_package(Threads) diff --git a/src/WIF.cpp b/src/WIF.cpp index 5577d8e..d31aff4 100644 --- a/src/WIF.cpp +++ b/src/WIF.cpp @@ -27,6 +27,8 @@ #include "checksum.h" #include "WIF.h" +namespace eoskeygen { + #define PRIV_KEY_PREFIX 0x80 /* 0x80 for "Bitcoin mainnet". Always used by EOS. */ std::string wif_priv_encode(ec_privkey_t priv) { @@ -60,3 +62,5 @@ void wif_print_key(const struct ec_keypair *key) { std::cout << "Public: " << wif_pub_encode(key->pub) << std::endl; std::cout << "Private: " << wif_priv_encode(key->secret) << std::endl; } + +} // namespace eoskeygen diff --git a/src/WIF.h b/src/WIF.h index 48eb6a8..a8bba10 100644 --- a/src/WIF.h +++ b/src/WIF.h @@ -21,11 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef WIF_H -#define WIF_H +#ifndef EOSIOKEYGEN_WIF_H +#define EOSIOKEYGEN_WIF_H #include -#include "ec/types.h" +#include "crypto/types.h" + +namespace eoskeygen { std::string wif_priv_encode(ec_privkey_t priv); @@ -33,4 +35,6 @@ std::string wif_pub_encode(ec_pubkey_t pub); void wif_print_key(const struct ec_keypair *key); -#endif /* WIF_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_WIF_H */ diff --git a/src/base58.cpp b/src/base58.cpp index cd3eccd..ad00911 100644 --- a/src/base58.cpp +++ b/src/base58.cpp @@ -28,6 +28,8 @@ #include #include "base58.h" +namespace eoskeygen { + static const char charmap[59] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; std::string base58_encode(const unsigned char* pbegin, const unsigned char* pend) { @@ -80,3 +82,5 @@ std::string base58_encode(const std::vector& vch) { return base58_encode(vch.data(), vch.data() + vch.size()); } + +} // namespace eoskeygen diff --git a/src/base58.h b/src/base58.h index 82039b5..16b7798 100644 --- a/src/base58.h +++ b/src/base58.h @@ -21,14 +21,18 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef BASE58_H -#define BASE58_H +#ifndef EOSIOKEYGEN_BASE58_H +#define EOSIOKEYGEN_BASE58_H #include #include +namespace eoskeygen { + std::string base58_encode(const std::string& str); std::string base58_encode(const std::vector& vch); std::string base58_encode(const unsigned char* pbegin, const unsigned char* pend); -#endif /* BASE58_H */ +} //namespace eoskeygen + +#endif /* EOSIOKEYGEN_BASE58_H */ diff --git a/src/benchmark.cpp b/src/benchmark.cpp index 228b045..bc8e69f 100644 --- a/src/benchmark.cpp +++ b/src/benchmark.cpp @@ -22,13 +22,15 @@ * SOFTWARE. */ #include -#include "ec/generate.h" +#include "crypto/ec.h" #include "benchmark.h" using std::chrono::steady_clock; using std::chrono::duration; using std::chrono::time_point; +namespace eoskeygen { + void benchmark(size_t num_keys, struct benchmark_result* res) { time_point start; @@ -48,3 +50,5 @@ void benchmark(size_t num_keys, struct benchmark_result* res) { res->sec = duration(steady_clock::now() - start).count(); res->kps = static_cast(num_keys) / res->sec; } + +} // namespace eoskeygen diff --git a/src/benchmark.h b/src/benchmark.h index f001808..8b1f57b 100644 --- a/src/benchmark.h +++ b/src/benchmark.h @@ -21,11 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef BENCHMARK_H -#define BENCHMARK_H +#ifndef EOSIOKEYGEN_BENCHMARK_H +#define EOSIOKEYGEN_BENCHMARK_H #include +namespace eoskeygen { + struct benchmark_result { float sec; // elapsed seconds. float kps; // keys per second. @@ -33,4 +35,6 @@ struct benchmark_result { void benchmark(size_t num_keys, struct benchmark_result* res); -#endif /* BENCHMARK_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_BENCHMARK_H */ diff --git a/src/checksum.cpp b/src/checksum.cpp index 53c7e33..9f46b0e 100644 --- a/src/checksum.cpp +++ b/src/checksum.cpp @@ -21,28 +21,31 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#include -#include #include +#include "crypto/hash.h" #include "checksum.h" -inline void sha256d(const unsigned char *data, std::size_t len, unsigned char *out) { - SHA256(data, len, out); - SHA256(out, 32, out); +namespace eoskeygen { + +inline void sha256d(const unsigned char *data, std::size_t len, sha256_t *out) { + sha256(data, len, out); + sha256(out->data, 32, out); } -#define checksum_impl(name, func) \ - checksum_t checksum_##name(const unsigned char *data, std::size_t len) { \ +#define checksum_impl(func, type) \ + checksum_t checksum_##func(const unsigned char *data, std::size_t len) { \ \ checksum_t crc; \ - unsigned char hash[32]; \ + type hash; \ \ - func(data, len, hash); \ + func(data, len, &hash); \ \ - std::memcpy(crc.data(), hash, crc.size()); \ + std::memcpy(crc.data(), &hash, crc.size()); \ return crc; \ } -checksum_impl(sha256d, sha256d) -checksum_impl(ripemd160, RIPEMD160) +checksum_impl(sha256d, sha256_t) +checksum_impl(ripemd160, ripemd160_t) + +} // namespace eosio-keygen diff --git a/src/checksum.h b/src/checksum.h index 1ac08a2..b48f783 100644 --- a/src/checksum.h +++ b/src/checksum.h @@ -21,12 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef CHECKSUM_H -#define CHECKSUM_H +#ifndef EOSIOKEYGEN_CHECKSUM_H +#define EOSIOKEYGEN_CHECKSUM_H #include #include +namespace eoskeygen { + #define CHECKSUM_SIZE 4 typedef std::array checksum_t; @@ -35,4 +37,6 @@ checksum_t checksum_sha256d(const unsigned char *data, std::size_t len); checksum_t checksum_ripemd160(const unsigned char *data, std::size_t len); -#endif /* CHECKSUM_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_CHECKSUM_H */ diff --git a/src/console.h b/src/console.h index c81a5b7..bc20e0e 100644 --- a/src/console.h +++ b/src/console.h @@ -21,11 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef CONSOLE_H -#define CONSOLE_H +#ifndef EOSIOKEYGEN_CONSOLE_H +#define EOSIOKEYGEN_CONSOLE_H #include +namespace eoskeygen { + namespace console { // enum for all supported colors. @@ -80,4 +82,6 @@ namespace console { } // namespace console -#endif /* CONSOLE_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_CONSOLE_H */ diff --git a/src/console_ansi.cpp b/src/console_ansi.cpp index 3aab56b..272615a 100644 --- a/src/console_ansi.cpp +++ b/src/console_ansi.cpp @@ -24,6 +24,8 @@ #include #include "console.h" +namespace eoskeygen { + namespace console { std::ostream& reset(std::ostream& os) { @@ -69,3 +71,5 @@ std::ostream& operator<<(std::ostream& os, const fg& obj) { } } // namespace console + +} // namespace eoskeygen diff --git a/src/console_win32.cpp b/src/console_win32.cpp index 5f7e87d..a6c2800 100644 --- a/src/console_win32.cpp +++ b/src/console_win32.cpp @@ -25,6 +25,8 @@ #include #include "console.h" +namespace eoskeygen { + // WinAPI colors #define FG_BLACK 0 #define FG_BLUE FOREGROUND_BLUE @@ -88,3 +90,5 @@ std::ostream& operator<<(std::ostream& os, const fg& obj) { } } // namespace console + +} // namespace eoskeygen diff --git a/src/ec/generate.h b/src/crypto/ec.h similarity index 89% rename from src/ec/generate.h rename to src/crypto/ec.h index ccde10c..e8558dd 100644 --- a/src/ec/generate.h +++ b/src/crypto/ec.h @@ -21,15 +21,19 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EC_GENERATE_H -#define EC_GENERATE_H +#ifndef EOSIOKEYGEN_CRYPTO_EC_H +#define EOSIOKEYGEN_CRYPTO_EC_H #include "types.h" +namespace eoskeygen { + /** * Generates a keypair using the secp256k1 curve. * public key is in compressed format. */ int ec_generate_key(struct ec_keypair *pair); -#endif /* EC_GENERATE_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_CRYPTO_EC_H */ diff --git a/src/crypto/hash.h b/src/crypto/hash.h new file mode 100644 index 0000000..10b0373 --- /dev/null +++ b/src/crypto/hash.h @@ -0,0 +1,38 @@ +/** + * MIT License + * + * Copyright (c) 2019-2020 EOS Sw/eden + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef EOSIOKEYGEN_CRYPTO_HASH_H +#define EOSIOKEYGEN_CRYPTO_HASH_H + +#include +#include "types.h" + +namespace eoskeygen { + +sha256_t* sha256(const unsigned char *data, std::size_t len, sha256_t* out); + +ripemd160_t* ripemd160(const unsigned char *data, std::size_t len, ripemd160_t* out); + +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_CRYPTO_HASH_H */ diff --git a/src/ec/openssl.cpp b/src/crypto/openssl/ec.cpp similarity index 88% rename from src/ec/openssl.cpp rename to src/crypto/openssl/ec.cpp index 40e0cf3..2d7fbac 100644 --- a/src/ec/openssl.cpp +++ b/src/crypto/openssl/ec.cpp @@ -24,9 +24,11 @@ #include #include #include -#include "generate.h" +#include "../ec.h" -static int ec_generate_pair(unsigned char *priv, unsigned char *pub) { +namespace eoskeygen { + +int ec_generate_key(struct ec_keypair *pair) { int ret = -1; EC_KEY *k; @@ -50,12 +52,12 @@ static int ec_generate_pair(unsigned char *priv, unsigned char *pub) { } // Copy private key to binary format. - EC_KEY_priv2oct(k, priv, EC_PRIVKEY_SIZE); + EC_KEY_priv2oct(k, pair->secret.data(), EC_PRIVKEY_SIZE); // Copy public key key EC_POINT_point2oct(EC_KEY_get0_group(k), EC_KEY_get0_public_key(k), POINT_CONVERSION_COMPRESSED, - pub, EC_PUBKEY_SIZE, ctx); + pair->pub.data(), EC_PUBKEY_SIZE, ctx); ret = 0; fail2: @@ -65,7 +67,4 @@ fail1: return ret; } -int ec_generate_key(struct ec_keypair *pair) { - - return ec_generate_pair(pair->secret.data(), pair->pub.data()); -} +} // namespace eoskeygen diff --git a/src/crypto/openssl/hash.cpp b/src/crypto/openssl/hash.cpp new file mode 100644 index 0000000..08cf360 --- /dev/null +++ b/src/crypto/openssl/hash.cpp @@ -0,0 +1,38 @@ +/** + * MIT License + * + * Copyright (c) 2019-2020 EOS Sw/eden + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include "../hash.h" + +namespace eoskeygen { + +sha256_t* sha256(const unsigned char *data, std::size_t len, sha256_t* out) { + return (sha256_t *) SHA256(data, len, out->data); +} + +ripemd160_t* ripemd160(const unsigned char *data, std::size_t len, ripemd160_t* out) { + return (ripemd160_t *) RIPEMD160(data, len, out->data); +} + +} // namespace eoskeygen diff --git a/src/ec/types.h b/src/crypto/types.h similarity index 84% rename from src/ec/types.h rename to src/crypto/types.h index 19a2312..23e2585 100644 --- a/src/ec/types.h +++ b/src/crypto/types.h @@ -21,11 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EC_TYPES_H -#define EC_TYPES_H +#ifndef EOSIOKEYGEN_CRYPTO_TYPES_H +#define EOSIOKEYGEN_CRYPTO_TYPES_H #include +namespace eoskeygen { + #define EC_PRIVKEY_SIZE 32 /* @@ -43,4 +45,11 @@ struct ec_keypair { ec_pubkey_t pub; }; -#endif /* EC_TYPES_H */ +// Hashes. + +typedef struct { unsigned char data[20]; } ripemd160_t; +typedef struct { unsigned char data[32]; } sha256_t; + +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_CRYPTO_TYPES_H */ diff --git a/src/key_search.cpp b/src/key_search.cpp index 9e1a259..12a3a11 100644 --- a/src/key_search.cpp +++ b/src/key_search.cpp @@ -22,10 +22,12 @@ * SOFTWARE. */ #include -#include "ec/generate.h" +#include "crypto/ec.h" #include "key_search_helpers.h" #include "key_search.h" +namespace eoskeygen { + void KeySearch::addWord(const std::string& str) { std::string tmp = str; @@ -78,3 +80,5 @@ void KeySearch::find(size_t num_results) { _search_linear(num_results); } + +} // namespace eoskeygen diff --git a/src/key_search.h b/src/key_search.h index 6a6e5b3..78de4d6 100644 --- a/src/key_search.h +++ b/src/key_search.h @@ -21,11 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KEY_SEARCH_H -#define KEY_SEARCH_H +#ifndef EOSIOKEYGEN_KEY_SEARCH_H +#define EOSIOKEYGEN_KEY_SEARCH_H #include "string.h" +namespace eoskeygen { + class KeySearch { public : @@ -67,4 +69,6 @@ protected : #endif /* HAVE_THREADS */ }; -#endif /* KEY_SEARCH_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_KEY_SEARCH_H */ diff --git a/src/key_search_helpers.cpp b/src/key_search_helpers.cpp index 32a7a21..b6aad5b 100644 --- a/src/key_search_helpers.cpp +++ b/src/key_search_helpers.cpp @@ -26,6 +26,8 @@ #include "console.h" #include "key_search_helpers.h" +namespace eoskeygen { + void key_search_result(const struct ec_keypair* key, const struct key_result* result) { std::string pub = wif_pub_encode(key->pub); @@ -59,3 +61,5 @@ bool key_contains_word(const struct ec_keypair* key, const strlist_t& word_list, } return false; } + +} // namespace eoskeygen diff --git a/src/key_search_helpers.h b/src/key_search_helpers.h index 1b80105..f3a6bd5 100644 --- a/src/key_search_helpers.h +++ b/src/key_search_helpers.h @@ -21,11 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KEY_SEARCH_HELPSER_H -#define KEY_SEARCH_HELPERS_H +#ifndef EOSIOKEYGEN_KEY_SEARCH_HELPSER_H +#define EOSIOKEYGEN_KEY_SEARCH_HELPERS_H #include "string.h" -#include "ec/types.h" +#include "crypto/types.h" + +namespace eoskeygen { struct key_result { size_t pos; // position where the word was found. @@ -38,4 +40,6 @@ void key_search_result(const struct ec_keypair* key, const struct key_result* re // returns true if a word was found (stored in ), false otherwise. bool key_contains_word(const struct ec_keypair* key, const strlist_t& word_list, struct key_result *result); -#endif /* KEY_SEARCH_HELPERS_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_KEY_SEARCH_HELPERS_H */ diff --git a/src/key_search_mt.cpp b/src/key_search_mt.cpp index 85f3e2a..cc775c1 100644 --- a/src/key_search_mt.cpp +++ b/src/key_search_mt.cpp @@ -25,10 +25,12 @@ #include #include #include -#include "ec/generate.h" +#include "crypto/ec.h" #include "key_search_helpers.h" #include "key_search.h" +namespace eoskeygen { + // Max keys to search for, std::size_t g_max; @@ -95,3 +97,5 @@ void KeySearch::_search_mt(size_t n) t[i].join(); } } + +} // namespace eoskeygen diff --git a/src/main.cpp b/src/main.cpp index 002c05d..3e16602 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,7 +28,7 @@ #include #include "string.h" #include "WIF.h" -#include "ec/generate.h" +#include "crypto/ec.h" #include "key_search.h" #include "benchmark.h" @@ -39,13 +39,13 @@ bool option_l33t = false; int option_num_threads = std::thread::hardware_concurrency(); #endif /* HAVE_THREADS */ -void cmd_search(const strlist_t& words, int count) { +void cmd_search(const eoskeygen::strlist_t& words, int count) { - KeySearch ks; + eoskeygen::KeySearch ks; if (option_l33t) { for(std::size_t i = 0; i < words.size(); i++) { - ks.addList(l33twords(words[i])); + ks.addList(eoskeygen::l33twords(words[i])); } } else { ks.addList(words); @@ -56,7 +56,7 @@ void cmd_search(const strlist_t& words, int count) { #endif /* HAVE_THREADS */ std::cout << "Searching for " << count - << " keys containing: " << strjoin(ks.getList(), ",") + << " keys containing: " << eoskeygen::strjoin(ks.getList(), ",") #ifdef HAVE_THREADS << ", Using: " << option_num_threads << " threads" #endif /* HAVE_THREADS */ @@ -106,12 +106,12 @@ void usage(const char *name) { void cmd_benchmark(size_t num_keys) { - struct benchmark_result res; + struct eoskeygen::benchmark_result res; std::cout << "Benchmark: Generating " << num_keys << " keys" << std::endl; - benchmark(num_keys, &res); + eoskeygen::benchmark(num_keys, &res); std::cout << "Result: Took " << res.sec << " seconds, " << res.kps << " keys per second." << std::endl; @@ -125,9 +125,9 @@ int main(int argc, char **argv) { // No args, just print a key. if (argc <= 1) { - struct ec_keypair pair; - ec_generate_key(&pair); - wif_print_key(&pair); + struct eoskeygen::ec_keypair pair; + eoskeygen::ec_generate_key(&pair); + eoskeygen::wif_print_key(&pair); return 0; } @@ -139,7 +139,7 @@ int main(int argc, char **argv) { if (!strcmp(argv[p], "search")) { int count = 10; - strlist_t words; + eoskeygen::strlist_t words; while(p++ < argc - 1) { if (!strcmp(argv[p], "--l33t")) { @@ -167,7 +167,7 @@ int main(int argc, char **argv) { } // wordlist and count else if (words.size() < 1) { - words = strsplitwords(std::string(argv[p])); + words = eoskeygen::strsplitwords(std::string(argv[p])); if (p + 1 < argc) { count = atoi(argv[++p]); diff --git a/src/string.cpp b/src/string.cpp index bee3330..477311c 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -26,6 +26,8 @@ #include #include "string.h" +namespace eoskeygen { + strlist_t strsplitwords(const std::string& str, const std::string& delim) { strlist_t words = strsplit(str, delim); @@ -156,3 +158,5 @@ strlist_t l33twords(std::string str) { _l33t(list, str, 0); return list; } + +} // namespace eoskeygen diff --git a/src/string.h b/src/string.h index b3f6300..52313a0 100644 --- a/src/string.h +++ b/src/string.h @@ -21,12 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef STRING_H -#define STRING_H +#ifndef EOSIOKEYGEN_STRING_H +#define EOSIOKEYGEN_STRING_H #include #include +namespace eoskeygen { + typedef std::vector strlist_t; strlist_t strsplitwords(const std::string& str, const std::string& delim = ","); @@ -46,4 +48,6 @@ strlist_t& base58_strip(strlist_t& list); strlist_t l33twords(std::string str); -#endif /* STRING_H */ +} // namespace eoskeygen + +#endif /* EOSIOKEYGEN_STRING_H */