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)
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)
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)
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)
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)
def __init__(self, scalar): self._privkey = ebt.EC_KEY(scalar) self.private_key = scalar self.pubkey = PPubKey( binascii.unhexlify(self._privkey.get_public_key()))
def getG(compressed=True): scalar = "\x00" * 31 + "\x01" return binascii.unhexlify( ebt.EC_KEY(scalar).get_public_key(compressed=compressed))