Exemplo n.º 1
0
 def xkeys_from_seed(self, seed, passphrase):
     t = seed_type(seed)
     if not is_any_2fa_seed_type(t):
         raise Exception(f'unexpected seed type: {t}')
     words = seed.split()
     n = len(words)
     if t == '2fa':
         if n >= 20:  # old scheme
             # note: pre-2.7 2fa seeds were typically 24-25 words, however they
             # could probabilistically be arbitrarily shorter due to a bug. (see #3611)
             # the probability of it being < 20 words is about 2^(-(256+12-19*11)) = 2^(-59)
             if passphrase != '':
                 raise Exception('old 2fa seed cannot have passphrase')
             xprv1, xpub1 = self.get_xkeys(' '.join(words[0:12]), t, '',
                                           "m/")
             xprv2, xpub2 = self.get_xkeys(' '.join(words[12:]), t, '',
                                           "m/")
         elif n == 12:  # new scheme
             xprv1, xpub1 = self.get_xkeys(seed, t, passphrase, "m/0'/")
             xprv2, xpub2 = self.get_xkeys(seed, t, passphrase, "m/1'/")
         else:
             raise Exception(
                 f'unrecognized seed length for "2fa" seed: {n}')
     elif t == '2fa_segwit':
         xprv1, xpub1 = self.get_xkeys(seed, t, passphrase, "m/0'/")
         xprv2, xpub2 = self.get_xkeys(seed, t, passphrase, "m/1'/")
     else:
         raise Exception(f'unexpected seed type: {t}')
     return xprv1, xpub1, xprv2, xpub2
Exemplo n.º 2
0
 def get_xkeys(self, seed, t, passphrase, derivation):
     assert is_any_2fa_seed_type(t)
     xtype = 'standard' if t == '2fa' else 'p2wsh'
     bip32_seed = Mnemonic.mnemonic_to_seed(seed, passphrase)
     rootnode = BIP32Node.from_rootseed(bip32_seed, xtype=xtype)
     child_node = rootnode.subkey_at_private_derivation(derivation)
     return child_node.to_xprv(), child_node.to_xpub()
Exemplo n.º 3
0
 def get_xkeys(self, seed, t, passphrase, derivation):
     assert is_any_2fa_seed_type(t)
     xtype = 'standard' if t == '2fa' else 'p2wsh'
     bip32_seed = Mnemonic.mnemonic_to_seed(seed, passphrase)
     rootnode = BIP32Node.from_rootseed(bip32_seed, xtype=xtype)
     child_node = rootnode.subkey_at_private_derivation(derivation)
     return child_node.to_xprv(), child_node.to_xpub()
Exemplo n.º 4
0
 def xkeys_from_seed(self, seed, passphrase):
     t = seed_type(seed)
     if not is_any_2fa_seed_type(t):
         raise Exception(f'unexpected seed type: {t}')
     words = seed.split()
     n = len(words)
     # old version use long seed phrases
     if n >= 20:
         # note: pre-2.7 2fa seeds were typically 24-25 words, however they
         # could probabilistically be arbitrarily shorter due to a bug. (see #3611)
         # the probability of it being < 20 words is about 2^(-(256+12-19*11)) = 2^(-59)
         if passphrase != '':
             raise Exception('old 2fa seed cannot have passphrase')
         xprv1, xpub1 = self.get_xkeys(' '.join(words[0:12]), t, '', "m/")
         xprv2, xpub2 = self.get_xkeys(' '.join(words[12:]), t, '', "m/")
     elif not t == '2fa' or n == 12:
         xprv1, xpub1 = self.get_xkeys(seed, t, passphrase, "m/0'/")
         xprv2, xpub2 = self.get_xkeys(seed, t, passphrase, "m/1'/")
     else:
         raise Exception('unrecognized seed length: {} words'.format(n))
     return xprv1, xpub1, xprv2, xpub2
Exemplo n.º 5
0
 def make_seed(self, seed_type):
     if not is_any_2fa_seed_type(seed_type):
         raise BaseException('unexpected seed type: {}'.format(seed_type))
     return Mnemonic('english').make_seed(seed_type=seed_type, num_bits=128)
Exemplo n.º 6
0
 def is_valid_seed(seed):
     t = seed_type(seed)
     return is_any_2fa_seed_type(t)
Exemplo n.º 7
0
 def make_seed(self, seed_type):
     if not is_any_2fa_seed_type(seed_type):
         raise Exception(f'unexpected seed type: {seed_type}')
     return Mnemonic('english').make_seed(seed_type=seed_type)
Exemplo n.º 8
0
 def make_seed(self, seed_type):
     if not is_any_2fa_seed_type(seed_type):
         raise Exception(f'unexpected seed type: {seed_type}')
     return Mnemonic('english').make_seed(seed_type=seed_type, num_bits=128)
Exemplo n.º 9
0
 def is_valid_seed(seed):
     t = seed_type(seed)
     return is_any_2fa_seed_type(t)