Ejemplo n.º 1
0
    def on_receive(self, keyhash, message):
        self.print_error("signal arrived for", keyhash)
        for key, _hash, window in self.keys:
            if _hash == keyhash:
                break
        else:
            self.print_error("keyhash not found")
            return

        wallet = window.wallet
        if wallet.has_keystore_encryption():
            password = window.password_dialog('An encrypted transaction was retrieved from cosigning pool.\nPlease enter your password to decrypt it.')
            if not password:
                return
        else:
            password = None
            if not window.question(_("An encrypted transaction was retrieved from cosigning pool.\nDo you want to open it now?")):
                return

        xprv = wallet.keystore.get_master_private_key(password)
        if not xprv:
            return
        try:
            k = bh2u(bitcoin.deserialize_xprv(xprv)[-1])
            EC = bitcoin.EC_KEY(bfh(k))
            message = bh2u(EC.decrypt_message(message))
        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            window.show_message(str(e))
            return

        self.listener.clear(keyhash)
        tx = transaction.Transaction(message)
        show_transaction(tx, window, prompt_if_unsaved=True)
Ejemplo n.º 2
0
    def on_receive(self):
        if self.wallet.use_encryption:
            password = self.win.password_dialog('An encrypted transaction was retrieved from cosigning pool.\nPlease enter your password to decrypt it.')
            if not password:
                return
        else:
            password = None
            if not self.win.question(_("An encrypted transaction was retrieved from cosigning pool.\nDo you want to open it now?")):
                return

        message = self.listener.message
        key = self.listener.keyname
        xprv = self.wallet.get_master_private_key(key, password)
        if not xprv:
            return
        try:
            k = bitcoin.deserialize_xkey(xprv)[-1].encode('hex')
            EC = bitcoin.EC_KEY(k.decode('hex'))
            message = EC.decrypt_message(message)
        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            self.win.show_message(str(e))
            return

        self.listener.clear()
        tx = transaction.Transaction(message)
        show_transaction(tx, self.win, prompt_if_unsaved=True)
Ejemplo n.º 3
0
 def ecdsa_sign(msg, priv, usehex=True):
     if usehex:
         priv = binascii.unhexlify(priv)
     compressed = False
     if len(priv) == 33 and priv[-1]=="\x01":
         compressed = True
     signkey = ebt.EC_KEY(priv[:32])
     private_key = ebt.MySigningKey.from_secret_exponent(signkey.secret,
                                                         curve=SECP256k1)
     sig = private_key.sign_digest_deterministic(ebt.Hash(ebt.msg_magic(msg)),
                                             hashfunc=hashlib.sha256,
                                         sigencode = sigencode_der)
     return base64.b64encode(sig)
Ejemplo n.º 4
0
 def ecdsa_sign(msg, priv, usehex=True):
     addr = privkey_to_address(priv)
     log.debug("Got address: " + addr)
     priv = binascii.unhexlify(priv)
     compressed = False
     if len(priv) == 33 and priv[-1] == "\x01":
         compressed = True
     else:
         compressed = False
     signkey = ebt.EC_KEY(priv[:32])
     ecdsa_sig = signkey.sign_message(msg, compressed, addr)
     #The electrum lib (+ecdsa) is returning a recovery id encoding in the
     #first byte, but our code ignores it in verification (it's just 27+y%2
     #in the original pybitcointools implementation, which was maintained
     #in the secp256k1 patch in joinmarket for backwards compatibility.
     return base64.b64encode(ecdsa_sig)
Ejemplo n.º 5
0
    def on_receive(self, keyhash, message):
        self.print_error("signal arrived for", keyhash)
        for key, _hash, window in self.keys:
            if _hash == keyhash:
                break
        else:
            self.print_error("keyhash not found")
            return

        wallet = window.wallet
        if isinstance(wallet.keystore, keystore.Hardware_KeyStore):
            window.show_warning(
                _('An encrypted transaction was retrieved from cosigning pool.'
                  ) + '\n' +
                _('However, hardware wallets do not support message decryption, '
                  'which makes them not compatible with the current design of cosigner pool.'
                  ))
            return
        elif wallet.has_keystore_encryption():
            password = window.password_dialog(
                _('An encrypted transaction was retrieved from cosigning pool.'
                  ) + '\n' + _('Please enter your password to decrypt it.'))
            if not password:
                return
        else:
            password = None
            if not window.question(
                    _("An encrypted transaction was retrieved from cosigning pool."
                      ) + '\n' + _("Do you want to open it now?")):
                return

        xprv = wallet.keystore.get_master_private_key(password)
        if not xprv:
            return
        try:
            k = bh2u(bitcoin.deserialize_xprv(xprv)[-1])
            EC = bitcoin.EC_KEY(bfh(k))
            message = bh2u(EC.decrypt_message(message))
        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            window.show_message(str(e))
            return

        self.listener.clear(keyhash)
        tx = transaction.Transaction(message)
        show_transaction(tx, window, prompt_if_unsaved=True)
Ejemplo n.º 6
0
 def __init__(self, scalar):
     self._privkey = ebt.EC_KEY(scalar)
     self.private_key = scalar
     self.pubkey = PPubKey(
         binascii.unhexlify(self._privkey.get_public_key()))
Ejemplo n.º 7
0
 def getG(compressed=True):
     scalar = "\x00" * 31 + "\x01"
     return binascii.unhexlify(
         ebt.EC_KEY(scalar).get_public_key(compressed=compressed))