mirror of
https://github.com/eosswedenorg/antelope-keygen
synced 2026-06-16 03:44:56 +02:00
Initial Commit
This commit is contained in:
commit
799a80b3e5
19 changed files with 730 additions and 0 deletions
43
.github/workflows/ci.yml
vendored
Normal file
43
.github/workflows/ci.yml
vendored
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
name: CI
|
||||
|
||||
on: [ push ]
|
||||
|
||||
jobs:
|
||||
unix:
|
||||
name: compile - Ubuntu
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Configure
|
||||
run: mkdir build && cd build && cmake ..
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
|
||||
mac:
|
||||
name: compile - MacOS
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Dependancies
|
||||
run: brew install openssl
|
||||
- name: Configure
|
||||
run: mkdir build && cd build && cmake -D OPENSSL_ROOT_DIR=/usr/local/opt/openssl@1.1 ..
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
|
||||
win:
|
||||
name: compile - windows
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Dependancies
|
||||
run: |
|
||||
mkdir build; cd build
|
||||
Invoke-WebRequest -Uri https://mirror.firedaemon.com/OpenSSL/openssl-1.1.1e-dev.zip -OutFile openssl.zip
|
||||
Expand-Archive openssl.zip
|
||||
- name: Configure
|
||||
run: cd build; cmake -D OPENSSL_ROOT_DIR="$pwd\openssl\openssl-1.1\x64" ..
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
build/
|
||||
45
CMakeLists.txt
Normal file
45
CMakeLists.txt
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
cmake_minimum_required(VERSION 3.4)
|
||||
project(eosio-keygen)
|
||||
|
||||
set( INSTALL_BIN_DIR bin )
|
||||
set( INSTALL_SHARE_DIR share/${CMAKE_PROJECT_NAME} )
|
||||
|
||||
find_package(OpenSSL 1.1 REQUIRED)
|
||||
|
||||
include_directories( ${OPENSSL_INCLUDE_DIR} )
|
||||
|
||||
add_executable( ${CMAKE_PROJECT_NAME}
|
||||
src/ec.cpp
|
||||
src/base58.cpp
|
||||
src/checksum.cpp
|
||||
src/WIF.cpp
|
||||
src/main.cpp
|
||||
)
|
||||
|
||||
target_link_libraries( ${CMAKE_PROJECT_NAME} PUBLIC ${OPENSSL_LIBRARIES} )
|
||||
|
||||
if (WIN32)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set (OPENSSL_LIBCRYPTO_NAME libcrypto-1_1-x64)
|
||||
else()
|
||||
set (OPENSSL_LIBCRYPTO_NAME libcrypto-1_1)
|
||||
endif()
|
||||
set( OPENSSL_LIBCRYPTO_DLL ${OPENSSL_ROOT_DIR}/bin/${OPENSSL_LIBCRYPTO_NAME}.dll )
|
||||
|
||||
# Need to copy libcrypto dll to binary folder.
|
||||
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${OPENSSL_LIBCRYPTO_DLL}
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}
|
||||
)
|
||||
|
||||
# "Flat" install on windows.
|
||||
set( INSTALL_BIN_DIR "." )
|
||||
set( INSTALL_SHARE_DIR "." )
|
||||
|
||||
# We also need to copy libcrypto dll during install
|
||||
install(FILES ${OPENSSL_LIBCRYPTO_DLL} DESTINATION ${INSTALL_BIN_DIR})
|
||||
endif (WIN32)
|
||||
|
||||
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION ${INSTALL_BIN_DIR})
|
||||
install(FILES README.md LICENSE LICENSE.bitcoin DESTINATION ${INSTALL_SHARE_DIR})
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2019 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.
|
||||
22
LICENSE.bitcoin
Normal file
22
LICENSE.bitcoin
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2009-2019 The Bitcoin Core developers
|
||||
Copyright (c) 2009-2019 Bitcoin Developers
|
||||
|
||||
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.
|
||||
110
README.md
Normal file
110
README.md
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
|
||||
# EOSIO Keygen
|
||||
|
||||
This program generates public and private keypair for [EOS](https://eos.io/)
|
||||
|
||||
## Compile
|
||||
|
||||
You will need `openssl` development files (version 1.1 or later) to compile and `cmake` to compile this project.
|
||||
|
||||
### Linux/MacOS
|
||||
|
||||
#### Dependencies
|
||||
|
||||
**Ubuntu:**
|
||||
```sh
|
||||
$ apt-get install libssl-dev cmake
|
||||
```
|
||||
**For other linux distributions:**
|
||||
|
||||
Consult the manual for how to get these installed.
|
||||
|
||||
**MacOS:**
|
||||
|
||||
```sh
|
||||
$ brew install openssl cmake
|
||||
```
|
||||
|
||||
#### Build
|
||||
|
||||
After you just need to run `./build.sh` to trigger the whole build.
|
||||
|
||||
If you dont want to use the script. you can build with cmake using the following commands:
|
||||
|
||||
```sh
|
||||
$ mkdir build && cd build
|
||||
$ cmake .. && make
|
||||
```
|
||||
|
||||
**MacOS:** You may need to point `cmake` to `openssl` by passing the argument
|
||||
`-D OPENSSL_ROOT_DIR=/usr/local/opt/openssl@1.1` if openssl is not under `/usr/local/opt/openssl@1.1` you need to find the correct path.
|
||||
|
||||
### Windows
|
||||
|
||||
#### Dependencies
|
||||
|
||||
Download and install `cmake` from [cmake.org](https://cmake.org) and download
|
||||
[openssl](https://mirror.firedaemon.com/OpenSSL/openssl-1.1.1e-dev.zip)
|
||||
|
||||
unpack `openssl-1.1.1e-dev.zip` somewhere on the filesystem.
|
||||
|
||||
You will also need a compiler. [Build Tools for Visual Studio 2019](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16) (Selecting C++ during installation) is recommended.
|
||||
|
||||
#### Build.
|
||||
|
||||
you need to set `OPENSSL_ROOT_DIR` to the directory where you unpacked
|
||||
`openssl-1.1.1e-dev.zip` append `x86` if you are on 32-bit system, `x64` for 64-bit.
|
||||
|
||||
**NOTE:** `cmake` uses forward slash `/` for path even for windows. so make sure you use that when setting `OPENSSL_ROOT_DIR`
|
||||
|
||||
For example:
|
||||
|
||||
```
|
||||
C:\repo> mkdir build
|
||||
C:\repo> cd build
|
||||
C:\repo\build> cmake -D OPENSSL_ROOT_DIR="C:/path/to/openssl-1.1/x86" ..
|
||||
C:\repo\build> cmake --build . --config Release
|
||||
```
|
||||
|
||||
## Install
|
||||
|
||||
After the project has been compiled. run `sudo ./install.sh` or the following code if you dont want to use that:
|
||||
|
||||
```sh
|
||||
# inside the build directory
|
||||
$ sudo make install
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
|
||||
It is possible to run `cmake --install .` from `build` directory.
|
||||
Your DOS shell needs administrator privileges.
|
||||
|
||||
## Uninstall
|
||||
|
||||
Run `sudo ./uninstall.sh` or remove the files listed in `build/install_manifest.txt` manually.
|
||||
|
||||
## 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.
|
||||
|
||||
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)
|
||||
|
||||
Please read the `LICENSE` file.
|
||||
|
||||
```
|
||||
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.
|
||||
```
|
||||
|
||||
## Author
|
||||
|
||||
Henrik Hautakoski - [henrik@eossweden.org](mailto:henrik@eossweden.org)
|
||||
7
build.sh
Executable file
7
build.sh
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
mkdir build 2> /dev/null
|
||||
pushd build > /dev/null
|
||||
cmake .. $@
|
||||
make -B
|
||||
popd > /dev/null
|
||||
5
install.sh
Executable file
5
install.sh
Executable file
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
pushd build > /dev/null
|
||||
make install $@
|
||||
popd > /dev/null
|
||||
52
src/WIF.cpp
Normal file
52
src/WIF.cpp
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 <string.h>
|
||||
#include "base58.h"
|
||||
#include "checksum.h"
|
||||
#include "WIF.h"
|
||||
|
||||
std::string wif_priv_encode(ec_privkey_t priv) {
|
||||
|
||||
checksum_t check;
|
||||
unsigned char buf[37] = { 0x80 };
|
||||
|
||||
memcpy(buf + 1, priv.data(), priv.size());
|
||||
|
||||
// Checksum
|
||||
check = checksum_sha256d(buf, 33);
|
||||
memcpy(buf + 33, check.data(), check.size());
|
||||
|
||||
return base58_encode(buf, buf + sizeof(buf));
|
||||
}
|
||||
|
||||
std::string wif_pub_encode(ec_pubkey_t pub) {
|
||||
|
||||
checksum_t check = checksum_ripemd160(pub.data(), pub.size());
|
||||
unsigned char buf[37];
|
||||
|
||||
memcpy(buf, pub.data(), pub.size());
|
||||
memcpy(buf + 33, check.data(), check.size());
|
||||
|
||||
return "EOS" + base58_encode(buf, buf + sizeof(buf));
|
||||
}
|
||||
34
src/WIF.h
Normal file
34
src/WIF.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 WIF_H
|
||||
#define WIF_H
|
||||
|
||||
#include <string>
|
||||
#include "ec.h"
|
||||
|
||||
std::string wif_priv_encode(ec_privkey_t priv);
|
||||
|
||||
std::string wif_pub_encode(ec_pubkey_t pub);
|
||||
|
||||
#endif /* WIF_H */
|
||||
81
src/base58.cpp
Normal file
81
src/base58.cpp
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
/**
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2009-2019 The Bitcoin Core developers
|
||||
* Copyright (c) 2009-2019 Bitcoin Developers
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Based on code from https://github.com/bitcoin/bitcoin/blob/f1e2f2a85962c1664e4e55471061af0eaa798d40/src/base58.cpp
|
||||
*/
|
||||
#include <cassert>
|
||||
#include "base58.h"
|
||||
|
||||
static const char charmap[59] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||
|
||||
std::string base58_encode(const unsigned char* pbegin, const unsigned char* pend) {
|
||||
|
||||
// Skip & count leading zeroes.
|
||||
int zeroes = 0;
|
||||
int length = 0;
|
||||
while (pbegin != pend && *pbegin == 0) {
|
||||
pbegin++;
|
||||
zeroes++;
|
||||
}
|
||||
// Allocate enough space in big-endian base58 representation.
|
||||
int size = (pend - pbegin) * 138 / 100 + 1; // log(256) / log(58), rounded up.
|
||||
std::vector<unsigned char> b58(size);
|
||||
// Process the bytes.
|
||||
while (pbegin != pend) {
|
||||
int carry = *pbegin;
|
||||
int i = 0;
|
||||
// Apply "b58 = b58 * 256 + ch".
|
||||
for (std::vector<unsigned char>::reverse_iterator it = b58.rbegin(); (carry != 0 || i < length) && (it != b58.rend()); it++, i++) {
|
||||
carry += 256 * (*it);
|
||||
*it = carry % 58;
|
||||
carry /= 58;
|
||||
}
|
||||
|
||||
assert(carry == 0);
|
||||
length = i;
|
||||
pbegin++;
|
||||
}
|
||||
// Skip leading zeroes in base58 result.
|
||||
std::vector<unsigned char>::iterator it = b58.begin() + (size - length);
|
||||
while (it != b58.end() && *it == 0)
|
||||
it++;
|
||||
// Translate the result into a string.
|
||||
std::string str;
|
||||
str.reserve(zeroes + (b58.end() - it));
|
||||
str.assign(zeroes, '1');
|
||||
while (it != b58.end())
|
||||
str += charmap[*(it++)];
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string base58_encode(const std::string& str) {
|
||||
|
||||
const unsigned char *ptr = (const unsigned char *) str.c_str();
|
||||
return base58_encode(ptr, ptr + str.length());
|
||||
}
|
||||
|
||||
std::string base58_encode(const std::vector<unsigned char>& vch) {
|
||||
|
||||
return base58_encode(vch.data(), vch.data() + vch.size());
|
||||
}
|
||||
34
src/base58.h
Normal file
34
src/base58.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 BASE58_H
|
||||
#define BASE58_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
std::string base58_encode(const std::string& str);
|
||||
std::string base58_encode(const std::vector<unsigned char>& vch);
|
||||
std::string base58_encode(const unsigned char* pbegin, const unsigned char* pend);
|
||||
|
||||
#endif /* BASE58_H */
|
||||
48
src/checksum.cpp
Normal file
48
src/checksum.cpp
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 <openssl/sha.h>
|
||||
#include <openssl/ripemd.h>
|
||||
#include <cstring>
|
||||
#include "checksum.h"
|
||||
|
||||
inline void sha256d(const unsigned char *data, unsigned int len, unsigned char *out) {
|
||||
SHA256(data, len, out);
|
||||
SHA256(out, 32, out);
|
||||
}
|
||||
|
||||
#define checksum_impl(name, func) \
|
||||
checksum_t checksum_##name(const unsigned char *data, unsigned int len) { \
|
||||
\
|
||||
checksum_t crc; \
|
||||
unsigned char hash[32]; \
|
||||
\
|
||||
func(data, len, hash); \
|
||||
\
|
||||
std::memcpy(crc.data(), hash, crc.size()); \
|
||||
return crc; \
|
||||
}
|
||||
|
||||
|
||||
checksum_impl(sha256d, sha256d)
|
||||
checksum_impl(ripemd160, RIPEMD160)
|
||||
35
src/checksum.h
Normal file
35
src/checksum.h
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 CHECKSUM_H
|
||||
#define CHECKSUM_H
|
||||
|
||||
#include <array>
|
||||
|
||||
typedef std::array<unsigned char, 4> checksum_t;
|
||||
|
||||
checksum_t checksum_sha256d(const unsigned char *data, unsigned int len);
|
||||
|
||||
checksum_t checksum_ripemd160(const unsigned char *data, unsigned int len);
|
||||
|
||||
#endif /* CHECKSUM_H */
|
||||
71
src/ec.cpp
Normal file
71
src/ec.cpp
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 <openssl/ec.h>
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include "ec.h"
|
||||
|
||||
static int ec_generate_pair(unsigned char *priv, unsigned char *pub) {
|
||||
|
||||
int ret = -1;
|
||||
EC_KEY *k;
|
||||
BN_CTX *ctx;
|
||||
|
||||
// Create BIGNUM context.
|
||||
ctx = BN_CTX_new();
|
||||
if (ctx == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Construct curve.
|
||||
k = EC_KEY_new_by_curve_name(NID_secp256k1);
|
||||
if (k == NULL) {
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
// Generate new key pair.
|
||||
if (EC_KEY_generate_key(k) != 1) {
|
||||
goto fail2;
|
||||
}
|
||||
|
||||
// Copy private key to binary format.
|
||||
EC_KEY_priv2oct(k, priv, 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);
|
||||
|
||||
ret = 0;
|
||||
fail2:
|
||||
EC_KEY_free(k);
|
||||
fail1:
|
||||
BN_CTX_free(ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ec_generate_key(struct ec_keypair *pair) {
|
||||
|
||||
return ec_generate_pair(pair->secret.data(), pair->pub.data());
|
||||
}
|
||||
40
src/ec.h
Normal file
40
src/ec.h
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 EC_H
|
||||
#define EC_H
|
||||
|
||||
#include <array>
|
||||
#include "types.h"
|
||||
|
||||
typedef std::array<unsigned char, EC_PRIVKEY_SIZE> ec_privkey_t;
|
||||
typedef std::array<unsigned char, EC_PUBKEY_SIZE> ec_pubkey_t;
|
||||
|
||||
struct ec_keypair {
|
||||
ec_privkey_t secret;
|
||||
ec_pubkey_t pub;
|
||||
};
|
||||
|
||||
int ec_generate_key(struct ec_keypair *pair);
|
||||
|
||||
#endif /* EC_H */
|
||||
39
src/main.cpp
Normal file
39
src/main.cpp
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 <iostream>
|
||||
#include "base58.h"
|
||||
#include "WIF.h"
|
||||
#include "ec.h"
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
struct ec_keypair pair;
|
||||
|
||||
ec_generate_key(&pair);
|
||||
|
||||
std::cout << "Private: " << wif_priv_encode(pair.secret) << std::endl;
|
||||
std::cout << "Public: " << wif_pub_encode(pair.pub) << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
30
src/types.h
Normal file
30
src/types.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 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 TYPES_H
|
||||
#define TYPES_H
|
||||
|
||||
#define EC_PRIVKEY_SIZE 32
|
||||
#define EC_PUBKEY_SIZE 33 /* Compressed: 32 bytes + 1 prefix */
|
||||
|
||||
#endif /* TYPES_H */
|
||||
12
uninstall.sh
Executable file
12
uninstall.sh
Executable file
|
|
@ -0,0 +1,12 @@
|
|||
#!/bin/bash
|
||||
|
||||
MANIFEST=build/install_manifest.txt
|
||||
|
||||
if [ ! -f ${MANIFEST} ]; then
|
||||
echo "Missing manifest: ${MANIFEST}" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for file in $(cat ${MANIFEST}); do
|
||||
rm -f $file
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue