#!/usr/bin/env python                                                                                                                                                                                                                                                    
import sys
# needs pybitcointools
from bitcoin import *
if len(sys.argv) < 2:
    print "Enter transaction id in hex as first argument"
txid = sys.argv[1]
tx = fetchtx(txid)
inScript = deserialize(tx)['ins'][0]['script']
inDeserialized = deserialize_script(inScript)
if inDeserialized[0] is not None:
    print "This does not seem like multisig spending transaction, input script is expected to start with OP_FALSE, but proceeding anyway"
sigs = inDeserialized[1:-1]
mscript = inDeserialized[-1]
mDeserialized = deserialize_script(mscript)
if mDeserialized[-1] != 0xae:
    print "Last instruction of redeem script is not 0xAE, but proceeding anyway"
sigCount = mDeserialized[0]
pubCount = mDeserialized[-2]
pubKeys = mDeserialized[1:-2]
assert isinstance(sigCount, int)
assert isinstance(pubCount, int)
print "We have %d-out-ouf-%d scheme" % (sigCount, pubCount)
assert len(sigs) == sigCount, "Signature count does not match reedem script sig count"
assert len(pubKeys) == pubCount, "Pubkey count does not match count of pubkeys in redeem script"
#let's bruteforce each sig against each pubkey even though in reality there must be certain order
for sig in sigs:
    for pub in pubKeys:
        #print "Testing sig %s against pub %s" % (sig, pub)
        if verify_tx_input(tx, 0, mscript, sig, pub):
            print "Match: pubkey %s matched signature %s" % (pub, sig)
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki