Esempio n. 1
0
def sign_p2pk(tx, i, priv, pub, hashtype = SIGHASH_ALL):
    assert isinstance(tx, dict)
    i = int(i)
    assert isinstance(priv, int)
    assert isinstance(pub, bytes)

    prev_script = script.make_p2pk(pub)
    txhash = sighash(tx, i, prev_script, hashtype)
    sig = ecdsa.sign(txhash, priv)
    sig = ecdsa.serialize_sig(sig) + convert.int_to_byte(hashtype)
    tx["ins"][i]["script"] = script.serialize([sig])
Esempio n. 2
0
    def test_all(self):
        for _ in range(10):
            msghash = convert.random_bytes(32)
            priv = ecdsa.random_priv()
            pub = ecdsa.priv_to_pub(priv)
            sig = ecdsa.sign(msghash, priv)
            self.assertTrue(
                ecdsa.verify(msghash, sig, pub),
                "Verification error"
            )

            self.assertEqual(
                pub,
                ecdsa.recover(msghash, sig),
                "Recovery failed"
            )
Esempio n. 3
0
def sign_multisig(tx, i, prev_script, privs, pubs, hashtype = SIGHASH_ALL):
    assert isinstance(tx, dict)
    i = int(i)
    assert len(privs) == len(pubs)

    txhash = sighash(tx, i, prev_script, hashtype)

    s = [
        script.Opcode.OP_0,
    ]

    for j in range(len(privs)):
        priv = privs[j]
        pub = pubs[j]
        sig = ecdsa.sign(txhash, priv)
        sig = ecdsa.serialize_sig(sig) + convert.int_to_byte(hashtype)
        s.append(sig)

    tx["ins"][i]["script"] = script.serialize(s)