def __init__(self, parent, title_label: str, pin_label: str,
              qr_data: dict):
     super().__init__()
     self.parent = parent
     self.pubkey = ECPrivkey(
         short_mnemonic.entropy_to_privkey(
             qr_data['entropy'])).get_public_key_hex()
     qr = QRCodeWidget(self.prepare_qr_data_for_display(qr_data))
     self.edit = QLineEdit()
     self.edit.setMaxLength(4)
     self.edit.setFixedWidth(50)
     self.edit.setFont(QFont("Monospace"))
     self.edit.textChanged.connect(self._on_change)
     self.addWidget(title_label, alignment=Qt.AlignCenter)
     self.addWidget(qr, alignment=Qt.AlignCenter)
     self.addWidget(pin_label, alignment=Qt.AlignCenter)
     self.addWidget(self.edit, alignment=Qt.AlignCenter)
Beispiel #2
0
from bitcoin.core.key import use_libsecp256k1_for_signing
from bitcoin.core import x, b2x
from bitcoin.wallet import CBitcoinSecret
from electrum.ecc import ECPrivkey
from electrum.bitcoin import EncodeBase58Check

use_libsecp256k1_for_signing(True)

sechex = '535b755a4c265772c4f6c7e0316bfd21e24c9e47441989e14e8133c7cb2f41a3'
hashhex = '9039c54c1c34aa12b69b4dda962f501bb6c9cdb6745014ef326f5d4d0472aa99'

seckey = CBitcoinSecret.from_secret_bytes(x(sechex))
sig = seckey.sign(x(hashhex))
b_wif = str(seckey)
b_pub = b2x(seckey.pub)
b_sig = b2x(sig)

seckey = ECPrivkey(x(sechex))
sig = seckey.sign_transaction(x(hashhex))
e_wif = EncodeBase58Check(b'\x80' + seckey.get_secret_bytes() + b'\x01')
e_pub = seckey.get_public_key_hex(compressed=True)
e_sig = b2x(sig)

assert b_wif == e_wif
assert b_pub == e_pub
print("wif:", b_wif)
print("pub:", b_pub)
print("sighash:", hashhex)
print("bitcoinlib sig:", b_sig)
print("electrum sig:  ", e_sig)
def seed_to_keypair(seed: List[str]) -> Tuple[bytes, str]:
    privkey = seed_to_privkey(seed)
    pubkey = ECPrivkey(privkey).get_public_key_hex()
    keypair = (privkey, pubkey)
    del privkey, pubkey
    return keypair
Beispiel #4
0
# Basic constants to build the TXNIN
wif = 'cQNjiPwYKMBr2oB3bWzf3rgBsu198xb8Nxxe51k6D3zVTA98L25N'
txid = x('6d500966f9e494b38a04545f0cea35fc7b3944e341a64b804fed71cdee11d434')
vout = 1
sats = 9999
script_type = 'p2sh'
binzero  = 2**32
sequence = binzero - 3
address = 'tb1qv9hg20f0g08d460l67ph6p4ukwt7m0ttqzj7mk'
sats_less_fees = sats - 200
locktime = 1602565200

# Build the Transaction Input
_, privkey, compressed = deserialize_privkey(wif)
pubkey = ECPrivkey(privkey).get_public_key_hex(compressed=compressed)
prevout = TxOutpoint(txid=txid, out_idx=vout)
txin = PartialTxInput(prevout=prevout)
txin.nsequence = sequence
txin.script_type = script_type
expiry = b2x(lx(b2x(locktime)))
redeem_script = compile([
    expiry, 'OP_CHECKLOCKTIMEVERIFY', 'OP_DROP', pubkey, 'OP_CHECKSIG'])
txin.redeem_script = x(redeem_script)

# Build the Transaction Output
txout = PartialTxOutput.from_address_and_value(address, sats_less_fees)

# Build and sign the transaction
tx = P2SHPartialTransaction.from_io([txin], [txout], locktime=locktime)
tx.version = 1
Beispiel #5
0
# Set testnet
set_testnet()

# Set mainnet
# set_mainnet()

# Number of addresses to generate:
n = 20

# Type of address
type = 'p2wpkh'

# type = 'p2wpkh-p2sh'
# type = 'p2pkh'


# https://www.secg.org/sec2-v2.pdf section 2.4.1
def get_priv():
    n = 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141'
    n = int(n.replace(' ', ''), 16)
    priv = randint(1, n - 1)
    return bytes.fromhex(f"{priv:064x}")


for i in range(0, n):
    priv = get_priv()
    wif = serialize_privkey(priv, True, '').replace(':', '')
    pubk = ECPrivkey(priv).get_public_key_bytes()
    addr = pubkey_to_address('p2wpkh', pubk.hex())
    print(f"WIF: {wif} Address: {addr}")