From cfa96a08d33f59795cf052b09f6e426ab812a8bc Mon Sep 17 00:00:00 2001 From: kdmukai Date: Mon, 27 Jun 2022 16:39:27 -0700 Subject: [PATCH 1/3] Update requirements.txt `embit` v0.5.0 merged the compiled secp256k1 binary for Pi Zero architecture (armv6l) so we no longer need to point to our fork. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5a58303a..81a74c78 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -embit @ git+https://github.com/seedsigner/embit.git@03cba13e0add64b241972c67e2aa970cb2e3a5d2 +embit==0.5.0 numpy==1.21.1 picamera==1.13 Pillow==8.2.0 From ee3bb475bf2790e7f5c2595c95ef3abce217c99b Mon Sep 17 00:00:00 2001 From: kdmukai Date: Mon, 27 Jun 2022 16:47:02 -0700 Subject: [PATCH 2/3] Removed loading spinner where no longer needed --- src/seedsigner/views/psbt_views.py | 12 ++--- src/seedsigner/views/seed_views.py | 77 +++++++++++++----------------- 2 files changed, 35 insertions(+), 54 deletions(-) diff --git a/src/seedsigner/views/psbt_views.py b/src/seedsigner/views/psbt_views.py index b5150388..3ad69f02 100644 --- a/src/seedsigner/views/psbt_views.py +++ b/src/seedsigner/views/psbt_views.py @@ -472,15 +472,9 @@ class PSBTFinalizeView(View): if selected_menu_num == 0: # Sign PSBT - loading_screen = LoadingScreenThread(text="Signing PSBT...") - loading_screen.start() - - try: - sig_cnt = PSBTParser.sig_count(psbt) - psbt.sign_with(psbt_parser.root) - trimmed_psbt = PSBTParser.trim(psbt) - finally: - loading_screen.stop() + sig_cnt = PSBTParser.sig_count(psbt) + psbt.sign_with(psbt_parser.root) + trimmed_psbt = PSBTParser.trim(psbt) if sig_cnt == PSBTParser.sig_count(trimmed_psbt): # Signing failed / didn't do anything diff --git a/src/seedsigner/views/seed_views.py b/src/seedsigner/views/seed_views.py index 13a26f81..5acafd9e 100644 --- a/src/seedsigner/views/seed_views.py +++ b/src/seedsigner/views/seed_views.py @@ -643,53 +643,42 @@ class SeedExportXpubDetailsView(View): def run(self): - # The calc_derivation takes a few moments. Run the loading screen while we wait. - self.loading_screen = LoadingScreenThread(text="Generating xpub...") - self.loading_screen.start() + if self.script_type == SettingsConstants.CUSTOM_DERIVATION: + derivation_path = self.custom_derivation + else: + derivation_path = PSBTParser.calc_derivation( + network=self.settings.get_value(SettingsConstants.SETTING__NETWORK), + wallet_type=self.sig_type, + script_type=self.script_type + ) - try: - if self.script_type == SettingsConstants.CUSTOM_DERIVATION: - derivation_path = self.custom_derivation - else: - derivation_path = PSBTParser.calc_derivation( - network=self.settings.get_value(SettingsConstants.SETTING__NETWORK), - wallet_type=self.sig_type, - script_type=self.script_type - ) + if self.settings.get_value(SettingsConstants.SETTING__XPUB_DETAILS) == SettingsConstants.OPTION__ENABLED: + embit_network = NETWORKS[SettingsConstants.map_network_to_embit(self.settings.get_value(SettingsConstants.SETTING__NETWORK))] + version = embit.bip32.detect_version( + derivation_path, + default="xpub", + network=embit_network + ) - if self.settings.get_value(SettingsConstants.SETTING__XPUB_DETAILS) == SettingsConstants.OPTION__ENABLED: - embit_network = NETWORKS[SettingsConstants.map_network_to_embit(self.settings.get_value(SettingsConstants.SETTING__NETWORK))] - version = embit.bip32.detect_version( - derivation_path, - default="xpub", - network=embit_network - ) + root = embit.bip32.HDKey.from_seed( + self.seed.seed_bytes, + version=embit_network["xprv"] + ) - root = embit.bip32.HDKey.from_seed( - self.seed.seed_bytes, - version=embit_network["xprv"] - ) + fingerprint = hexlify(root.child(0).fingerprint).decode('utf-8') + xprv = root.derive(derivation_path) + xpub = xprv.to_public() + xpub_base58 = xpub.to_string(version=version) - fingerprint = hexlify(root.child(0).fingerprint).decode('utf-8') - xprv = root.derive(derivation_path) - xpub = xprv.to_public() - xpub_base58 = xpub.to_string(version=version) + selected_menu_num = seed_screens.SeedExportXpubDetailsScreen( + fingerprint=fingerprint, + has_passphrase=self.seed.passphrase is not None, + derivation_path=derivation_path, + xpub=xpub_base58, + ).display() - screen = seed_screens.SeedExportXpubDetailsScreen( - fingerprint=fingerprint, - has_passphrase=self.seed.passphrase is not None, - derivation_path=derivation_path, - xpub=xpub_base58, - ) - - self.loading_screen.stop() - selected_menu_num = screen.display() - - else: - selected_menu_num = 0 - - finally: - self.loading_screen.stop() + else: + selected_menu_num = 0 if selected_menu_num == 0: @@ -697,8 +686,6 @@ class SeedExportXpubDetailsView(View): SeedExportXpubQRDisplayView, { "seed_num": self.seed_num, - "sig_type": self.sig_type, - "script_type": self.script_type, "coordinator": self.coordinator, "derivation_path": derivation_path, } @@ -710,7 +697,7 @@ class SeedExportXpubDetailsView(View): class SeedExportXpubQRDisplayView(View): - def __init__(self, seed_num: int, sig_type: str, script_type: str, coordinator: str, derivation_path: str): + def __init__(self, seed_num: int, coordinator: str, derivation_path: str): super().__init__() self.seed = self.controller.get_seed(seed_num) From 9402ffe6f242e471e73f49cf2344d192747a26dc Mon Sep 17 00:00:00 2001 From: SeedSigner <65379725+SeedSigner@users.noreply.github.com> Date: Wed, 3 Aug 2022 09:11:01 -0500 Subject: [PATCH 3/3] Update README.md --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b4469cb4..a0b7a037 100644 --- a/README.md +++ b/README.md @@ -76,11 +76,19 @@ Notes: --------------- # Software Installation + +## Special Note on Minimizing Trust +As is the nature of pre-packaged software downloads, downloading and using the prepared SeedSigner release images means implicitly placing trust in the individual preparing those images; in our project the release images are prepared and signed by the eponymous creator of the project, SeedSigner "the person". That individual is additionally the only person in possession of the PGP keys that are used to sign the release images. + +However, one of the many advantages of the open source software model is that the need for this kind of trust can be negated by our users' ability to (1) review the project's source code and (2) assemble the operating image necessary to use the software themselves. From our project's inception, instructions to build a SeedSigner operating image (using precisely the same process that is used to create the prepared release images) have been made availabile. We have put a lot of thought and work into making these instructions easy to understand and follow, even for less technical users. These instructions can be found [here](docs/manual_installation.md). + +## Downloading the Software + The quickest and easiest way to install the software is to download the most recent "seedsigner_X_X_X.zip" file in the [software releases](https://github.com/SeedSigner/seedsigner/releases) section of this repository. -After downloading the .zip file, extract the seedsigner .img file, and write it to a MicroSD card (at least 4GB in size or larger). Then install the MicroSD in the assembled hardware and off you go. If your goal is a more trustless installation, you can follow the [manual installation instructions](docs/manual_installation.md). +After downloading the .zip file, extract the seedsigner .img file, and write it to a MicroSD card (at least 4GB in size or larger). Then install the MicroSD in the assembled hardware and off you go. -## Verifying Your Software +## Verifying the Software You can verify the data integrity and authenticity of the latest release with as little as three commands. This process assumes that you know [how to navigate on a terminal](https://terminalcheatsheet.com/guides/navigate-terminal) and have navigated to the folder where you have these four relevant files present: (This will most likely be your Downloads folder.) * seedsigner_pubkey.gpg (from the main folder of this repo)