def fromEncryptedEntropy(self, passphrase, entropy, wallet_path = '.', public=False, testnet=False): self.encrypted_entropy = entropy p = sha256(passphrase).digest() d = self.decrypt_entropy(p) self._root = HDKey.fromEntropy(d, public, testnet) self._primary = self._root.ChildKey(0+HD_HARDEN) return self
def fromEntropy(self, entropy, passphrase=''): self._root = HDKey.fromEntropy(entropy, False, False) self.encrypt_entropy(sha256(passphrase).digest(), entropy) self._primary = self._root.ChildKey(0) self._filename = join_path(WALLET_PATH, self._fn()) self.save() return self
def fromEntropy(self, entropy, wallet_path='.', public=False, testnet=False): self._root = HDKey.fromEntropy(entropy, public, testnet) self._primary = self._root.ChildKey(0) return self
def fromSeed(self, seed, nonce, passphrase, wallet_path = '.', public=False, testnet=False): self.seed = seed entropy_from_seed = self.entropy_from_seed(seed,nonce) self.encrypt_entropy(sha256(passphrase).digest(),entropy_from_seed) self._root = HDKey.fromEntropy(entropy_from_seed, public, testnet) self._primary = self._root.ChildKey(0+HD_HARDEN) self._filename = os.path.join(WALLET_PATH, self._fn()) self.save() return self
def create(self): if self.pwd_array is not None and (len(self.pwd_array) != self.shares): return None #Generate the seed self.seed, self.nonce = self.create_seed() entropy_from_seed = self.entropy_from_seed(self.seed, self.nonce) #Generate deposit addresses self._root = HDKey.fromEntropy(entropy_from_seed) self._primary = self._root.ChildKey(0) start_point = self._primary.ChildKey(0 + HD_HARDEN) self.deposit_addresses = {} for k in sorted(self.verwif): x = 0 addr = [] while x < self.num_addr: key = start_point.ChildKey(x) addr.append( public_key_to_address(key.PublicKey(), self.verwif[k][0])) x += 1 self.deposit_addresses.update({k: addr}) #Split the seed self.shares = HexToHexSecretSharer.split_secret( binascii.hexlify(entropy_from_seed), self.shares_required, self.num_shares) #Encrypt the shares if a pwd_array is provided #Shares are encrypte against passwords in the same order provided #This is never revealed during use if self.pwd_array is not None: self.encrypted = True x = 0 for pwd in pwd_array: self.shares[x] = self.AESEncrypt(pwd, self.shares[x]) x += 1
def fromExtendedKey(self, xkey, public=False): self._root = HDKey.fromExtendedKey(xkey, public) self._primary = self._root.ChildKey(0+HD_HARDEN) return self