{"id":22358,"library":"shamir-mnemonic","title":"Shamir Mnemonic","description":"Implementation of SLIP-39 Shamir Secret Sharing mnemonics for splitting and recovering BIP-39 seed phrases. Current version 0.3.0, requires Python >=3.6, <4.0. Low release cadence.","status":"active","version":"0.3.0","language":"python","source_language":"en","source_url":"https://github.com/trezor/shamir-mnemonic","tags":["shamir","secret-sharing","slip-39","mnemonic","cryptography"],"install":[{"cmd":"pip install shamir-mnemonic","lang":"bash","label":"Install from PyPI"}],"dependencies":[],"imports":[{"note":"Function is plural 'generate_mnemonics' (returns list), not singular.","wrong":"from shamir_mnemonic import generate_mnemonic","symbol":"generate_mnemonics","correct":"from shamir_mnemonic import generate_mnemonics"},{"note":"Function is 'combine_mnemonics', not 'combine'.","wrong":"from shamir_mnemonic import combine","symbol":"combine_mnemonics","correct":"from shamir_mnemonic import combine_mnemonics"},{"note":"Exception raised for invalid mnemonics.","wrong":"","symbol":"MnemonicError","correct":"from shamir_mnemonic import MnemonicError"}],"quickstart":{"code":"from shamir_mnemonic import generate_mnemonics, combine_mnemonics\n\n# Split a BIP-39 seed phrase into 3 shares, requiring 2 to recover\nmnemonics = generate_mnemonics(\n    group_threshold=1,\n    groups=[(2, 3)],\n    passphrase='',\n    entropy=b'\\x00' * 16  # replace with actual 128-bit entropy\n)\nprint(mnemonics)  # list of 3 mnemonic strings\n\n# Recover from 2 shares\nrecovered = combine_mnemonics(mnemonics[:2])\nprint(recovered)  # dict with 'group', 'passphrase', 'entropy', 'share'","lang":"python","description":"Basic split and combine using SLIP-39 with 1 group, 2-of-3 threshold."},"warnings":[{"fix":"Always store and reuse the same passphrase or use empty string.","message":"The `passphrase` parameter is part of the secret and must be the same for splitting and combining. It is not a password but an additional entropy.","severity":"gotcha","affected_versions":"all"},{"fix":"Ensure entropy length is one of the valid lengths.","message":"The `entropy` must be exactly 128, 256, or 512 bits (16, 32, or 64 bytes).","severity":"gotcha","affected_versions":"all"},{"fix":"Use mnemonics[0] if you need one, or iterate.","message":"`generate_mnemonics` returns a list of mnemonics, not a single mnemonic. Ensure you handle the list correctly.","severity":"gotcha","affected_versions":"all"},{"fix":"Do not mix with BIP-39 mnemonic functions.","message":"The library uses SLIP-39, not the older BIP-39 style mnemonic format. Shares look different (they include a prefix like 'acid...').","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Verify each share against the official SLIP-39 wordlist or regenerate shares.","cause":"A mnemonic share contains an invalid word not in the SLIP-39 wordlist.","error":"shamir_mnemonic.mnemonic.MnemonicWordError: Invalid mnemonic word"},{"fix":"Ensure each mnemonic is exactly 33 words (standard) or 20 words (for shorter secrets).","cause":"The mnemonic string length does not match expected format (33 or 20 words).","error":"shamir_mnemonic.mnemonic.MnemonicError: Invalid mnemonic length"},{"fix":"Double-check the mnemonic and re-enter it correctly.","cause":"A mnemonic has an invalid checksum, often due to typo or truncation.","error":"shamir_mnemonic.mnemonic.MnemonicError: Invalid checksum"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}