def encrypt(self): if not self.original.text(): return try: val = hex(self.mm.mnemonic_decode(self.original.text()))[2:] except ValueError: QMessageBox.question(self, 'Error', "The seed you entered is invalid.", QMessageBox.Ok, QMessageBox.Ok) return shares = HexToHexSecretSharer.split_secret( val, self.shares_required.value(), self.shares_to_generate.value()) for share_no in range(len(shares)): ssint = int(shares[share_no].replace("-", "0"), 16) ss = self.mm.mnemonic_encode(ssint) self.textboxes[share_no].setText(ss) self.original.setText("")
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 split_passphrase(passphrase, share_threshold=2, num_shares=6): return HexToHexSecretSharer.split_secret( passphrase, share_threshold, num_shares )
def split_passphrase(passphrase, share_threshold=2, num_shares=6): return HexToHexSecretSharer.split_secret(passphrase, share_threshold, num_shares)