summaryrefslogtreecommitdiff
path: root/9a/483cb5ee1312b72fd25093fc78c2761df601db
blob: b2db28e1817dfff1bafb0da180c4a755b4ec1c5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
Received: from sog-mx-4.v43.ch3.sourceforge.com ([172.29.43.194]
	helo=mx.sourceforge.net)
	by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76)
	(envelope-from <me@thomaskerin.io>) id 1YM1Wx-0007rJ-FJ
	for bitcoin-development@lists.sourceforge.net;
	Thu, 12 Feb 2015 21:42:39 +0000
X-ACL-Warn: 
Received: from static.204.212.9.5.clients.your-server.de ([5.9.212.204]
	helo=thelaboratory.tk)
	by sog-mx-4.v43.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256)
	(Exim 4.76) id 1YM1Ws-00045C-NX
	for bitcoin-development@lists.sourceforge.net;
	Thu, 12 Feb 2015 21:42:39 +0000
Received: from [192.168.0.222] (unknown [89.100.72.228])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	(Authenticated sender: me@thomaskerin.io)
	by thelaboratory.tk (Postfix) with ESMTPSA id 489829BA084E;
	Thu, 12 Feb 2015 21:42:25 +0000 (UTC)
Message-ID: <54DD1E3F.60006@thomaskerin.io>
Date: Thu, 12 Feb 2015 21:42:23 +0000
From: Thomas Kerin <me@thomaskerin.io>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
To: bitcoin-development@lists.sourceforge.net, root@haskoin.com, 
	ruben@blocktrail.com
OpenPGP: url=http://pgp.mit.edu/pks/lookup?op=get&search=0x3F0D2F83A2966155
Content-Type: multipart/mixed; boundary="------------080200060808050806080104"
X-Spam-Score: 1.0 (+)
X-Spam-Report: Spam Filtering performed by mx.sourceforge.net.
	See http://spamassassin.org/tag/ for more details.
	1.0 HTML_MESSAGE           BODY: HTML included in message
	0.0 T_FILL_THIS_FORM_SHORT Fill in a short form with personal
	information
X-Headers-End: 1YM1Ws-00045C-NX
Subject: [Bitcoin-development] BIP for deterministic pay-to-script-hash
	multi-signature addresses
X-BeenThere: bitcoin-development@lists.sourceforge.net
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: <bitcoin-development.lists.sourceforge.net>
List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
	<mailto:bitcoin-development-request@lists.sourceforge.net?subject=unsubscribe>
List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development>
List-Post: <mailto:bitcoin-development@lists.sourceforge.net>
List-Help: <mailto:bitcoin-development-request@lists.sourceforge.net?subject=help>
List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
	<mailto:bitcoin-development-request@lists.sourceforge.net?subject=subscribe>
X-List-Received-Date: Thu, 12 Feb 2015 21:42:39 -0000

This is a multi-part message in MIME format.
--------------080200060808050806080104
Content-Type: multipart/alternative;
	boundary="------------030101090601090800080704"


--------------030101090601090800080704
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Hi all,

I have drafted a BIP with Jean Pierre and Ruben after the last
discussion, related to a standard for deriving a canonical
pay-to-script-hash address given a set of public keys and the number of
signatures required. There have been two or three discussions about it
on the mailing list to date, and various services already carry out this
process. I hope a BIP to describe this process will allow services to
declare themselves as BIPXX compliant, working towards interoperability
of services and simplifying the derivation of scripts and their
addresses by all parties.


  BIP: XX
  Title: Deterministic Pay-to-script-hash multi-signature addresses
through public key sorting
  Author: Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries
  Status: Draft
  Type: Standards Track
  Created: 8 February 2015

=3D=3DAbstract=3D=3D

This BIP describes a method to deterministically generate
multi-signature transaction scripts.  It focuses on defining how the
public keys must be encoded and sorted so that the redeem script and
corresponding P2SH address are always the same for a given set of keys
and number of required signatures.

=3D=3DMotivation=3D=3D

Most multi-signature transactions are addressed to P2SH
(pay-to-script-hash) addresses, as defined in BIP-0016.

Multi-signature redeem scripts do not require a particular ordering or
encoding for public keys.  This means that for a given set of keys and
number of required signatures, there are as many as 2(n!) possible
standard redeem scripts, each with its separate P2SH address.  Adhering
to a an ordering scheme and key encoding would ensure that a
multi-signature =E2=80=9Caccount=E2=80=9D (set of public keys and require=
d signature
count) has a canonical P2SH address.

By adopting a sorting and encoding standard, compliant wallets will
always produce the same P2SH address for the same given set of keys and
required signature count, making it easier to recognize transactions
involving that multi-signature account.  This is particularly attractive
for multisignature hierarchical-deterministic wallets, as less state is
required to setup multi-signature accounts:  only the number of required
signatures and master public keys of participants need to be shared, and
all wallets will generate the same addresses.

While most web wallets do not presently facilitate the setup of
multisignature accounts with users of a different service, conventions
which ensure cross-compatibility should make it easier to achieve this.

Many wallet as a service providers use a 2of3 multi-signature schema
where the user stores 1 of the keys (offline) as backup while using the
other key for daily use and letting the service cosign his transactions.
This standard will help in enabling a party other than the service
provider to recover the wallet without any help from the service provider=
=2E

=3D=3DImplementation=3D=3D

For a set of public keys, ensure that they have been received in
compressed form, sort them lexicographically according to their binary
representation before using the resulting list of keys in a standard
multisig redeem script.  Hash the redeem script according to BIP-0016 to
get the P2SH address.

=3D=3DCompatibility=3D=3D

* Uncompressed keys are incompatible with this specificiation. A
compatible implementation should not automatically compress keys.=20
Receiving an uncompressed key from a multisig participant should be
interpreted as a sign that the user has an incompatible implementation.
* P2SH addressses do not reveal information about the script that is
receiving the funds. For this reason it is not technically possible to
enforce this BIP as a rule on the network.  Also, it would cause a hard
fork.
* Implementations that do not conform with this BIP will have
compatibility issues with strictly-compliant wallets.
* Implementations which do adopt this standard will be cross-compatible
when choosing multisig addressses.
* If a group of users were not entirely compliant, there is the
possibility that a participant will derive an address that the others
will not recognize as part of the common multisig account.

=3D=3DTest vectors=3D=3D
The required number of signatures in each case is 2.

Vector 1
* List
** 02ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f8
** 02fe6f0a5a297eb38c391581c4413e084773ea23954d93f7753db7dc0adc188b2f
* Sorted
** 02fe6f0a5a297eb38c391581c4413e084773ea23954d93f7753db7dc0adc188b2f
** 02ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f8
* Script
**
522102fe6f0a5a297eb38c391581c4413e084773ea23954d93f7753db7dc0adc188b2f210=
2ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f852ae
* Address
** 39bgKC7RFbpoCRbtD5KEdkYKtNyhpsNa3Z

Vector 2 (Already sorted, no action required)
* List:
** 02632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0
** 027735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e77
** 02e2cc6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b404
* Sorted:
** 02632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0
** 027735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e77
** 02e2cc6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b404
* Script
**
522102632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0210=
27735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e772102e2cc=
6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b40453ae
* Address
** 3CKHTjBKxCARLzwABMu9yD85kvtm7WnMfH

Vector 3:
* List:  =20
** 030000000000000000000000000000000000004141414141414141414141414141
** 020000000000000000000000000000000000004141414141414141414141414141
** 020000000000000000000000000000000000004141414141414141414141414140
** 030000000000000000000000000000000000004141414141414141414141414140
* Sorted:
** 020000000000000000000000000000000000004141414141414141414141414140
** 020000000000000000000000000000000000004141414141414141414141414141
** 030000000000000000000000000000000000004141414141414141414141414140
** 030000000000000000000000000000000000004141414141414141414141414141
* Script
**
5221020000000000000000000000000000000000004141414141414141414141414140210=
2000000000000000000000000000000000000414141414141414141414141414121030000=
0000000000000000000000000000000041414141414141414141414141402103000000000=
000000000000000000000000000414141414141414141414141414154ae
* Address
** 32V85igBri9zcfBRVupVvwK18NFtS37FuD

Vector 4: (from bitcore)
* List:
** 022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da
** 03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
** 021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18
* Sorted:
** 021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18
** 022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da
** 03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
* Script
**
5221021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18210=
22df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da2103e381=
8b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e953ae
* Address
** 3Q4sF6tv9wsdqu2NtARzNCpQgwifm2rAba

=3D=3DUsage & Implementations=3D=3D
* BIP45 - Structure for Deterministic P2SH Multisignature Wallets -
https://github.com/bitcoin/bips/blob/master/bip-0045.mediawiki#address-ge=
neration-procedure
* Bitcore -
https://github.com/bitpay/bitcore/blob/50a868cb8cdf2be04bb1c5bf4bcc064cc0=
6f5888/lib/script/script.js#L541
* Haskoin -
https://github.com/haskoin/haskoin/blob/master/Network/Haskoin/Script/Par=
ser.hs#L112-122
* Armory -
https://github.com/etotheipi/BitcoinArmory/blob/268db0f3fa20c989057bd4334=
3a43b2edbe89aeb/armoryengine/ArmoryUtils.py#L1441
* Multisignature Brainwallet - http://ms-brainwallet.org/
  =20
For now, the BIP will live here:
https://github.com/afk11/bips/blob/bip0090/bip-0090.mediawiki/

Looking forward to any feedback and discussions that arise!


- --=20
Thomas Kerin
- -------------------------

My PGP key can be found here
<http://pgp.mit.edu/pks/lookup?op=3Dget&search=3D0x3F0D2F83A2966155>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQJ8BAEBCgBmBQJU3R43XxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQ2MzI1MzM4QjJGOTU5OEUzREMzQzc0MzAz
RjBEMkY4M0EyOTY2MTU1AAoJED8NL4OilmFVKwUP/3MS++5D+YJAPZG/a7PhY3hf
8UvBkaAp7YqCVvZkHhpQ3+7AF+c6nAfu9JRFSdGP5hNvApagbZoC2oeLQ5rHBfXC
MbkbqOSp0z7C4MvEqmncTSgqNykxanVfiypV2S7hU2fbiylVi2jIaGrjqQt32jT7
kdFw5wqAS3zVHJVZhnUufLj/VYC94vdfrgpL22WI9oNH/nOvO6uG3YwZ9rc63ZH/
cwTmUnjOqDUlJWtYsfcoDL41RkmeBtGqD+6gTe3BtVHJQqlsEWpB1hsucOv5XdEk
V0teRUQ8+hFnU86+S4VJ8+qy/QjYflHnfy7vcA3M6LhAkle3scCs7ZCpDb9EGFM+
yAZivS4vrcVaYgY+oBdSnMEyvudwDKHwdy/rNjTskCLsHzcZX5jAoIxT2XskAXMD
UcWRelpN7Wth5jnSXeB89Wg1DqBwyl0LF7ZXepglopfHbAIsZ1oms252f5G7cfFq
+11HR3JswvVN4otqNAZzYaN7wEBEZwlcD+a/VKoNE0uPVuBS08phhNGjHmidXCOZ
wC11biStwjt1tv1lUNcK0HkkNReuUrUDK1dNKxGGfUHk+Qcka+cQ1ap47lLx06+U
LskPwJKR1tvoHkVMLy4UutX8bIRtXE3WbSOQlV9Q/4/os3tTpVlH5AX47W+2CikV
t3pTmdJy0FubCrHSJ63C
=3D5H5A
-----END PGP SIGNATURE-----


--------------030101090601090800080704
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html>
  <head>

    <meta http-equiv=3D"content-type" content=3D"text/html; charset=3Dutf=
-8">
  </head>
  <body bgcolor=3D"#FFFFFF" text=3D"#000000">
    <br>
    -----BEGIN PGP SIGNED MESSAGE-----<br>
    Hash: SHA512<br>
    <br>
    Hi all,<br>
    <br>
    I have drafted a BIP with Jean Pierre and Ruben after the last
    discussion, related to a standard for deriving a canonical
    pay-to-script-hash address given a set of public keys and the number
    of signatures required. There have been two or three discussions
    about it on the mailing list to date, and various services already
    carry out this process. I hope a BIP to describe this process will
    allow services to declare themselves as BIPXX compliant, working
    towards interoperability of services and simplifying the derivation
    of scripts and their addresses by all parties.<br>
    <br>
    <br>
    =C2=A0 BIP: XX<br>
    =C2=A0 Title: Deterministic Pay-to-script-hash multi-signature addres=
ses
    through public key sorting<br>
    =C2=A0 Author: Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries<br>
    =C2=A0 Status: Draft<br>
    =C2=A0 Type: Standards Track<br>
    =C2=A0 Created: 8 February 2015<br>
    <br>
    =3D=3DAbstract=3D=3D<br>
    <br>
    This BIP describes a method to deterministically generate
    multi-signature transaction scripts.=C2=A0 It focuses on defining how=
 the
    public keys must be encoded and sorted so that the redeem script and
    corresponding P2SH address are always the same for a given set of
    keys and number of required signatures.<br>
    <br>
    =3D=3DMotivation=3D=3D<br>
    <br>
    Most multi-signature transactions are addressed to P2SH
    (pay-to-script-hash) addresses, as defined in BIP-0016.<br>
    <br>
    Multi-signature redeem scripts do not require a particular ordering
    or encoding for public keys.=C2=A0 This means that for a given set of
    keys and number of required signatures, there are as many as 2(n!)
    possible standard redeem scripts, each with its separate P2SH
    address.=C2=A0 Adhering to a an ordering scheme and key encoding woul=
d
    ensure that a multi-signature =E2=80=9Caccount=E2=80=9D (set of publi=
c keys and
    required signature count) has a canonical P2SH address.<br>
    <br>
    By adopting a sorting and encoding standard, compliant wallets will
    always produce the same P2SH address for the same given set of keys
    and required signature count, making it easier to recognize
    transactions involving that multi-signature account.=C2=A0 This is
    particularly attractive for multisignature
    hierarchical-deterministic wallets, as less state is required to
    setup multi-signature accounts:=C2=A0 only the number of required
    signatures and master public keys of participants need to be shared,
    and all wallets will generate the same addresses.<br>
    <br>
    While most web wallets do not presently facilitate the setup of
    multisignature accounts with users of a different service,
    conventions which ensure cross-compatibility should make it easier
    to achieve this.<br>
    <br>
    Many wallet as a service providers use a 2of3 multi-signature schema
    where the user stores 1 of the keys (offline) as backup while using
    the other key for daily use and letting the service cosign his
    transactions.<br>
    This standard will help in enabling a party other than the service
    provider to recover the wallet without any help from the service
    provider.<br>
    <br>
    =3D=3DImplementation=3D=3D<br>
    <br>
    For a set of public keys, ensure that they have been received in
    compressed form, sort them lexicographically according to their
    binary representation before using the resulting list of keys in a
    standard multisig redeem script.=C2=A0 Hash the redeem script accordi=
ng
    to BIP-0016 to get the P2SH address.<br>
    <br>
    =3D=3DCompatibility=3D=3D<br>
    <br>
    * Uncompressed keys are incompatible with this specificiation. A
    compatible implementation should not automatically compress keys.=C2=A0
    Receiving an uncompressed key from a multisig participant should be
    interpreted as a sign that the user has an incompatible
    implementation.<br>
    * P2SH addressses do not reveal information about the script that is
    receiving the funds. For this reason it is not technically possible
    to enforce this BIP as a rule on the network.=C2=A0 Also, it would ca=
use
    a hard fork.<br>
    * Implementations that do not conform with this BIP will have
    compatibility issues with strictly-compliant wallets.<br>
    * Implementations which do adopt this standard will be
    cross-compatible when choosing multisig addressses.<br>
    * If a group of users were not entirely compliant, there is the
    possibility that a participant will derive an address that the
    others will not recognize as part of the common multisig account.<br>
    <br>
    =3D=3DTest vectors=3D=3D<br>
    The required number of signatures in each case is 2.<br>
    <br>
    Vector 1<br>
    * List<br>
    **
    02ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f8<br=
>
    **
    02fe6f0a5a297eb38c391581c4413e084773ea23954d93f7753db7dc0adc188b2f<br=
>
    * Sorted<br>
    **
    02fe6f0a5a297eb38c391581c4413e084773ea23954d93f7753db7dc0adc188b2f<br=
>
    **
    02ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f8<br=
>
    * Script<br>
    **
522102fe6f0a5a297eb38c391581c4413e084773ea23954d93f7753db7dc0adc188b2f210=
2ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f852ae<br>
    * Address<br>
    ** 39bgKC7RFbpoCRbtD5KEdkYKtNyhpsNa3Z<br>
    <br>
    Vector 2 (Already sorted, no action required)<br>
    * List:<br>
    **
    02632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0<br=
>
    **
    027735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e77<br=
>
    **
    02e2cc6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b404<br=
>
    * Sorted:<br>
    **
    02632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0<br=
>
    **
    027735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e77<br=
>
    **
    02e2cc6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b404<br=
>
    * Script<br>
    **
522102632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0210=
27735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e772102e2cc=
6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b40453ae<br>
    * Address<br>
    ** 3CKHTjBKxCARLzwABMu9yD85kvtm7WnMfH<br>
    <br>
    Vector 3:<br>
    * List:=C2=A0 =C2=A0<br>
    **
    030000000000000000000000000000000000004141414141414141414141414141<br=
>
    **
    020000000000000000000000000000000000004141414141414141414141414141<br=
>
    **
    020000000000000000000000000000000000004141414141414141414141414140<br=
>
    **
    030000000000000000000000000000000000004141414141414141414141414140<br=
>
    * Sorted:<br>
    **
    020000000000000000000000000000000000004141414141414141414141414140<br=
>
    **
    020000000000000000000000000000000000004141414141414141414141414141<br=
>
    **
    030000000000000000000000000000000000004141414141414141414141414140<br=
>
    **
    030000000000000000000000000000000000004141414141414141414141414141<br=
>
    * Script<br>
    **
5221020000000000000000000000000000000000004141414141414141414141414140210=
2000000000000000000000000000000000000414141414141414141414141414121030000=
0000000000000000000000000000000041414141414141414141414141402103000000000=
000000000000000000000000000414141414141414141414141414154ae<br>
    * Address<br>
    ** 32V85igBri9zcfBRVupVvwK18NFtS37FuD<br>
    <br>
    Vector 4: (from bitcore)<br>
    * List:<br>
    **
    022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da<br=
>
    **
    03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9<br=
>
    **
    021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18<br=
>
    * Sorted:<br>
    **
    021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18<br=
>
    **
    022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da<br=
>
    **
    03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9<br=
>
    * Script<br>
    **
5221021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18210=
22df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da2103e381=
8b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e953ae<br>
    * Address<br>
    ** 3Q4sF6tv9wsdqu2NtARzNCpQgwifm2rAba<br>
    <br>
    =3D=3DUsage &amp; Implementations=3D=3D<br>
    * BIP45 - Structure for Deterministic P2SH Multisignature Wallets -
<a class=3D"moz-txt-link-freetext" href=3D"https://github.com/bitcoin/bip=
s/blob/master/bip-0045.mediawiki#address-generation-procedure">https://gi=
thub.com/bitcoin/bips/blob/master/bip-0045.mediawiki#address-generation-p=
rocedure</a><br>
    * Bitcore -
<a class=3D"moz-txt-link-freetext" href=3D"https://github.com/bitpay/bitc=
ore/blob/50a868cb8cdf2be04bb1c5bf4bcc064cc06f5888/lib/script/script.js#L5=
41">https://github.com/bitpay/bitcore/blob/50a868cb8cdf2be04bb1c5bf4bcc06=
4cc06f5888/lib/script/script.js#L541</a><br>
    * Haskoin -
<a class=3D"moz-txt-link-freetext" href=3D"https://github.com/haskoin/has=
koin/blob/master/Network/Haskoin/Script/Parser.hs#L112-122">https://githu=
b.com/haskoin/haskoin/blob/master/Network/Haskoin/Script/Parser.hs#L112-1=
22</a><br>
    * Armory -
<a class=3D"moz-txt-link-freetext" href=3D"https://github.com/etotheipi/B=
itcoinArmory/blob/268db0f3fa20c989057bd43343a43b2edbe89aeb/armoryengine/A=
rmoryUtils.py#L1441">https://github.com/etotheipi/BitcoinArmory/blob/268d=
b0f3fa20c989057bd43343a43b2edbe89aeb/armoryengine/ArmoryUtils.py#L1441</a=
><br>
    * Multisignature Brainwallet - <a class=3D"moz-txt-link-freetext" hre=
f=3D"http://ms-brainwallet.org/">http://ms-brainwallet.org/</a><br>
    =C2=A0 =C2=A0<br>
    For now, the BIP will live here:
    <a class=3D"moz-txt-link-freetext" href=3D"https://github.com/afk11/b=
ips/blob/bip0090/bip-0090.mediawiki/">https://github.com/afk11/bips/blob/=
bip0090/bip-0090.mediawiki/</a><br>
    <br>
    Looking forward to any feedback and discussions that arise!<br>
    <br>
    <br>
    - -- <br>
    Thomas Kerin<br>
    - -------------------------<br>
    <br>
    My PGP key can be found here
<a class=3D"moz-txt-link-rfc2396E" href=3D"http://pgp.mit.edu/pks/lookup?=
op=3Dget&amp;search=3D0x3F0D2F83A2966155">&lt;http://pgp.mit.edu/pks/look=
up?op=3Dget&amp;search=3D0x3F0D2F83A2966155&gt;</a><br>
    -----BEGIN PGP SIGNATURE-----<br>
    Version: GnuPG v1<br>
    <br>
    iQJ8BAEBCgBmBQJU3R43XxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w<br>
    ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQ2MzI1MzM4QjJGOTU5OEUzREMzQzc0MzAz<br>
    RjBEMkY4M0EyOTY2MTU1AAoJED8NL4OilmFVKwUP/3MS++5D+YJAPZG/a7PhY3hf<br>
    8UvBkaAp7YqCVvZkHhpQ3+7AF+c6nAfu9JRFSdGP5hNvApagbZoC2oeLQ5rHBfXC<br>
    MbkbqOSp0z7C4MvEqmncTSgqNykxanVfiypV2S7hU2fbiylVi2jIaGrjqQt32jT7<br>
    kdFw5wqAS3zVHJVZhnUufLj/VYC94vdfrgpL22WI9oNH/nOvO6uG3YwZ9rc63ZH/<br>
    cwTmUnjOqDUlJWtYsfcoDL41RkmeBtGqD+6gTe3BtVHJQqlsEWpB1hsucOv5XdEk<br>
    V0teRUQ8+hFnU86+S4VJ8+qy/QjYflHnfy7vcA3M6LhAkle3scCs7ZCpDb9EGFM+<br>
    yAZivS4vrcVaYgY+oBdSnMEyvudwDKHwdy/rNjTskCLsHzcZX5jAoIxT2XskAXMD<br>
    UcWRelpN7Wth5jnSXeB89Wg1DqBwyl0LF7ZXepglopfHbAIsZ1oms252f5G7cfFq<br>
    +11HR3JswvVN4otqNAZzYaN7wEBEZwlcD+a/VKoNE0uPVuBS08phhNGjHmidXCOZ<br>
    wC11biStwjt1tv1lUNcK0HkkNReuUrUDK1dNKxGGfUHk+Qcka+cQ1ap47lLx06+U<br>
    LskPwJKR1tvoHkVMLy4UutX8bIRtXE3WbSOQlV9Q/4/os3tTpVlH5AX47W+2CikV<br>
    t3pTmdJy0FubCrHSJ63C<br>
    =3D5H5A<br>
    -----END PGP SIGNATURE-----<br>
    <br>
  </body>
</html>

--------------030101090601090800080704--

--------------080200060808050806080104
Content-Type: application/pgp-keys;
 name="0xA2966155.asc"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
 filename="0xA2966155.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

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
JDB0hVaFYV98nLJ9V9LtEA9P
=3DntkV
-----END PGP PUBLIC KEY BLOCK-----

--------------080200060808050806080104
Content-Type: application/pgp-signature;
 name="0xA2966155.asc.sig"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="0xA2966155.asc.sig"

iQJ8BAABCgBmBQJU3R4+XxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9wZW5wZ3Au
ZmlmdGhob3JzZW1hbi5uZXQ2MzI1MzM4QjJGOTU5OEUzREMzQzc0MzAzRjBEMkY4M0EyOTY2
MTU1AAoJED8NL4OilmFVyzwP+QExYi/C7FhTr6zhSMYs+QMi37SNCxCadapZm3CTY4S8+i6e
/5hMCgGMr81GqchshD6rDojth7qJYiDqT16MW20/a+kPvIBchfMOBZHumWMAVUx3sk+ENVpm
v0uYAMgGs0YjijtUThkXOolY/yswDDQSKV0XgR0okxwBrKPARYp2B+aA/jL84rqIah1zsJG6
yoWwj8Md3UNO09szDayWDtRNy4G5GQOeSGq+5VNvT0yYfg6aI7WwNEfz/wC24UIkMhILeU8/
hxPe6tuJDhkf+XDKhKLQ2hazqYVbTeYqP+INa21DUvFaszPbz3VN97g0bdBr1CKKZ+vKwOxc
4HkQp7XfYEI0GT9Yu0Ky3w4K20JsXkNkYVaLoC+VBWtAc1tpPKtvXtUMqPgIKvpZ5Juzeqfe
heYYSzxBRuQycj1GDZl7ucL4Wpiy+audLyfBiURXTl/m6SfKvLV9WZX7kPV1vFVVx5RHnUZy
LPsuV2aeSx57N2wQ8BP2CpsI4p4sgU/sCF7DlwkFdIoBSEPVT17lmHRZnuNDDnJ/BoxgsSfz
C3eV0uzxGiUP80r3io0Nw8tFgvDBJL5N8JPQWBImeooJvlVQL7z256T944qJ4YviJD93nK0e
u4kEicMuMAYXBoBXRkbkJRFCbha6VcOcYacPr5GXHKg/gx9I5apLPrzziwCm
--------------080200060808050806080104--