diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1809bbd..5fd9c8f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-20.04, ubuntu-18.04, macos-latest, windows-latest ] + os: [ ubuntu-20.04, ubuntu-22.04, macos-latest, windows-latest ] build: [ cli, cli-mt, cli-ansi, cli-ansi-mt, gui, gui-mt ] include: - build: cli @@ -34,7 +34,7 @@ jobs: runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v3 - name: OpenSSL OSX if: runner.os == 'macOS' @@ -46,17 +46,17 @@ jobs: shell: bash run: | sudo apt-get update - if [ "${{matrix.os}}" == "ubuntu-20.04" ]; then - sudo apt-get install qt5-default=5.12.8+dfsg-0ubuntu2.1 + if [ "${{matrix.os}}" == "ubuntu-22.04" ]; then + sudo apt-get install qtbase5-dev=5.15.3+dfsg-2ubuntu0.2 else : - sudo apt-get install qt5-default=5.9.5+dfsg-0ubuntu2.6 + sudo apt-get install qt5-default=5.12.8+dfsg-0ubuntu2.1 fi - name: Qt - Windows/Mac if: startsWith(matrix.build, 'gui') && runner.os != 'Linux' - uses: jurplel/install-qt-action@v2 + uses: jurplel/install-qt-action@v3 with: - version: '5.11.0' + version: '5.15.2' - name: Configure shell: bash diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index ec96375..30106ea 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -9,35 +9,36 @@ jobs: ubuntu: strategy: matrix: - os: [ ubuntu-18.04, ubuntu-20.04 ] + os: [ ubuntu-20.04, ubuntu-22.04 ] component: [ cli, gui ] include: + - os: ubuntu-20.04 + qt: qt5-default=5.12.8+dfsg-0ubuntu2.1 + - os: ubuntu-22.04 + qt: qtbase5-dev=5.15.3+dfsg-2ubuntu0.2 - component: cli build-opts: --cli --no-gui -t Release --pkg-type deb - component: gui build-opts: --no-cli --gui -t Release --pkg-type deb - name: ${{matrix.os}} (${{matrix.component}}) + name: DEB ${{matrix.os}} (${{matrix.component}}) runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v3 - name: Qt if: startsWith(matrix.component, 'gui') shell: bash run: | - if [ "${{matrix.os}}" == "ubuntu-20.04" ]; then - sudo apt-get install qt5-default=5.12.8+dfsg-0ubuntu2.1 - else : - sudo apt-get install qt5-default=5.9.5+dfsg-0ubuntu2.6 - fi + sudo apt-get update + sudo apt-get install ${{matrix.qt}} - name: Package id: package run: | ./build.sh ${{matrix.build-opts}} - FILE=$(ls build/eosio-*.deb | head -1) - echo "::set-output name=filename::$FILE" - echo "::set-output name=name::$(basename $FILE)" + FILE=$(ls build/*.deb | head -1) + echo "filename=$FILE" >> "$GITHUB_OUTPUT" + echo "name=$(basename $FILE)" >> "$GITHUB_OUTPUT" - name: Upload uses: actions/upload-release-asset@v1 @@ -49,6 +50,74 @@ jobs: asset_path: ${{ steps.package.outputs.filename }} asset_content_type: application/x-deb + # RPM package for redhat based systems. + rpm: + strategy: + matrix: + container: + - name: "fedora:36" + deps: + gcc-12.2.1-4.fc36.x86_64 + gcc-c++-12.2.1-4.fc36.x86_64 + cmake-3.26.3-1.fc36.x86_64 + openssl1.1-devel-1.1.1q-1.fc36.x86_64 + qt: qt5-qtbase-devel-5.15.3-1.fc36.x86_64 + + - name: "fedora:37" + deps: + gcc-12.3.1-1.fc37.x86_64 + gcc-c++-12.3.1-1.fc37.x86_64 + cmake-3.27.1-1.fc37.x86_64 + openssl-devel-3.0.9-1.fc37.x86_64 + qt: qt5-qtbase-devel-5.15.9-3.fc37.x86_64 + + - name: "fedora:38" + deps: + gcc-13.2.1-1.fc38.x86_64 + gcc-c++-13.2.1-1.fc38.x86_64 + cmake-3.26.2-1.fc38.x86_64 + openssl-devel-1:3.0.9-2.fc38.x86_64 + qt: qt5-qtbase-devel-5.15.10-5.fc38.x86_64 + component: [ cli, gui ] + include: + - component: cli + build-opts: --cli --no-gui -t Release --pkg-type rpm + - component: gui + build-opts: --no-cli --gui -t Release --pkg-type rpm + name: RPM ${{matrix.container.name}} (${{matrix.component}}) + runs-on: ubuntu-latest + container: ${{ matrix.container.name }} + steps: + - uses: actions/checkout@v3 + + - name: Dependancies + run: | + sudo dnf install -y util-linux rpmdevtools git ${{ matrix.container.deps }} + + - name: Qt + if: startsWith(matrix.component, 'gui') + shell: bash + run: | + sudo dnf install -y ${{ matrix.container.qt }} + + - name: Package + id: package + run: | + ./build.sh ${{matrix.build-opts}} + FILE=$(ls build/*.rpm | head -1) + echo "filename=$FILE" >> "$GITHUB_OUTPUT" + echo "name=$(basename $FILE)" >> "$GITHUB_OUTPUT" + + - name: Upload + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_name: ${{ steps.package.outputs.name }} + asset_path: ${{ steps.package.outputs.filename }} + asset_content_type: application/octet-stream + # Windows installer windows: strategy: @@ -62,10 +131,10 @@ jobs: name: Windows (${{matrix.arch}}) runs-on: windows-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v3 - name: Qt - uses: jurplel/install-qt-action@v2 + uses: jurplel/install-qt-action@v3 with: arch: ${{ matrix.qt-arch }} version: '5.11.0' @@ -78,8 +147,8 @@ jobs: run: | cmake --build build --config Release --target package $FILE=(ls build/*.exe) - echo "::set-output name=filename::$FILE" - echo "::set-output name=name::$(([io.fileinfo]"$FILE").basename).exe" + echo "filename=$FILE" >> "$GITHUB_OUTPUT" + echo "name=$(([io.fileinfo]"$FILE").basename)" >> "$GITHUB_OUTPUT" - name: Upload uses: actions/upload-release-asset@v1 diff --git a/CMakeLists.txt b/CMakeLists.txt index e24e38e..3074eea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,10 +4,10 @@ cmake_minimum_required(VERSION 3.15) # Project Info # -------------------------------- -project(eosio-keygen - VERSION 1.0.8 - DESCRIPTION "Keygenerator for EOSIO" - HOMEPAGE_URL "https://github.com/eosswedenorg/eosio-keygen" ) +project(antelope-keygen + VERSION 1.1.0 + DESCRIPTION "Keygenerator for Antelope based blockchain" + HOMEPAGE_URL "https://github.com/eosswedenorg/antelope-keygen" ) set( PROJECT_MAINTAINER "Henrik Hautakoski ") set( PROJECT_LICENSE_FILE ${CMAKE_CURRENT_LIST_DIR}/LICENSE ) @@ -71,27 +71,38 @@ set( CMAKE_CXX_EXTENSIONS OFF ) # c++ flags add_compile_options( - "$<$:-Wall;-Wconversion;-Wno-sign-conversion;-Wextra>" - "$<$:/W3;-D_CRT_SECURE_NO_WARNINGS=1>" + "$<$:-Wall;-Wconversion;-Wno-sign-conversion;-Wextra>" + "$<$:/W3;-D_CRT_SECURE_NO_WARNINGS=1>" # Debug - "$<$:$<$:-O0;-g>>" - "$<$:$<$:/Od;/Zi>>" + "$<$:$<$:-O0;-g>>" + "$<$:$<$:/Od;/Zi>>" # Release - "$<$:$<$:-O3>>" - "$<$:$<$:/O2>>" + "$<$:$<$:-O3>>" + "$<$:$<$:/O2>>" # MinSizeRel - "$<$:$<$:-Os>>" - "$<$:$<$:/O1>>" + "$<$:$<$:-Os>>" + "$<$:$<$:/O1>>" ) +add_link_options( + # Release + "$<$:$<$:-s>>" +) + +include(CheckPIESupported) +check_pie_supported() +#cmake_policy(SET CMP0083 NEW) + +set( CMAKE_POSITION_INDEPENDENT_CODE TRUE ) + # Project config file configure_file(config.hpp.in "${PROJECT_BINARY_DIR}/config.hpp" @ONLY) include_directories(${PROJECT_BINARY_DIR}) -# Bundle eosio-extras on windows. +# Bundle antelope-extras on windows. if (WIN32) include(extras) list(APPEND components extras ) diff --git a/LICENSE b/LICENSE index 81ee5da..635055a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019-2021 EOS Sw/eden +Copyright (c) 2019-2023 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 diff --git a/README.md b/README.md index e4ac358..5609aa3 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,24 @@ -![](https://github.com/eosswedenorg/eosio-keygen/workflows/CI/badge.svg) -[![GitHub release](https://img.shields.io/github/v/release/eosswedenorg/eosio-keygen?include_prereleases)](https://github.com/eosswedenorg/eosio-keygen/releases/latest) +[![CI Test](https://github.com/eosswedenorg/antelope-keygen/workflows/CI/badge.svg)](https://github.com/eosswedenorg/antelope-keygen/actions) +[![GitHub release](https://img.shields.io/github/v/release/eosswedenorg/antelope-keygen?include_prereleases)](https://github.com/eosswedenorg/antelope-keygen/releases/latest) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -# EOSIO Keygen +# Antelope Keygen -This program generates public and private keypair for [EOS](https://eos.io/) +This program generates public and private keypair for [Antelope IO](https://antelope.io) ## Compile -You will need `libeosio` and `cmake 3.15` or later to compile this project. +You will need `libantelope` and `cmake 3.15` or later to compile this project. `Qt 5.9.0` or later is required for the graphical program. ### Linux/MacOS -**NOTE:** Only Ubuntu 18.04 is officially supported. +**NOTE:** Only Ubuntu 20.04 and 22.04 and Fedoora 36 is officially supported. The project should compile fine on most versions/distros but it is only tested -and distributed for Ubuntu 18.04 by [Sw/eden](www.eossweden.org). +and distributed for those distros/versions by [Sw/eden](http://www.eossweden.org). #### Dependencies @@ -78,7 +78,7 @@ $ brew install cmake If you need a newer version of cmake, you can download the official `.dmg` file: [cmake-3.15.7-Darwin-x86_64.dmg](https://github.com/Kitware/CMake/releases/download/v3.15.7/cmake-3.15.7-Darwin-x86_64.dmg). or see https://cmake.org/download for other versions. -`libeosio` needs to be compiled and installed from source. [Go here](https://github.com/eosswedenorg/libeosio) +`libantelope` needs to be compiled and installed from source. [Go here](https://github.com/eosswedenorg/libantelope) **Qt (only for gui program)** @@ -150,31 +150,30 @@ These compile options are available: For more details about options run `./build.sh -l` or `mkdir build && cmake build -LA` -### libeosio +### libantelope -To speed up the build process, you can install `libeosio` +To speed up the build process, you can install `libantelope` #### Ubuntu -You can use [EOS Sweden's APT Repository](https://eosswedenorg.github.io/apt) like this: +You can use [Sw/eden's APT Repository](https://eosswedenorg.github.io/apt) like this: ```sh $ sudo apt-get install software-properties-common $ curl https://apt.eossweden.org/key 2> /dev/null | sudo apt-key add - $ sudo apt-add-repository -y 'deb [arch=amd64] https://apt.eossweden.org/main `lsb_release -cs` stable' -$ sudo apt-get install libeosio-dev +$ sudo apt-get install libantelope-dev ``` - -or manually via `.deb` file from [github](https://github.com/eosswedenorg/libeosio/releases) +or manually via `.deb` file from [github](https://github.com/eosswedenorg/libantelope/releases) ```sh $ wget -$ sudo apt install ./libeosio-dev-.deb +$ sudo apt install ./libantelope-dev-.deb ``` #### Other -Consult [libeosio's github](https://github.com/eosswedenorg/libeosio) +Consult [libantelope's github](https://github.com/eosswedenorg/libantelope) ## Install @@ -196,13 +195,12 @@ Run `sudo ./uninstall.sh` or remove the files listed in `build/install_manifest. ## Security notice -Keys are generated by `OpenSSL`'s `EC_KEY_generate_key` function. The program will -never expose your keys to anything but the computers memory and output of the -program. You are free to inspect the source code and compile yourself to verify. +Keys are generated using [libantelope](https://github.com/eosswedenorg/libantelope) +while the library does not claim to guarantee cryptographically secure keys. it +relies on widly used open source cryptographic libraries (OpenSSL, libsecp256k1). -However, use this at your own risk. we cannot guarantee that the keys are -cryptographically secure as this depends on OpenSSL's implementation (alto it is -widely used and should be safe) +Use at your own risk. The author and [Sw/eden](https://eossweden.org/) does not take responsability +for any damage caused by keys generated by the program. Please read the `LICENSE` file. diff --git a/build.sh b/build.sh index a58395c..7a6d1d7 100755 --- a/build.sh +++ b/build.sh @@ -11,6 +11,7 @@ options=$(getopt -n "${0##*/}" -o "lht:" -l "help,cli,no-cli,gui,no-gui,type:,li eval set -- "$options" +TARGET="all" ONLY_CONFIG=0 ARGS="" BUILD_ARGS="--clean-first" @@ -28,7 +29,7 @@ while true; do ;; --pkg-type) shift - [[ ! "$1" =~ ^(nsis|deb|zip|tgz)$ ]] && { + [[ ! "$1" =~ ^(nsis|deb|rpm|zip|tgz)$ ]] && { echo "Incorrect package type '$1' provided" usage } diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 64528ce..ff3512f 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.15) # Project Info # -------------------------------- -project(eosio-keygen +project(antelope-keygen VERSION ${CMAKE_PROJECT_VERSION} LANGUAGES CXX) @@ -57,7 +57,7 @@ install (FILES ${LIBCLI11_LICENSE} DESTINATION ${CMAKE_INSTALL_SHAREDIR} COMPONENT cli RENAME LICENSE.libcli11) - + # Documentation @@ -67,7 +67,9 @@ install(FILES ${PROJECT_BINARY_DIR}/README.cli.md COMPONENT cli) if (UNIX) - configure_file( docs/eosio-keygen.1.in ${PROJECT_BINARY_DIR}/man1/eosio-keygen.1 ) + configure_file( docs/antelope-keygen.1.in ${PROJECT_BINARY_DIR}/man1/antelope-keygen.1 ) + configure_file( docs/antelope-keygen-search.1.in ${PROJECT_BINARY_DIR}/man1/antelope-keygen-search.1 ) + configure_file( docs/antelope-keygen-benchmark.1.in ${PROJECT_BINARY_DIR}/man1/antelope-keygen-benchmark.1 ) install(DIRECTORY ${PROJECT_BINARY_DIR}/man1 DESTINATION ${CMAKE_INSTALL_MANDIR} diff --git a/cli/docs/README.md.in b/cli/docs/README.md.in index d387386..17768e5 100644 --- a/cli/docs/README.md.in +++ b/cli/docs/README.md.in @@ -1,9 +1,9 @@ -# eosio-keygen (cli) +# @PROJECT_NAME@ (cli) -Generate public and private keypair for [EOSIO](https://eos.io/) +Generate public and private keypair for [Antelope IO](https://antelope.io) -Source code is available at [github.com](https://github.com/eosswedenorg/eosio-keygen) +Source code is available at [github.com](https://github.com/eosswedenorg/antelope-keygen) ## Synopsis @@ -12,14 +12,14 @@ Source code is available at [github.com](https://github.com/eosswedenorg/eosio-k @PROJECT_NAME@ [-v] -@PROJECT_NAME@ search [-m] [--l33t] [--threads=] [--dict= ...] [--lang= ...] word_list [count] +@PROJECT_NAME@ search [-m] [--l33t] [--threads ] [--dict ...] [--lang ...] word_list [count] @PROJECT_NAME@ benchmark [num_keys] ``` ## Description -Output one EOSIO key pair if no arguments are given. +Output one Antelope key pair if no arguments are given. Options and subcommands are as follows: ### General flags @@ -32,7 +32,7 @@ Options and subcommands are as follows: ### search command -`eosio-keygen search [-m] [--l33t] [--threads=] [--dict= ...] [--lang= ...] word_list [count]` +`@PROJECT_NAME@ search [-m] [--l33t] [--threads ] [--dict ...] [--lang ...] word_list [count]` performs a search, finding `count` public keys containing one or more words from `word_list` (separated with ','). @@ -48,17 +48,17 @@ Monochrome, disables all color output. Takes each word in `word_list` and find all l33tspeak combinations of that word and uses the new list for the search. -#### --threads=num +#### --threads num Use `num` of parallel threads for searching. Default is what the operating system recommends. -#### --dict=file +#### --dict file Use words found in `file` (separated by newline) to highlight words in the keys found (note that the words in this file are not used for search. only for highlight output). There can be more then one `--dict` flag. In that case contents of all files are merged into one dictionary. -#### --lang=value +#### --lang value Same as `--dict` but will use `value` to find a file in `@CMAKE_INSTALL_FULL_DATADIR@/@CMAKE_PROJECT_NAME@/dict`. There can be more then one `--lang` flag. In that case contents of all files are merged into one dictionary. @@ -70,7 +70,7 @@ Number of keys to search for (default is 10) ### benchmark command -`eosio-keygen benchmark [num_keys]` +`@PROJECT_NAME@ benchmark [num_keys]` performs a benchmark test, generating `num_keys` keys and measuring the time. @@ -83,13 +83,12 @@ Number of keys to search for (default is 10) ## Security notice -Keys are generated by `OpenSSL`'s `EC_KEY_generate_key` function. The program will -never expose your keys to anything but the computers memory and output of the -program. You are free to inspect the source code and compile yourself to verify. +Keys are generated using [libantelope](https://github.com/eosswedenorg/libantelope) +while the library does not claim to guarantee cryptographically secure keys. it +relies on widly used open source cryptographic libraries (OpenSSL, libsecp256k1). -However, use this at your own risk. we cannot guarantee that the keys are -cryptographically secure as this depends on OpenSSL's implementation (alto it is -widely used and should be safe) +Use at your own risk. The author and [Sw/eden](https://eossweden.org/) does not take responsability +for any damage caused by keys generated by the program. Please read the `LICENSE.cli` file. diff --git a/cli/docs/antelope-keygen-benchmark.1.in b/cli/docs/antelope-keygen-benchmark.1.in new file mode 100644 index 0000000..cd16012 --- /dev/null +++ b/cli/docs/antelope-keygen-benchmark.1.in @@ -0,0 +1,67 @@ +.TH @PROJECT_NAME@-benchmark 1 "April, 2023" "@PROJECT_NAME@-benchmark @PROJECT_VERSION@" + +.SH NAME +@PROJECT_NAME@ benchmark - Benchmark the performance of the @PROJECT_NAME@ key generator. + +.SH SYNOPSIS + +.SY @PROJECT_NAME@ +benchmark +.OP \-h|--help +.YS + +.SY @PROJECT_NAME@ +benchmark +.OP num_keys +.YS + +.SH DESCRIPTION + +performs a benchmark test, generating \fInum_keys\fR (default 1000) keys and measuring the time. + +.SH SECURITY NOTICE + +.PP +Keys are generated using +.UR https://github.com/eosswedenorg/libantelope +libantelope +.UE . +while the library does not claim to guarantee cryptographically secure keys. it +relies on widly used open source cryptographic libraries (OpenSSL, libsecp256k1). + +.PP +Use at your own risk. The author and +.UR https://eossweden.org +Sw/eden +.UE +does not take responsability for any damage caused by keys generated by the program. + +.P +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +.br +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +.br +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +.br +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +.br +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +.br +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +.SH BUGS + +Report bugs to +.UR https://github.com/eosswedenorg/eosio-keygen/issues +Github +.UE . Thank you. + +.SH AUTHOR + +.MT henrik@eossweden.org +Henrik Hautakoski +.ME + +.UR https://eossweden.org +EOS Sw/eden +.UE \ No newline at end of file diff --git a/cli/docs/antelope-keygen-search.1.in b/cli/docs/antelope-keygen-search.1.in new file mode 100644 index 0000000..1ab0af3 --- /dev/null +++ b/cli/docs/antelope-keygen-search.1.in @@ -0,0 +1,112 @@ +.TH @PROJECT_NAME@-search 1 "April, 2023" "@PROJECT_NAME@-search @PROJECT_VERSION@" + +.SH NAME +@PROJECT_NAME@ search - Search after +.UR https://antelope.io +Antelope IO +.UE +vanity keys. + +.SH SYNOPSIS + +.SY @PROJECT_NAME@ +search +.OP \-h|--help +.YS + +.SY @PROJECT_NAME@ +search +.OP -m +.OP \--l33t +.OP \--threads +.OP \--dict ... +.OP \--lang ... +.B word_list +.OP count +.YS + +.SH DESCRIPTION + +.PP +performs a search, finding \fIcount\fR public keys containing one or more words from +\fIword_list\fR (separated with ','). +.PP +Instead of a list it is possible to specify a file with words (separated with newline \fB'\\n'\fR) using +\fIfile: and find all l33tspeak combinations of that word and uses the new list for the search. +.TP +\fB\-\-threads\fR \fInum\fR +Use <\fInum\fR> of parallel threads for searching. Default is what the operating system recommends. +.TP +\fB\-\-dict\fR \fIfile\fR +Use words found in \fIfile\fR (separated by newline) to highlight words in the keys found. +.br +There can be more then one \fB\-\-dict\fR flag. +In that case contents of all files are merged into one dictionary. +.br +\fBnote:\fR the words in this file are not used for search. only for highlight output. +.TP +\fB\-\-lang\fR \fIvalue\fR +Same as \fB\-\-dict\fR but will use \fIvalue\fR to find a file in +\fB@CMAKE_INSTALL_FULL_DATADIR@/@CMAKE_PROJECT_NAME@/dict\fR. +.br +There can be more then one \fB\-\-lang\fR flag. In that case contents of all files are merged into one dictionary. +.TP +\fBcount\fR +Number of keys to search for (default is 10) + +.SH SECURITY NOTICE + +.PP +Keys are generated using +.UR https://github.com/eosswedenorg/libantelope +libantelope +.UE . +while the library does not claim to guarantee cryptographically secure keys. it +relies on widly used open source cryptographic libraries (OpenSSL, libsecp256k1). + +.PP +Use at your own risk. The author and +.UR https://eossweden.org +Sw/eden +.UE +does not take responsability for any damage caused by keys generated by the program. + +.P +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +.br +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +.br +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +.br +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +.br +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +.br +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +.SH BUGS + +Report bugs to +.UR https://github.com/eosswedenorg/eosio-keygen/issues +Github +.UE . Thank you. + +.SH AUTHOR + +.MT henrik@eossweden.org +Henrik Hautakoski +.ME + +.UR https://eossweden.org +EOS Sw/eden +.UE \ No newline at end of file diff --git a/cli/docs/antelope-keygen.1.in b/cli/docs/antelope-keygen.1.in new file mode 100644 index 0000000..16273cc --- /dev/null +++ b/cli/docs/antelope-keygen.1.in @@ -0,0 +1,106 @@ +.TH @PROJECT_NAME@ 1 "April, 2023" "@PROJECT_NAME@ @PROJECT_VERSION@" + +.SH NAME +@PROJECT_NAME@ - Generate public and private keypair for +.UR https://antelope.io +Antelope IO +.UE . + +.SH SYNOPSIS + +.SY @PROJECT_NAME@ +.OP \-h|--help +.YS + +.SY @PROJECT_NAME@ +.OP \-v +.YS + +.SY @PROJECT_NAME@ +.OP \--format +.YS + +.SH SUBCOMMANDS + +.PP +\fB@PROJECT_NAME@ search\fR +.RS 4 +Search after +.UR https://antelope.io +Antelope IO +.UE +vanity keys. +.br +see \fB@PROJECT_NAME@-search\fR(1) +.RE + +.PP +\fB@PROJECT_NAME@ benchmark\fR +.RS 4 +Benchmark the performance of the @PROJECT_NAME@ key generator. +.br +see \fB@PROJECT_NAME@-benchmark\fR(1) +.RE + +.SH DESCRIPTION +.PP +Output one Antelope key pair if no arguments are given +.PP +Options and subcommands are as follows: + +.TP +\fB\-h\fR, \fB\-\-help\fR +Shows this help text. +.TP +\fB\-v\fR +Shows version. +.TP +\fB\-\-format\fR \fR\fI\,value\/\fR +What keyformat to use, valid values are: \fIK1\fR, \fIlegacy\fR, \fIfio\fR + +.SH SECURITY NOTICE + +.PP +Keys are generated using +.UR https://github.com/eosswedenorg/libantelope +libantelope +.UE . +while the library does not claim to guarantee cryptographically secure keys. it +relies on widly used open source cryptographic libraries (OpenSSL, libsecp256k1). + +.PP +Use at your own risk. The author and +.UR https://eossweden.org +Sw/eden +.UE +does not take responsability for any damage caused by keys generated by the program. + +.P +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +.br +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +.br +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +.br +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +.br +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +.br +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +.SH BUGS + +Report bugs to +.UR https://github.com/eosswedenorg/eosio-keygen/issues +Github +.UE . Thank you. + +.SH AUTHOR + +.MT henrik@eossweden.org +Henrik Hautakoski +.ME + +.UR https://eossweden.org +EOS Sw/eden +.UE diff --git a/cli/docs/eosio-keygen.1.in b/cli/docs/eosio-keygen.1.in deleted file mode 100644 index c7ef574..0000000 --- a/cli/docs/eosio-keygen.1.in +++ /dev/null @@ -1,153 +0,0 @@ -.TH @PROJECT_NAME@ 1 "January, 2020" "@PROJECT_NAME@ @PROJECT_VERSION@" - -.SH NAME -@PROJECT_NAME@ - Generate public and private keypair for -.UR https://eos.io/ -EOS -.UE . - -.SH SYNOPSIS - -.SY @PROJECT_NAME@ -.OP \-h|--help -.YS - -.SY @PROJECT_NAME@ -.OP \-v -.YS - -.SY @PROJECT_NAME@ -search -.OP -m -.OP \--l33t -.OP \--threads= -.OP \--dict= ... -.OP \--lang= ... -.B word_list -.OP count -.YS - -.SY @PROJECT_NAME@ -benchmark -.OP num_keys -.YS - -.SH DESCRIPTION -.P -Output one EOSIO key pair if no arguments are given -.P -Options and subcommands are as follows: - -.TP 15 -.B -h, --help -Shows this help text. -.TP 15 -.B -v -Shows version. -.TP 15 -.B search -performs a search, finding -.I -public keys containing one or more words from -.I -(separated with ','). -Instead of a list it is possible to specify a file with words (separated with newline '\\n') using -.I file: -.RS 16 -Search specific options: -.RS 2 -.TP 20 -.B -m -Monochrome, disables all color output. -.TP 20 -.B --l33t -Takes each word in -.I -and find all l33tspeak combinations of that word and uses the new list for the search. -.TP 20 -.B --threads= -Use -.I -of parallel threads for searching. Default is what the operating system recommends. -.TP 20 -.B --dict= -Use words found in -.I -(separated by newline) to highlight words in the keys found (note that the words in this - file are not used for search. only for highlight output). There can be more then one -.B --dict -flag. In that case contents of all files are merged into one dictionary. -.TP 20 -.B --lang= -Same as -.B --dict -but will use -.I -to find a file in -.B @CMAKE_INSTALL_FULL_DATADIR@/@CMAKE_PROJECT_NAME@/dict. -There can be more then one -.B --lang -flag. In that case contents of all files are merged into one dictionary. -.TP 20 -.B count -Number of keys to search for (default is 10) -.RE 1 -.TP 15 -.B benchmark -performs a benchmark test, generating -.I -keys and measuring the time. -.PP -.RS 16 -Benchmark specific options: -.RS 2 -.TP 15 -.B num_keys -Number of keys to search for (default is 10) -.RE 1 - - -.SH SECURITY NOTICE - -Keys are generated by OpenSSL\'s -.B EC_KEY_generate_key -function. The program will -never expose your keys to anything but the computers memory and output of the\ -program. You are free to inspect the source code and compile yourself to verify. -.P -However, use this at your own risk. we cannot guarantee that the keys are\ -cryptographically secure as this depends on OpenSSL's implementation (alto it is\ -widely used and should be safe) -.P -Please read the -.I LICENSE -file. -.P -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -.br -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -.br -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -.br -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -.br -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -.br -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -.SH BUGS - -Report bugs to -.UR https://github.com/eosswedenorg/eosio-keygen/issues -Github -.UE . Thank you. - -.SH AUTHOR - -.MT henrik@eossweden.org -Henrik Hautakoski -.ME - -.UR https://eossweden.org -EOS Sw/eden -.UE diff --git a/cli/src/benchmark.cpp b/cli/src/benchmark.cpp index 9c65375..01a8bbf 100644 --- a/cli/src/benchmark.cpp +++ b/cli/src/benchmark.cpp @@ -22,16 +22,16 @@ * SOFTWARE. */ #include -#include +#include #include "benchmark.hpp" -namespace eoskeygen { +namespace antelopekeygen { std::chrono::duration _run_benchmark(size_t num_keys) { auto start = std::chrono::steady_clock::now(); for(size_t i = 0; i < num_keys; i++) { - struct libeosio::ec_keypair k; - libeosio::ec_generate_key(&k); + struct libantelope::ec_keypair k; + libantelope::ec_generate_key(&k); } return std::chrono::steady_clock::now() - start; } @@ -47,4 +47,4 @@ void benchmark(size_t num_keys, struct benchmark_result* res) { res->kps = static_cast(num_keys) / res->sec; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/cli/src/benchmark.hpp b/cli/src/benchmark.hpp index 9300cc3..180872e 100644 --- a/cli/src/benchmark.hpp +++ b/cli/src/benchmark.hpp @@ -26,7 +26,7 @@ #include -namespace eoskeygen { +namespace antelopekeygen { struct benchmark_result { float sec; // elapsed seconds. @@ -35,6 +35,6 @@ struct benchmark_result { void benchmark(size_t num_keys, struct benchmark_result* res); -} // namespace eoskeygen +} // namespace antelopekeygen #endif /* EOSIOKEYGEN_BENCHMARK_H */ diff --git a/cli/src/cli_key_search_result.cpp b/cli/src/cli_key_search_result.cpp index fa3d009..d70b7cb 100644 --- a/cli/src/cli_key_search_result.cpp +++ b/cli/src/cli_key_search_result.cpp @@ -23,12 +23,12 @@ */ #include #include -#include +#include #include #include "console.hpp" #include "cli_key_search_result.hpp" -namespace eoskeygen { +namespace antelopekeygen { static size_t highlight(console::Color color, const std::string& str, size_t pos, size_t len) { @@ -38,22 +38,23 @@ static size_t highlight(console::Color color, const std::string& str, size_t pos return len; } -CliKeySearchResult::CliKeySearchResult(const Dictionary& dict, const std::string& prefix) : +CliKeySearchResult::CliKeySearchResult(const Dictionary& dict, const libantelope::wif_codec_t& codec) : m_dict (dict), -m_prefix (prefix) +m_codec (codec) { } -void CliKeySearchResult::onResult(const struct libeosio::ec_keypair* key, const struct KeySearch::result& result) { +void CliKeySearchResult::onResult(const struct libantelope::ec_keypair* key, const struct KeySearch::result& result) { - std::string pub = libeosio::wif_pub_encode(key->pub); + std::string pub = libantelope::wif_pub_encode(key->pub, m_codec.pub); Dictionary::search_result_t dict_res = m_dict.search(pub); + int pub_prefix_len = (int) m_codec.pub.length(); std::cout << "----" << std::endl; std::cout << "Found: " << pub.substr(result.pos, result.len) << std::endl; - std::cout << "Public: " << m_prefix.substr(0, 3); - for(size_t i = 3; i < pub.length(); ) { + std::cout << "Public: " << m_codec.pub; + for(size_t i = pub_prefix_len; i < pub.length(); ) { if (i == result.pos) { i += highlight(console::red, pub, result.pos, result.len); @@ -70,7 +71,7 @@ void CliKeySearchResult::onResult(const struct libeosio::ec_keypair* key, const } std::cout << std::endl - << "Private: " << libeosio::wif_priv_encode(key->secret) << std::endl; + << "Private: " << libantelope::wif_priv_encode(key->secret, m_codec.pvt) << std::endl; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/cli/src/cli_key_search_result.hpp b/cli/src/cli_key_search_result.hpp index 4f1e47b..1428477 100644 --- a/cli/src/cli_key_search_result.hpp +++ b/cli/src/cli_key_search_result.hpp @@ -25,29 +25,30 @@ #define EOSIOKEYGEN_KEY_SEARCH_HELPERS_H #include -#include +#include +#include #include #include #include -namespace eoskeygen { +namespace antelopekeygen { class Dictionary; class CliKeySearchResult : public IKeySearchResult { public: - CliKeySearchResult(const Dictionary& dict, const std::string& prefix); + CliKeySearchResult(const Dictionary& dict, const libantelope::wif_codec_t& codec); - virtual void onResult(const struct libeosio::ec_keypair* key, const struct KeySearch::result& result); + virtual void onResult(const struct libantelope::ec_keypair* key, const struct KeySearch::result& result); protected : const Dictionary& m_dict; - std::string m_prefix; + libantelope::wif_codec_t m_codec; }; -} // namespace eoskeygen +} // namespace antelopekeygen #endif /* EOSIOKEYGEN_KEY_SEARCH_HELPERS_H */ diff --git a/cli/src/console.cpp b/cli/src/console.cpp index ebcfe1f..9b3529d 100644 --- a/cli/src/console.cpp +++ b/cli/src/console.cpp @@ -25,7 +25,7 @@ #include "isatty.hpp" #include "console.hpp" -namespace eoskeygen { namespace console { +namespace antelopekeygen { namespace console { bool disable_color = false; @@ -45,4 +45,4 @@ bool isColorsSupported(const std::ostream& os) { return disable_color == false && isatty(fd); } -} } // namespace eoskeygen::console +} } // namespace antelopekeygen::console diff --git a/cli/src/console.hpp b/cli/src/console.hpp index f847f75..0dd2c46 100644 --- a/cli/src/console.hpp +++ b/cli/src/console.hpp @@ -26,7 +26,7 @@ #include -namespace eoskeygen { +namespace antelopekeygen { namespace console { @@ -86,6 +86,6 @@ namespace console { } // namespace console -} // namespace eoskeygen +} // namespace antelopekeygen #endif /* EOSIOKEYGEN_CONSOLE_H */ diff --git a/cli/src/console_ansi.cpp b/cli/src/console_ansi.cpp index 5cf5850..f49006c 100644 --- a/cli/src/console_ansi.cpp +++ b/cli/src/console_ansi.cpp @@ -24,7 +24,7 @@ #include #include "console.hpp" -namespace eoskeygen { +namespace antelopekeygen { namespace console { @@ -80,4 +80,4 @@ std::ostream& operator<<(std::ostream& os, const fg& obj) { } // namespace console -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/cli/src/console_win32.cpp b/cli/src/console_win32.cpp index 3b13f5a..ec3b1b1 100644 --- a/cli/src/console_win32.cpp +++ b/cli/src/console_win32.cpp @@ -25,7 +25,7 @@ #include #include "console.hpp" -namespace eoskeygen { +namespace antelopekeygen { // WinAPI colors #define FG_BLACK 0 @@ -105,4 +105,4 @@ std::ostream& operator<<(std::ostream& os, const fg& obj) { } // namespace console -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/cli/src/isatty.cpp b/cli/src/isatty.cpp index ea03397..75d0778 100644 --- a/cli/src/isatty.cpp +++ b/cli/src/isatty.cpp @@ -31,7 +31,7 @@ #endif #include "isatty.hpp" -namespace eoskeygen { +namespace antelopekeygen { bool isatty(int fd) { return ::_isatty(fd); @@ -42,4 +42,4 @@ bool isatty(FILE* fd) { return fd ? isatty(_fileno(fd)) : false; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/cli/src/isatty.hpp b/cli/src/isatty.hpp index 0b724af..54d1e00 100644 --- a/cli/src/isatty.hpp +++ b/cli/src/isatty.hpp @@ -26,12 +26,12 @@ #include -namespace eoskeygen { +namespace antelopekeygen { bool isatty(int fd); bool isatty(FILE* fd); -} // namespace eoskeygen +} // namespace antelopekeygen #endif /* EOSIOKEYGEN_CORE_ISATTY_H */ diff --git a/cli/src/main.cpp b/cli/src/main.cpp index ebf8789..0b8ca7a 100644 --- a/cli/src/main.cpp +++ b/cli/src/main.cpp @@ -24,9 +24,9 @@ #include #include #include -#include -#include -#include +#include +#include +#include #include #include #include @@ -40,7 +40,7 @@ // Command line options. bool option_l33t = false; -std::string key_prefix = "EOS"; +libantelope::wif_codec_t key_codec; #ifdef EOSIOKEYGEN_HAVE_THREADS size_t option_num_threads; @@ -62,15 +62,16 @@ public: } }; -int cmd_search(const eoskeygen::strlist_t& words, const eoskeygen::Dictionary& dict, int count) { +int cmd_search(const antelopekeygen::strlist_t& words, const antelopekeygen::Dictionary& dict, int count) { - eoskeygen::KeySearch ks; - eoskeygen::CliKeySearchResult rs(dict, key_prefix); + antelopekeygen::KeySearch ks; + antelopekeygen::CliKeySearchResult rs(dict, key_codec); + ks.setPrefix(key_codec.pub); ks.setCallback(&rs); for(auto it = words.begin(); it != words.end(); it++) { - size_t p = libeosio::is_base58(*it); + size_t p = libantelope::is_base58(*it); if (p != std::string::npos) { std::cerr << "The word '" << *it << "' contains an invalid non-base58 character '" @@ -81,7 +82,7 @@ int cmd_search(const eoskeygen::strlist_t& words, const eoskeygen::Dictionary& d if (option_l33t) { for(std::size_t i = 0; i < words.size(); i++) { - ks.addList(eoskeygen::l33twords(words[i])); + ks.addList(antelopekeygen::l33twords(words[i])); } } else { ks.addList(words); @@ -92,7 +93,7 @@ int cmd_search(const eoskeygen::strlist_t& words, const eoskeygen::Dictionary& d #endif /* EOSIOKEYGEN_HAVE_THREADS */ std::cout << "Searching for " << count - << " keys containing: " << eoskeygen::strlist::join(ks.getList(), ",") + << " keys containing: " << antelopekeygen::strlist::join(ks.getList(), ",") #ifdef EOSIOKEYGEN_HAVE_THREADS << ", Using: " << ks.getThreadCount() << " threads" #endif /* EOSIOKEYGEN_HAVE_THREADS */ @@ -105,12 +106,12 @@ int cmd_search(const eoskeygen::strlist_t& words, const eoskeygen::Dictionary& d void cmd_benchmark(size_t num_keys) { - struct eoskeygen::benchmark_result res; + struct antelopekeygen::benchmark_result res; std::cout << "Benchmark: Generating " << num_keys << " keys" << std::endl; - eoskeygen::benchmark(num_keys, &res); + antelopekeygen::benchmark(num_keys, &res); std::cout << "Result: Took " << res.sec << " seconds, " << res.kps << " keys per second." << std::endl; @@ -118,15 +119,19 @@ void cmd_benchmark(size_t num_keys) { int main(int argc, char **argv) { - CLI::App cmd("Keygenerator for EOSIO", PROGRAM_NAME); + CLI::App cmd("Keygenerator for Antelope based blockchains", PROGRAM_NAME); std::vector dict_list; std::vector lang_list; std::string search_words; + std::string key_format; int search_count; size_t bench_count; + int rc = 0; + + libantelope::ec_init(); CLI::Option* version = cmd.add_flag("-v,--version", "Show version"); - CLI::Option* fio = cmd.add_flag("--fio", "Generate keys from FIO network instead of EOSIO."); + cmd.add_option("--format", key_format, "valid values: K1, fio, legacy")->default_val("K1"); // Search CLI::App* search_cmd = cmd.add_subcommand("search", @@ -141,7 +146,7 @@ int main(int argc, char **argv) { search_cmd->add_option("--threads", option_num_threads, "Use of parallel threads for searching.\n" "Default is what the operating system recomends.") - ->default_val(eoskeygen::KeySearch::max_threads()); + ->default_val(antelopekeygen::KeySearch::max_threads()); #endif /* EOSIOKEYGEN_HAVE_THREADS */ @@ -165,23 +170,30 @@ int main(int argc, char **argv) { if (*version) { std::cout << PROGRAM_NAME << ": v" << PROGRAM_VERSION << std::endl; - return 0; + goto end; } - if (*fio) { - key_prefix = "FIO"; + if (key_format == "fio") { + key_codec = libantelope::wif_create_legacy_codec("FIO"); + } else if (key_format == "legacy") { + key_codec = libantelope::WIF_CODEC_LEG; + } else if (key_format == "K1") { + key_codec = libantelope::WIF_CODEC_K1; + } else { + std::cerr << "invalid key format: " << key_format << std::endl; + goto end; } if (search_cmd->parsed()) { - eoskeygen::strlist_t words; - eoskeygen::Dictionary dict; + antelopekeygen::strlist_t words; + antelopekeygen::Dictionary dict; if (*monocrome) { - eoskeygen::console::disable_color = true; + antelopekeygen::console::disable_color = true; } for (auto item : dict_list) { - eoskeygen::Dictionary d; + antelopekeygen::Dictionary d; if (d.loadFromFile(item)) { dict.add(d); @@ -191,7 +203,7 @@ int main(int argc, char **argv) { } for (auto item : lang_list) { - eoskeygen::Dictionary d; + antelopekeygen::Dictionary d; std::string filename(CONFIG_SHARE_FULL_PATH "/dicts/" + item); if (d.loadFromFile(filename)) { @@ -203,31 +215,33 @@ int main(int argc, char **argv) { if (search_words.rfind("file:", 0) == 0) { std::string filename = search_words.substr(5); - if (!eoskeygen::readLines(filename, words)) { + if (!antelopekeygen::readLines(filename, words)) { std::cerr << "Could not read file: " << filename << std::endl; - return 0; + goto end; } if (words.size() < 1) { std::cerr << filename << " did not contain any words" << std::endl; - return 0; + goto end; } } else { - words = eoskeygen::strlist::splitw(search_words); + words = antelopekeygen::strlist::splitw(search_words); } - return cmd_search(words, dict, search_count); + rc = cmd_search(words, dict, search_count); + goto end; } else if (bench_cmd->parsed()) { cmd_benchmark(bench_count); } // No subcommand given, just generate and print a keypair. else { - struct libeosio::ec_keypair pair; - libeosio::ec_generate_key(&pair); - libeosio::wif_print_key(&pair, key_prefix); - return 0; + struct libantelope::ec_keypair pair; + libantelope::ec_generate_key(&pair); + libantelope::wif_print_key(&pair, key_codec); + goto end; } - return 0; +end: libantelope::ec_shutdown(); + return rc; } diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake index 9dd5e7a..8f55ba5 100644 --- a/cmake/CPackConfig.cmake +++ b/cmake/CPackConfig.cmake @@ -97,6 +97,19 @@ set( CPACK_DEBIAN_PACKAGE_HOMEPAGE "${PROJECT_HOMEPAGE_URL}" ) set( CPACK_DEB_COMPONENT_INSTALL ON ) +# RPM + +# Always build components for rpm packages +set( CPACK_RPM_COMPONENT_INSTALL ON ) + +# Same as with DEB package. +set( CPACK_RPM_PACKAGE_HOMEPAGE "${PROJECT_HOMEPAGE_URL}" ) + +set( CPACK_RPM_PACKAGE_RELEASE_DIST ON ) +set( CPACK_RPM_PACKAGE_RELEASE "1" CACHE STRING "RPM package release version" ) +set( CPACK_RPM_PACKAGE_LICENSE "MIT" ) +set( CPACK_RPM_FILE_NAME "RPM-DEFAULT" ) + # -------------------------------- # Generator default # -------------------------------- diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index e268a16..eb3e3a7 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -28,7 +28,7 @@ set( COMMON_SOURCE if (USE_THREADS) find_package(Threads) if (Threads_FOUND) - set( EOSIOKEYGEN_HAVE_THREADS TRUE ) + set( ANTELOPEKEYGEN_HAVE_THREADS TRUE ) set( COMMON_SOURCE ${COMMON_SOURCE} src/key_search_mt.cpp ) endif (Threads_FOUND) endif (USE_THREADS) @@ -40,10 +40,10 @@ add_library( ${COMMON_NAME} STATIC ${COMMON_SOURCE} ) target_include_directories( ${COMMON_NAME} PUBLIC include ) -# Link with libeosio and threads library. -include( libeosio ) +# Link with libantelope and threads library. +include( libantelope ) target_link_libraries( ${COMMON_NAME} PUBLIC - libeosio + libantelope ${CMAKE_THREAD_LIBS_INIT} ) diff --git a/common/cmake/libantelope.cmake b/common/cmake/libantelope.cmake new file mode 100644 index 0000000..85a0ccd --- /dev/null +++ b/common/cmake/libantelope.cmake @@ -0,0 +1,53 @@ +# -------------------------------- +# Variables +# -------------------------------- +set( LIBANTELOPE_GIT_URL "https://github.com/eosswedenorg/libantelope.git" ) +set( LIBANTELOPE_WANTED_VERSION v0.2.2 ) + +# -------------------------------- +# Macros +# -------------------------------- +macro(fromGit tag) + + message ("Using libantelope from: ${LIBANTELOPE_GIT_URL}@${tag}") + + include(FetchContent) + FetchContent_Declare(libantelope + GIT_REPOSITORY ${LIBANTELOPE_GIT_URL} + GIT_TAG ${tag} + SOURCE_DIR ${DOWNLOAD_CACHE_DIR}/libeosio/src + STAMP_DIR ${DOWNLOAD_CACHE_DIR}/libeosio/stamp + ) + + FetchContent_GetProperties(libantelope) + if (NOT libantelope_POPULATED) + FetchContent_Populate(libantelope) + add_subdirectory(${libantelope_SOURCE_DIR} ${libantelope_BINARY_DIR} EXCLUDE_FROM_ALL) + endif() +endmacro() + +macro(buildLocal src) + message ("Using local libantelope at: ${src}") + add_subdirectory(${src} ${src}/build EXCLUDE_FROM_ALL) +endmacro() + +# If we have a local libantelope +if (LIBANTELOPE_SOURCE_DIR) + buildLocal( ${LIBANTELOPE_SOURCE_DIR} ) +else() + + # Check if version is in fact a version. + if (LIBANTELOPE_WANTED_VERSION MATCHES "^[0-9]+(.[0-9]+)?(.[0-9]+)(-[a-zA-Z0-9]+)?$") + # Try finding the package on the system. + find_package(libantelope ${LIBANTELOPE_WANTED_VERSION} QUIET) + if (libantelope_FOUND) + message ("Using libeosio in: ${libantelope_DIR}") + # Not found, download from git. + else() + fromGit( v${LIBANTELOPE_WANTED_VERSION} ) + endif() + # Assume version contains a git branch. + else() + fromGit( ${LIBANTELOPE_WANTED_VERSION} ) + endif() +endif() diff --git a/common/cmake/libeosio.cmake b/common/cmake/libeosio.cmake deleted file mode 100644 index c45cac9..0000000 --- a/common/cmake/libeosio.cmake +++ /dev/null @@ -1,53 +0,0 @@ -# -------------------------------- -# Variables -# -------------------------------- -set( LIBEOSIO_GIT_URL "https://github.com/eosswedenorg/libeosio.git" ) -set( LIBEOSIO_WANTED_VERSION v0.1.4 ) - -# -------------------------------- -# Macros -# -------------------------------- -macro(fromGit tag) - - message ("Using libeosio from: ${LIBEOSIO_GIT_URL}@${tag}") - - include(FetchContent) - FetchContent_Declare(libeosio - GIT_REPOSITORY ${LIBEOSIO_GIT_URL} - GIT_TAG ${tag} - SOURCE_DIR ${DOWNLOAD_CACHE_DIR}/libeosio/src - STAMP_DIR ${DOWNLOAD_CACHE_DIR}/libeosio/stamp - ) - - FetchContent_GetProperties(libeosio) - if (NOT libeosio_POPULATED) - FetchContent_Populate(libeosio) - add_subdirectory(${libeosio_SOURCE_DIR} ${libeosio_BINARY_DIR} EXCLUDE_FROM_ALL) - endif() -endmacro() - -macro(buildLocal src) - message ("Using local libeosio at: ${src}") - add_subdirectory(${src} ${src}/build EXCLUDE_FROM_ALL) -endmacro() - -# If we have a locallibeosio -if (LIBEOSIO_SOURCE_DIR) - buildLocal( ${LIBEOSIO_SOURCE_DIR} ) -else() - - # Check if version is in fact a version. - if (LIBEOSIO_WANTED_VERSION MATCHES "^[0-9]+(.[0-9]+)?(.[0-9]+)(-[a-zA-Z0-9]+)?$") - # Try finding the package on the system. - find_package(libeosio ${LIBEOSIO_WANTED_VERSION} QUIET) - if (libeoskeygen_FOUND) - message ("Using libeosio in: ${libeosio_DIR}") - # Not found, download from git. - else() - fromGit( v${LIBEOSIO_WANTED_VERSION} ) - endif() - # Assume version contains a git branch. - else() - fromGit( ${LIBEOSIO_WANTED_VERSION} ) - endif() -endif() diff --git a/common/config.hpp.in b/common/config.hpp.in index 8b1d7f9..1cbe1c8 100644 --- a/common/config.hpp.in +++ b/common/config.hpp.in @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_CONFIG_H -#define EOSIOKEYGEN_COMMON_CONFIG_H +#ifndef ANTELOPEKEYGEN_COMMON_CONFIG_H +#define ANTELOPEKEYGEN_COMMON_CONFIG_H // Defined if we have thread support. -#cmakedefine EOSIOKEYGEN_HAVE_THREADS +#cmakedefine ANTELOPEKEYGEN_HAVE_THREADS -#endif /* EOSIOKEYGEN_COMMON_CONFIG_H */ +#endif /* ANTELOPEKEYGEN_COMMON_CONFIG_H */ diff --git a/common/include/eoskeygen/core/dictionary.hpp b/common/include/eoskeygen/core/dictionary.hpp index 4a939c0..8008a30 100644 --- a/common/include/eoskeygen/core/dictionary.hpp +++ b/common/include/eoskeygen/core/dictionary.hpp @@ -21,14 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_CORE_DICTIONARY_H -#define EOSIOKEYGEN_COMMON_CORE_DICTIONARY_H +#ifndef ANTELOPEKEYGEN_COMMON_CORE_DICTIONARY_H +#define ANTELOPEKEYGEN_COMMON_CORE_DICTIONARY_H #include #include #include -namespace eoskeygen { +namespace antelopekeygen { class Dictionary { @@ -70,6 +70,6 @@ protected : std::set m_words; }; -} // namespace eoskeygen +} // namespace antelopekeygen -#endif /* EOSIOKEYGEN_COMMON_CORE_DICTIONARY_H */ +#endif /* ANTELOPEKEYGEN_COMMON_CORE_DICTIONARY_H */ diff --git a/common/include/eoskeygen/core/file.hpp b/common/include/eoskeygen/core/file.hpp index 330c974..15ec64c 100644 --- a/common/include/eoskeygen/core/file.hpp +++ b/common/include/eoskeygen/core/file.hpp @@ -21,15 +21,15 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_CORE_FILE_H -#define EOSIOKEYGEN_COMMON_CORE_FILE_H +#ifndef ANTELOPEKEYGEN_COMMON_CORE_FILE_H +#define ANTELOPEKEYGEN_COMMON_CORE_FILE_H #include -namespace eoskeygen { +namespace antelopekeygen { bool readLines(const std::string& filename, strlist_t& lines); } // namespace -#endif /* EOSIOKEYGEN_COMMON_CORE_FILE_H */ +#endif /* ANTELOPEKEYGEN_COMMON_CORE_FILE_H */ diff --git a/common/include/eoskeygen/core/leet.hpp b/common/include/eoskeygen/core/leet.hpp index 29eea80..6cc3796 100644 --- a/common/include/eoskeygen/core/leet.hpp +++ b/common/include/eoskeygen/core/leet.hpp @@ -21,16 +21,16 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_CORE_LEET_H -#define EOSIOKEYGEN_COMMON_CORE_LEET_H +#ifndef ANTELOPEKEYGEN_COMMON_CORE_LEET_H +#define ANTELOPEKEYGEN_COMMON_CORE_LEET_H #include #include -namespace eoskeygen { +namespace antelopekeygen { strlist_t l33twords(std::string str); -} // namespace eoskeygen +} // namespace antelopekeygen -#endif /* EOSIOKEYGEN_COMMON_CORE_LEET_H */ +#endif /* ANTELOPEKEYGEN_COMMON_CORE_LEET_H */ diff --git a/common/include/eoskeygen/core/string.hpp b/common/include/eoskeygen/core/string.hpp index 4e008c0..a1ef0dc 100644 --- a/common/include/eoskeygen/core/string.hpp +++ b/common/include/eoskeygen/core/string.hpp @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_CORE_STRING_H -#define EOSIOKEYGEN_COMMON_CORE_STRING_H +#ifndef ANTELOPEKEYGEN_COMMON_CORE_STRING_H +#define ANTELOPEKEYGEN_COMMON_CORE_STRING_H #include #include -namespace eoskeygen { +namespace antelopekeygen { std::string& strtolower(std::string& str); @@ -35,6 +35,6 @@ std::string& rtrim(std::string& str); std::string& ltrim(std::string& str); std::string& trim(std::string& str); -} // namespace eoskeygen +} // namespace antelopekeygen -#endif /* EOSIOKEYGEN_COMMON_CORE_STRING_H */ +#endif /* ANTELOPEKEYGEN_COMMON_CORE_STRING_H */ diff --git a/common/include/eoskeygen/core/strlist.hpp b/common/include/eoskeygen/core/strlist.hpp index 96f509e..2cc63b6 100644 --- a/common/include/eoskeygen/core/strlist.hpp +++ b/common/include/eoskeygen/core/strlist.hpp @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_CORE_STRLIST_H -#define EOSIOKEYGEN_COMMON_CORE_STRLIST_H +#ifndef ANTELOPEKEYGEN_COMMON_CORE_STRLIST_H +#define ANTELOPEKEYGEN_COMMON_CORE_STRLIST_H #include #include -namespace eoskeygen { +namespace antelopekeygen { typedef std::vector strlist_t; @@ -45,6 +45,6 @@ strlist_t& strip(strlist_t& list, strlist_stripfunc_t fn); } // namespace strlist -} // namespace eoskeygen +} // namespace antelopekeygen -#endif /* EOSIOKEYGEN_COMMON_CORE_STRLIST_H */ +#endif /* ANTELOPEKEYGEN_COMMON_CORE_STRLIST_H */ diff --git a/common/include/eoskeygen/key_search.hpp b/common/include/eoskeygen/key_search.hpp index b7fa5af..5e0b9ae 100644 --- a/common/include/eoskeygen/key_search.hpp +++ b/common/include/eoskeygen/key_search.hpp @@ -21,17 +21,17 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_KEY_SEARCH_H -#define EOSIOKEYGEN_COMMON_KEY_SEARCH_H +#ifndef ANTELOPEKEYGEN_COMMON_KEY_SEARCH_H +#define ANTELOPEKEYGEN_COMMON_KEY_SEARCH_H #include #include -#include +#include #include #include #include -namespace eoskeygen { +namespace antelopekeygen { class IKeySearchResult; @@ -47,6 +47,8 @@ public : public : KeySearch(); + void setPrefix(const std::string& prefix); + // Add a word to search for. void addWord(const std::string& str); @@ -62,7 +64,7 @@ public : // Set callback for search result. void setCallback(IKeySearchResult* callback); -#ifdef EOSIOKEYGEN_HAVE_THREADS +#ifdef ANTELOPEKEYGEN_HAVE_THREADS // Returns the maximum number of threads // reported by the operating system. static size_t max_threads(); @@ -71,7 +73,7 @@ public : void setThreadCount(size_t num); size_t getThreadCount() const; -#endif /* EOSIOKEYGEN_HAVE_THREADS */ +#endif /* ANTELOPEKEYGEN_HAVE_THREADS */ // Aborts find() operation if started. // This is useful for multithreaded code (like GUI application) @@ -86,17 +88,21 @@ protected : // Check if any word in appears in 's public key. // returns true if a word was found (stored in ), false otherwise. - bool _contains_word(const struct libeosio::ec_keypair* key, struct result& result); + bool _contains_word(const struct libantelope::ec_keypair* key, struct result& result); -#ifdef EOSIOKEYGEN_HAVE_THREADS +#ifdef ANTELOPEKEYGEN_HAVE_THREADS void _thr_proc(); void _search_mt(); -#endif /* EOSIOKEYGEN_HAVE_THREADS */ +#endif /* ANTELOPEKEYGEN_HAVE_THREADS */ void _search_linear(); protected : + + // Public key prefix. + std::string m_prefix; + // List of words to search for. strlist_t m_words; @@ -106,14 +112,14 @@ protected : // Current number of keys found. std::size_t m_count; -#ifdef EOSIOKEYGEN_HAVE_THREADS +#ifdef ANTELOPEKEYGEN_HAVE_THREADS // Number of threads to use. size_t m_threads; -#endif /* EOSIOKEYGEN_HAVE_THREADS */ +#endif /* ANTELOPEKEYGEN_HAVE_THREADS */ IKeySearchResult* m_callback; }; -} // namespace eoskeygen +} // namespace antelopekeygen -#endif /* EOSIOKEYGEN_COMMON_KEY_SEARCH_H */ +#endif /* ANTELOPEKEYGEN_COMMON_KEY_SEARCH_H */ diff --git a/common/include/eoskeygen/key_search_result.hpp b/common/include/eoskeygen/key_search_result.hpp index e174d18..ef598e0 100644 --- a/common/include/eoskeygen/key_search_result.hpp +++ b/common/include/eoskeygen/key_search_result.hpp @@ -21,20 +21,20 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef EOSIOKEYGEN_COMMON_KEY_SEARCH_RESULT_H -#define EOSIOKEYGEN_COMMON_KEY_SEARCH_RESULT_H +#ifndef ANTELOPEKEYGEN_COMMON_KEY_SEARCH_RESULT_H +#define ANTELOPEKEYGEN_COMMON_KEY_SEARCH_RESULT_H #include -namespace eoskeygen { +namespace antelopekeygen { class IKeySearchResult { public : - virtual void onResult(const struct libeosio::ec_keypair* key, const struct KeySearch::result& result) = 0; + virtual void onResult(const struct libantelope::ec_keypair* key, const struct KeySearch::result& result) = 0; }; -} // namespace eoskeygen +} // namespace antelopekeygen -#endif /* EOSIOKEYGEN_COMMON_KEY_SEARCH_RESULT_H */ +#endif /* ANTELOPEKEYGEN_COMMON_KEY_SEARCH_RESULT_H */ diff --git a/common/src/core/dictionary.cpp b/common/src/core/dictionary.cpp index 806922b..2e5033a 100644 --- a/common/src/core/dictionary.cpp +++ b/common/src/core/dictionary.cpp @@ -29,7 +29,7 @@ #include #include -namespace eoskeygen { +namespace antelopekeygen { struct StringContains { StringContains(const std::string& str, std::vector& pos) : m_str(str), m_pos(pos) {} @@ -126,4 +126,4 @@ Dictionary::search_result_t Dictionary::search(const std::string& subject) const return res; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/common/src/core/file.cpp b/common/src/core/file.cpp index 6cbdac5..500d86b 100644 --- a/common/src/core/file.cpp +++ b/common/src/core/file.cpp @@ -25,7 +25,7 @@ #include #include -namespace eoskeygen { +namespace antelopekeygen { bool readLines(const std::string& filename, strlist_t& lines) { @@ -46,4 +46,4 @@ bool readLines(const std::string& filename, strlist_t& lines) { return true; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/common/src/core/leet.cpp b/common/src/core/leet.cpp index e30e54d..763bc11 100644 --- a/common/src/core/leet.cpp +++ b/common/src/core/leet.cpp @@ -24,7 +24,7 @@ #include #include -namespace eoskeygen { +namespace antelopekeygen { static bool is_l33t(char ch, char& r) { @@ -79,4 +79,4 @@ strlist_t l33twords(std::string str) { return list; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/common/src/core/string.cpp b/common/src/core/string.cpp index 6186556..54acb8a 100644 --- a/common/src/core/string.cpp +++ b/common/src/core/string.cpp @@ -26,7 +26,7 @@ #include #include -namespace eoskeygen { +namespace antelopekeygen { std::string& strtolower(std::string& str) { std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c){ return std::tolower(c); }); @@ -49,4 +49,4 @@ std::string& trim(std::string& str) { return ltrim(rtrim(str)); } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/common/src/core/strlist.cpp b/common/src/core/strlist.cpp index 8c8f874..dc3e5db 100644 --- a/common/src/core/strlist.cpp +++ b/common/src/core/strlist.cpp @@ -25,7 +25,7 @@ #include #include -namespace eoskeygen { +namespace antelopekeygen { strlist_t strlist::splitw(const std::string& str, const std::string& delim) { @@ -48,7 +48,7 @@ strlist_t strlist::split(const std::string& str, const std::string& delim) { return r; } -std::string strlist::join(const eoskeygen::strlist_t& list, const std::string& delim) { +std::string strlist::join(const strlist_t& list, const std::string& delim) { std::string out; @@ -72,4 +72,4 @@ strlist_t& strlist::strip(strlist_t& list, strlist_stripfunc_t fn) { return list; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/common/src/key_search.cpp b/common/src/key_search.cpp index f7af039..d20597d 100644 --- a/common/src/key_search.cpp +++ b/common/src/key_search.cpp @@ -21,16 +21,17 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#include -#include +#include +#include #include #include #include #include -namespace eoskeygen { +namespace antelopekeygen { KeySearch::KeySearch() : + m_prefix ("EOS"), m_max (0), m_count (0), #ifdef EOSIOKEYGEN_HAVE_THREADS @@ -40,6 +41,11 @@ KeySearch::KeySearch() : { } +void KeySearch::setPrefix(const std::string& prefix) +{ + m_prefix = prefix; +} + void KeySearch::addWord(const std::string& str) { std::string tmp = str; @@ -71,11 +77,11 @@ void KeySearch::setCallback(IKeySearchResult* callback) void KeySearch::_search_linear() { - struct libeosio::ec_keypair pair; + struct libantelope::ec_keypair pair; while (m_count < m_max) { struct result res; - libeosio::ec_generate_key(&pair); + libantelope::ec_generate_key(&pair); if (_contains_word(&pair, res)) { m_callback->onResult(&pair, res); m_count++; @@ -105,16 +111,16 @@ void KeySearch::find(size_t num_results) _search_linear(); } -bool KeySearch::_contains_word(const struct libeosio::ec_keypair* key, struct result& result) { +bool KeySearch::_contains_word(const struct libantelope::ec_keypair* key, struct result& result) { - // skip first 3 chars, as those are always "EOS" - std::string pubstr = libeosio::wif_pub_encode(key->pub).substr(3); + size_t prefix_len = m_prefix.length(); + std::string pubstr = libantelope::wif_pub_encode(key->pub, m_prefix).substr(prefix_len); strtolower(pubstr); for(auto const& w: m_words) { size_t p = pubstr.find(w); if (p != std::string::npos) { - result.pos = p + 3; + result.pos = p + prefix_len; result.len = w.length(); return true; } @@ -122,4 +128,4 @@ bool KeySearch::_contains_word(const struct libeosio::ec_keypair* key, struct re return false; } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/common/src/key_search_mt.cpp b/common/src/key_search_mt.cpp index b0773ba..f73a635 100644 --- a/common/src/key_search_mt.cpp +++ b/common/src/key_search_mt.cpp @@ -25,11 +25,11 @@ #include #include #include -#include +#include #include #include -namespace eoskeygen { +namespace antelopekeygen { // Mutex guard for m_count. std::mutex g_count_mtx; @@ -37,12 +37,12 @@ std::mutex g_count_mtx; // Thread process. void KeySearch::_thr_proc() { - struct libeosio::ec_keypair pair; + struct libantelope::ec_keypair pair; while (m_count < m_max) { struct result res; - libeosio::ec_generate_key(&pair); + libantelope::ec_generate_key(&pair); if (_contains_word(&pair, res)) { // Guard output with mutex, so we don't get @@ -98,4 +98,4 @@ void KeySearch::_search_mt() } } -} // namespace eoskeygen +} // namespace antelopekeygen diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 361dfeb..fec8fec 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.15) -project(eosio-keygen-gui +project(antelope-keygen-gui VERSION ${CMAKE_PROJECT_VERSION} - DESCRIPTION "Keygenerator for EOSIO (gui)" + DESCRIPTION "Keygenerator for Antelope blockchain (gui)" LANGUAGES CXX) # Append modules dir diff --git a/gui/README.md b/gui/README.md index cf078bf..b6d88ae 100644 --- a/gui/README.md +++ b/gui/README.md @@ -1,23 +1,22 @@ -# eosio-keygen (gui) +# antelope-keygen (gui) -This is the graphical version of [eosio-keygen](https://github.com/eosswedenorg/eosio-keygen) project. +This is the graphical version of the [antelope-keygen](https://github.com/eosswedenorg/antelope-keygen) project. -The program generates public and private keypairs for [EOSIO](https://eos.io/) +This program generates public and private keypair for [Antelope IO](https://antelope.io) Among the basic functionality the program can also search for keys containing specific words also know as _vanity keys_. ## Security notice -Keys are generated by `OpenSSL`'s `EC_KEY_generate_key` function. The program will -never expose your keys to anything but the computers memory and output of the -program. You are free to inspect the source code and compile yourself to verify. +Keys are generated using [libantelope](https://github.com/eosswedenorg/libantelope) +while the library does not claim to guarantee cryptographically secure keys. it +relies on widly used open source cryptographic libraries (OpenSSL, libsecp256k1). -However, use this at your own risk. we cannot guarantee that the keys are -cryptographically secure as this depends on OpenSSL's implementation (alto it is -widely used and should be safe) +Use at your own risk. The author and [Sw/eden](https://eossweden.org/) does not take responsability +for any damage caused by keys generated by the program. -Please read the `LICENSE.gui` file. +Please read the `LICENSE` file. ``` THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, diff --git a/gui/src/GenerateWindow.cpp b/gui/src/GenerateWindow.cpp index 8880ffb..6d5e3f0 100644 --- a/gui/src/GenerateWindow.cpp +++ b/gui/src/GenerateWindow.cpp @@ -26,13 +26,16 @@ #include #include #include -#include -#include +#include +#include +#include +#include #include "Settings.hpp" #include "GenerateWindow.hpp" -void _initKeyWidget(QLineEdit& w) { - w.setFixedWidth(450); +void _initKeyWidget(QLineEdit& w, const QFont& font) { + w.setFixedWidth(460); + w.setFont(font); w.setReadOnly(true); } @@ -46,11 +49,13 @@ QWidget (parent), m_btn_gen ("Generate"), m_btn_copy_both ("Copy keys") { + QFont mono = QFontDatabase::systemFont(QFontDatabase::FixedFont); + QIcon copy_icon = QIcon::fromTheme("edit-copy"); QGridLayout* layout; - _initKeyWidget(m_pub); - _initKeyWidget(m_priv); + _initKeyWidget(m_pub, mono); + _initKeyWidget(m_priv, mono); _initKeyCopyButton(m_btn_copy_pub, copy_icon); _initKeyCopyButton(m_btn_copy_priv, copy_icon); @@ -92,14 +97,16 @@ m_btn_copy_both ("Copy keys") void GenerateWindow::generate_key() { - std::string pubstr; - struct libeosio::ec_keypair pair; + std::string pubstr, pvtstr; + struct libantelope::ec_keypair pair; + const libantelope::wif_codec_t& codec = Settings::getKeyCodec(); - libeosio::ec_generate_key(&pair); + libantelope::ec_generate_key(&pair); - pubstr = libeosio::wif_pub_encode(pair.pub, Settings::shouldGenerateFioKeys() ? "FIO" : "EOS"); + pubstr = libantelope::wif_pub_encode(pair.pub, codec.pub); + pvtstr = libantelope::wif_priv_encode(pair.secret, codec.pvt); m_pub.setText(QString::fromStdString(pubstr)); - m_priv.setText(QString::fromStdString(libeosio::wif_priv_encode(pair.secret))); + m_priv.setText(QString::fromStdString(pvtstr)); } void GenerateWindow::copy_both_keys() diff --git a/gui/src/MainWindow.cpp b/gui/src/MainWindow.cpp index 8000ac1..9b1a043 100644 --- a/gui/src/MainWindow.cpp +++ b/gui/src/MainWindow.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "gui_text.h" #include "Settings.hpp" #include "GenerateWindow.hpp" @@ -32,9 +33,13 @@ #include "MainWindow.hpp" MainWindow::MainWindow(QWidget *parent) : -QMainWindow (parent), -m_fio_action (nullptr) +QMainWindow (parent), +m_format_fio_action (nullptr), +m_format_legacy_action (nullptr), +m_format_k1_action (nullptr) { + libantelope::ec_init(); + // Create sub windows and stacked widget. m_stacked = new QStackedWidget(); m_stacked->addWidget(new GenerateWindow()); @@ -49,17 +54,38 @@ m_fio_action (nullptr) // Settings - m_fio_action = new QAction("FIO Keys", this); - m_fio_action->setCheckable(true); - connect(m_fio_action, SIGNAL(triggered()), this, SLOT(fioKeysCheckboxChanged())); + QActionGroup* formatGroup = new QActionGroup(this); - QMenu *settings_menu = menuBar()->addMenu("Settings"); - settings_menu->addAction(m_fio_action); + m_format_fio_action = new QAction("FIO", formatGroup); + m_format_fio_action->setCheckable(true); + m_format_legacy_action = new QAction("Legacy", formatGroup); + m_format_legacy_action->setCheckable(true); + m_format_k1_action = new QAction("K1", formatGroup); + m_format_k1_action->setCheckable(true); + + // Set k1 and trigger the changed action so we set the codec. + m_format_k1_action->setChecked(true); + formatK1CheckboxChanged(); + + connect(m_format_fio_action, SIGNAL(triggered()), this, SLOT(formatFioCheckboxChanged())); + connect(m_format_legacy_action, SIGNAL(triggered()), this, SLOT(formatLegacyCheckboxChanged())); + connect(m_format_k1_action, SIGNAL(triggered()), this, SLOT(formatK1CheckboxChanged())); + + QMenu *settings = menuBar()->addMenu("Settings"); + QMenu *format_menu = settings->addMenu("Key Format"); + format_menu->addAction(m_format_k1_action); + format_menu->addAction(m_format_legacy_action); + format_menu->addAction(m_format_fio_action); // About menuBar()->addAction("About", this, SLOT(showAbout())); } +MainWindow::~MainWindow() +{ + libantelope::ec_shutdown(); +} + void MainWindow::switchToGenerate() { m_stacked->setCurrentIndex(0); @@ -77,7 +103,23 @@ void MainWindow::showAbout() EOSIOKEYGEN_GUI_TEXT_ABOUT_BODY); } -void MainWindow::fioKeysCheckboxChanged() +void MainWindow::formatFioCheckboxChanged() { - Settings::setGenerateFioKeys(m_fio_action ? m_fio_action->isChecked() : false); + if (m_format_fio_action->isChecked()) { + Settings::setKeyCodec(libantelope::wif_create_legacy_codec("FIO")); + } +} + +void MainWindow::formatLegacyCheckboxChanged() +{ + if (m_format_legacy_action->isChecked()) { + Settings::setKeyCodec(libantelope::WIF_CODEC_LEG); + } +} + +void MainWindow::formatK1CheckboxChanged() +{ + if (m_format_k1_action->isChecked()) { + Settings::setKeyCodec(libantelope::WIF_CODEC_K1); + } } diff --git a/gui/src/MainWindow.hpp b/gui/src/MainWindow.hpp index 1658195..3d4b172 100644 --- a/gui/src/MainWindow.hpp +++ b/gui/src/MainWindow.hpp @@ -34,7 +34,8 @@ class MainWindow : public QMainWindow { Q_OBJECT public: - MainWindow(QWidget *parent = 0); + MainWindow(QWidget *parent = 0); + virtual ~MainWindow(); private slots : @@ -46,13 +47,17 @@ private slots : void showAbout(); - void fioKeysCheckboxChanged(); + void formatFioCheckboxChanged(); + void formatLegacyCheckboxChanged(); + void formatK1CheckboxChanged(); private : QStackedWidget* m_stacked; - QPointer m_fio_action; + QPointer m_format_fio_action; + QPointer m_format_legacy_action; + QPointer m_format_k1_action; }; #endif /* MAIN_WINDOW_H */ diff --git a/gui/src/SearchWindow.cpp b/gui/src/SearchWindow.cpp index 23e2cf3..e4661e2 100644 --- a/gui/src/SearchWindow.cpp +++ b/gui/src/SearchWindow.cpp @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include #include "Settings.hpp" @@ -72,8 +72,8 @@ m_btn_clear ("Clear") m_layout.addWidget(&m_leet_cb, 0, 2); #ifdef EOSIOKEYGEN_HAVE_THREADS - m_num_threads.setValue((int) eoskeygen::KeySearch::max_threads()); - m_num_threads.setRange(1, (int) eoskeygen::KeySearch::max_threads()); + m_num_threads.setValue((int) antelopekeygen::KeySearch::max_threads()); + m_num_threads.setRange(1, (int) antelopekeygen::KeySearch::max_threads()); m_num_threads.setSuffix(" Threads"); m_layout.addWidget(&m_num_threads, 0, 3); #endif /* EOSIOKEYGEN_HAVE_THREADS */ @@ -121,7 +121,7 @@ void SearchWindow::initSignals() void SearchWindow::loadDictionaries() { QStringList list; - eoskeygen::Dictionary tmpDict; + antelopekeygen::Dictionary tmpDict; std::string base_path(CONFIG_DICT_FULL_PATH); // Clear dictionary first. @@ -146,18 +146,20 @@ void SearchWindow::loadDictionaries() } } -void SearchWindow::onResult(const struct libeosio::ec_keypair* key, const struct eoskeygen::KeySearch::result& result) +void SearchWindow::onResult(const struct libantelope::ec_keypair* key, const struct antelopekeygen::KeySearch::result& result) { int pos = (int) result.pos; int len = (int) result.len; - QString pub = QString::fromStdString(libeosio::wif_pub_encode(key->pub, Settings::shouldGenerateFioKeys() ? "FIO" : "EOS")); + libantelope::wif_codec_t codec = Settings::getKeyCodec(); + QString pub = QString::fromStdString(libantelope::wif_pub_encode(key->pub, codec.pub)); + int pub_prefix_len = (int) codec.pub.length(); QString mid = pub.mid(pos, len); QString left = pub.left(pos); QString right = pub.mid(pos + len, pub.size() - pos); - eoskeygen::Dictionary::search_result_t dict_res = m_dict.search(pub.toStdString()); + antelopekeygen::Dictionary::search_result_t dict_res = m_dict.search(pub.toStdString()); - QString out = "Public: " + pub.left(3); - for(int i = 3; i < pub.length(); ) { + QString out = "Public: " + pub.left(pub_prefix_len); + for(int i = pub_prefix_len; i < pub.length(); ) { if (i == pos) { out += "" + pub.mid(pos, len) + ""; @@ -178,7 +180,7 @@ void SearchWindow::onResult(const struct libeosio::ec_keypair* key, const struct out += pub[i++]; } - out += "
Private: " + QString::fromStdString(libeosio::wif_priv_encode(key->secret)); + out += "
Private: " + QString::fromStdString(libantelope::wif_priv_encode(key->secret, codec.pvt)); // As this function could be called from a non-gui thread. we use signals. emit addOutput("

" + out + "

"); @@ -196,12 +198,12 @@ void SearchWindow::search() } const std::string& input = m_txt_search.text().toLocal8Bit().constData(); - eoskeygen::strlist_t list; + antelopekeygen::strlist_t list; if (m_leet_cb.isChecked()) { - list = eoskeygen::l33twords(input); + list = antelopekeygen::l33twords(input); } else { - list = eoskeygen::strlist::splitw(input); + list = antelopekeygen::strlist::splitw(input); } // Validate that we atleast got something to search for. @@ -220,10 +222,10 @@ void SearchWindow::search() m_ksearch.setThreadCount(m_num_threads.value()); #endif /* EOSIOKEYGEN_HAVE_THREADS */ - QFuture future = QtConcurrent::run(&m_ksearch, &eoskeygen::KeySearch::find, m_num_results.value()); + QFuture future = QtConcurrent::run(&m_ksearch, &antelopekeygen::KeySearch::find, m_num_results.value()); m_worker.setFuture(future); - m_status.setText("Searching for: " + QString::fromStdString(eoskeygen::strlist::join(list, ", "))); + m_status.setText("Searching for: " + QString::fromStdString(antelopekeygen::strlist::join(list, ", "))); } void SearchWindow::output(const std::string& html) @@ -253,6 +255,9 @@ void SearchWindow::langFileAdd() void SearchWindow::searchStarted() { + // Set prefix for search + m_ksearch.setPrefix(Settings::getKeyCodec().pub); + m_btn_exec.setText("Cancel"); m_txt_search.setEnabled(false); diff --git a/gui/src/SearchWindow.hpp b/gui/src/SearchWindow.hpp index a161628..9282ef4 100644 --- a/gui/src/SearchWindow.hpp +++ b/gui/src/SearchWindow.hpp @@ -37,13 +37,13 @@ #include #include "MultiSelect.hpp" -class SearchWindow : public QWidget, public eoskeygen::IKeySearchResult +class SearchWindow : public QWidget, public antelopekeygen::IKeySearchResult { Q_OBJECT public: explicit SearchWindow(QWidget *parent = 0, Qt::WindowFlags flags = Qt::WindowFlags()); - void onResult(const struct libeosio::ec_keypair* key, const struct eoskeygen::KeySearch::result& result); + void onResult(const struct libantelope::ec_keypair* key, const struct antelopekeygen::KeySearch::result& result); private : void initSignals(); @@ -76,9 +76,9 @@ private: // Search worker thread. QFutureWatcher m_worker; - eoskeygen::KeySearch m_ksearch; + antelopekeygen::KeySearch m_ksearch; - eoskeygen::Dictionary m_dict; + antelopekeygen::Dictionary m_dict; // Widgets // ---------------- diff --git a/gui/src/Settings.cpp b/gui/src/Settings.cpp index d49c408..aa8dad9 100644 --- a/gui/src/Settings.cpp +++ b/gui/src/Settings.cpp @@ -24,16 +24,14 @@ #include "Settings.hpp" namespace priv { - bool fio_keys = false; + libantelope::wif_codec_t key_format = libantelope::WIF_CODEC_K1; } // namespace priv -bool Settings::shouldGenerateFioKeys() -{ - return priv::fio_keys; +void Settings::setKeyCodec(const libantelope::wif_codec_t& format) { + priv::key_format = format; } -void Settings::setGenerateFioKeys(bool value) -{ - priv::fio_keys = value; +const libantelope::wif_codec_t& Settings::getKeyCodec() { + return priv::key_format; } diff --git a/gui/src/Settings.hpp b/gui/src/Settings.hpp index d47c26f..08a56cd 100644 --- a/gui/src/Settings.hpp +++ b/gui/src/Settings.hpp @@ -24,11 +24,13 @@ #ifndef SETTINGS_H #define SETTINGS_H +#include + namespace Settings { - bool shouldGenerateFioKeys(); + void setKeyCodec(const libantelope::wif_codec_t& format); - void setGenerateFioKeys(bool value); + const libantelope::wif_codec_t& getKeyCodec(); }; #endif /* SEARCH_WINDOW_H */