Skip to content

Conversation

@Toporin
Copy link
Contributor

@Toporin Toporin commented Dec 8, 2025

This is a pull request to add support for the Satochip hardware wallet.

The Satochip hardware wallet is based on a jacavard smartcard and is fully open-source.
The firmware uses a javacard applet that is loaded on the smartcard.
With native NFC (Near Field Communication) support, Satochip enables seamless interaction with mobile devices.

Satochip technical details

  • Platform: JavaCard 3.0.1-compliant smartcard with an EAL6+ secure element.
  • Key management: supports BIP39 seeds; private keys are derived and stored within the secure chip, never exposed externally.
  • NFC support: contactless communication via NFC, compatible with Android and iOS devices equipped with NFC readers.
  • Contact interface for use with a card reader on a computer, compatible with Sparrow wallet.
  • Cryptographic capabilities: implements ALG_ECDSA_SHA_256 for Bitcoin signatures and optional Schnorr signature support (beta v0.14+) for Taproot and Nostr.

Advantages of Satochip

Here are the main advantages of the Satochip hardware wallet:

  • Security: private keys remain offline in a tamper-resistant chip, protected by a PIN code.
  • Mobile-friendly: NFC support for quick, contactless interaction with mobile devices.
  • Affordable: priced at approximately €25, Satochip offers a budget-friendly alternative.
  • Open-source: javacard applet is AGPLv3.
  • DIY: build your own hardware wallet in a few minutes using widely available blank smartcards.
  • Portability: credit card-sized form factor is discreet, easy to carry, and durable.
  • Compatibility: with widely-used client Sparrow for Desktop use.

More info:
https://github.com/Toporin/ (Official repository)
https://x.com/satochip (X account)
https://t.me/Satochip (Telegram support)
https://satochip.io (Official website)

Better to reset seed from the import Satochip key options during new key import.
…tSatochipSeed

old resetSatochipSeed screen: reset from settings using provided PIN
new resetSatochipSeed screen: reset from Satochip key add, use pin from previous screen
The error arose from an incorrect parsing of the BIP32 path, that led to a wrong key derivation for Satochip, when using remote key signing.
The patch is:

    +      let keypath = "";
    +      if (signer.derivationPath.endsWith("/") || input.subPath.startsWith("/")){
    +        keypath = signer.derivationPath + input.subPath;
    +      } else {
    +        keypath = signer.derivationPath + "/" + input.subPath;
    +      }
    +      console.log(`index signWithSatochip keypath: ${keypath}`);
Update Satochip branch with upstream changes
@ben-kaufman
Copy link
Collaborator

Thanks for the PR!

I've tested and everything worked (mostly) well.
One issue I noticed is that if the user enters the add Satochip screen and clicks the Check Initial Setup status, if the user doesn't first enters a PIN (or if he clicks it even before setting a PIN to the card) the popup result will show a warning saying the card is not authentic. I think there should be better error handling for this case.

Also on the first try for actually adding the card the app crashed, but I couldn't reproduce this after the first time. When I retried adding a few times after it worked well.

Also on this screen make sure please to have the buttons at the bottom like in the rest of the app
IMG_9887

And also on the UI, I think it's a bit confusing to have 4 of the buttons for different actions in the setup screen, I'd recommend adding a settings or options button and move at least the check setup and reset seed there.

Besides everything worked well. Import succeeded, initializw and reset of the card, change PIN, signing with all wallet types. So. overall very good integration!

If no PIN is provided, display a more explicit error message to user stating that authenticity could not be verified without the PIN.

Also remove unused/useless code in getScriptSpecificDetails().
@Toporin
Copy link
Contributor Author

Toporin commented Jan 5, 2026

Thanks for the detailed review!
I have fixed most of the issues provided. I still have to implement the remark regarding the multiple buttons for different actions in the setup screen. This will be done this week.

Replace the 4 setup options with a single "Setup options" button.
Opens a Setup options modal for various Satochip configuration options.
@Toporin
Copy link
Contributor Author

Toporin commented Jan 6, 2026

I have refactored the Satochip setup screen to add the setup options in a modal window:

5974120838556486542
5974120838556486543

This should fix the last remaining issue for this PR.

Copy link
Collaborator

@ben-kaufman ben-kaufman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

Just a small comment, and also when clicking Import or reset in the setup options before entering the PIN nothing happens, it'd be better to show a toast to the user asking to enter the PIN

When clicking Import or reset in the setup options before entering the PIN, nothing happened.
Now a toast is shown to the user asking to enter the PIN first.
Copy link
Collaborator

@ben-kaufman ben-kaufman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks for making this!

@cakesoft-vaibhav cakesoft-vaibhav merged commit 7060ea9 into KeeperCommunity:sprint Jan 16, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants