Skip to content

Commit

Permalink
removed add/get methods
Browse files Browse the repository at this point in the history
  • Loading branch information
fametrano committed Nov 11, 2020
1 parent a4867ae commit bc89450
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 71 deletions.
30 changes: 8 additions & 22 deletions btclib/psbt_in.py
Expand Up @@ -18,11 +18,10 @@

from dataclasses_json import DataClassJsonMixin, config

from . import der, varint
from . import dsa, varint
from .bip32 import bytes_from_bip32_path
from .psbt_out import HdKeyPaths, _pubkey_to_hex_string
from .psbt_out import HdKeyPaths
from .script import SIGHASHES
from .to_pubkey import PubKey
from .tx import Tx
from .tx_in import witness_deserialize, witness_serialize
from .tx_out import TxOut
Expand All @@ -49,25 +48,12 @@
class PartialSigs(DataClassJsonMixin):
sigs: Dict[str, str] = field(default_factory=dict)

def add_sig(self, key: PubKey, sig: der.DERSig):

# key_str = pubkeyinfo_from_key(key)[0].hex()
key_str = _pubkey_to_hex_string(key)

r, s, sighash = der.deserialize(sig)
sig_str = der.serialize(r, s, sighash).hex()

self.sigs[key_str] = sig_str

def get_sig(self, key: PubKey) -> bytes:

# key_str = pubkeyinfo_from_key(key)[0].hex()
key_str = _pubkey_to_hex_string(key)

return bytes.fromhex(self.sigs[key_str])

def assert_valid(self) -> None:
pass
for pubkey, sig in self.sigs.items():
# TODO: verify that pubkey is a valid secp256k1 Point
# in compressed SEC representation
assert len(bytes.fromhex(pubkey)) == 33
assert dsa.deserialize(sig)


_PsbtIn = TypeVar("_PsbtIn", bound="PsbtIn")
Expand Down Expand Up @@ -113,7 +99,7 @@ def deserialize(
out.witness_utxo = TxOut.deserialize(value)
elif key[0:1] == PSBT_IN_PARTIAL_SIG:
assert len(key) == 33 + 1, f"invalid key length: {len(key)}"
out.partial_sigs.add_sig(key[1:], value)
out.partial_sigs.sigs[key[1:].hex()] = value.hex()
elif key[0:1] == PSBT_IN_SIGHASH_TYPE:
assert len(key) == 1, f"invalid key length: {len(key)}"
assert out.sighash is None, "duplicated sighash"
Expand Down
51 changes: 2 additions & 49 deletions btclib/tests/test_psbt.py
Expand Up @@ -451,56 +451,9 @@ def test_sig_type1():
pk1_str = "03 572f9af6aebd7a6764264e17abdc4fc80cf359c11f81cbbe4ecf7a2c234a5f8f"
sig1_str = "3045022100e1ea1a3f9f790492eb18810f0e49e650b3397f91fa4a380c0649e3144943009e02202c36df002e2d1b211da0256b446b27541e330c46fd9386b59a161b4902e854cb01"

psbt.inputs[0].partial_sigs.add_sig(pk1_str, sig1_str)
assert psbt.encode() == psbt_check_string
assert psbt.inputs[0].partial_sigs.get_sig(pk1_str).hex() == sig1_str


def test_sig_type2():
# psbt with a sigle partial sig and one single input
psbt_check_string = "cHNidP8BAIkCAAAAARnxViCzMlE50R7BLfUK9Em7JRSithDHx6/HqzxOPb/lAAAAAAD9////AiChBwAAAAAAIgAg6OYWyJlTxF3xOZM+ZJnQYcC6um0klfv3rZqVkbDWaKVBiAMAAAAAACIAIFXAXQ7M7bSsf6IR0Zt+mWvjNRtOX1dbUyA7QN7x3rJVAAAAAAABASuFKwsAAAAAACIAIGxMhA6S1FFxsrccUutx1Wu6+ijbCMDqwETnode6/M9vIgIDVy+a9q69emdkJk4Xq9xPyAzzWcEfgcu+Ts96LCNKX49IMEUCIQDh6ho/n3kEkusYgQ8OSeZQszl/kfpKOAwGSeMUSUMAngIgLDbfAC4tGyEdoCVrRGsnVB4zDEb9k4a1mhYbSQLoVMsBIgYCOOOQQx1Uydk9h38Rd98Gj/dMemSmLtsUC3tlt004+5QUpFwW+ywAAIAAAACAAAAAAAAAAAAiBgJ6RK62ZrlAXMGL4dJOG61AdvTYSrSYvJu7XE37wIolbBQ+kOBlLAAAgAAAAIAAAAAAAAAAACIGAyoYpiApIUlH9R9l71y9PdAJBGyxofwpoeoZGTcP8OkCFLd96kwsAACAAAAAgAAAAAAAAAAAIgYDVy+a9q69emdkJk4Xq9xPyAzzWcEfgcu+Ts96LCNKX48UOIHNZywAAIAAAACAAAAAAAAAAAAiBgP8xVUHZvsvdflS4U8rKZT1vopnW1W8RSXAqOTGeY3RFxRS5uGZLAAAgAAAAIAAAAAAAAAAAAAAAA=="
# template psbt with no sigs and one single input
psbt_template = "cHNidP8BAIkCAAAAARnxViCzMlE50R7BLfUK9Em7JRSithDHx6/HqzxOPb/lAAAAAAD9////AiChBwAAAAAAIgAg6OYWyJlTxF3xOZM+ZJnQYcC6um0klfv3rZqVkbDWaKVBiAMAAAAAACIAIFXAXQ7M7bSsf6IR0Zt+mWvjNRtOX1dbUyA7QN7x3rJVAAAAAAABASuFKwsAAAAAACIAIGxMhA6S1FFxsrccUutx1Wu6+ijbCMDqwETnode6/M9vIgYCOOOQQx1Uydk9h38Rd98Gj/dMemSmLtsUC3tlt004+5QUpFwW+ywAAIAAAACAAAAAAAAAAAAiBgJ6RK62ZrlAXMGL4dJOG61AdvTYSrSYvJu7XE37wIolbBQ+kOBlLAAAgAAAAIAAAAAAAAAAACIGAyoYpiApIUlH9R9l71y9PdAJBGyxofwpoeoZGTcP8OkCFLd96kwsAACAAAAAgAAAAAAAAAAAIgYDVy+a9q69emdkJk4Xq9xPyAzzWcEfgcu+Ts96LCNKX48UOIHNZywAAIAAAACAAAAAAAAAAAAiBgP8xVUHZvsvdflS4U8rKZT1vopnW1W8RSXAqOTGeY3RFxRS5uGZLAAAgAAAAIAAAAAAAAAAAAAAAA=="

psbt = Psbt.decode(psbt_template)

pk1_point = (
39435329158275331253951188932296355405989526227958445886608792771103478669199,
79971975786130117340812496406010842088828363786079262507493324951062616449439,
)

sig1_str = "3045022100e1ea1a3f9f790492eb18810f0e49e650b3397f91fa4a380c0649e3144943009e02202c36df002e2d1b211da0256b446b27541e330c46fd9386b59a161b4902e854cb01"
psbt.inputs[0].partial_sigs.add_sig(pk1_point, sig1_str)

assert psbt.encode() == psbt_check_string


def test_sig_type3():
# psbt with a sigle partial sig and one single input
psbt_check_string = "cHNidP8BAIkCAAAAARnxViCzMlE50R7BLfUK9Em7JRSithDHx6/HqzxOPb/lAAAAAAD9////AiChBwAAAAAAIgAg6OYWyJlTxF3xOZM+ZJnQYcC6um0klfv3rZqVkbDWaKVBiAMAAAAAACIAIFXAXQ7M7bSsf6IR0Zt+mWvjNRtOX1dbUyA7QN7x3rJVAAAAAAABASuFKwsAAAAAACIAIGxMhA6S1FFxsrccUutx1Wu6+ijbCMDqwETnode6/M9vIgIDVy+a9q69emdkJk4Xq9xPyAzzWcEfgcu+Ts96LCNKX49IMEUCIQDh6ho/n3kEkusYgQ8OSeZQszl/kfpKOAwGSeMUSUMAngIgLDbfAC4tGyEdoCVrRGsnVB4zDEb9k4a1mhYbSQLoVMsBIgYCOOOQQx1Uydk9h38Rd98Gj/dMemSmLtsUC3tlt004+5QUpFwW+ywAAIAAAACAAAAAAAAAAAAiBgJ6RK62ZrlAXMGL4dJOG61AdvTYSrSYvJu7XE37wIolbBQ+kOBlLAAAgAAAAIAAAAAAAAAAACIGAyoYpiApIUlH9R9l71y9PdAJBGyxofwpoeoZGTcP8OkCFLd96kwsAACAAAAAgAAAAAAAAAAAIgYDVy+a9q69emdkJk4Xq9xPyAzzWcEfgcu+Ts96LCNKX48UOIHNZywAAIAAAACAAAAAAAAAAAAiBgP8xVUHZvsvdflS4U8rKZT1vopnW1W8RSXAqOTGeY3RFxRS5uGZLAAAgAAAAIAAAAAAAAAAAAAAAA=="
# template psbt with no sigs and one single input
psbt_template = "cHNidP8BAIkCAAAAARnxViCzMlE50R7BLfUK9Em7JRSithDHx6/HqzxOPb/lAAAAAAD9////AiChBwAAAAAAIgAg6OYWyJlTxF3xOZM+ZJnQYcC6um0klfv3rZqVkbDWaKVBiAMAAAAAACIAIFXAXQ7M7bSsf6IR0Zt+mWvjNRtOX1dbUyA7QN7x3rJVAAAAAAABASuFKwsAAAAAACIAIGxMhA6S1FFxsrccUutx1Wu6+ijbCMDqwETnode6/M9vIgYCOOOQQx1Uydk9h38Rd98Gj/dMemSmLtsUC3tlt004+5QUpFwW+ywAAIAAAACAAAAAAAAAAAAiBgJ6RK62ZrlAXMGL4dJOG61AdvTYSrSYvJu7XE37wIolbBQ+kOBlLAAAgAAAAIAAAAAAAAAAACIGAyoYpiApIUlH9R9l71y9PdAJBGyxofwpoeoZGTcP8OkCFLd96kwsAACAAAAAgAAAAAAAAAAAIgYDVy+a9q69emdkJk4Xq9xPyAzzWcEfgcu+Ts96LCNKX48UOIHNZywAAIAAAACAAAAAAAAAAAAiBgP8xVUHZvsvdflS4U8rKZT1vopnW1W8RSXAqOTGeY3RFxRS5uGZLAAAgAAAAIAAAAAAAAAAAAAAAA=="

psbt = Psbt.decode(psbt_template)

pk1_str = "03 572f9af6aebd7a6764264e17abdc4fc80cf359c11f81cbbe4ecf7a2c234a5f8f"
pk1_data = BIP32KeyData(
version=bytes.fromhex("04 88 b2 1e"),
depth=0,
parent_fingerprint=bytes.fromhex("00 00 00 00"),
index=0,
chain_code=bytes.fromhex("00" * 32),
key=bytes.fromhex(pk1_str),
)

sig1_tuple = (
102184014305069174140402327859402177641508830985455155304631976296151081222302,
19998714173460009076169822367027233344857699483557944187047724338642858562763,
1,
)

psbt.inputs[0].partial_sigs.add_sig(pk1_data, sig1_tuple)
psbt.inputs[0].partial_sigs.sigs[pk1_str] = sig1_str
assert psbt.encode() == psbt_check_string
assert psbt.inputs[0].partial_sigs.sigs[pk1_str] == sig1_str


def test_hd_paths():
Expand Down

0 comments on commit bc89450

Please sign in to comment.