work in progress

This commit is contained in:
newtonick
2021-08-31 19:58:16 +00:00
parent 710c67b29e
commit cb7ada8543
7 changed files with 28 additions and 25 deletions
+2 -2
View File
@@ -3,7 +3,7 @@ import time
from multiprocessing import Process, Queue
from subprocess import call
import os, sys
from embit import bip39, bip32
from embit import bip32
from embit.networks import NETWORKS
from binascii import hexlify
from threading import Thread
@@ -694,7 +694,7 @@ class Controller(Singleton):
# show transaction information before sign
self.menu_view.draw_modal(["Parsing PSBT"])
p = PSBTParser(psbt,seed.mnemonic_list,seed.passphrase,self.settings.network)
p = PSBTParser(psbt,seed,self.settings.network)
self.signing_tools_view.display_transaction_information(p)
input = self.buttons.wait_for([B.KEY_RIGHT, B.KEY_LEFT], False)
if input == B.KEY_LEFT:
+11 -12
View File
@@ -2,11 +2,12 @@ from embit import psbt, script, ec, bip32, bip39
from embit.networks import NETWORKS
from io import BytesIO
from seedsigner.models.seed import Seed
class PSBTParser():
def __init__(self, p, seed_phrase=[], passphrase="", network="main"):
self.seed_phrase = seed_phrase
self.passphrase = passphrase
def __init__(self, p, seed: Seed, network="main"):
self.seed = seed
self.network = network
self.psbt = p
@@ -18,17 +19,15 @@ class PSBTParser():
self.destination_addresses = []
self.self_addresses = []
self.seed = None
self.root = None
if self.seed_phrase != None:
self.parse(self.psbt,self.seed_phrase,self.passphrase,self.network)
if self.seed:
self.parse(self.psbt,self.seed,self.network)
def __setSeedRoot(self, seed_phrase, passphrase, network):
self.seed = bip39.mnemonic_to_seed(" ".join(seed_phrase).strip(), passphrase)
self.root = bip32.HDKey.from_seed(self.seed, version=NETWORKS[network]["xprv"])
def __setRoot(self, seed: Seed, network):
self.root = bip32.HDKey.from_seed(self.seed.seed, version=NETWORKS[network]["xprv"])
def parse(self, p, seed_phrase=[], passphrase="", network="main"):
def parse(self, p, seed: Seed, network="main"):
is_psbt_empty = False
try:
if p == None:
@@ -39,10 +38,10 @@ class PSBTParser():
if is_psbt_empty:
return False
if len(seed_phrase) == 0:
if not seed:
return False
self.__setSeedRoot(seed_phrase,passphrase,network)
self.__setRoot(seed, network)
rt = self.__parseInputs()
if rt == False:
+1 -2
View File
@@ -2,8 +2,6 @@
from embit import bip39, bip32
import unicodedata
from seedsigner.models.settings import Settings
class Seed:
def __init__(self, mnemonic = None, passphrase = "", wordlist=None) -> None:
@@ -12,6 +10,7 @@ class Seed:
self.passphrase = passphrase
self.mnemonic = mnemonic
if wordlist == None:
from seedsigner.models.settings import Settings
self._wordlist = Settings.get_instance().wordlist
else:
self._wordlist = wordlist
-1
View File
@@ -1,5 +1,4 @@
# External Dependencies
from embit import bip39
from seedsigner.models import Seed
class SeedStorage:
+3
View File
@@ -23,6 +23,9 @@ class IOTestView(View):
self.draw_modal(["Initializing I/O Test"])
print("Initializing I/O Test")
self.qr_text = "Scan ANY QR Code"
self.redraw = False
self.redraw_complete = False
self.exit = False
try:
self.controller.get_instance().camera.start_video_stream_mode()
+9 -7
View File
@@ -1,8 +1,9 @@
import pytest
from mock import MagicMock
from seedsigner.models.seed import Seed
from seedsigner.models.decode_qr import DecodeQR, QRType, DecodeQRStatus
from seedsigner.models.psbt_parser import PSBTParser
from embit import psbt
from embit import psbt, bip39
# this is an of this bug: https://github.com/Foundation-Devices/foundation-ur-py/issues/3
@@ -80,7 +81,8 @@ def test_base64_single_frame_singlsig():
mnemonic = "height demise useless trap grow lion found off key clown transfer enroll"
pw = ""
pp = PSBTParser(tx,mnemonic.split(" "),pw,"test")
seed = Seed(mnemonic, pw, wordlist=bip39.WORDLIST)
pp = PSBTParser(tx,seed,"test")
assert tx.inputs[0].witness_utxo.value == 25000 # input amount in psbt
@@ -130,7 +132,7 @@ def test_base64_2_input_p2wsh():
assert str(tx) == base64_psbt
mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
assert tx.inputs[0].witness_utxo.value == 10000000 # input amount 1 in psbt
@@ -157,7 +159,7 @@ def test_base64_1_input_p2sh_p2wsh():
assert str(tx) == base64_psbt
mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
assert tx.inputs[0].witness_utxo.value == 100000000 # input amount 1 in psbt
@@ -213,7 +215,7 @@ def test_ur_legacy():
tx = d.getPSBT()
mnemonic = "zone zone zone zone zone abandon ability able abandon ability able abstract"
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
assert pp.input_amount == 200000
@@ -247,7 +249,7 @@ def test_specter_multisig_animated_qr():
tx = d.getPSBT()
mnemonic = "zone zone zone zone zone abandon ability able abandon ability able abstract"
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
assert pp.input_amount == 1052818
@@ -285,7 +287,7 @@ def test_specter_multisig_animated_qr():
tx2 = d2.getPSBT()
mnemonic2 = "able bacon cable able bacon cable abandon abandon abandon abandon abandon access"
pp2 = PSBTParser(tx2,mnemonic2.split(" "),"","test")
pp2 = PSBTParser(tx2,Seed(mnemonic2, wordlist=bip39.WORDLIST),"test")
assert pp2.input_amount == 1052818
+2 -1
View File
@@ -1,7 +1,8 @@
import pytest
from mock import MagicMock
from seedsigner.models.decode_qr import QRType
from seedsigner.models.encode_qr import EncodeQR, EncodeQRDensity
from seedsigner.models.encode_qr import EncodeQR
from seedsigner.models.qr_type import EncodeQRDensity
from embit import psbt
from binascii import a2b_base64