Skip to content

Commit

Permalink
Fix support for Electrum Segwit Unencrypted Wallets
Browse files Browse the repository at this point in the history
  • Loading branch information
3rdIteration committed Jun 18, 2024
1 parent d57eea0 commit 4d5a597
Show file tree
Hide file tree
Showing 4 changed files with 265 additions and 153 deletions.
2 changes: 1 addition & 1 deletion btcrecover/btcrpass.py
Original file line number Diff line number Diff line change
Expand Up @@ -1807,7 +1807,7 @@ def return_verified_password_or_false(self, passwords): #Electrum2
key = l_sha256( l_sha256( password ).digest() ).digest()
xprv = l_aes256_cbc_decrypt(key, iv, part_encrypted_xprv)

if xprv.startswith(b"xprv"): # BIP32 extended private key version bytes
if xprv.startswith(b"xprv") or xprv.startswith(b"zprv"): # BIP32 extended private key version bytes
for c in xprv[4:]:
# If it's outside of the base58 set [1-9A-HJ-NP-Za-km-z]
if c > ord("z") or c < ord("1") or ord("9") < c < ord("A") or ord("Z") < c < ord("a") or chr(c) in "IOl": break # not base58
Expand Down
107 changes: 107 additions & 0 deletions btcrecover/test/test-wallets/electrum4_4_3_unencrypted
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
{
"addr_history": {
"bc1q0fhvy203qdsxeczmg3egz064jtntk8jhgarhvp": [],
"bc1q0ya8y2f0qe9rsfdch5e7srv6e4x2rtzwlc3kne": [],
"bc1q38tpfcxwjxewe49mplfprn2xskyhhgruc3pvf7": [],
"bc1q44gv5r42r65wzc8hlvc9w43dsl5heqwmcdswlw": [],
"bc1q665lh5ezjull2l05evmkzv9q6heq7nzddel6er": [],
"bc1q6qnd0t4vd8psd5xrqgvs4hgqrfyelz6kw3aa5k": [],
"bc1q6s5uq952jlmx3p25unjt376hdtnz26vy23kyn6": [],
"bc1q74e3pdt9zd3x78drpaj2lmumwhh9j48n3sj56f": [],
"bc1q7cezg0z6npgzd8cg7cwfxnlumn476xmchmlxt9": [],
"bc1qa0p8r4jul70xfl9c8u2rf6a0er9l9cpxmxwjtc": [],
"bc1qavqgrv6v927nnnmdcp2kymjfns42jn4w3kzhgk": [],
"bc1qc236rqm03q6mw8g4aarejkpazyvymh3qq7cfg3": [],
"bc1qd2redklhnvcxzkjz30l0xdkyn0l93wjzpqvz03": [],
"bc1qdy39qmsl9v00gv6ml9ezq4rdmgn4xfmx6nnvn3": [],
"bc1qfaw93ff4ttu3pxhawye8hs29p2dhxn53tnmfkl": [],
"bc1qhwxt7tgcz3hs4r6vslng5tkfy9feeu4crnupth": [],
"bc1qjl3s8ya0shase44dea6e0ykxy0ss4n7yuaf59j": [],
"bc1qlc7n5fp9028ech5s05d6rtdhz97p78hce88eda": [],
"bc1qmdxnfz53l6k9syvxnnunk04cl852stkmp0vveg": [],
"bc1qnkly6nx5jdqek2alq33n3nza9dfumq2684s04t": [],
"bc1qsfehq233hsgfhkk2l99qc7gn7p857uuhzwymxn": [],
"bc1qsz0dhew357cj6eznmcawgyf44jzpgcax2lvfvm": [],
"bc1qtmyjtu3w2j237s72m8y9tclull9tcmg76awxda": [],
"bc1qtrspe9pq2tfkvy3zamm893xxez8jwqgxe8wuq0": [],
"bc1qtsqkx27qdxk53zquq6mzxfntxhqqdmwqd7ps9k": [],
"bc1qtw2p5fr4l078lup582m22scpqkp39gf8faww47": [],
"bc1qu9ydr7dfm9t0cgs7tg8qmg0ug8l5hp3fckwe7c": [],
"bc1qv5ej5nj4et2lqpjml7wnwr8stlw0jx5axevatf": [],
"bc1qvsd5029x6mny8nuxpmavvep2l9wf2ykxt2qzdu": [],
"bc1qx3cd7vtz7sslywszh668jl8wayww46zd57q5wp": []
},
"addresses": {
"change": [
"bc1q6qnd0t4vd8psd5xrqgvs4hgqrfyelz6kw3aa5k",
"bc1q44gv5r42r65wzc8hlvc9w43dsl5heqwmcdswlw",
"bc1qtsqkx27qdxk53zquq6mzxfntxhqqdmwqd7ps9k",
"bc1qx3cd7vtz7sslywszh668jl8wayww46zd57q5wp",
"bc1qtmyjtu3w2j237s72m8y9tclull9tcmg76awxda",
"bc1qdy39qmsl9v00gv6ml9ezq4rdmgn4xfmx6nnvn3",
"bc1qmdxnfz53l6k9syvxnnunk04cl852stkmp0vveg",
"bc1qtw2p5fr4l078lup582m22scpqkp39gf8faww47",
"bc1qvsd5029x6mny8nuxpmavvep2l9wf2ykxt2qzdu",
"bc1qlc7n5fp9028ech5s05d6rtdhz97p78hce88eda"
],
"receiving": [
"bc1qsz0dhew357cj6eznmcawgyf44jzpgcax2lvfvm",
"bc1q7cezg0z6npgzd8cg7cwfxnlumn476xmchmlxt9",
"bc1q665lh5ezjull2l05evmkzv9q6heq7nzddel6er",
"bc1qa0p8r4jul70xfl9c8u2rf6a0er9l9cpxmxwjtc",
"bc1q0ya8y2f0qe9rsfdch5e7srv6e4x2rtzwlc3kne",
"bc1qnkly6nx5jdqek2alq33n3nza9dfumq2684s04t",
"bc1qu9ydr7dfm9t0cgs7tg8qmg0ug8l5hp3fckwe7c",
"bc1q38tpfcxwjxewe49mplfprn2xskyhhgruc3pvf7",
"bc1q6s5uq952jlmx3p25unjt376hdtnz26vy23kyn6",
"bc1qfaw93ff4ttu3pxhawye8hs29p2dhxn53tnmfkl",
"bc1qv5ej5nj4et2lqpjml7wnwr8stlw0jx5axevatf",
"bc1qavqgrv6v927nnnmdcp2kymjfns42jn4w3kzhgk",
"bc1qhwxt7tgcz3hs4r6vslng5tkfy9feeu4crnupth",
"bc1qjl3s8ya0shase44dea6e0ykxy0ss4n7yuaf59j",
"bc1qsfehq233hsgfhkk2l99qc7gn7p857uuhzwymxn",
"bc1qc236rqm03q6mw8g4aarejkpazyvymh3qq7cfg3",
"bc1q74e3pdt9zd3x78drpaj2lmumwhh9j48n3sj56f",
"bc1qtrspe9pq2tfkvy3zamm893xxez8jwqgxe8wuq0",
"bc1qd2redklhnvcxzkjz30l0xdkyn0l93wjzpqvz03",
"bc1q0fhvy203qdsxeczmg3egz064jtntk8jhgarhvp"
]
},
"db_metadata": {
"creation_timestamp": 1718669375,
"first_electrum_version_used": "4.4.3"
},
"fiat_value": {},
"frozen_coins": {},
"imported_channel_backups": {},
"invoices": {},
"keystore": {
"derivation": "m/0h",
"pw_hash_version": 1,
"root_fingerprint": "4d5b9b9e",
"seed": "M9F5SbHb27QlyedS5ix3ZZp5VGEwPRibufvFmsl23oXAr8HwJ07ZCAns3boddkQbfpBpm+qtPZRV6SYnaJiXPkI0iRJbtrJnV+QTreV6ufSCxfGKJeo2kQhnoH+1W+Xa",
"seed_type": "segwit",
"type": "bip32",
"xprv": "PRGms7vnFpayU0/9jd9PKlwi39bnI8le8rBuy0NCVT5lnEhPSvTqimC8EIue8IpeVYFOYQZFvlp127TuPpi9Iz8lpG3URuOXP2tAMsyXXY4FXYb+RFCizAwLzZ4dR9KYURH3yh2hHe1rENu4CV9E6Acl56NWMGAT6E4CVH4RhFg=",
"xpub": "zpub6n81C2JeAicxQ2F9otpGBwkmmm4ZGq4N1JHUUwi4WfZnJWmvcSS4yWED4xZSYRWveTAfzPzQeWkQtwvcYiRxE3ywUUCBQvba4nx7k2SaPo3"
},
"labels": {},
"lightning_payments": {},
"lightning_preimages": {},
"lightning_xprv": "zprvAc2AK4nJLDj2tCaQAqifwiETYuj5KQqYwc5ANYTs6YrcuJYrzkTqBcB3DBzkUaqg36BeaPqqAw9ScMU3RJ2zsKEVTdFfNx9Uzg29Hx8DuzR",
"num_parents": {},
"onchain_channel_backups": {},
"payment_requests": {},
"prevouts_by_scripthash": {},
"seed_type": "segwit",
"seed_version": 52,
"spent_outpoints": {},
"submarine_swaps": {},
"transactions": {},
"tx_fees": {},
"txi": {},
"txo": {},
"use_encryption": true,
"verified_tx3": {},
"wallet_type": "standard"
}
5 changes: 5 additions & 0 deletions btcrecover/test/test_passwords.py
Original file line number Diff line number Diff line change
Expand Up @@ -1218,6 +1218,11 @@ def test_electrum28(self):
def test_electrum41(self):
self.wallet_tester("electrum41-wallet")

@skipUnless(can_load_coincurve, "requires coincurve")
@skipUnless(can_load_pycrypto, "requires PyCryptoDome")
def test_electrum4_4_3_unencrypted(self):
self.wallet_tester("electrum4_4_3_unencrypted")

@skipUnless(can_load_coincurve, "requires coincurve")
@skipUnless(can_load_pycrypto, "requires PyCryptoDome")
def test_electrum_100kbwallet(self):
Expand Down
Loading

0 comments on commit 4d5a597

Please sign in to comment.