1import textwrap 2import unittest 3 4from pycoin.symbols.btc import network as BTC 5from pycoin.symbols.xtn import network as XTN 6 7 8def test_against_myself(): 9 """ 10 Test code that verifies against ourselves only. Useful but not so great. 11 """ 12 13 for wif, right_addr in [ 14 ('L4gXBvYrXHo59HLeyem94D9yLpRkURCHmCwQtPuWW9m6o1X8p8sp', 15 '1LsPb3D1o1Z7CzEt1kv5QVxErfqzXxaZXv'), 16 ('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss', 17 '1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN'), 18 ]: 19 k = BTC.parse.wif(wif) 20 assert k.address() == right_addr 21 22 vk2 = BTC.parse.address(right_addr) 23 assert vk2.address() == right_addr 24 25 for i in range(1, 30, 10): 26 msg = 'test message %s' % ('A'*i) 27 sig = BTC.msg.sign(k, msg, verbose=1) 28 assert right_addr in sig 29 30 # check parsing works 31 m, a, s = BTC.msg.parse_signed(sig) 32 assert m == msg, m 33 assert a == right_addr, a 34 35 sig2 = BTC.msg.sign(k, msg, verbose=0) 36 assert sig2 in sig, (sig, sig2) 37 38 assert s == sig2, s 39 40 ok = BTC.msg.verify(k, sig2, msg) 41 assert ok 42 43 ok = BTC.msg.verify(k, sig2.encode('ascii'), msg) 44 assert ok 45 46 47def test_msg_parse(): 48 """ 49 Test against real-world signatures found in the wild. 50 """ 51 52 # Output from brainwallet in "multibit" mode. 53 multibit = ''' 54 55-----BEGIN BITCOIN SIGNED MESSAGE----- 56This is an example of a signed message. 57-----BEGIN BITCOIN SIGNATURE----- 58Version: Bitcoin-qt (1.0) 59Address: 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN 60 61HCT1esk/TWlF/o9UNzLDANqsPXntkMErf7erIrjH5IBOZP98cNcmWmnW0GpSAi3wbr6CwpUAN4ctNn1T71UBwSc= 62-----END BITCOIN SIGNATURE----- 63 64''' 65 m, a, s = BTC.msg.parse_signed(multibit) 66 assert m == 'This is an example of a signed message.' 67 assert a == '1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN' 68 assert s == ('HCT1esk/TWlF/o9UNzLDANqsPXntkMErf7erIrjH5IBOZ' 69 'P98cNcmWmnW0GpSAi3wbr6CwpUAN4ctNn1T71UBwSc=') 70 ok = BTC.msg.verify(a, s, m) 71 assert ok 72 73 # Sampled from: https://www.bitrated.com/u/Bit2c.txt on Sep 3/2014 74 bit2c = textwrap.dedent( 75 ''' 76 Username: Bit2c 77 Public key: 0396267072e597ad5d043db7c73e13af84a77a7212871f1aade607fb0f2f96e1a8 78 Public key address: 15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej 79 URL: https://www.bitrated.com/u/Bit2c 80 81 -----BEGIN BITCOIN SIGNED MESSAGE----- 82 ''' + 83 'We will try to contact both parties to gather information and evidence, and do my ' 84 'best to make rightful judgement. Evidence may be submitted to us on' 85 ' https://www.bit2c.co.il/home/contact or in a private message to info@bit2c.co.il' 86 ' or in any agreed way.' + ''' 87 88 https://www.bit2c.co.il 89 -----BEGIN SIGNATURE----- 90 15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej 91 H2utKkquLbyEJamGwUfS9J0kKT4uuMTEr2WX2dPU9YImg4LeRpyjBelrqEqfM4QC8pJ+hVlQgZI5IPpLyRNxvK8= 92 -----END BITCOIN SIGNED MESSAGE----- 93 ''') 94 m, a, s = BTC.msg.parse_signed(bit2c) 95 assert a == '15etuU8kwLFCBbCNRsgQTvWgrGWY9829ej' 96 assert s == ('H2utKkquLbyEJamGwUfS9J0kKT4uuMTEr2WX2dPU9YI' 97 'mg4LeRpyjBelrqEqfM4QC8pJ+hVlQgZI5IPpLyRNxvK8=') 98 ok = BTC.msg.verify(a, s, m) 99 assert ok 100 101 # testnet example 102 # Sampled from: http://testnet.bitrated.com/u/bearbin.txt on Sep 3/2014 103 # NOTE: Testnet3 104 bearbin = textwrap.dedent('''\ 105 Username: bearbin 106 Public key: 03fc594c16779054fc5e119c309215c1f40f2ce104b0169cddeb6d20445bd28f67 107 Public key address: n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM 108 URL: http://testnet.bitrated.com/u/bearbin 109 110 -----BEGIN BITCOIN SIGNED MESSAGE----- 111 Contact 112 ----------- 113 114 bearbin@gmail.com - Email or hangouts (text only). 115 116 /u/bearbin on reddit (slow response, not preferred for use with the service, just for contact). 117 118 Resolution Guidelines: 119 ----------------------------- 120 121 * Evidence is needed. (e.g. pictures w/ proof that it's you). 122 * If anybody fails to respond, money goes to the other person after 2 weeks. 123 * Additional terms available on request. 124 125 Pricing 126 ---------- 127 128 * 0.7% Min 0.003 Max 0.15 129 * Payment in advance. 130 -----BEGIN SIGNATURE----- 131 n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM 132 IEackZgifpBJs3SqQQ6leUwzvakTZgUKTDuCCn6rVMOQgHlIEzWSYZGQu2H+1chvu68uutzt04cGmsHy/kRIaEc= 133 -----END BITCOIN SIGNED MESSAGE----- 134 ''') 135 m, a, s = XTN.msg.parse_signed(bearbin) 136 assert a == 'n2D9XsQX1mDpFGgYqsfmePTy61LJFQnXQM' 137 assert s == ('IEackZgifpBJs3SqQQ6leUwzvakTZgUKTDuCCn6rVMOQgH' 138 'lIEzWSYZGQu2H+1chvu68uutzt04cGmsHy/kRIaEc=') 139 assert ok 140 141 142if __name__ == "__main__": 143 unittest.main() 144