Giter Site home page Giter Site logo

fireblocks-key-recovery-tool's Introduction

Fireblocks Key Backup and Recovery Tool

The Fireblocks Backup and Recovery Tool simplifies completing four important backup and recovery actions for your Fireblocks workspace keys. You should use this tool on a designated offline machine.
Follow the steps to create a Workspace Keys Backup file.
Your Owner must have their Owner recovery passphrase.

Installation

  • Please clone the repository:

    • git clone https://github.com/fireblocks/fireblocks-key-recovery-tool.git
  • cd fireblocks-key-recovery-tool

Running in Docker

Build

  • docker build -t fb_recover_key .

Run

  • cd to <directory containing the backup file and the private key>
  • Run: docker run -it -v "${PWD}:/opt/fb_recover_keys/backup" fb_recover_key:latest bash
  • See below for instructions on how to run the recovery tool.

Running Locally

Build

  • install python 3.9
  • install pip3
  • pip3 install -r requirements.txt

Running the Fireblocks Key Backup and Recovery Tool

  1. Recommended:

    • run ./fireblocks_key_backup_and_recovery.py

    It opens a menu with the following options:

    1. Create a recovery key pair - generate a recovery key-pair. You will be required to create a key pair passphrase to encrypt the private key file from the key pair.
    2. Verify the public backup key - verify the public key file of the recovery key-pair. This is useful for users with Self-Serve backups who want to validate that their workspace Owner’s request to back up the keys matches the key pair at their premise. Requires the recovery key-pair public key.
    3. Verify the recovery package - run a sanity test of the workspace key backup package. Requires: the backup package, the recovery key pair private key file, the passphrase to that private key file, and the owner’s passphrase.
    4. Reveal the private backup key - Requires: the backup package, the recovery key pair private key file, the passphrase to that private key file, and the owner’s passphrase.
  2. Use the Legacy script: ./fb_recover_keys.py

    • Using this method, you need to prepare the recovery private key and the backup zip file in advance.
    • run ./fb_recover_keys.py <backup zip file> <RSA recovery private key> --prv

fireblocks-key-recovery-tool's People

Contributors

a0ngo avatar arielt1 avatar cblokh avatar idan-fb avatar igorkh-fb avatar matan-fireblocks avatar nadav-fireblocks avatar pbereng avatar slavasereb avatar tale-fb avatar tamirsh507 avatar yanlevi avatar yonimo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fireblocks-key-recovery-tool's Issues

RecoveryErrorMetadataNotFound: Backup zip doesn't contain metadata.json

When attempting to run the utility locally, the following error is received:

error

This is despite the fact that the zip file DOES contain the metadata.json file, as shown below in an unzipped version of the hard recovery package obtained from Fireblocks (note: this is a TESTNET workspace):

metadata

An error occurred while building the image

My system is OX M1 executing this docker build -t fb_recover_key . The following error occurred during the command

...
#7 279.3 Building wheels for collected packages: termcolor, apischema, bson, construct, fastecdsa, jsonrpcclient, jsonrpcserver, netstruct, pendulum, pyblake2, pysha3, pysodium, secp256k1, strict-rfc3339, crc16, ed25519, SSEClient, psutil
#7 279.3   Building wheel for termcolor (setup.py): started
#7 279.5   Building wheel for termcolor (setup.py): finished with status 'done'
#7 279.5   Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4849 sha256=0dfa77f3d9c782e517f075de72ced262304fbaa1fcbb8af78d71d9e756805630
#7 279.5   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/b6/0d/90/0d1bbd99855f99cb2f6c2e5ff96f8023fad8ec367695f7d72d
#7 279.5   Building wheel for apischema (setup.py): started
#7 304.3   Building wheel for apischema (setup.py): finished with status 'done'
#7 304.3   Created wheel for apischema: filename=apischema-0.17.5-cp39-cp39-linux_aarch64.whl size=519308 sha256=100452225f21c07fdc31d8b29dc153dc2fb3a1f1b9cfbc5e2ad83518e95b050d
#7 304.3   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/72/95/c9/093a908ee4c3d05ce181eaa6e063aebe20da4892d740d1c7dd
#7 304.4   Building wheel for bson (setup.py): started
#7 304.5   Building wheel for bson (setup.py): finished with status 'done'
#7 304.5   Created wheel for bson: filename=bson-0.5.10-py3-none-any.whl size=11979 sha256=f2740db8c50c0374b172cead42bab46fcfc97b9444c7b7735b2922f805357826
#7 304.5   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/6d/8b/5e/68619cb02962978c6cc8eaf68ca23ef28c69de7e086740702b
#7 304.5   Building wheel for construct (setup.py): started
#7 304.6   Building wheel for construct (setup.py): finished with status 'done'
#7 304.6   Created wheel for construct: filename=construct-2.10.68-py3-none-any.whl size=59226 sha256=0341d1a9dd37d7634443e76e0f13216ff8c722c1e6ba2226ef70c4e4153ffc73
#7 304.6   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/00/1c/64/ddaac89a721654e15e30ae193023c26da4c8677547cb38268b
#7 304.6   Building wheel for fastecdsa (pyproject.toml): started
#7 305.3   Building wheel for fastecdsa (pyproject.toml): finished with status 'done'
#7 305.3   Created wheel for fastecdsa: filename=fastecdsa-2.3.0-cp39-cp39-linux_aarch64.whl size=58634 sha256=3466cc91c76b2a68e89fa2e6f3f740e9351c0feef4627ab759c76494e519973f
#7 305.3   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/70/6c/b6/666407fc61a5ead4661e6e856523be9911b0735658e7dd3bf0
#7 305.3   Building wheel for jsonrpcclient (setup.py): started
#7 305.4   Building wheel for jsonrpcclient (setup.py): finished with status 'done'
#7 305.4   Created wheel for jsonrpcclient: filename=jsonrpcclient-4.0.2-py3-none-any.whl size=5766 sha256=43a82191e73631615454cd5cbb41faf2ef6db0b231480287c4fc2b6f51ad6a6c
#7 305.4   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/3a/35/49/0088ba8c10654d304df2546eddc0b57bf346cf7f65af9f0e03
#7 305.4   Building wheel for jsonrpcserver (setup.py): started
#7 305.6   Building wheel for jsonrpcserver (setup.py): finished with status 'done'
#7 305.6   Created wheel for jsonrpcserver: filename=jsonrpcserver-5.0.9-py3-none-any.whl size=15916 sha256=27f88c961822bd6200b7dd2bec3324c0eb0e84f76c1b923a9b4305f3bcc6db7d
#7 305.6   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/be/a7/3d/498fd39c08c10d42d1f8918d77986fc76ea3ece97b52fe6b84
#7 305.6   Building wheel for netstruct (setup.py): started
#7 305.7   Building wheel for netstruct (setup.py): finished with status 'done'
#7 305.7   Created wheel for netstruct: filename=netstruct-1.1.2-py3-none-any.whl size=5560 sha256=eb557fb341d502d2bc0a76c75ea4959d42919f8eb45807ecf6f0eabeb05485cf
#7 305.7   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/3c/6a/4e/f49f8743e7be7571b7c2be49f59a94816fa6ae8b5d72f645f3
#7 305.7   Building wheel for pendulum (pyproject.toml): started
#7 306.2   Building wheel for pendulum (pyproject.toml): finished with status 'done'
#7 306.2   Created wheel for pendulum: filename=pendulum-2.1.2-cp39-cp39-manylinux_2_28_aarch64.whl size=126267 sha256=df47ed8f39fbc12acf8c54ca25512dccbe4af5924cbabae4e8c3c9a22eee4a62
#7 306.2   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/c9/c7/29/3cf0033406b18958d1a7b107c38be2405ef9c081b64a264fd5
#7 306.2   Building wheel for pyblake2 (setup.py): started
#7 306.9   Building wheel for pyblake2 (setup.py): finished with status 'done'
#7 306.9   Created wheel for pyblake2: filename=pyblake2-1.1.2-cp39-cp39-linux_aarch64.whl size=17204 sha256=d20ed9d9907033e6938e5f88a6c8ee4d7cbc40d98c9962c359c72e4e02b29093
#7 306.9   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/9f/cd/44/6f7f7db035dd1daadae9fb2f67d3072f7cee3d936da22a5e61
#7 306.9   Building wheel for pysha3 (setup.py): started
#7 308.4   Building wheel for pysha3 (setup.py): finished with status 'done'
#7 308.4   Created wheel for pysha3: filename=pysha3-1.0.2-cp39-cp39-linux_aarch64.whl size=36223 sha256=4471049d870bc6cce327adf4e7edce73d2cb2bcdce7040b90d65b99fa39d096d
#7 308.4   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/17/9d/00/86e22a32b0109bd3c8797adf13a74427aa38e6ad1135633d50
#7 308.4   Building wheel for pysodium (setup.py): started
#7 308.5   Building wheel for pysodium (setup.py): finished with status 'done'
#7 308.5   Created wheel for pysodium: filename=pysodium-0.7.12-py3-none-any.whl size=13478 sha256=f70b74ed1ec99be12593d73e843b1d3ddb8f1df408e66399b0dd2425cb1a7f43
#7 308.5   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/5f/df/d9/8f1d883c041bc856807ae43e4ab07e179bfa32cf737c383b54
#7 308.5   Building wheel for secp256k1 (setup.py): started
#7 311.1   Building wheel for secp256k1 (setup.py): finished with status 'error'
#7 311.1   error: subprocess-exited-with-error
#7 311.1   
#7 311.1   × python setup.py bdist_wheel did not run successfully.
#7 311.1   │ exit code: 1
#7 311.1   ╰─> [152 lines of output]
#7 311.1       0.29
#7 311.1       Using bundled libsecp256k1
#7 311.1       running bdist_wheel
#7 311.1       The [wheel] section is deprecated. Use [bdist_wheel] instead.
#7 311.1       running build
#7 311.1       running build_py
#7 311.1       creating build
#7 311.1       creating build/lib.linux-aarch64-3.9
#7 311.1       creating build/lib.linux-aarch64-3.9/secp256k1
#7 311.1       copying secp256k1/__main__.py -> build/lib.linux-aarch64-3.9/secp256k1
#7 311.1       copying secp256k1/__init__.py -> build/lib.linux-aarch64-3.9/secp256k1
#7 311.1       running build_clib
#7 311.1       Building experimental
#7 311.1       checking build system type... aarch64-unknown-linux-gnu
#7 311.1       checking host system type... aarch64-unknown-linux-gnu
#7 311.1       checking for a BSD-compatible install... /usr/bin/install -c
#7 311.1       checking whether build environment is sane... yes
#7 311.1       checking for a thread-safe mkdir -p... /bin/mkdir -p
#7 311.1       checking for gawk... no
#7 311.1       checking for mawk... mawk
#7 311.1       checking whether make sets $(MAKE)... no
#7 311.1       checking whether make supports nested variables... no
#7 311.1       checking how to print strings... printf
#7 311.1       checking whether make supports the include directive... no
#7 311.1       checking for gcc... gcc
#7 311.1       checking whether the C compiler works... yes
#7 311.1       checking for C compiler default output file name... a.out
#7 311.1       checking for suffix of executables...
#7 311.1       checking whether we are cross compiling... no
#7 311.1       checking for suffix of object files... o
#7 311.1       checking whether we are using the GNU C compiler... yes
#7 311.1       checking whether gcc accepts -g... yes
#7 311.1       checking for gcc option to accept ISO C89... none needed
#7 311.1       checking whether gcc understands -c and -o together... yes
#7 311.1       checking dependency style of gcc... none
#7 311.1       checking for a sed that does not truncate output... /bin/sed
#7 311.1       checking for grep that handles long lines and -e... /bin/grep
#7 311.1       checking for egrep... /bin/grep -E
#7 311.1       checking for fgrep... /bin/grep -F
#7 311.1       checking for ld used by gcc... /usr/bin/ld
#7 311.1       checking if the linker (/usr/bin/ld) is GNU ld... yes
#7 311.1       checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
#7 311.1       checking the name lister (/usr/bin/nm -B) interface... BSD nm
#7 311.1       checking whether ln -s works... yes
#7 311.1       checking the maximum length of command line arguments... 1572864
#7 311.1       checking how to convert aarch64-unknown-linux-gnu file names to aarch64-unknown-linux-gnu format... func_convert_file_noop
#7 311.1       checking how to convert aarch64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop
#7 311.1       checking for /usr/bin/ld option to reload object files... -r
#7 311.1       checking for objdump... objdump
#7 311.1       checking how to recognize dependent libraries... pass_all
#7 311.1       checking for dlltool... no
#7 311.1       checking how to associate runtime and link libraries... printf %s\n
#7 311.1       checking for ar... ar
#7 311.1       checking for archiver @FILE support... @
#7 311.1       checking for strip... strip
#7 311.1       checking for ranlib... ranlib
#7 311.1       checking command to parse /usr/bin/nm -B output from gcc object... ok
#7 311.1       checking for sysroot... no
#7 311.1       checking for a working dd... /bin/dd
#7 311.1       checking how to truncate binary pipes... /bin/dd bs=4096 count=1
#7 311.1       checking for mt... no
#7 311.1       checking if : is a manifest tool... no
#7 311.1       checking how to run the C preprocessor... gcc -E
#7 311.1       checking for ANSI C header files... yes
#7 311.1       checking for sys/types.h... yes
#7 311.1       checking for sys/stat.h... yes
#7 311.1       checking for stdlib.h... yes
#7 311.1       checking for string.h... yes
#7 311.1       checking for memory.h... yes
#7 311.1       checking for strings.h... yes
#7 311.1       checking for inttypes.h... yes
#7 311.1       checking for stdint.h... yes
#7 311.1       checking for unistd.h... yes
#7 311.1       checking for dlfcn.h... yes
#7 311.1       checking for objdir... .libs
#7 311.1       checking if gcc supports -fno-rtti -fno-exceptions... no
#7 311.1       checking for gcc option to produce PIC... -fPIC -DPIC
#7 311.1       checking if gcc PIC flag -fPIC -DPIC works... yes
#7 311.1       checking if gcc static flag -static works... yes
#7 311.1       checking if gcc supports -c -o file.o... yes
#7 311.1       checking if gcc supports -c -o file.o... (cached) yes
#7 311.1       checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
#7 311.1       checking dynamic linker characteristics... GNU/Linux ld.so
#7 311.1       checking how to hardcode library paths into programs... immediate
#7 311.1       checking whether stripping libraries is possible... yes
#7 311.1       checking if libtool supports shared libraries... yes
#7 311.1       checking whether to build shared libraries... no
#7 311.1       checking whether to build static libraries... yes
#7 311.1       checking whether make supports nested variables... (cached) no
#7 311.1       checking for pkg-config... /usr/bin/pkg-config
#7 311.1       checking pkg-config is at least version 0.9.0... yes
#7 311.1       checking for ar... /usr/bin/ar
#7 311.1       checking for ranlib... /usr/bin/ranlib
#7 311.1       checking for strip... /usr/bin/strip
#7 311.1       checking for gcc option to accept ISO C89... (cached) none needed
#7 311.1       checking dependency style of gcc... none
#7 311.1       checking if gcc supports -Werror=unknown-warning-option... no
#7 311.1       checking if gcc supports -std=c89 -pedantic -Wno-long-long -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef... yes
#7 311.1       checking if gcc supports -Wno-overlength-strings... yes
#7 311.1       checking if gcc supports -Wall... yes
#7 311.1       checking if gcc supports -Wno-unused-function... yes
#7 311.1       checking if gcc supports -Wextra... yes
#7 311.1       checking if gcc supports -Wcast-align... yes
#7 311.1       checking if gcc supports -Wcast-align=strict... yes
#7 311.1       checking if gcc supports -Wconditional-uninitialized... no
#7 311.1       checking if gcc supports -fvisibility=hidden... yes
#7 311.1       checking valgrind/memcheck.h usability... no
#7 311.1       checking valgrind/memcheck.h presence... no
#7 311.1       checking for valgrind/memcheck.h... no
#7 311.1       checking for x86_64 assembly availability... no
#7 311.1       configure: ******
#7 311.1       configure: WARNING: experimental build
#7 311.1       configure: Experimental features do not have stable APIs or properties, and may not be safe for production use.
#7 311.1       configure: Building extrakeys module: yes
#7 311.1       configure: Building schnorrsig module: yes
#7 311.1       configure: ******
#7 311.1       checking that generated files are newer than configure... done
#7 311.1       configure: creating ./config.status
#7 311.1       config.status: creating Makefile
#7 311.1       config.status: creating libsecp256k1.pc
#7 311.1       config.status: creating src/libsecp256k1-config.h
#7 311.1       config.status: executing depfiles commands
#7 311.1       config.status: executing libtool commands
#7 311.1       
#7 311.1       Build Options:
#7 311.1         with ecmult precomp     = yes
#7 311.1         with external callbacks = no
#7 311.1         with benchmarks         = yes
#7 311.1         with tests              = yes
#7 311.1         with coverage           = no
#7 311.1         module ecdh             = yes
#7 311.1         module recovery         = yes
#7 311.1         module extrakeys        = yes
#7 311.1         module schnorrsig       = yes
#7 311.1       
#7 311.1         asm                     = no
#7 311.1         ecmult window size      = 15
#7 311.1         ecmult gen prec. bits   = 4
#7 311.1       
#7 311.1         valgrind                = no
#7 311.1         CC                      = gcc
#7 311.1         CPPFLAGS                =
#7 311.1         SECP_CFLAGS             = -O2  -std=c89 -pedantic -Wno-long-long -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef -Wno-overlength-strings -Wall -Wno-unused-function -Wextra -Wcast-align -Wcast-align=strict -fvisibility=hidden
#7 311.1         CFLAGS                  = -g -O2
#7 311.1         LDFLAGS                 =
#7 311.1       
#7 311.1         CC_FOR_BUILD            = gcc
#7 311.1         CPPFLAGS_FOR_BUILD      =
#7 311.1         SECP_CFLAGS_FOR_BUILD   = -O2  -std=c89 -pedantic -Wno-long-long -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef -Wno-overlength-strings -Wall -Wno-unused-function -Wextra -Wcast-align -Wcast-align=strict -fvisibility=hidden
#7 311.1         CFLAGS_FOR_BUILD        = -g -O2
#7 311.1         LDFLAGS_FOR_BUILD       =
#7 311.1       error: [Errno 2] No such file or directory: 'make'
#7 311.1       [end of output]
#7 311.1   
#7 311.1   note: This error originates from a subprocess, and is likely not a problem with pip.
#7 311.1   ERROR: Failed building wheel for secp256k1
#7 311.1   Running setup.py clean for secp256k1
#7 311.3   Building wheel for strict-rfc3339 (setup.py): started
#7 311.4   Building wheel for strict-rfc3339 (setup.py): finished with status 'done'
#7 311.4   Created wheel for strict-rfc3339: filename=strict_rfc3339-0.7-py3-none-any.whl size=18147 sha256=8eb9d52e73b8da70ec5d8270184e22efacb5a8bc88101da2f93be2049a4ecc21
#7 311.4   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/25/38/74/7ec7f77ec64b2907430120931ba588b40e6e26f02d4df5be35
#7 311.4   Building wheel for crc16 (setup.py): started
#7 311.6   Building wheel for crc16 (setup.py): finished with status 'done'
#7 311.6   Created wheel for crc16: filename=crc16-0.1.1-cp39-cp39-linux_aarch64.whl size=11426 sha256=f551e0ae6adaaf6343b33443a0655b371a9f5d30c8869d7d69a5b471f22a2b40
#7 311.6   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/5f/f8/1f/f2bc1588af5f7af783aa1d4fb9ce5650292ff29ade704ab06b
#7 311.6   Building wheel for ed25519 (setup.py): started
#7 312.5   Building wheel for ed25519 (setup.py): finished with status 'done'
#7 312.5   Created wheel for ed25519: filename=ed25519-1.5-cp39-cp39-linux_aarch64.whl size=70588 sha256=abca4e93455805d5d6b12538ca6f80d3e9ff02dff8efb5786c651fe571b185dd
#7 312.5   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/7c/18/e6/5b7d4ee6059b8b3fddd8a20b5a3ae70309c8d839b25b2992e5
#7 312.5   Building wheel for SSEClient (setup.py): started
#7 312.7   Building wheel for SSEClient (setup.py): finished with status 'done'
#7 312.7   Created wheel for SSEClient: filename=sseclient-0.0.27-py3-none-any.whl size=5585 sha256=6f6419136f9fa64fd1110a42b7428c957a4e30a2afb2fec38684ec7c2ab9d506
#7 312.7   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/73/21/3f/9d20c05c1c9312ab61bc7bf63bb2c189a71e800cb028fa8d2a
#7 312.7   Building wheel for psutil (pyproject.toml): started
#7 313.4   Building wheel for psutil (pyproject.toml): finished with status 'done'
#7 313.4   Created wheel for psutil: filename=psutil-5.9.4-cp39-abi3-linux_aarch64.whl size=232131 sha256=0c2e37fc18854743b5ab3d701b71095bfb2cf3b5213f304a4d8f6d56bca92681
#7 313.4   Stored in directory: /tmp/pip-ephem-wheel-cache-yayoz5g8/wheels/b3/e1/ef/72253145950aea37e83c8c13a844c583e2b575f1c93598901d
#7 313.4 Successfully built termcolor apischema bson construct fastecdsa jsonrpcclient jsonrpcserver netstruct pendulum pyblake2 pysha3 pysodium strict-rfc3339 crc16 ed25519 SSEClient psutil
#7 313.4 Failed to build secp256k1
#7 314.1 Installing collected packages: webencodings, wcwidth, types-cachetools, termcolor, strict-rfc3339, Send2Trash, rfc3986, pysodium, pysha3, pyblake2, py-sr25519-bindings, py-ed25519-bindings, py-bip39-bindings, pure-eval, ptyprocess, ply, pickleshare, netstruct, mypy-extensions, msgpack, mistune, jsonrpcclient, ipython-genutils, fastjsonschema, executing, ed25519, crc16, charset-normalizer, cached-property, backcall, zipp, xxhash, wrapt, websockets, websocket-client, webcolors, urllib3, uri-template, typing-extensions, traitlets, tqdm, tornado, toolz, toml, tinycss2, tabulate, soupsieve, solders, sniffio, six, simplejson, rfc3986-validator, pyzmq, pyyaml, pytzdata, python-json-logger, pyrsistent, pygments, pycryptodomex, pycryptodome, pycparser, py, psutil, prompt-toolkit, prometheus-client, pluggy, platformdirs, pexpect, parso, pandocfilters, packaging, numpy, nest-asyncio, multidict, more-itertools, mnemonic, markupsafe, jupyterlab-pygments, jsonpointer, iniconfig, idna, h11, graphql-core, fqdn, fastecdsa, exceptiongroup, eth-typing, eth-hash, entrypoints, defusedxml, decorator, debugpy, construct, click, certifi, cbor2, cachetools, bech32, based58, base58, backoff, attrs, apischema, yarl, terminado, rfc3339-validator, requests, python-dateutil, pytest, oslash, matplotlib-inline, jupyter-core, jsonschema, jinja2, jedi, importlib-metadata, ecdsa, deprecation, cytoolz, construct-typing, comm, cffi, cattrs, bleach, beautifulsoup4, asttokens, anyio, stack-data, SSEClient, secp256k1, scalecodec, pynacl, pendulum, nbformat, jupyter-server-terminals, jupyter-client, jsonrpcserver, httpcore, gql, eth-utils, docker, bson, arrow, argon2-cffi-bindings, testcontainers, stellar_base, py-ecc, py-algorand-sdk, nbclient, isoduration, ipython, httpx, eth-keys, argon2-cffi, substrate-interface, solana, nbconvert, ipykernel, jupyter-events, jupyter-server, notebook-shim, nbclassic, notebook, pytezos
#7 319.9   Running setup.py install for secp256k1: started
#7 322.5   Running setup.py install for secp256k1: finished with status 'error'
#7 322.5   error: subprocess-exited-with-error
#7 322.5   
#7 322.5   × Running setup.py install for secp256k1 did not run successfully.
#7 322.5   │ exit code: 1
#7 322.5   ╰─> [151 lines of output]
#7 322.5       0.29
#7 322.5       Using bundled libsecp256k1
#7 322.5       running install
#7 322.5       running build
#7 322.5       running build_py
#7 322.5       creating build
#7 322.5       creating build/lib.linux-aarch64-3.9
#7 322.5       creating build/lib.linux-aarch64-3.9/secp256k1
#7 322.5       copying secp256k1/__main__.py -> build/lib.linux-aarch64-3.9/secp256k1
#7 322.5       copying secp256k1/__init__.py -> build/lib.linux-aarch64-3.9/secp256k1
#7 322.5       running build_clib
#7 322.5       Building experimental
#7 322.5       checking build system type... aarch64-unknown-linux-gnu
#7 322.5       checking host system type... aarch64-unknown-linux-gnu
#7 322.5       checking for a BSD-compatible install... /usr/bin/install -c
#7 322.5       checking whether build environment is sane... yes
#7 322.5       checking for a thread-safe mkdir -p... /bin/mkdir -p
#7 322.5       checking for gawk... no
#7 322.5       checking for mawk... mawk
#7 322.5       checking whether make sets $(MAKE)... no
#7 322.5       checking whether make supports nested variables... no
#7 322.5       checking how to print strings... printf
#7 322.5       checking whether make supports the include directive... no
#7 322.5       checking for gcc... gcc
#7 322.5       checking whether the C compiler works... yes
#7 322.5       checking for C compiler default output file name... a.out
#7 322.5       checking for suffix of executables...
#7 322.5       checking whether we are cross compiling... no
#7 322.5       checking for suffix of object files... o
#7 322.5       checking whether we are using the GNU C compiler... yes
#7 322.5       checking whether gcc accepts -g... yes
#7 322.5       checking for gcc option to accept ISO C89... none needed
#7 322.5       checking whether gcc understands -c and -o together... yes
#7 322.5       checking dependency style of gcc... none
#7 322.5       checking for a sed that does not truncate output... /bin/sed
#7 322.5       checking for grep that handles long lines and -e... /bin/grep
#7 322.5       checking for egrep... /bin/grep -E
#7 322.5       checking for fgrep... /bin/grep -F
#7 322.5       checking for ld used by gcc... /usr/bin/ld
#7 322.5       checking if the linker (/usr/bin/ld) is GNU ld... yes
#7 322.5       checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
#7 322.5       checking the name lister (/usr/bin/nm -B) interface... BSD nm
#7 322.5       checking whether ln -s works... yes
#7 322.5       checking the maximum length of command line arguments... 1572864
#7 322.5       checking how to convert aarch64-unknown-linux-gnu file names to aarch64-unknown-linux-gnu format... func_convert_file_noop
#7 322.5       checking how to convert aarch64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop
#7 322.5       checking for /usr/bin/ld option to reload object files... -r
#7 322.5       checking for objdump... objdump
#7 322.5       checking how to recognize dependent libraries... pass_all
#7 322.5       checking for dlltool... no
#7 322.5       checking how to associate runtime and link libraries... printf %s\n
#7 322.5       checking for ar... ar
#7 322.5       checking for archiver @FILE support... @
#7 322.5       checking for strip... strip
#7 322.5       checking for ranlib... ranlib
#7 322.5       checking command to parse /usr/bin/nm -B output from gcc object... ok
#7 322.5       checking for sysroot... no
#7 322.5       checking for a working dd... /bin/dd
#7 322.5       checking how to truncate binary pipes... /bin/dd bs=4096 count=1
#7 322.5       checking for mt... no
#7 322.5       checking if : is a manifest tool... no
#7 322.5       checking how to run the C preprocessor... gcc -E
#7 322.5       checking for ANSI C header files... yes
#7 322.5       checking for sys/types.h... yes
#7 322.5       checking for sys/stat.h... yes
#7 322.5       checking for stdlib.h... yes
#7 322.5       checking for string.h... yes
#7 322.5       checking for memory.h... yes
#7 322.5       checking for strings.h... yes
#7 322.5       checking for inttypes.h... yes
#7 322.5       checking for stdint.h... yes
#7 322.5       checking for unistd.h... yes
#7 322.5       checking for dlfcn.h... yes
#7 322.5       checking for objdir... .libs
#7 322.5       checking if gcc supports -fno-rtti -fno-exceptions... no
#7 322.5       checking for gcc option to produce PIC... -fPIC -DPIC
#7 322.5       checking if gcc PIC flag -fPIC -DPIC works... yes
#7 322.5       checking if gcc static flag -static works... yes
#7 322.5       checking if gcc supports -c -o file.o... yes
#7 322.5       checking if gcc supports -c -o file.o... (cached) yes
#7 322.5       checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
#7 322.5       checking dynamic linker characteristics... GNU/Linux ld.so
#7 322.5       checking how to hardcode library paths into programs... immediate
#7 322.5       checking whether stripping libraries is possible... yes
#7 322.5       checking if libtool supports shared libraries... yes
#7 322.5       checking whether to build shared libraries... no
#7 322.5       checking whether to build static libraries... yes
#7 322.5       checking whether make supports nested variables... (cached) no
#7 322.5       checking for pkg-config... /usr/bin/pkg-config
#7 322.5       checking pkg-config is at least version 0.9.0... yes
#7 322.5       checking for ar... /usr/bin/ar
#7 322.5       checking for ranlib... /usr/bin/ranlib
#7 322.5       checking for strip... /usr/bin/strip
#7 322.5       checking for gcc option to accept ISO C89... (cached) none needed
#7 322.5       checking dependency style of gcc... none
#7 322.5       checking if gcc supports -Werror=unknown-warning-option... no
#7 322.5       checking if gcc supports -std=c89 -pedantic -Wno-long-long -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef... yes
#7 322.5       checking if gcc supports -Wno-overlength-strings... yes
#7 322.5       checking if gcc supports -Wall... yes
#7 322.5       checking if gcc supports -Wno-unused-function... yes
#7 322.5       checking if gcc supports -Wextra... yes
#7 322.5       checking if gcc supports -Wcast-align... yes
#7 322.5       checking if gcc supports -Wcast-align=strict... yes
#7 322.5       checking if gcc supports -Wconditional-uninitialized... no
#7 322.5       checking if gcc supports -fvisibility=hidden... yes
#7 322.5       checking valgrind/memcheck.h usability... no
#7 322.5       checking valgrind/memcheck.h presence... no
#7 322.5       checking for valgrind/memcheck.h... no
#7 322.5       checking for x86_64 assembly availability... no
#7 322.5       configure: ******
#7 322.5       configure: WARNING: experimental build
#7 322.5       configure: Experimental features do not have stable APIs or properties, and may not be safe for production use.
#7 322.5       configure: Building extrakeys module: yes
#7 322.5       configure: Building schnorrsig module: yes
#7 322.5       configure: ******
#7 322.5       checking that generated files are newer than configure... done
#7 322.5       configure: creating ./config.status
#7 322.5       config.status: creating Makefile
#7 322.5       config.status: creating libsecp256k1.pc
#7 322.5       config.status: creating src/libsecp256k1-config.h
#7 322.5       config.status: executing depfiles commands
#7 322.5       config.status: executing libtool commands
#7 322.5       
#7 322.5       Build Options:
#7 322.5         with ecmult precomp     = yes
#7 322.5         with external callbacks = no
#7 322.5         with benchmarks         = yes
#7 322.5         with tests              = yes
#7 322.5         with coverage           = no
#7 322.5         module ecdh             = yes
#7 322.5         module recovery         = yes
#7 322.5         module extrakeys        = yes
#7 322.5         module schnorrsig       = yes
#7 322.5       
#7 322.5         asm                     = no
#7 322.5         ecmult window size      = 15
#7 322.5         ecmult gen prec. bits   = 4
#7 322.5       
#7 322.5         valgrind                = no
#7 322.5         CC                      = gcc
#7 322.5         CPPFLAGS                =
#7 322.5         SECP_CFLAGS             = -O2  -std=c89 -pedantic -Wno-long-long -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef -Wno-overlength-strings -Wall -Wno-unused-function -Wextra -Wcast-align -Wcast-align=strict -fvisibility=hidden
#7 322.5         CFLAGS                  = -g -O2
#7 322.5         LDFLAGS                 =
#7 322.5       
#7 322.5         CC_FOR_BUILD            = gcc
#7 322.5         CPPFLAGS_FOR_BUILD      =
#7 322.5         SECP_CFLAGS_FOR_BUILD   = -O2  -std=c89 -pedantic -Wno-long-long -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef -Wno-overlength-strings -Wall -Wno-unused-function -Wextra -Wcast-align -Wcast-align=strict -fvisibility=hidden
#7 322.5         CFLAGS_FOR_BUILD        = -g -O2
#7 322.5         LDFLAGS_FOR_BUILD       =
#7 322.5       error: [Errno 2] No such file or directory: 'make'
#7 322.5       [end of output]
#7 322.5   
#7 322.5   note: This error originates from a subprocess, and is likely not a problem with pip.
#7 322.5 error: legacy-install-failure
#7 322.5 
#7 322.5 × Encountered error while trying to install package.
#7 322.5 ╰─> secp256k1
#7 322.5 
#7 322.5 note: This is an issue with the package mentioned above, not pip.
#7 322.5 hint: See above for output from the failure.
------
executor failed running [/bin/sh -c set -ex             && apt-get update && apt-get install -y --no-install-recommends gcc libc-dev curl wget xz-utils libsodium-dev libsecp256k1-dev libgmp-dev pkg-config vim         && pip install --disable-pip-version-check --no-cache-dir -r /opt/requirements.txt     && rm -rf /var/lib/apt/lists/*]: exit code: 1

Missing dependencies (rust)

The Python environment requires packages that depend on rust (likely for Solana).

The Build the utility locally section of the README.md should add instructions regarding the rust dependency alongside the callout for python requirements.

Rust also needs to be configured to use the nightly release branch rustup default nightly

Docker image may also need modification.

Missing dependencies in script (Cardano)

Background
Fireblocks users might need to corroborate some addresses within a given workspace provided the workspace public key, as to ensure a backup with the private key matches the accounts generated by Fireblocks.

Introduction
When using ada_helpers to derive particular accounts, the following errors are displayed:

Traceback (most recent call last):
  File "address_derivation.py", line 3, in <module>
    from utils import ada_helpers, sol_helpers, dot_helpers
  File "/workspace/fireblocks-key-recovery-tool/utils/ada_helpers.py", line 3, in <module>
    import cbor2
ModuleNotFoundError: No module named 'cbor2'
Traceback (most recent call last):
  File "address_derivation.py", line 3, in <module>
    from utils import ada_helpers, sol_helpers, dot_helpers
  File "/workspace/fireblocks-key-recovery-tool/utils/ada_helpers.py", line 5, in <module>
    import bech32
ModuleNotFoundError: No module named 'bech32'

These errors happen in a few other dependencies, but this issue focuses in Cardano only.

Docker image build failure

When attempting to build the latest docker image pulled from this repository, the build process fails, referencing an issue with Cargo, the Rust package manager, missing. Output of failed build is attached:

dockererror.txt

Dockerfile. Build error. Missing build-essential

command: docker build -t fb_recover_key .

Docker version 20.10.10, build b485636

+ apt-get install -y --no-install-recommends curl wget xz-utils vim
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  libcurl4 libgpm2 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3
  libkrb5support0 libldap-2.4-2 libldap-common libnghttp2-14 libpcre2-8-0
  libpsl5 librtmp1 libsasl2-2 libsasl2-modules-db libssh2-1 vim-common
  vim-runtime xxd
Suggested packages:
  gpm krb5-doc krb5-user ctags vim-doc vim-scripts
Recommended packages:
  krb5-locales publicsuffix libsasl2-modules
The following NEW packages will be installed:
  curl libcurl4 libgpm2 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3
  libkrb5support0 libldap-2.4-2 libldap-common libnghttp2-14 libpcre2-8-0
  libpsl5 librtmp1 libsasl2-2 libsasl2-modules-db libssh2-1 vim vim-common
  vim-runtime wget xxd xz-utils
0 upgraded, 23 newly installed, 0 to remove and 16 not upgraded.
Need to get 10.9 MB of archives.
After this operation, 43.1 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian buster/main amd64 xxd amd64 2:8.1.0875-5 [140 kB]
Get:2 http://deb.debian.org/debian buster/main amd64 vim-common all 2:8.1.0875-5 [195 kB]
Get:3 http://deb.debian.org/debian buster/main amd64 libpcre2-8-0 amd64 10.32-5 [213 kB]
Get:4 http://deb.debian.org/debian buster/main amd64 libpsl5 amd64 0.20.2-2 [53.7 kB]
Get:5 http://deb.debian.org/debian buster/main amd64 wget amd64 1.20.1-1.1 [902 kB]
Get:6 http://deb.debian.org/debian buster/main amd64 xz-utils amd64 5.2.4-1 [183 kB]
Get:7 http://deb.debian.org/debian buster/main amd64 libkeyutils1 amd64 1.6-6 [15.0 kB]
Get:8 http://deb.debian.org/debian buster/main amd64 libkrb5support0 amd64 1.17-3+deb10u3 [65.8 kB]
Get:9 http://deb.debian.org/debian buster/main amd64 libk5crypto3 amd64 1.17-3+deb10u3 [122 kB]
Get:10 http://deb.debian.org/debian buster/main amd64 libkrb5-3 amd64 1.17-3+deb10u3 [370 kB]
Get:11 http://deb.debian.org/debian buster/main amd64 libgssapi-krb5-2 amd64 1.17-3+deb10u3 [158 kB]
Get:12 http://deb.debian.org/debian buster/main amd64 libsasl2-modules-db amd64 2.1.27+dfsg-1+deb10u1 [69.1 kB]
Get:13 http://deb.debian.org/debian buster/main amd64 libsasl2-2 amd64 2.1.27+dfsg-1+deb10u1 [106 kB]
Get:14 http://deb.debian.org/debian buster/main amd64 libldap-common all 2.4.47+dfsg-3+deb10u6 [90.0 kB]
Get:15 http://deb.debian.org/debian buster/main amd64 libldap-2.4-2 amd64 2.4.47+dfsg-3+deb10u6 [224 kB]
Get:16 http://deb.debian.org/debian buster/main amd64 libnghttp2-14 amd64 1.36.0-2+deb10u1 [85.0 kB]
Get:17 http://deb.debian.org/debian buster/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d.1-2 [60.5 kB]
Get:18 http://deb.debian.org/debian buster/main amd64 libssh2-1 amd64 1.8.0-2.1 [140 kB]
Get:19 http://deb.debian.org/debian buster/main amd64 libcurl4 amd64 7.64.0-4+deb10u2 [332 kB]
Get:20 http://deb.debian.org/debian buster/main amd64 curl amd64 7.64.0-4+deb10u2 [265 kB]
Get:21 http://deb.debian.org/debian buster/main amd64 libgpm2 amd64 1.20.7-5 [35.1 kB]
Get:22 http://deb.debian.org/debian buster/main amd64 vim-runtime all 2:8.1.0875-5 [5775 kB]
Get:23 http://deb.debian.org/debian buster/main amd64 vim amd64 2:8.1.0875-5 [1280 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 10.9 MB in 0s (46.7 MB/s)
Selecting previously unselected package xxd.
(Reading database ... 6840 files and directories currently installed.)
Preparing to unpack .../00-xxd_2%3a8.1.0875-5_amd64.deb ...
Unpacking xxd (2:8.1.0875-5) ...
Selecting previously unselected package vim-common.
Preparing to unpack .../01-vim-common_2%3a8.1.0875-5_all.deb ...
Unpacking vim-common (2:8.1.0875-5) ...
Selecting previously unselected package libpcre2-8-0:amd64.
Preparing to unpack .../02-libpcre2-8-0_10.32-5_amd64.deb ...
Unpacking libpcre2-8-0:amd64 (10.32-5) ...
Selecting previously unselected package libpsl5:amd64.
Preparing to unpack .../03-libpsl5_0.20.2-2_amd64.deb ...
Unpacking libpsl5:amd64 (0.20.2-2) ...
Selecting previously unselected package wget.
Preparing to unpack .../04-wget_1.20.1-1.1_amd64.deb ...
Unpacking wget (1.20.1-1.1) ...
Selecting previously unselected package xz-utils.
Preparing to unpack .../05-xz-utils_5.2.4-1_amd64.deb ...
Unpacking xz-utils (5.2.4-1) ...
Selecting previously unselected package libkeyutils1:amd64.
Preparing to unpack .../06-libkeyutils1_1.6-6_amd64.deb ...
Unpacking libkeyutils1:amd64 (1.6-6) ...
Selecting previously unselected package libkrb5support0:amd64.
Preparing to unpack .../07-libkrb5support0_1.17-3+deb10u3_amd64.deb ...
Unpacking libkrb5support0:amd64 (1.17-3+deb10u3) ...
Selecting previously unselected package libk5crypto3:amd64.
Preparing to unpack .../08-libk5crypto3_1.17-3+deb10u3_amd64.deb ...
Unpacking libk5crypto3:amd64 (1.17-3+deb10u3) ...
Selecting previously unselected package libkrb5-3:amd64.
Preparing to unpack .../09-libkrb5-3_1.17-3+deb10u3_amd64.deb ...
Unpacking libkrb5-3:amd64 (1.17-3+deb10u3) ...
Selecting previously unselected package libgssapi-krb5-2:amd64.
Preparing to unpack .../10-libgssapi-krb5-2_1.17-3+deb10u3_amd64.deb ...
Unpacking libgssapi-krb5-2:amd64 (1.17-3+deb10u3) ...
Selecting previously unselected package libsasl2-modules-db:amd64.
Preparing to unpack .../11-libsasl2-modules-db_2.1.27+dfsg-1+deb10u1_amd64.deb ...
Unpacking libsasl2-modules-db:amd64 (2.1.27+dfsg-1+deb10u1) ...
Selecting previously unselected package libsasl2-2:amd64.
Preparing to unpack .../12-libsasl2-2_2.1.27+dfsg-1+deb10u1_amd64.deb ...
Unpacking libsasl2-2:amd64 (2.1.27+dfsg-1+deb10u1) ...
Selecting previously unselected package libldap-common.
Preparing to unpack .../13-libldap-common_2.4.47+dfsg-3+deb10u6_all.deb ...
Unpacking libldap-common (2.4.47+dfsg-3+deb10u6) ...
Selecting previously unselected package libldap-2.4-2:amd64.
Preparing to unpack .../14-libldap-2.4-2_2.4.47+dfsg-3+deb10u6_amd64.deb ...
Unpacking libldap-2.4-2:amd64 (2.4.47+dfsg-3+deb10u6) ...
Selecting previously unselected package libnghttp2-14:amd64.
Preparing to unpack .../15-libnghttp2-14_1.36.0-2+deb10u1_amd64.deb ...
Unpacking libnghttp2-14:amd64 (1.36.0-2+deb10u1) ...
Selecting previously unselected package librtmp1:amd64.
Preparing to unpack .../16-librtmp1_2.4+20151223.gitfa8646d.1-2_amd64.deb ...
Unpacking librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2) ...
Selecting previously unselected package libssh2-1:amd64.
Preparing to unpack .../17-libssh2-1_1.8.0-2.1_amd64.deb ...
Unpacking libssh2-1:amd64 (1.8.0-2.1) ...
Selecting previously unselected package libcurl4:amd64.
Preparing to unpack .../18-libcurl4_7.64.0-4+deb10u2_amd64.deb ...
Unpacking libcurl4:amd64 (7.64.0-4+deb10u2) ...
Selecting previously unselected package curl.
Preparing to unpack .../19-curl_7.64.0-4+deb10u2_amd64.deb ...
Unpacking curl (7.64.0-4+deb10u2) ...
Selecting previously unselected package libgpm2:amd64.
Preparing to unpack .../20-libgpm2_1.20.7-5_amd64.deb ...
Unpacking libgpm2:amd64 (1.20.7-5) ...
Selecting previously unselected package vim-runtime.
Preparing to unpack .../21-vim-runtime_2%3a8.1.0875-5_all.deb ...
Adding 'diversion of /usr/share/vim/vim81/doc/help.txt to /usr/share/vim/vim81/doc/help.txt.vim-tiny by vim-runtime'
Adding 'diversion of /usr/share/vim/vim81/doc/tags to /usr/share/vim/vim81/doc/tags.vim-tiny by vim-runtime'
Unpacking vim-runtime (2:8.1.0875-5) ...
Selecting previously unselected package vim.
Preparing to unpack .../22-vim_2%3a8.1.0875-5_amd64.deb ...
Unpacking vim (2:8.1.0875-5) ...
Setting up libkeyutils1:amd64 (1.6-6) ...
Setting up libpsl5:amd64 (0.20.2-2) ...
Setting up libgpm2:amd64 (1.20.7-5) ...
Setting up libnghttp2-14:amd64 (1.36.0-2+deb10u1) ...
Setting up libldap-common (2.4.47+dfsg-3+deb10u6) ...
Setting up xxd (2:8.1.0875-5) ...
Setting up libkrb5support0:amd64 (1.17-3+deb10u3) ...
Setting up libsasl2-modules-db:amd64 (2.1.27+dfsg-1+deb10u1) ...
Setting up vim-common (2:8.1.0875-5) ...
Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2) ...
Setting up xz-utils (5.2.4-1) ...
update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
update-alternatives: warning: skip creation of /usr/share/man/man1/lzma.1.gz because associated file /usr/share/man/man1/xz.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/unlzma.1.gz because associated file /usr/share/man/man1/unxz.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzcat.1.gz because associated file /usr/share/man/man1/xzcat.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzmore.1.gz because associated file /usr/share/man/man1/xzmore.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzless.1.gz because associated file /usr/share/man/man1/xzless.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzdiff.1.gz because associated file /usr/share/man/man1/xzdiff.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzcmp.1.gz because associated file /usr/share/man/man1/xzcmp.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzgrep.1.gz because associated file /usr/share/man/man1/xzgrep.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzegrep.1.gz because associated file /usr/share/man/man1/xzegrep.1.gz (of link group lzma) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/lzfgrep.1.gz because associated file /usr/share/man/man1/xzfgrep.1.gz (of link group lzma) doesn't exist
Setting up libpcre2-8-0:amd64 (10.32-5) ...
Setting up libk5crypto3:amd64 (1.17-3+deb10u3) ...
Setting up libsasl2-2:amd64 (2.1.27+dfsg-1+deb10u1) ...
Setting up libssh2-1:amd64 (1.8.0-2.1) ...
Setting up libkrb5-3:amd64 (1.17-3+deb10u3) ...
Setting up vim-runtime (2:8.1.0875-5) ...
Setting up vim (2:8.1.0875-5) ...
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
update-alternatives: warning: skip creation of /usr/share/man/da/man1/vi.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/de/man1/vi.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/fr/man1/vi.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/it/man1/vi.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ja/man1/vi.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/pl/man1/vi.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ru/man1/vi.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/vi.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group vi) doesn't exist
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
update-alternatives: warning: skip creation of /usr/share/man/da/man1/view.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/de/man1/view.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/fr/man1/view.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/it/man1/view.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ja/man1/view.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/pl/man1/view.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ru/man1/view.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/view.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group view) doesn't exist
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
update-alternatives: warning: skip creation of /usr/share/man/da/man1/ex.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/de/man1/ex.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/fr/man1/ex.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/it/man1/ex.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ja/man1/ex.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/pl/man1/ex.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ru/man1/ex.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/ex.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group ex) doesn't exist
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
update-alternatives: warning: skip creation of /usr/share/man/da/man1/editor.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/de/man1/editor.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/fr/man1/editor.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/it/man1/editor.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ja/man1/editor.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/pl/man1/editor.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/ru/man1/editor.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/editor.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group editor) doesn't exist
Setting up wget (1.20.1-1.1) ...
Setting up libldap-2.4-2:amd64 (2.4.47+dfsg-3+deb10u6) ...
Setting up libgssapi-krb5-2:amd64 (1.17-3+deb10u3) ...
Setting up libcurl4:amd64 (7.64.0-4+deb10u2) ...
Setting up curl (7.64.0-4+deb10u2) ...
Processing triggers for libc-bin (2.28-10) ...
+ pip install --disable-pip-version-check --no-cache-dir -r /opt/requirements.txt
Collecting pytest
  Downloading pytest-6.2.5-py3-none-any.whl (280 kB)
Collecting pycryptodome
  Downloading pycryptodome-3.11.0-cp35-abi3-manylinux2010_x86_64.whl (1.9 MB)
Collecting termcolor==1.1.0
  Downloading termcolor-1.1.0.tar.gz (3.9 kB)
Collecting substrate-interface
  Downloading substrate_interface-1.1.1-py3-none-any.whl (175 kB)
Collecting pluggy<2.0,>=0.12
  Downloading pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Collecting py>=1.8.2
  Downloading py-1.11.0-py2.py3-none-any.whl (98 kB)
Collecting importlib-metadata>=0.12
  Downloading importlib_metadata-4.8.2-py3-none-any.whl (17 kB)
Collecting attrs>=19.2.0
  Downloading attrs-21.2.0-py2.py3-none-any.whl (53 kB)
Collecting iniconfig
  Downloading iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Collecting toml
  Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
Collecting packaging
  Downloading packaging-21.2-py3-none-any.whl (40 kB)
Collecting typing-extensions>=3.6.4
  Downloading typing_extensions-4.0.0-py3-none-any.whl (22 kB)
Collecting zipp>=0.5
  Downloading zipp-3.6.0-py3-none-any.whl (5.3 kB)
Collecting certifi>=2019.3.9
  Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
Collecting eth-keys<1,>=0.3.3
  Downloading eth_keys-0.3.3-py3-none-any.whl (20 kB)
Collecting scalecodec<2,>=1.0.19
  Downloading scalecodec-1.0.19-py3-none-any.whl (73 kB)
Collecting py-bip39-bindings~=0.1.6
  Downloading py_bip39_bindings-0.1.7-cp37-cp37m-manylinux_2_24_x86_64.whl (906 kB)
Collecting xxhash<3,>=1.3.0
  Downloading xxhash-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl (243 kB)
Collecting py-sr25519-bindings~=0.1.2
  Downloading py_sr25519_bindings-0.1.3-cp37-cp37m-manylinux_2_24_x86_64.whl (939 kB)
Collecting py-ed25519-bindings~=0.1.2
  Downloading py_ed25519_bindings-0.1.3-cp37-cp37m-manylinux_2_24_x86_64.whl (908 kB)
Collecting eth-utils<2,>=1.10.0
  Downloading eth_utils-1.10.0-py3-none-any.whl (24 kB)
Collecting ecdsa<1,>=0.17.0
  Downloading ecdsa-0.17.0-py2.py3-none-any.whl (119 kB)
Collecting requests<3,>=2.21.0
  Downloading requests-2.26.0-py2.py3-none-any.whl (62 kB)
Collecting base58<3,>=1.0.3
  Downloading base58-2.1.1-py3-none-any.whl (5.6 kB)
Collecting websocket-client<1,>=0.57.0
  Downloading websocket_client-0.59.0-py2.py3-none-any.whl (67 kB)
Collecting idna<4,>=2.1.0
  Downloading idna-3.3-py3-none-any.whl (61 kB)
Collecting six>=1.9.0
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting eth-typing<3.0.0,>=2.2.1
  Downloading eth_typing-2.2.2-py3-none-any.whl (6.2 kB)
Collecting cytoolz<1.0.0,>=0.10.1
  Downloading cytoolz-0.11.2.tar.gz (481 kB)
Collecting eth-hash<0.4.0,>=0.3.1
  Downloading eth_hash-0.3.2-py3-none-any.whl (8.8 kB)
Collecting toolz>=0.8.0
  Downloading toolz-0.11.2-py3-none-any.whl (55 kB)
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.7-py2.py3-none-any.whl (138 kB)
Collecting charset-normalizer~=2.0.0
  Downloading charset_normalizer-2.0.7-py3-none-any.whl (38 kB)
Collecting more-itertools
  Downloading more_itertools-8.11.0-py3-none-any.whl (54 kB)
Collecting pyparsing<3,>=2.0.2
  Downloading pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Building wheels for collected packages: termcolor, cytoolz
  Building wheel for termcolor (setup.py): started
  Building wheel for termcolor (setup.py): finished with status 'done'
  Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4829 sha256=3140e5b4ab74cc4acf6829598454f97eaa521ecf01f179826313722949fbabd4
  Stored in directory: /tmp/pip-ephem-wheel-cache-59vstylw/wheels/3f/e3/ec/8a8336ff196023622fbcb36de0c5a5c218cbb24111d1d4c7f2
  Building wheel for cytoolz (setup.py): started
  Building wheel for cytoolz (setup.py): finished with status 'error'
  ERROR: Command errored out with exit status 1:
   command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/setup.py'"'"'; __file__='"'"'/tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-tmp0xm8c
       cwd: /tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/
  Complete output (53 lines):
  ALERT: Cython not installed.  Building without Cython.
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.7
  creating build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/__init__.py -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/_signatures.py -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/compatibility.py -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/_version.py -> build/lib.linux-x86_64-3.7/cytoolz
  creating build/lib.linux-x86_64-3.7/cytoolz/curried
  copying cytoolz/curried/operator.py -> build/lib.linux-x86_64-3.7/cytoolz/curried
  copying cytoolz/curried/__init__.py -> build/lib.linux-x86_64-3.7/cytoolz/curried
  copying cytoolz/curried/exceptions.py -> build/lib.linux-x86_64-3.7/cytoolz/curried
  copying cytoolz/functoolz.pyx -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/itertoolz.pyx -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/recipes.pyx -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/utils.pyx -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/dicttoolz.pyx -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/cpython.pxd -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/__init__.pxd -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/itertoolz.pxd -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/functoolz.pxd -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/recipes.pxd -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/dicttoolz.pxd -> build/lib.linux-x86_64-3.7/cytoolz
  copying cytoolz/utils.pxd -> build/lib.linux-x86_64-3.7/cytoolz
  creating build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_inspect_args.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_none_safe.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_dicttoolz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_curried_toolzlike.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_compatibility.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_embedded_sigs.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_itertoolz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_doctests.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_signatures.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_tlz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/dev_skip_test.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_recipes.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_serialization.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_curried.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_utils.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_functoolz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_docstrings.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  copying cytoolz/tests/test_dev_skip_test.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
  running build_ext
  building 'cytoolz.dicttoolz' extension
  creating build/temp.linux-x86_64-3.7
  creating build/temp.linux-x86_64-3.7/cytoolz
  gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.7m -c cytoolz/dicttoolz.c -o build/temp.linux-x86_64-3.7/cytoolz/dicttoolz.o
  unable to execute 'gcc': No such file or directory
  error: command 'gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for cytoolz
  Running setup.py clean for cytoolz
Successfully built termcolor
Failed to build cytoolz
Installing collected packages: toolz, zipp, urllib3, typing-extensions, idna, eth-typing, eth-hash, cytoolz, charset-normalizer, certifi, six, requests, pyparsing, more-itertools, importlib-metadata, eth-utils, base58, xxhash, websocket-client, toml, scalecodec, pycryptodome, py-sr25519-bindings, py-ed25519-bindings, py-bip39-bindings, py, pluggy, packaging, iniconfig, eth-keys, ecdsa, attrs, termcolor, substrate-interface, pytest
    Running setup.py install for cytoolz: started
    Running setup.py install for cytoolz: finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/setup.py'"'"'; __file__='"'"'/tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-bjqzgzer/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.7m/cytoolz
         cwd: /tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/
    Complete output (53 lines):
    ALERT: Cython not installed.  Building without Cython.
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.7
    creating build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/__init__.py -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/_signatures.py -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/compatibility.py -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/_version.py -> build/lib.linux-x86_64-3.7/cytoolz
    creating build/lib.linux-x86_64-3.7/cytoolz/curried
    copying cytoolz/curried/operator.py -> build/lib.linux-x86_64-3.7/cytoolz/curried
    copying cytoolz/curried/__init__.py -> build/lib.linux-x86_64-3.7/cytoolz/curried
    copying cytoolz/curried/exceptions.py -> build/lib.linux-x86_64-3.7/cytoolz/curried
    copying cytoolz/functoolz.pyx -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/itertoolz.pyx -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/recipes.pyx -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/utils.pyx -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/dicttoolz.pyx -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/cpython.pxd -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/__init__.pxd -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/itertoolz.pxd -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/functoolz.pxd -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/recipes.pxd -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/dicttoolz.pxd -> build/lib.linux-x86_64-3.7/cytoolz
    copying cytoolz/utils.pxd -> build/lib.linux-x86_64-3.7/cytoolz
    creating build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_inspect_args.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_none_safe.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_dicttoolz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_curried_toolzlike.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_compatibility.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_embedded_sigs.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_itertoolz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_doctests.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_signatures.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_tlz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/dev_skip_test.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_recipes.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_serialization.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_curried.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_utils.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_functoolz.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_docstrings.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    copying cytoolz/tests/test_dev_skip_test.py -> build/lib.linux-x86_64-3.7/cytoolz/tests
    running build_ext
    building 'cytoolz.dicttoolz' extension
    creating build/temp.linux-x86_64-3.7
    creating build/temp.linux-x86_64-3.7/cytoolz
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.7m -c cytoolz/dicttoolz.c -o build/temp.linux-x86_64-3.7/cytoolz/dicttoolz.o
    unable to execute 'gcc': No such file or directory
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/setup.py'"'"'; __file__='"'"'/tmp/pip-install-q85qe0_s/cytoolz_9af36efed5c340ddb769ab3086112355/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-bjqzgzer/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.7m/cytoolz Check the logs for full command output.
The command '/bin/sh -c set -ex 		&& apt-get update && apt-get install -y --no-install-recommends curl wget xz-utils vim         && pip install --disable-pip-version-check --no-cache-dir -r /opt/requirements.txt 	&& rm -rf /var/lib/apt/lists/*' returned a non-zero code: 1

Error in library dependencies substrate-interface
Add build-essential or use the correct image

Recovery python script not asking for private key password on OpenSSL >3 versions

Hi Fireblocks

In the fireblocks Hard Key Recovery Setup Usage Guide it is mentioned that Ubuntu 18.04 or newer is required to run the key recovery tool. Generating the private key with the OpenSSL version (3.0.2) that ships with Ubuntu 20.04, results in a private key file format that is slightly different to prior OpenSSL versions, which in turn skips detection of password prompt in the fb_recovery_key.py script.

With OpenSSL 3.0.2 the result is

$ openssl genrsa -aes128 -out fb-recovery-prv.pem 4096
$ cat fb-recovery-prv.pem
-----BEGIN ENCRYPTED PRIVATE KEY-----
...

compare this to prior OpenSSL versions

$ openssl genrsa -aes128 -out fb-recovery-prv.pem 4096
$ cat fb-recovery-prv.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
...

On line fb_recovery_key.py#87 only the second line of the file is checked for the occurrence of ENCRYPTED:

with open(args.key, 'r') as _key:
   if 'ENCRYPTED' in _key.readlines()[1]:
      key_pass = getpass.getpass(prompt='Please enter recovery RSA private key passphrase:')
   else:
      key_pass = None    

Checking for the encrypted mobile_key presumably suffers from the same problem L83.

The fix is as easy as changing the conditional to

if 'ENCRYPTED' in ''.join(_key.readlines()[0:2]):

I will be providing a PR with the fix shortly.

Note that I'm not aware if this is specific to the OpenSSL version that ships with Ubuntu 20.04 or not. But I think making the detection more robust may benefit future changes too.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.