Metadata-Version: 1.2
Name: iota_mnemonic
Version: 0.2.1
Summary: Generate, recover IOTA seed from Bitcoin BIP39 mnemonic
Home-page: https://github.com/mlouielu/iota-mnemonic
License: UNKNOWN
Author: Louie Lu
Author-email: git@louie.lu
Maintainer: Louie Lu
Maintainer-email: git@louie.lu
Requires-Python: >= 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Intended Audience :: Developers
Requires-Dist: pyota (>= 2.0.1)
Requires-Dist: mnemonic (>= 0.18)

IOTA Mnemonic
=============

This is a command line tool to help user generate IOTA seed from Bitcoin
BIP39 mnenomics

Install
=======

$ pipenv install iota_mnemonic
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To install IOTA mnemonic, simply run this simple command in your
terminal of choice:

::

    $ pipenv install iota_mnemonic

Get the source code
~~~~~~~~~~~~~~~~~~~

You can clone the source code from repository:

::

    $ git clone https://github.com/mlouielu/iota-mnemonic

How to use
==========

::

    # Generate 24 words mnemonic and IOTA seed
    $ python -m iota_mnemonic
    Mnemonic: come grocery cube calm void liberty increase pigeon captain appear employ among 
    float fancy cargo faith seek buzz argue lift agent split bachelor judge
    IOTA Seed: RTWTRPAEGJQFRWAYTIJTKWZKLN9K9VRUETFSIPUAUCLKPNNSNWAKTOXBWSCPQVNNWDLTEIPMILIOVPGIX

    # Generate mnemonic with passphrase
    $ python -m iota_mnemonic -p TREZOR
    Mnemonic: limit about defy sail base useless soul album aim border celery false asset average 
    romance attract lonely track hope sun afford creek dignity couple
    IOTA Seed: LIPSSXDAJQRLBPTTBQTPTYBMUSTJPXWGYBKLSSBDVKPVEAXDGPZXOWPMEGRNSHTJXIUVCXYFTOXMZKIMY

    # Generate 12 words mnemonic with passphrase
    $ python -m iota_mnemonic -s 128 -p TREZOR
    Mnemonic: broccoli merry lucky milk lizard cannon area utility jelly click bag clever
    IOTA Seed: YNONELPCFBKQDDQMIBBBGJDZODCKXEBIJIMXRUGBA9AOPJEQ9SYYLGID9IXHILWVVDJ9ZEGQHCGIHQ9TB

    # Genreate mnemonic with japanese
    $ python -m iota_mnemonic -l japanese
    Mnemonic: こいぬ　ようちえん　むせん　いんさつ　しなもの　ふのう　かわく　ひかり　はいけん　
    そんしつ　たたかう　ちいさい　そうめん　つうわ　にんげん　とおす　さみだれ　かまぼこ　
    らくだ　さずかる　ふとる　とんかつ　きびしい　ひつぜん
    IOTA Seed: ISBAFGB9LBGOQYGKKMMNK9APICZCGWIJHCMLOLPAQITGSSIGBJJOYQZJJ9NNGYIJLFB9ORMJGCWFFFYQZ

    # Output the mnemonic to file
    $ python -m iota_mnemonic -p TREZOR -o mnemonic

    # Recover seed from mnemonic
    $ python -m iota_menmonic -p TREZOR -f mnemonic
    Mnemonic: often various act decide tongue sausage summer wall priority knock finish until 
    taxi robot panic toward giraffe acid avocado anchor travel kiwi actress cream
    IOTA Seed: CRGFVETUFKUQYTPTEH9TP9BDKBVZLG9UZJDZBDMMFSSCUPIATPEZMKBLKXOEKCRDFHHFNCCBF9SKHNYIA

How it works?
=============

To create IOTA seed from the mnemonic, we use IOTA Kerl function with a
mnemonic sentence (in UTF-8 NFKD) used as the password and the string
“mnemonic” + passphrase (again in UTF-8 NFKD) used as the salt.

To get a valid tryte hash, we concat salt and mnemonic sentence, and
load into ``iota.Hash`` by ``from_string`` function. ``from_string``
will encode UTF-8 NFKD into bytes, then convert bytes into IOTA hash.

Using each hash, we then use hash trits and Kerl to absorb and squeeze:

.. code:: python

    trits = []
    sponge = iota.crypto.kerl.Kerl()

    for word in mnemonic:
        hash = iota.Hash.from_string(f'mnemonic{passphrase}{word}')
        hash_trits = hash.as_trits()
        k = iota.crypto.kerl.Kerl()
        k.absorb(hash_trits)
        k.squeeze(hash_trits)
        sponge.absorb(hash_trits)
    sponge.squeeze(trits)
    return iota.Hash.from_trits(trits)

