Class MnemonicUtils

java.lang.Object
org.web3j.crypto.MnemonicUtils

public class MnemonicUtils extends Object
Provides utility methods to generate random mnemonics and also generate seeds from mnemonics.
See Also:
  • Constructor Details

    • MnemonicUtils

      public MnemonicUtils()
  • Method Details

    • generateMnemonic

      public static String generateMnemonic(byte[] initialEntropy)
      The mnemonic must encode entropy in a multiple of 32 bits. With more entropy security is improved but the sentence length increases. We refer to the initial entropy length as ENT. The allowed size of ENT is 128-256 bits.

      Given a randomly generated initial entropy of size ENT, first a checksum is generated by taking the first ENT / 32 bits of its SHA256 hash. This checksum is appended to the end of the initial entropy. Next, these concatenated bits are split into groups of 11 bits, each encoding a number from 0-2047, serving as an index into a wordlist. Finally, we convert these numbers into words and use the joined words as a mnemonic sentence.

      Parameters:
      initialEntropy - The initial entropy to generate mnemonic from
      Returns:
      The generated mnemonic
      Throws:
      IllegalArgumentException - If the given entropy is invalid
      IllegalStateException - If the word list has not been loaded
    • generateEntropy

      public static byte[] generateEntropy(String mnemonic)
      Create entropy from the mnemonic.
      Parameters:
      mnemonic - The input mnemonic which should be 128-160 bits in length containing only valid words
      Returns:
      Byte array representation of the entropy
    • getWords

      public static List<String> getWords()
    • generateSeed

      public static byte[] generateSeed(String mnemonic, String passphrase)
      To create a binary seed from the mnemonic, we use the PBKDF2 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. The iteration count is set to 2048 and HMAC-SHA512 is used as the pseudo-random function. The length of the derived key is 512 bits (= 64 bytes).
      Parameters:
      mnemonic - The input mnemonic which should be 128-160 bits in length containing only valid words
      passphrase - The passphrase which will be used as part of salt for PBKDF2 function
      Returns:
      Byte array representation of the generated seed
    • validateMnemonic

      public static boolean validateMnemonic(String mnemonic)
    • calculateChecksum

      public static byte calculateChecksum(byte[] initialEntropy)