2 unstable releases

1.0.0 Aug 28, 2021
0.2.0 Aug 29, 2021
0.1.1 Aug 24, 2021
0.1.0 Aug 24, 2021

#12 in #bip39

37 downloads per month
Used in seed-utils

MIT license

116 lines


seed-xor builds on top of rust-bip39 and lets you XOR bip39 mnemonics as described in Coldcards docs.

It is also possible to XOR mnemonics with differing numbers of words. For this the shorter one will be extended with the longer one's surplus entropy.


use seed_xor::Mnemonic;
use std::str::FromStr;

// Coldcard example: https://github.com/Coldcard/firmware/blob/master/docs/seed-xor.md
let a_str = "romance wink lottery autumn shop bring dawn tongue range crater truth ability miss spice fitness easy legal release recall obey exchange recycle dragon room";
let b_str = "lion misery divide hurry latin fluid camp advance illegal lab pyramid unaware eager fringe sick camera series noodle toy crowd jeans select depth lounge";
let c_str = "vault nominee cradle silk own frown throw leg cactus recall talent worry gadget surface shy planet purpose coffee drip few seven term squeeze educate";
let result_str = "silent toe meat possible chair blossom wait occur this worth option bag nurse find fish scene bench asthma bike wage world quit primary indoor";

// Mnemonic is a wrapper for bip39::Mnemonic which implements the XOR operation `^`.
// Mnemonics can also be created from entropy.
let a = Mnemonic::from_str(a_str).unwrap();
let b = Mnemonic::from_str(b_str).unwrap();
let c = Mnemonic::from_str(c_str).unwrap();
let result = Mnemonic::from_str(result_str).unwrap();

assert_eq!(result, a ^ b ^ c);

Useful resources


~24K SLoC