What changed, and why it matters
This commit adds support for a new Bitcoin wallet app called Bitcoin Safe. It is a straightforward feature addition: a new wallet definition file is created and registered in two lists so the Passport device recognizes Bitcoin Safe during setup. There is no bug fix, no change to cryptographic code, and no indication of a security problem.
No security action required. Review as a normal feature addition; verify the Bitcoin Safe JSON export format matches the expected generic JSON schema if desired.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change introduces wallets/bitcoin_safe.py, which defines a BitcoinSafeWallet dictionary using the existing create_generic_json_wallet and create_multisig_json_wallet helpers, plus existing multisig import functions. The wallet is then included in manifest.py for firmware packaging and in sw_wallets.py’s supported_software_wallets list. All logic is delegated to pre-existing, unchanged wallet framework code.
Changed components
ports/stm32/boards/Passport/modules/wallets/bitcoin_safe.pyports/stm32/boards/Passport/modules/wallets/sw_wallets.pyports/stm32/boards/Passport/manifest.pyInspect captured patch +27 / −0
### ports/stm32/boards/Passport/manifest.py
@@ -343,6 +343,7 @@
freeze('$(MPY_DIR)/ports/stm32/boards/Passport/modules',
('wallets/__init__.py',
'wallets/bitcoin_core.py',
+ 'wallets/bitcoin_safe.py',
'wallets/bluewallet.py',
'wallets/btcpay.py',
'wallets/bull.py',
### ports/stm32/boards/Passport/modules/wallets/bitcoin_safe.py
@@ -0,0 +1,24 @@
+# SPDX-FileCopyrightText: 2026 Foundation Devices, Inc. <hello@foundation.xyz>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# bitcoin_safe.py - Bitcoin Safe wallet support
+#
+
+from .generic_json_wallet import create_generic_json_wallet
+from .multisig_json import create_multisig_json_wallet
+from .multisig_import import read_multisig_config_from_qr, read_multisig_config_from_microsd
+from data_codecs.qr_type import QRType
+
+BitcoinSafeWallet = {
+ 'label': 'Bitcoin Safe',
+ 'sig_types': [
+ {'id': 'single-sig', 'label': 'Single-sig', 'addr_type': None, 'create_wallet': create_generic_json_wallet},
+ {'id': 'multisig', 'label': 'Multisig', 'addr_type': None, 'create_wallet': create_multisig_json_wallet,
+ 'import_qr': read_multisig_config_from_qr, 'import_microsd': read_multisig_config_from_microsd}
+ ],
+ 'export_modes': [
+ {'id': 'qr', 'label': 'QR Code', 'qr_type': QRType.UR2},
+ {'id': 'microsd', 'label': 'microSD', 'filename_pattern': '{xfp}-bitcoin-safe.json',
+ 'filename_pattern_multisig': '{xfp}-bitcoin-safe-multisig.json'}
+ ]
+}
### ports/stm32/boards/Passport/modules/wallets/sw_wallets.py
@@ -5,6 +5,7 @@
#
from .bitcoin_core import BitcoinCoreWallet
+from .bitcoin_safe import BitcoinSafeWallet
from .keeper import KeeperWallet
from .bluewallet import BlueWallet
from .btcpay import BtcPayWallet
@@ -31,6 +32,7 @@
supported_software_wallets = [
EnvoyWallet,
BitcoinCoreWallet,
+ BitcoinSafeWallet,
KeeperWallet,
BlueWallet,
BtcPayWallet,Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.