Example #1
0
    def decrypt(self):
        shares = [x.text() for x in self.textboxes if x.text()]
        if not shares:
            return

        hex_shares = []
        for share in shares:
            hex_share = hex(self.mm.mnemonic_decode(share))[2:]
            hex_share = hex_share[0] + "-" + hex_share[2:]
            hex_shares.append(hex_share)

        decrypted = HexToHexSecretSharer.recover_secret(hex_shares)
        self.original.setText(self.mm.mnemonic_encode(int(decrypted, 16)))
        for tb in self.textboxes:
            tb.setText("")
Example #2
0
    def open(self, num_addr, shares, passphrase, pwd_array=None):
        # Rebuild the seed from shares
        _shares = []
        x = 0
        for share in shares:
            if pwd_array is not None:
                _shares.append(self.AESEncrypt(pwd_array[x], share))
            else:
                _shares.append(share)

            x += 1

        entropy_from_seed = HexToHexSecretSharer.recover_secret(_shares)
        w = self.fromEntropy(binascii.unhexlify(entropy_from_seed), passphrase)
        x = 0
        while x < num_addr:
            key = w.create_address(save=True, addr_type=0)
            x += 1
        return w
Example #3
0
    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("")
Example #4
0
    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 recover_passphrase(shares):
    return HexToHexSecretSharer.recover_secret(shares)
def split_passphrase(passphrase, share_threshold=2, num_shares=6):
    return HexToHexSecretSharer.split_secret(
        passphrase,
        share_threshold,
        num_shares
    )
def recover_passphrase(shares):
    return HexToHexSecretSharer.recover_secret(shares)
def split_passphrase(passphrase, share_threshold=2, num_shares=6):
    return HexToHexSecretSharer.split_secret(passphrase, share_threshold,
                                             num_shares)