|
|
@ -575,20 +575,25 @@ class TrustedCoinPlugin(BasePlugin): |
|
|
|
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: |
|
|
|
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('unrecognized seed length: {} words'.format(n)) |
|
|
|
raise Exception(f'unexpected seed type: {t}') |
|
|
|
return xprv1, xpub1, xprv2, xpub2 |
|
|
|
|
|
|
|
def create_keystore(self, wizard, seed, passphrase): |
|
|
|