针对公钥比特币黄金验证签名

时间:2020-10-11 18:23:39

标签: digital-signature bitcoin verification

我正在研究trezor multisig支持 我有一个原始交易,由1个委托人签名,共2of3个multisig

0100000001f479528049ee4b235548a7116f5ca31c607728af3d4ac8f102c5be13e93dcca900000000b40047304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80414c69522103556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c58822103917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a562103f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef4913676553aeffffffff02a08601000000000017a914fd80725877f902f4491a6dc733fe788c376aeff8875033f4050000000017a9149aba36d2c19b08781230a4301f364610a163fc2d8700000000

带符号的十六进制

304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80

涉及的公钥

['03556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c5882', '03917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a56', '03f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef49136765']

transaction details

我要验证3个公钥中哪个是由公钥签名的交易

我尝试了以下电子代码


    from ecdsa import SECP256k1
    from ecdsa.ecdsa import generator_secp256k1
    from ecdsa.util import sigdecode_der, sigencode_string
    
    from lib import Transaction
    from lib.bitcoin import Hash, MyVerifyingKey, point_to_ser
    from lib.util import bfh, bh2u
    
    raw_tx = '0100000001f479528049ee4b235548a7116f5ca31c607728af3d4ac8f102c5be13e93dcca900000000b40047304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80414c69522103556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c58822103917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a562103f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef4913676553aeffffffff02a08601000000000017a914fd80725877f902f4491a6dc733fe788c376aeff8875033f4050000000017a9149aba36d2c19b08781230a4301f364610a163fc2d8700000000'
    sig = '304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80'
    
    tx = Transaction(raw_tx)
    sighash = Hash(bfh(tx.serialize_preimage(0)))
    
    pubkeys, x_pubkeys = tx.get_sorted_pubkeys(tx.inputs()[0])
    print(sighash.hex())
    print(pubkeys)
    
    order = generator_secp256k1.order()
    r, s = sigdecode_der(bfh(sig), order)
    sig_string = sigencode_string(r, s, order)
    compressed = True
    
    for recid in range(4):
        print(recid)
        public_key = MyVerifyingKey.from_signature(sig_string, recid, sighash, curve=SECP256k1)
        pubkey = bh2u(point_to_ser(public_key.pubkey.point, compressed))
        print(pubkey)
        # print(public_key.verify_digest(sig_string, sighash, sigdecode=ecdsa.util.sigdecode_string))
    print(tx.signature_count())

它的输出是

0
0322a5066da600ba7e312e65921f584a978130e58b6fa2b59c38222f57d67d73f5
1
035e95ea113cecfbf91c4e899a0563cb8378d7c3b33ae9defcb77c8ca35744045f
2
02f7565b3f7a48fbf9692e6d90634e347eeffc2f36323f7ce4167666fb7e55f904
3
02cea9009093d9ad46d2977dfe9232c7ad16a29f0e47294e83c6d4d7f5f6f06b4c

Process finished with exit code 0

我认为我的公开密钥应该在输出中,这是错误的。

0 个答案:

没有答案