Пример #1
0
def test_against_myself():
    """
    Test code that verifies against ourselves only. Useful but not so great.
    """
    from pycoin.contrib.msg_signing import (parse_signed_message, sign_message,
                                            verify_message)
    from pycoin.encoding import bitcoin_address_to_hash160_sec_with_prefix
    from pycoin.encoding import wif_to_tuple_of_secret_exponent_compressed

    for wif, right_addr in [
        ('L4gXBvYrXHo59HLeyem94D9yLpRkURCHmCwQtPuWW9m6o1X8p8sp',
         '1LsPb3D1o1Z7CzEt1kv5QVxErfqzXxaZXv'),
        ('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss',
         '1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN'),
    ]:
        se, comp = wif_to_tuple_of_secret_exponent_compressed(wif)

        k = Key(secret_exponent=se, is_compressed=comp)
        assert k.address() == right_addr

        vk = Key(public_pair=k.public_pair(), is_compressed=comp)
        assert vk.address() == right_addr

        h160, pubpre = bitcoin_address_to_hash160_sec_with_prefix(right_addr)
        vk2 = Key(hash160=h160)
        assert vk2.address() == right_addr

        for i in range(1, 30, 10):
            msg = 'test message %s' % ('A' * i)
            sig = sign_message(k, msg, verbose=1)
            assert right_addr in sig

            # check parsing works
            m, a, s = parse_signed_message(sig)
            assert m == msg, m
            assert a == right_addr, a

            sig2 = sign_message(k, msg, verbose=0)
            assert sig2 in sig, (sig, sig2)

            assert s == sig2, s

            ok = verify_message(k, sig2, msg)
            assert ok

            ok = verify_message(k, sig2.encode('ascii'), msg)
            assert ok
Пример #2
0
def test_against_myself():
    """
    Test code that verifies against ourselves only. Useful but not so great.
    """
    from pycoin.contrib.msg_signing import (
            parse_signed_message, sign_message, verify_message)
    from pycoin.encoding import bitcoin_address_to_hash160_sec_with_prefix
    from pycoin.encoding import wif_to_tuple_of_secret_exponent_compressed

    for wif, right_addr in [
                    ('L4gXBvYrXHo59HLeyem94D9yLpRkURCHmCwQtPuWW9m6o1X8p8sp',
                     '1LsPb3D1o1Z7CzEt1kv5QVxErfqzXxaZXv'),
                    ('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss',
                     '1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN'),
                ]:
        se, comp = wif_to_tuple_of_secret_exponent_compressed(wif)

        k = Key(secret_exponent=se, is_compressed=comp)
        assert k.address() == right_addr

        vk = Key(public_pair=k.public_pair(), is_compressed=comp)
        assert vk.address() == right_addr

        h160, pubpre = bitcoin_address_to_hash160_sec_with_prefix(right_addr)
        vk2 = Key(hash160=h160)
        assert vk2.address() == right_addr

        for i in range(1, 30, 10):
            msg = 'test message %s' % ('A'*i)
            sig = sign_message(k, msg, verbose=1)
            assert right_addr in sig

            # check parsing works
            m, a, s = parse_signed_message(sig)
            assert m == msg, m
            assert a == right_addr, a

            sig2 = sign_message(k, msg, verbose=0)
            assert sig2 in sig, (sig, sig2)

            assert s == sig2, s

            ok = verify_message(k, sig2, msg)
            assert ok

            ok = verify_message(k, sig2.encode('ascii'), msg)
            assert ok
Пример #3
0
def test_msg_parse():
    """
        Test against real-world signatures found in the wild.
    """

    from pycoin.contrib.msg_signing import parse_signed_message, verify_message
    from pycoin.key import Key

    # Output from brainwallet in "multibit" mode.
    multibit = '''

-----BEGIN BITCOIN SIGNED MESSAGE-----
This is an example of a signed message.
-----BEGIN BITCOIN SIGNATURE-----
Version: Bitcoin-qt (1.0)
Address: 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN

HCT1esk/TWlF/o9UNzLDANqsPXntkMErf7erIrjH5IBOZP98cNcmWmnW0GpSAi3wbr6CwpUAN4ctNn1T71UBwSc=
-----END BITCOIN SIGNATURE-----

'''
    m, a, s = parse_signed_message(multibit)
    assert m == 'This is an example of a signed message.'
    assert a == '1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN'
    assert s == ('HCT1esk/TWlF/o9UNzLDANqsPXntkMErf7erIrjH5IBOZ'
                 'P98cNcmWmnW0GpSAi3wbr6CwpUAN4ctNn1T71UBwSc=')
    ok = verify_message(a, s, m, netcode='BTC')
    assert ok

    # Sampled from: https://www.bitrated.com/u/Bit2c.txt on Sep 3/2014
    bit2c = '''\
Username: Bit2c
Public key: 0396267072e597ad5d043db7c73e13af84a77a7212871f1aade607fb0f2f96e1a8
Public key address: 15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej
URL: https://www.bitrated.com/u/Bit2c

-----BEGIN BITCOIN SIGNED MESSAGE-----
We will try to contact both parties to gather information and evidence, and do my best to make rightful judgement. Evidence may be submitted to us on https://www.bit2c.co.il/home/contact or in a private message to [email protected] or in any agreed way.

https://www.bit2c.co.il
-----BEGIN SIGNATURE-----
15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej
H2utKkquLbyEJamGwUfS9J0kKT4uuMTEr2WX2dPU9YImg4LeRpyjBelrqEqfM4QC8pJ+hVlQgZI5IPpLyRNxvK8=
-----END BITCOIN SIGNED MESSAGE-----
'''
    m, a, s = parse_signed_message(bit2c)
    assert a == '15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej'
    assert s == ('H2utKkquLbyEJamGwUfS9J0kKT4uuMTEr2WX2dPU9YI'
                 'mg4LeRpyjBelrqEqfM4QC8pJ+hVlQgZI5IPpLyRNxvK8=')
    ok = verify_message(a, s, m, netcode='BTC')
    assert ok

    # testnet example
    # Sampled from: http://testnet.bitrated.com/u/bearbin.txt on Sep 3/2014
    # NOTE: Testnet3
    bearbin = '''\
Username: bearbin
Public key: 03fc594c16779054fc5e119c309215c1f40f2ce104b0169cddeb6d20445bd28f67
Public key address: n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM
URL: http://testnet.bitrated.com/u/bearbin

-----BEGIN BITCOIN SIGNED MESSAGE-----
Contact
-----------

[email protected] - Email or hangouts (text only).

/u/bearbin on reddit (slow response, not preferred for use with the service, just for contact).

Resolution Guidelines:
-----------------------------

 * Evidence is needed. (e.g. pictures w/ proof that it's you).
 * If anybody fails to respond, money goes to the other person after 2 weeks.
 * Additional terms available on request.

Pricing
----------

 * 0.7% Min 0.003 Max 0.15
 * Payment in advance.
-----BEGIN SIGNATURE-----
n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM
IEackZgifpBJs3SqQQ6leUwzvakTZgUKTDuCCn6rVMOQgHlIEzWSYZGQu2H+1chvu68uutzt04cGmsHy/kRIaEc=
-----END BITCOIN SIGNED MESSAGE-----
'''
    m, a, s = parse_signed_message(bearbin)
    assert a == 'n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM'
    assert s == ('IEackZgifpBJs3SqQQ6leUwzvakTZgUKTDuCCn6rVMOQgH'
                 'lIEzWSYZGQu2H+1chvu68uutzt04cGmsHy/kRIaEc=')
    ok = verify_message(a, s, m, netcode='XTN')
    assert ok
Пример #4
0
def test_msg_parse():
    """
        Test against real-world signatures found in the wild.
    """

    from pycoin.contrib.msg_signing import parse_signed_message, verify_message
    from pycoin.key import Key

    # Output from brainwallet in "multibit" mode.
    multibit = """

-----BEGIN BITCOIN SIGNED MESSAGE-----
This is an example of a signed message.
-----BEGIN BITCOIN SIGNATURE-----
Version: Bitcoin-qt (1.0)
Address: 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN

HCT1esk/TWlF/o9UNzLDANqsPXntkMErf7erIrjH5IBOZP98cNcmWmnW0GpSAi3wbr6CwpUAN4ctNn1T71UBwSc=
-----END BITCOIN SIGNATURE-----

"""
    m, a, s = parse_signed_message(multibit)
    assert m == "This is an example of a signed message."
    assert a == "1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN"
    assert s == ("HCT1esk/TWlF/o9UNzLDANqsPXntkMErf7erIrjH5IBOZ" "P98cNcmWmnW0GpSAi3wbr6CwpUAN4ctNn1T71UBwSc=")
    ok = verify_message(a, s, m, netcode="BTC")
    assert ok

    # Sampled from: https://www.bitrated.com/u/Bit2c.txt on Sep 3/2014
    bit2c = """\
Username: Bit2c
Public key: 0396267072e597ad5d043db7c73e13af84a77a7212871f1aade607fb0f2f96e1a8
Public key address: 15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej
URL: https://www.bitrated.com/u/Bit2c

-----BEGIN BITCOIN SIGNED MESSAGE-----
We will try to contact both parties to gather information and evidence, and do my best to make rightful judgement. Evidence may be submitted to us on https://www.bit2c.co.il/home/contact or in a private message to [email protected] or in any agreed way.

https://www.bit2c.co.il
-----BEGIN SIGNATURE-----
15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej
H2utKkquLbyEJamGwUfS9J0kKT4uuMTEr2WX2dPU9YImg4LeRpyjBelrqEqfM4QC8pJ+hVlQgZI5IPpLyRNxvK8=
-----END BITCOIN SIGNED MESSAGE-----
"""
    m, a, s = parse_signed_message(bit2c)
    assert a == "15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej"
    assert s == ("H2utKkquLbyEJamGwUfS9J0kKT4uuMTEr2WX2dPU9YI" "mg4LeRpyjBelrqEqfM4QC8pJ+hVlQgZI5IPpLyRNxvK8=")
    ok = verify_message(a, s, m, netcode="BTC")
    assert ok

    # testnet example
    # Sampled from: http://testnet.bitrated.com/u/bearbin.txt on Sep 3/2014
    # NOTE: Testnet3
    bearbin = """\
Username: bearbin
Public key: 03fc594c16779054fc5e119c309215c1f40f2ce104b0169cddeb6d20445bd28f67
Public key address: n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM
URL: http://testnet.bitrated.com/u/bearbin

-----BEGIN BITCOIN SIGNED MESSAGE-----
Contact
-----------

[email protected] - Email or hangouts (text only).

/u/bearbin on reddit (slow response, not preferred for use with the service, just for contact).

Resolution Guidelines:
-----------------------------

 * Evidence is needed. (e.g. pictures w/ proof that it's you).
 * If anybody fails to respond, money goes to the other person after 2 weeks.
 * Additional terms available on request.

Pricing
----------

 * 0.7% Min 0.003 Max 0.15
 * Payment in advance.
-----BEGIN SIGNATURE-----
n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM
IEackZgifpBJs3SqQQ6leUwzvakTZgUKTDuCCn6rVMOQgHlIEzWSYZGQu2H+1chvu68uutzt04cGmsHy/kRIaEc=
-----END BITCOIN SIGNED MESSAGE-----
"""
    m, a, s = parse_signed_message(bearbin)
    assert a == "n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM"
    assert s == ("IEackZgifpBJs3SqQQ6leUwzvakTZgUKTDuCCn6rVMOQgH" "lIEzWSYZGQu2H+1chvu68uutzt04cGmsHy/kRIaEc=")
    ok = verify_message(a, s, m, netcode="XTN")
    assert ok