Exemple #1
0
def ecdsa_raw_sign_one_to_one(msghash, sender_priv, receiver_pub):
    z = bitcoin.hash_to_int(msghash)
    k = bitcoin.deterministic_generate_k(msghash, sender_priv)
    r, y = bitcoin.fast_multiply(bitcoin.decode_pubkey(receiver_pub), k)
    s = bitcoin.inv(k, N) * (z + r * bitcoin.decode_privkey(sender_priv)) % N
    v, r, s = 27 + ((y % 2) ^
                    (0 if s * 2 < N else 1)), r, s if s * 2 < N else N - s
    return v, r, s
Exemple #2
0
def donation_address(cjtx):
	reusable_donation_pubkey = '02be838257fbfddabaea03afbb9f16e8529dfe2de921260a5c46036d97b5eacf2a'

	donation_utxo_data = cjtx.input_utxos.iteritems().next()
	global donation_utxo
	donation_utxo = donation_utxo_data[0]
	privkey = cjtx.wallet.get_key_from_addr(donation_utxo_data[1]['address'])

	tx = btc.mktx(cjtx.utxo_tx, cjtx.outputs) #tx without our inputs and outputs
	#address = privtoaddr(privkey)
	#signing_tx = signature_form(tx, 0, mk_pubkey_script(address), SIGHASH_ALL)
	msghash = btc.bin_txhash(tx, btc.SIGHASH_ALL)
	#generate unpredictable k
	global sign_k
	sign_k = btc.deterministic_generate_k(msghash, privkey)
	c = btc.sha256(btc.multiply(reusable_donation_pubkey, sign_k))
	sender_pubkey = btc.add_pubkeys(reusable_donation_pubkey, btc.multiply(btc.G, c))
	sender_address = btc.pubtoaddr(sender_pubkey, get_p2pk_vbyte())
	debug('sending coins to ' + sender_address)
	return sender_address
Exemple #3
0
def donation_address(cjtx):
    reusable_donation_pubkey = '02be838257fbfddabaea03afbb9f16e8529dfe2de921260a5c46036d97b5eacf2a'

    donation_utxo_data = cjtx.input_utxos.iteritems().next()
    global donation_utxo
    donation_utxo = donation_utxo_data[0]
    privkey = cjtx.wallet.get_key_from_addr(donation_utxo_data[1]['address'])

    tx = btc.mktx(cjtx.utxo_tx,
                  cjtx.outputs)  #tx without our inputs and outputs
    #address = privtoaddr(privkey)
    #signing_tx = signature_form(tx, 0, mk_pubkey_script(address), SIGHASH_ALL)
    msghash = btc.bin_txhash(tx, btc.SIGHASH_ALL)
    #generate unpredictable k
    global sign_k
    sign_k = btc.deterministic_generate_k(msghash, privkey)
    c = btc.sha256(btc.multiply(reusable_donation_pubkey, sign_k))
    sender_pubkey = btc.add_pubkeys(reusable_donation_pubkey,
                                    btc.multiply(btc.G, c))
    sender_address = btc.pubtoaddr(sender_pubkey, get_p2pk_vbyte())
    debug('sending coins to ' + sender_address)
    return sender_address
Exemple #4
0
def sign(tx_hash: bytes, private_key: str):
    msg_hash = tx_hash
    z = bitcoin.hash_to_int(msg_hash)
    k = bitcoin.deterministic_generate_k(msg_hash, private_key)

    r, y = bitcoin.fast_multiply(bitcoin.G, k)
    s = bitcoin.inv(k, bitcoin.N) * (
        z + r * bitcoin.decode_privkey(private_key)) % bitcoin.N

    v, r, s = 27 + ((y % 2) ^ (0 if s * 2 < bitcoin.N else 1)
                    ), r, s if s * 2 < bitcoin.N else bitcoin.N - s
    if 'compressed' in bitcoin.get_privkey_format(private_key):
        v += 4
    hex_str_r = hex(r)[2:]
    if len(hex_str_r) < 64:
        hex_str_r = ((64 - len(hex_str_r)) * "0") + hex_str_r
    hex_str_s = hex(s)[2:]
    if len(hex_str_s) < 64:
        hex_str_s = ((64 - len(hex_str_s)) * "0") + hex_str_s
    signature = hex_str_r + hex_str_s
    recovery = v - 27
    return signature, recovery