What changed, and why it matters
This commit is a documentation and screenshot update for a feature called Mnemonic XOR. It rewrites user-facing help pages, adds new images, and updates simulator test scripts so the feature is documented and visually shown. There are no code changes that affect security, and nothing in the commit fixes or introduces a vulnerability.
No security action required. Review as normal documentation update if desired.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff only touches documentation Markdown files, binary PNG screenshots, and simulator sequence scripts. It rewords the Mnemonic XOR guide, adds a main-menu description, regenerates wallet-home screenshots, adds XOR message screenshots, and adds a simulator test sequence for the XOR workflow. No firmware or application source code is modified.
Changed components
docs/getting-started/features/mnemonic-xor.en.mddocs/getting-started/usage/navigating-the-main-menu.en.mddocs/img/maixpy_amigo/wallet_home_options-300.en.pngdocs/img/maixpy_amigo/xor-message-300.en.pngdocs/img/maixpy_m5stickv/wallet_home_options-250.en.pngdocs/img/maixpy_m5stickv/xor-message-250.en.pngsimulator/generate-device-screenshots.shsimulator/sequences/bip85.txtsimulator/sequences/mnemonic-xor.txtInspect captured patch +71 / −54
diff --git a/docs/getting-started/features/mnemonic-xor.en.md b/docs/getting-started/features/mnemonic-xor.en.md
index 2412cf5..2ef0d56 100644
--- a/docs/getting-started/features/mnemonic-xor.en.md
+++ b/docs/getting-started/features/mnemonic-xor.en.md
@@ -1,82 +1,75 @@
-# What's the Mnemonic XOR?
+# What is Mnemonic XOR?
-It's a implementation of [XOR logical gate](https://www.geeksforgeeks.org/digital-logic/xor-gate/) to operate, indefinitely, an [exclusive OR](https://en.wikipedia.org/wiki/Exclusive_or) upon a loaded mnemonic, based on [Coinkite's SeedXOR](https://github.com/Coldcard/firmware/blob/master/docs/seed-xor.md).
+It is an implementation of the XOR ([exclusive OR](https://en.wikipedia.org/wiki/Exclusive_or)) operation across the entropy values of two or more mnemonics to produce a combined result, based on [Coinkite's SeedXOR](https://github.com/Coldcard/firmware/blob/master/docs/seed-xor.md).
-# How it works
+## How It Works
-To derive a new mnemonic (and thus, a new seed) from other mnemonics, an operation occurs with the **mnemonic's entropy bytes**.
-Operate a XOR between them will derive a new **entropy bytes** that will be converted to a new mnemonic and then, to a new seed:
+Krux derives a new mnemonic (and therefore a new seed) by performing an XOR operation on the **entropy bytes** of the source mnemonics. The result of this XOR operation is a new set of **entropy bytes**, which is then converted into a new mnemonic - and subsequently, a new seed.
<img src="../../../img/mnemonic_xor.png" align="center">
-- We get two different mnemonics (A and B), extract their *entropy bytes*;
-- validate the input entropies to avoid useless or dangerous operations:
- - `A XOR B = A`: it will not change the XORed mnemonic;
- - `A XOR B = A'` where `A'` is a "inverse" version of `A`;
-- once the inputs are checked, krux will apply a XOR between the *entropy bytes*;
-- validate the output entropy (same as above);
-- "convert" the valid *entropy bytes* output to a new mnemonic (C);
-- the user then can apply a password (optional) and get a new **master seed**.
+- Obtain two different mnemonics (A and B) and extract their **entropy bytes**.
+- Validate the input entropies to prevent redundant or unsafe operations:
-# Split and recover shares
+ - `A XOR B = A`: indicates that B consists entirely of zeros (useless - no change to the result).
+ - `A XOR B = A'`, where `A'` is the bitwise complement of `A`: indicates that B consists entirely of ones (dangerous - produces a predictable inverse).
-You can split a mnemonic into two separate mnemonics (or "shares") using the XOR operation. Neither share reveals any information about the original secret on its own. The original mnemonic can only be recovered when **both shares are combined**.
-
-### Core Principle
-
-Now we show a basic step
-If `A XOR B = C`, then `B XOR C = A`.
-
-- **A**: Your original mnemonic (the secret to protect);
-- **B**: A newly generated, random mnemonic (Share 1);
-- **C**: The resulting mnemonic from the XOR operation (Share 2).
+- Ensure that both mnemonics have the same length before proceeding.
+- Perform the XOR operation between **entropy bytes** from `A` and `B`.
+- Validate the resulting entropy `C` (same checks as above).
+- Convert the valid **entropy bytes** `C` into a new mnemonic `C`.
+- Optionally, the user may apply a password to derive a new master seed.
---
-## Step-by-Step Guide to Splitting Your Mnemonic
+## Split and Recover Parts (or "shares")
-### Phase 1: The Splitting Process
+A mnemonic can be split into two separate parts (or "shares") using the XOR operation. Each share by itself reveals nothing about the original secret. The original mnemonic can only be reconstructed when **both shares are combined**.
-#### Step 1: Generate a Random Share (Mnemonic B)
+### Core Principle
-1. Generate a new, random mnemonic from dice rolls or an image;
-2. **CRITICAL**: This mnemonic must have the same number of words (12 or 24) as your original mnemonic (A).
+This method relies on a fundamental property of XOR:
-#### Step 2: Backup Mnemonic B
+If `A XOR B = C`, then `B XOR C = A`.
-- Use a safe method to backup mnemonic B.
+- **A**: The original mnemonic (the secret to protect)
+- **B**: A newly generated random mnemonic (Share 1)
+- **C**: The mnemonic produced by the XOR operation (Share 2)
-#### Step 3: Perform the XOR Operation
+### Step-by-Step Guide to Splitting Your Mnemonic
-1. Load mnemonic A, go to **Wallet -> Mnemonic XOR** and load mnemonic B to be XORed with A;
-2. The resulting entropy of `A XOR B` will be used to create the second share, mnemonic C.
+#### Phase 1: Splitting Process
-#### Step 4: Back Up Mnemonic C
+##### Generate a Random Share (Mnemonic B)
-1. Go to **Backup** and choose your favorite secure method to backup mnemonic C
----
+1. Generate a new random mnemonic using dice rolls or an image.
+2. **Important:** This mnemonic must have the same number of words (12 or 24) as your original mnemonic `A`.
-### Phase 2: Verification & Finalization
+##### Back Up Mnemonic B
+- Use a reliable and secure method to back up mnemonic `B`.
-> ⚠️ **DO NOT SKIP THIS PHASE**
+##### Perform the XOR Operation
-#### Step 5: Verify the Recovery Process
+1. Load mnemonic `A`.
+2. Navigate to **Wallet -> Mnemonic XOR**.
+3. Load mnemonic `B` to be XORed with `A`.
+4. The resulting entropy from `A XOR B` will be used to generate the second share - mnemonic `C`.
-**This is non-negotiable.** Before relying on the system or destroying the original mnemonic, perform a test:
+##### Back Up Mnemonic C
+- Go to **Backup** and securely store mnemonic `C` using your preferred backup method.
-1. Retrieve mnemonic B and C backups;
-2. Load one of them and XOR it with the other;
-3. Verify that the resulting mnemonic matches the original mnemonic A.
+#### Phase 2: Verification & Finalization
+Don't trust, verify!
-#### Step 6: Destroy the Original
+1. Retrieve your backups of mnemonics `B` and `C`.
+2. Load one of them and XOR it with the other.
+3. Confirm that the resulting mnemonic matches the original mnemonic `A`.
-⚠️ **Only after you have successfully verified in Step 5** that the recovery works perfectly should you securely destroy the original mnemonic (A).
-
----
+⚠️ **Only after successful verification** should you securely destroy the original mnemonic `A`.
-## Important Notes
+#### Important Notes
-- **Keep shares separate**: Store mnemonic B and mnemonic C in different secure locations;
-- **Both shares required**: Neither share alone provides any information about the original mnemonic;
-- **Always verify**: Test the recovery process before destroying the original;
-- **Same word count**: All three mnemonics (A, B, and C) must have the same number of words.
+- **Keep shares separate:** Store mnemonics `B` and `C` in different secure locations.
+- **Both shares required:** Neither share alone reveals any information about the original mnemonic.
+- **Always verify!:** Test the recovery process before destroying the original.
+- **Matching word count:** All three mnemonics (`A`, `B`, and `C`) must have the same number of words.
diff --git a/docs/getting-started/usage/navigating-the-main-menu.en.md b/docs/getting-started/usage/navigating-the-main-menu.en.md
index bd9104a..de2f626 100644
--- a/docs/getting-started/usage/navigating-the-main-menu.en.md
+++ b/docs/getting-started/usage/navigating-the-main-menu.en.md
@@ -217,6 +217,16 @@ Choose between *12 or 24 words*, then type the desired *index* to export a *chil
To create a *Base64 password*, which can be used in a variety of logins, from email to social media accounts, choose an index and then a length of at least 20 characters. The resulting password will be displayed on the screen and can also be exported to an SD Card or as a QR code.
+#### Mnemonic XOR
+<img src="../../../img/maixpy_m5stickv/xor-message-250.png" align="right" class="m5stickv">
+<img src="../../../img/maixpy_amigo/xor-message-300.png" align="right" class="amigo">
+
+Mnemonic XOR enables the **combination of two or more mnemonics** by applying an XOR (exclusive OR) operation to their entropy bytes, **resulting in a new mnemonic**. This functionality can be used to split a mnemonic into multiple parts (or "shares") or to merge existing ones.
+
+For detailed instructions on combining, splitting, and recovering mnemonics using XOR, see [Mnemonic XOR](../features/mnemonic-xor.md).
+
+<div style="clear: both"></div>
+
### Address
<img src="../../../img/maixpy_m5stickv/address-menu-250.png" align="right" class="m5stickv">
<img src="../../../img/maixpy_amigo/address-menu-300.png" align="right" class="amigo">
diff --git a/docs/img/maixpy_amigo/wallet_home_options-300.en.png b/docs/img/maixpy_amigo/wallet_home_options-300.en.png
index b7975e4..cad0d2b 100644
Binary files a/docs/img/maixpy_amigo/wallet_home_options-300.en.png and b/docs/img/maixpy_amigo/wallet_home_options-300.en.png differ
diff --git a/docs/img/maixpy_amigo/xor-message-300.en.png b/docs/img/maixpy_amigo/xor-message-300.en.png
new file mode 100644
index 0000000..7656378
Binary files /dev/null and b/docs/img/maixpy_amigo/xor-message-300.en.png differ
diff --git a/docs/img/maixpy_m5stickv/wallet_home_options-250.en.png b/docs/img/maixpy_m5stickv/wallet_home_options-250.en.png
index 1472ba1..d059ecf 100644
Binary files a/docs/img/maixpy_m5stickv/wallet_home_options-250.en.png and b/docs/img/maixpy_m5stickv/wallet_home_options-250.en.png differ
diff --git a/docs/img/maixpy_m5stickv/xor-message-250.en.png b/docs/img/maixpy_m5stickv/xor-message-250.en.png
new file mode 100644
index 0000000..d1796e5
Binary files /dev/null and b/docs/img/maixpy_m5stickv/xor-message-250.en.png differ
diff --git a/simulator/generate-device-screenshots.sh b/simulator/generate-device-screenshots.sh
index 92d04dc..6f0baa2 100755
--- a/simulator/generate-device-screenshots.sh
+++ b/simulator/generate-device-screenshots.sh
@@ -59,6 +59,7 @@ poetry run poe simulator --sequence sequences/wallet-descriptor-wsh.txt --sd --d
# poetry run poe simulator --sequence sequences/wallet-descriptor-wpkh.txt --sd --device $device
poetry run poe simulator --sequence sequences/wallet-descriptor-exp-tr-minis.txt --sd --device $device
poetry run poe simulator --sequence sequences/bip85.txt --sd --device $device
+poetry run poe simulator --sequence sequences/mnemonic-xor.txt --sd --device $device
poetry run poe simulator --sequence sequences/scan-address.txt --sd --device $device
poetry run poe simulator --sequence sequences/list-address.txt --sd --device $device
poetry run poe simulator --sequence sequences/export-address.txt --sd --device $device
diff --git a/simulator/sequences/bip85.txt b/simulator/sequences/bip85.txt
index b13423b..4d2e5a3 100644
--- a/simulator/sequences/bip85.txt
+++ b/simulator/sequences/bip85.txt
@@ -7,7 +7,7 @@ press BUTTON_A
screenshot wallet_home_options.png
# Navigate to BIP85
-x2 press BUTTON_C
+x3 press BUTTON_B
x2 press BUTTON_A
screenshot bip85-options.png
diff --git a/simulator/sequences/mnemonic-xor.txt b/simulator/sequences/mnemonic-xor.txt
new file mode 100644
index 0000000..cd82169
--- /dev/null
+++ b/simulator/sequences/mnemonic-xor.txt
@@ -0,0 +1,13 @@
+include _load-12-word-mnemonic.txt
+
+# Navigate to Wallet
+x2 press BUTTON_B
+press BUTTON_A
+
+screenshot wallet_home_options.png
+
+# Navigate to Mnemonic XOR
+x4 press BUTTON_B
+press BUTTON_A
+
+screenshot xor-message.png
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.