Skip to content

vn-linescode/BIP39

 
 

Repository files navigation

Download Build Status codecov

Read all about how I wrote this and understanding BIP39 here.

Apart from generating a seed, only English, French, Spanish and Japanese currently packaged, but as WordList is an interface and you can provide your own.

Install

Use either of these repositories:

repositories {
    jcenter()
}

Or:

repositories {
    maven {
        url 'https://dl.bintray.com/novacrypto/BIP/'
    }
}

Add dependency:

dependencies {
    compile 'io.github.novacrypto:BIP39:0.1.7'
}

Usage

Generate a mnemonic

Using a StringBuilder:

StringBuilder sb = new StringBuilder();
byte[] entropy = new byte[Words.TWELVE.byteLength()];
new SecureRandom().nextBytes(entropy);
new MnemonicGenerator(English.INSTANCE)
    .createMnemonic(entropy, sb::append);
System.out.println(sb.toString());

If you're paranoid and/or need higher than normal memory security, consider using a SecureCharBuffer:

try (SecureCharBuffer secure = new SecureCharBuffer()) {
    byte[] entropy = new byte[Words.TWELVE.byteLength()];
    new SecureRandom().nextBytes(entropy);
    new MnemonicGenerator(English.INSTANCE)
        .createMnemonic(entropy, secure::append);
    Arrays.fill(entropy, (byte) 0); //empty entropy
    //do something with your secure mnemonic
}

Validate a mnemonic

try {
    MnemonicValidator
        .ofWordList(English.INSTANCE)
        .validate(mnemonic);
} catch (UnexpectedWhiteSpaceException e) {
   ...
} catch (InvalidWordCountException e) {
    ...
} catch (InvalidChecksumException e) {
     ...
} catch (WordNotFoundException e) {
    ...
    //e.getSuggestion1()
    //e.getSuggestion2()
}

Generate a seed

As does not use a word list, can be used now for any language.

byte[] seed = new SeedCalculator().calculateSeed(mnemonic, passphrase);

That uses SpongyCastle, if you don't need or want that dependency, you can use javax.crypto like so:

byte[] seed = new SeedCalculator(JavaxPBKDF2WithHmacSHA256.INSTANCE).calculateSeed(mnemonic, passphrase);

That will not work on Android API < 26 https://developer.android.com/reference/javax/crypto/SecretKeyFactory.html and see Issue #17.

About

Java Microlibrary implementation of BIP0039

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%