Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193] helo=mx.sourceforge.net) by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from <mh.in.england@gmail.com>) id 1X7jPS-0003u6-Ah for bitcoin-development@lists.sourceforge.net; Thu, 17 Jul 2014 10:59:34 +0000 Received-SPF: pass (sog-mx-3.v43.ch3.sourceforge.com: domain of gmail.com designates 209.85.213.172 as permitted sender) client-ip=209.85.213.172; envelope-from=mh.in.england@gmail.com; helo=mail-ig0-f172.google.com; Received: from mail-ig0-f172.google.com ([209.85.213.172]) by sog-mx-3.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) id 1X7jPQ-0003n4-33 for bitcoin-development@lists.sourceforge.net; Thu, 17 Jul 2014 10:59:34 +0000 Received: by mail-ig0-f172.google.com with SMTP id h15so5837274igd.17 for <bitcoin-development@lists.sourceforge.net>; Thu, 17 Jul 2014 03:59:26 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.60.132.203 with SMTP id ow11mr44174756oeb.47.1405594766703; Thu, 17 Jul 2014 03:59:26 -0700 (PDT) Sender: mh.in.england@gmail.com Received: by 10.76.35.234 with HTTP; Thu, 17 Jul 2014 03:59:26 -0700 (PDT) Received: by 10.76.35.234 with HTTP; Thu, 17 Jul 2014 03:59:26 -0700 (PDT) In-Reply-To: <lq6sq5$71h$1@ger.gmane.org> References: <CANEZrP3ZzCBohXWZmZxE=ofP74Df4Hd-hCLH6jYn=JKbiqNQXA@mail.gmail.com> <CAObn+gfbH61kyv_ttT4vsQuNFRWLB5H3xaux7GQ0co82ucO_eA@mail.gmail.com> <CANg-TZAe2PO9nwQktmDSJFtaLsg6hogOw6mj0SaROdJJr33vog@mail.gmail.com> <CANEZrP3E2mdvOUHiW9W_hM3Z_kn9um8E6aX5vf-S9tA7KgnpUQ@mail.gmail.com> <CACq0ZD5qTc-2f+puPaXMDFZNWUx8kvOZQMxqkM_e4YafhTW7cA@mail.gmail.com> <lq5fvo$4s6$1@ger.gmane.org> <CANEZrP0x2Ypb063VkcoE+h_OHfRVOusmXB2X1VQx77sZhAuTFw@mail.gmail.com> <lq5l5a$4fl$1@ger.gmane.org> <lq5m78$j23$1@ger.gmane.org> <CACq0ZD6Nib4kU8kAo6jdXamw7NTTd5_JwO4x1fsVOMP2-F1=cA@mail.gmail.com> <lq6sq5$71h$1@ger.gmane.org> Date: Thu, 17 Jul 2014 12:59:26 +0200 X-Google-Sender-Auth: W1V9nEXY4trg4l1r1KdPK5QQwwU Message-ID: <CANEZrP2=e-JSRjuRgyeGNd2-fvXxEi5t4PAS3BrT-Y7SieywdQ@mail.gmail.com> From: Mike Hearn <mike@plan99.net> To: Andreas Schildbach <andreas@schildbach.de> Content-Type: multipart/alternative; boundary=047d7b41cc74c4831904fe618858 X-Spam-Score: -0.5 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (mh.in.england[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 1.0 HTML_MESSAGE BODY: HTML included in message 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1X7jPQ-0003n4-33 Cc: Bitcoin Dev <bitcoin-development@lists.sourceforge.net> Subject: Re: [Bitcoin-development] BIP 38 NFC normalisation issue 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, 17 Jul 2014 10:59:34 -0000 --047d7b41cc74c4831904fe618858 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Glad we got to the bottom of that. That's quite a nasty compiler/language bug I must say. Not even a warning. Still, python crashes when trying to print the name of a null character. It wouldn't surprise me if there are other weird issues lurking. Would definitely sleep better with a more restricted character set. On 17 Jul 2014 00:04, "Andreas Schildbach" <andreas@schildbach.de> wrote: > Please excuse me. I had a more thorough look at the original problem and > found that the only problem with the original test case was that you > cannot specify codepoints from the SMP using \u in Java. I always tried > \u010400 but that doesn't work. > > Here is a fix for bitcoinj. The test now passes. > > https://github.com/bitcoinj/bitcoinj/pull/143 > > We can (and probably should) still need to filter control chars, I'll > have a look at that now again. > > > On 07/16/2014 11:06 PM, Aaron Voisine wrote: > > If I first remove \u0000, so the non-normalized passphrase is > > "\u03D2\u0301\U00010400\U0001F4A9", and then NFC normalize it, it > > becomes "\u03D3\U00010400\U0001F4A9" > > > > UTF-8 encoded this is: 0xcf93f0909080f09f92a9 (not the same as what > > you got, Andreas!) > > > > Encoding private key: 5Jajm8eQ22H3pGWLEVCXyvND8dQZhiQhoLJNKjYXk9roUFTMS= Z4 > > with this passphrase, I get a BIP38 key of: > > 6PRW5o9FMb4hAYRQPmgcvVDTyDtr6R17VMXGLmvKjKVpGkYhBJ4uYuR9wZ > > > > I recommend rather than simply removing control characters from the > > password that instead the spec require that passwords containing > > control characters are invalid. We don't want people trying to be > > clever and putting them in thinking they are adding to the password > > entropy. > > > > Also for UI compatibility across many platforms, I'm also in favor > > disallowing any character below U+0020 (space) > > > > I can submit a PR once we figure out why Andreas's passphrase was > > different than what I got. > > > > Aaron Voisine > > breadwallet.com > > > > > > On Wed, Jul 16, 2014 at 4:04 AM, Andreas Schildbach > > <andreas@schildbach.de> wrote: > >> Damn, I just realized that I implement only the decoding side of BIP38= . > >> So I cannot propose a complete test vector. Here is what I have: > >> > >> > >> Passphrase: =CF=92=CC=81=E2=90=80=F0=90=90=80=F0=9F=92=A9 (\u03D2\u030= 1\u0000\U00010400\U0001F4A9; GREEK > >> UPSILON WITH HOOK, COMBINING ACUTE ACCENT, NULL, DESERET CAPITAL LETTE= R > >> LONG I, PILE OF POO) > >> > >> Passphrase bytes after removing ISO control characters and NFC > >> normalization: 0xcf933034303066346139 > >> > >> Bitcoin Address: 16ktGzmfrurhbhi6JGqsMWf7TyqK9HNAeF > >> > >> Unencrypted private key (WIF): > >> 5Jajm8eQ22H3pGWLEVCXyvND8dQZhiQhoLJNKjYXk9roUFTMSZ4 > >> > >> > >> Can someone calculate the encrypted key from it (using whatever > >> implementation) and I will verify it decodes properly in bitcoinj? > >> > >> > >> > >> On 07/16/2014 12:46 PM, Andreas Schildbach wrote: > >>> I will change the bitcoinj implementation and propose a new test > vector. > >>> > >>> > >>> > >>> On 07/16/2014 11:29 AM, Mike Hearn wrote: > >>>> Yes sorry, you're right, the issue starts with the null code point. > >>>> Python seems to have problems starting there too. It might work if w= e > >>>> took that out. > >>>> > >>>> > >>>> On Wed, Jul 16, 2014 at 11:17 AM, Andreas Schildbach > >>>> <andreas@schildbach.de <mailto:andreas@schildbach.de>> wrote: > >>>> > >>>> Guys, you are always talking about the Unicode astral plane, but > in fact > >>>> its a plain old (ASCII) control character where this problem > starts and > >>>> likely ends: \u0000. > >>>> > >>>> Let's ban/filter ISO control characters and be done with it. Mos= t > >>>> control characters will never be enterable by any keyboard into = a > >>>> password field. Of course I assume that Character.isISOControl() > works > >>>> consistently across platforms. > >>>> > >>>> > http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isISOCo= ntrol%28char%29 > >>>> > >>>> > >>>> On 07/16/2014 12:23 AM, Aaron Voisine wrote: > >>>> > If the user creates a password on an iOS device with an astral > >>>> > character and then can't enter that password on a JVM wallet, > that > >>>> > sucks. If JVMs really can't support unicode NFC then that's a > strong > >>>> > case to limit the spec to the subset of unicode that all popul= ar > >>>> > platforms can support, but it sounds like it might just be a J= VM > >>>> > string library bug that could hopefully be reported and fixed. > I get > >>>> > the same result as in the test case using apple's > >>>> > CFStringNormalize(passphrase, kCFStringNormalizationFormC); > >>>> > > >>>> > Aaron Voisine > >>>> > breadwallet.com <http://breadwallet.com> > >>>> > > >>>> > > >>>> > On Tue, Jul 15, 2014 at 11:20 AM, Mike Hearn <mike@plan99.net > >>>> <mailto:mike@plan99.net>> wrote: > >>>> >> Yes, we know, Andreas' code is indeed doing normalisation. > >>>> >> > >>>> >> However it appears the output bytes end up being different. > What > >>>> I get back > >>>> >> is: > >>>> >> > >>>> >> cf930001303430300166346139 > >>>> >> > >>>> >> vs > >>>> >> > >>>> >> cf9300f0909080f09f92a9 > >>>> >> > >>>> >> from the spec. > >>>> >> > >>>> >> I'm not sure why. It appears this is due to the character fro= m > >>>> the astral > >>>> >> planes. Java is old and uses 16 bit characters internally - i= t > >>>> wouldn't > >>>> >> surprise me if there's some weirdness that means it > doesn't/won't > >>>> support > >>>> >> this kind of thing. > >>>> >> > >>>> >> I recommend instead that any implementation that wishes to be > >>>> compatible > >>>> >> with JVM based wallets (I suspect Android is the same) just > >>>> refuse any > >>>> >> passphrase that includes characters outside the BMP. At least > >>>> unless someone > >>>> >> can find a fix. I somehow doubt this will really hurt anyone. > >>>> >> > >>>> >> > >>>> > -------------------------------------------------------------------------= ----- > >>>> >> Want fast and easy access to all the code in your enterprise? > >>>> Index and > >>>> >> search up to 200,000 lines of code with a free copy of Black > Duck > >>>> >> Code Sight - the same software that powers the world's larges= t > code > >>>> >> search on Ohloh, the Black Duck Open Hub! Try it now. > >>>> >> http://p.sf.net/sfu/bds > >>>> >> _______________________________________________ > >>>> >> Bitcoin-development mailing list > >>>> >> Bitcoin-development@lists.sourceforge.net > >>>> <mailto:Bitcoin-development@lists.sourceforge.net> > >>>> >> > https://lists.sourceforge.net/lists/listinfo/bitcoin-development > >>>> >> > >>>> > > >>>> > > >>>> > -------------------------------------------------------------------------= ----- > >>>> > Want fast and easy access to all the code in your enterprise? > >>>> Index and > >>>> > search up to 200,000 lines of code with a free copy of Black > Duck > >>>> > Code Sight - the same software that powers the world's largest > code > >>>> > search on Ohloh, the Black Duck Open Hub! Try it now. > >>>> > http://p.sf.net/sfu/bds > >>>> > > >>>> > >>>> > >>>> > >>>> > -------------------------------------------------------------------------= ----- > >>>> Want fast and easy access to all the code in your enterprise? > Index and > >>>> search up to 200,000 lines of code with a free copy of Black Duc= k > >>>> Code Sight - the same software that powers the world's largest > code > >>>> search on Ohloh, the Black Duck Open Hub! Try it now. > >>>> http://p.sf.net/sfu/bds > >>>> _______________________________________________ > >>>> Bitcoin-development mailing list > >>>> Bitcoin-development@lists.sourceforge.net > >>>> <mailto:Bitcoin-development@lists.sourceforge.net> > >>>> https://lists.sourceforge.net/lists/listinfo/bitcoin-development > >>>> > >>>> > >>>> > >>>> > >>>> > -------------------------------------------------------------------------= ----- > >>>> Want fast and easy access to all the code in your enterprise? Index > and > >>>> search up to 200,000 lines of code with a free copy of Black Duck > >>>> Code Sight - the same software that powers the world's largest code > >>>> search on Ohloh, the Black Duck Open Hub! Try it now. > >>>> http://p.sf.net/sfu/bds > >>>> > >>>> > >>>> > >>>> _______________________________________________ > >>>> Bitcoin-development mailing list > >>>> Bitcoin-development@lists.sourceforge.net > >>>> https://lists.sourceforge.net/lists/listinfo/bitcoin-development > >>>> > >>> > >>> > >>> > >>> > -------------------------------------------------------------------------= ----- > >>> Want fast and easy access to all the code in your enterprise? Index a= nd > >>> search up to 200,000 lines of code with a free copy of Black Duck > >>> Code Sight - the same software that powers the world's largest code > >>> search on Ohloh, the Black Duck Open Hub! Try it now. > >>> http://p.sf.net/sfu/bds > >>> > >> > >> > >> > >> > -------------------------------------------------------------------------= ----- > >> Want fast and easy access to all the code in your enterprise? Index an= d > >> search up to 200,000 lines of code with a free copy of Black Duck > >> Code Sight - the same software that powers the world's largest code > >> search on Ohloh, the Black Duck Open Hub! Try it now. > >> http://p.sf.net/sfu/bds > >> _______________________________________________ > >> Bitcoin-development mailing list > >> Bitcoin-development@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/bitcoin-development > > > > > -------------------------------------------------------------------------= ----- > > Want fast and easy access to all the code in your enterprise? Index and > > search up to 200,000 lines of code with a free copy of Black Duck > > Code Sight - the same software that powers the world's largest code > > search on Ohloh, the Black Duck Open Hub! Try it now. > > http://p.sf.net/sfu/bds > > _______________________________________________ > > Bitcoin-development mailing list > > Bitcoin-development@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/bitcoin-development > > > > > > > -------------------------------------------------------------------------= ----- > Want fast and easy access to all the code in your enterprise? Index and > search up to 200,000 lines of code with a free copy of Black Duck > Code Sight - the same software that powers the world's largest code > search on Ohloh, the Black Duck Open Hub! Try it now. > http://p.sf.net/sfu/bds > _______________________________________________ > Bitcoin-development mailing list > Bitcoin-development@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bitcoin-development > --047d7b41cc74c4831904fe618858 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <p dir=3D"ltr">Glad we got to the bottom of that. That's quite a nasty = compiler/language bug I must say. Not even a warning. Still, python crashes= when trying to print the name of a null character. It wouldn't surpris= e me if there are other weird issues lurking. Would definitely sleep better= with a more restricted character set.</p> <div class=3D"gmail_quote">On 17 Jul 2014 00:04, "Andreas Schildbach&q= uot; <<a href=3D"mailto:andreas@schildbach.de">andreas@schildbach.de</a>= > wrote:<br type=3D"attribution"><blockquote class=3D"gmail_quote" style= =3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> Please excuse me. I had a more thorough look at the original problem and<br= > found that the only problem with the original test case was that you<br> cannot specify codepoints from the SMP using \u in Java. I always tried<br> \u010400 but that doesn't work.<br> <br> Here is a fix for bitcoinj. The test now passes.<br> <br> <a href=3D"https://github.com/bitcoinj/bitcoinj/pull/143" target=3D"_blank"= >https://github.com/bitcoinj/bitcoinj/pull/143</a><br> <br> We can (and probably should) still need to filter control chars, I'll<b= r> have a look at that now again.<br> <br> <br> On 07/16/2014 11:06 PM, Aaron Voisine wrote:<br> > If I first remove \u0000, so the non-normalized passphrase is<br> > "\u03D2\u0301\U00010400\U0001F4A9", and then NFC normalize i= t, it<br> > becomes "\u03D3\U00010400\U0001F4A9"<br> ><br> > UTF-8 encoded this is: 0xcf93f0909080f09f92a9 (not the same as what<br= > > you got, Andreas!)<br> ><br> > Encoding private key: 5Jajm8eQ22H3pGWLEVCXyvND8dQZhiQhoLJNKjYXk9roUFTM= SZ4<br> > with this passphrase, I get a BIP38 key of:<br> > 6PRW5o9FMb4hAYRQPmgcvVDTyDtr6R17VMXGLmvKjKVpGkYhBJ4uYuR9wZ<br> ><br> > I recommend rather than simply removing control characters from the<br= > > password that instead the spec require that passwords containing<br> > control characters are invalid. We don't want people trying to be<= br> > clever and putting them in thinking they are adding to the password<br= > > entropy.<br> ><br> > Also for UI compatibility across many platforms, I'm also in favor= <br> > disallowing any character below U+0020 (space)<br> ><br> > I can submit a PR once we figure out why Andreas's passphrase was<= br> > different than what I got.<br> ><br> > Aaron Voisine<br> > <a href=3D"http://breadwallet.com" target=3D"_blank">breadwallet.com</= a><br> ><br> ><br> > On Wed, Jul 16, 2014 at 4:04 AM, Andreas Schildbach<br> > <<a href=3D"mailto:andreas@schildbach.de">andreas@schildbach.de</a>= > wrote:<br> >> Damn, I just realized that I implement only the decoding side of B= IP38.<br> >> So I cannot propose a complete test vector. Here is what I have:<b= r> >><br> >><br> >> Passphrase: =CF=92=CC=81=E2=90=80=F0=90=90=80=F0=9F=92=A9 (\u03D2\= u0301\u0000\U00010400\U0001F4A9; GREEK<br> >> UPSILON WITH HOOK, COMBINING ACUTE ACCENT, NULL, DESERET CAPITAL L= ETTER<br> >> LONG I, PILE OF POO)<br> >><br> >> Passphrase bytes after removing ISO control characters and NFC<br> >> normalization: 0xcf933034303066346139<br> >><br> >> Bitcoin Address: 16ktGzmfrurhbhi6JGqsMWf7TyqK9HNAeF<br> >><br> >> Unencrypted private key (WIF):<br> >> 5Jajm8eQ22H3pGWLEVCXyvND8dQZhiQhoLJNKjYXk9roUFTMSZ4<br> >><br> >><br> >> Can someone calculate the encrypted key from it (using whatever<br= > >> implementation) and I will verify it decodes properly in bitcoinj?= <br> >><br> >><br> >><br> >> On 07/16/2014 12:46 PM, Andreas Schildbach wrote:<br> >>> I will change the bitcoinj implementation and propose a new te= st vector.<br> >>><br> >>><br> >>><br> >>> On 07/16/2014 11:29 AM, Mike Hearn wrote:<br> >>>> Yes sorry, you're right, the issue starts with the nul= l code point.<br> >>>> Python seems to have problems starting there too. It might= work if we<br> >>>> took that out.<br> >>>><br> >>>><br> >>>> On Wed, Jul 16, 2014 at 11:17 AM, Andreas Schildbach<br> >>>> <<a href=3D"mailto:andreas@schildbach.de">andreas@schil= dbach.de</a> <mailto:<a href=3D"mailto:andreas@schildbach.de">andreas@sc= hildbach.de</a>>> wrote:<br> >>>><br> >>>> =C2=A0 =C2=A0 Guys, you are always talking about the Unico= de astral plane, but in fact<br> >>>> =C2=A0 =C2=A0 its a plain old (ASCII) control character wh= ere this problem starts and<br> >>>> =C2=A0 =C2=A0 likely ends: \u0000.<br> >>>><br> >>>> =C2=A0 =C2=A0 Let's ban/filter ISO control characters = and be done with it. Most<br> >>>> =C2=A0 =C2=A0 control characters will never be enterable b= y any keyboard into a<br> >>>> =C2=A0 =C2=A0 password field. Of course I assume that Char= acter.isISOControl() works<br> >>>> =C2=A0 =C2=A0 consistently across platforms.<br> >>>><br> >>>> =C2=A0 =C2=A0 <a href=3D"http://docs.oracle.com/javase/7/d= ocs/api/java/lang/Character.html#isISOControl%28char%29" target=3D"_blank">= http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isISOCont= rol%28char%29</a><br> >>>><br> >>>><br> >>>> =C2=A0 =C2=A0 On 07/16/2014 12:23 AM, Aaron Voisine wrote:= <br> >>>> =C2=A0 =C2=A0 > If the user creates a password on an iO= S device with an astral<br> >>>> =C2=A0 =C2=A0 > character and then can't enter that= password on a JVM wallet, that<br> >>>> =C2=A0 =C2=A0 > sucks. If JVMs really can't support= unicode NFC then that's a strong<br> >>>> =C2=A0 =C2=A0 > case to limit the spec to the subset of= unicode that all popular<br> >>>> =C2=A0 =C2=A0 > platforms can support, but it sounds li= ke it might just be a JVM<br> >>>> =C2=A0 =C2=A0 > string library bug that could hopefully= be reported and fixed. I get<br> >>>> =C2=A0 =C2=A0 > the same result as in the test case usi= ng apple's<br> >>>> =C2=A0 =C2=A0 > CFStringNormalize(passphrase, kCFString= NormalizationFormC);<br> >>>> =C2=A0 =C2=A0 ><br> >>>> =C2=A0 =C2=A0 > Aaron Voisine<br> >>>> =C2=A0 =C2=A0 > <a href=3D"http://breadwallet.com" targ= et=3D"_blank">breadwallet.com</a> <<a href=3D"http://breadwallet.com" ta= rget=3D"_blank">http://breadwallet.com</a>><br> >>>> =C2=A0 =C2=A0 ><br> >>>> =C2=A0 =C2=A0 ><br> >>>> =C2=A0 =C2=A0 > On Tue, Jul 15, 2014 at 11:20 AM, Mike = Hearn <<a href=3D"mailto:mike@plan99.net">mike@plan99.net</a><br> >>>> =C2=A0 =C2=A0 <mailto:<a href=3D"mailto:mike@plan99.net= ">mike@plan99.net</a>>> wrote:<br> >>>> =C2=A0 =C2=A0 >> Yes, we know, Andreas' code is = indeed doing normalisation.<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >> However it appears the output bytes= end up being different. What<br> >>>> =C2=A0 =C2=A0 I get back<br> >>>> =C2=A0 =C2=A0 >> is:<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >> cf930001303430300166346139<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >> vs<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >> cf9300f0909080f09f92a9<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >> from the spec.<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >> I'm not sure why. It appears th= is is due to the character from<br> >>>> =C2=A0 =C2=A0 the astral<br> >>>> =C2=A0 =C2=A0 >> planes. Java is old and uses 16 bit= characters internally - it<br> >>>> =C2=A0 =C2=A0 wouldn't<br> >>>> =C2=A0 =C2=A0 >> surprise me if there's some wei= rdness that means it doesn't/won't<br> >>>> =C2=A0 =C2=A0 support<br> >>>> =C2=A0 =C2=A0 >> this kind of thing.<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >> I recommend instead that any implem= entation that wishes to be<br> >>>> =C2=A0 =C2=A0 compatible<br> >>>> =C2=A0 =C2=A0 >> with JVM based wallets (I suspect A= ndroid is the same) just<br> >>>> =C2=A0 =C2=A0 refuse any<br> >>>> =C2=A0 =C2=A0 >> passphrase that includes characters= outside the BMP. At least<br> >>>> =C2=A0 =C2=A0 unless someone<br> >>>> =C2=A0 =C2=A0 >> can find a fix. I somehow doubt thi= s will really hurt anyone.<br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 --------------------------------------------= ----------------------------------<br> >>>> =C2=A0 =C2=A0 >> Want fast and easy access to all th= e code in your enterprise?<br> >>>> =C2=A0 =C2=A0 Index and<br> >>>> =C2=A0 =C2=A0 >> search up to 200,000 lines of code = with a free copy of Black Duck<br> >>>> =C2=A0 =C2=A0 >> Code Sight - the same software that= powers the world's largest code<br> >>>> =C2=A0 =C2=A0 >> search on Ohloh, the Black Duck Ope= n Hub! Try it now.<br> >>>> =C2=A0 =C2=A0 >> <a href=3D"http://p.sf.net/sfu/bds"= target=3D"_blank">http://p.sf.net/sfu/bds</a><br> >>>> =C2=A0 =C2=A0 >> ___________________________________= ____________<br> >>>> =C2=A0 =C2=A0 >> Bitcoin-development mailing list<br= > >>>> =C2=A0 =C2=A0 >> <a href=3D"mailto:Bitcoin-developme= nt@lists.sourceforge.net">Bitcoin-development@lists.sourceforge.net</a><br> >>>> =C2=A0 =C2=A0 <mailto:<a href=3D"mailto:Bitcoin-develop= ment@lists.sourceforge.net">Bitcoin-development@lists.sourceforge.net</a>&g= t;<br> >>>> =C2=A0 =C2=A0 >> <a href=3D"https://lists.sourceforg= e.net/lists/listinfo/bitcoin-development" target=3D"_blank">https://lists.s= ourceforge.net/lists/listinfo/bitcoin-development</a><br> >>>> =C2=A0 =C2=A0 >><br> >>>> =C2=A0 =C2=A0 ><br> >>>> =C2=A0 =C2=A0 ><br> >>>> =C2=A0 =C2=A0 --------------------------------------------= ----------------------------------<br> >>>> =C2=A0 =C2=A0 > Want fast and easy access to all the co= de in your enterprise?<br> >>>> =C2=A0 =C2=A0 Index and<br> >>>> =C2=A0 =C2=A0 > search up to 200,000 lines of code with= a free copy of Black Duck<br> >>>> =C2=A0 =C2=A0 > Code Sight - the same software that pow= ers the world's largest code<br> >>>> =C2=A0 =C2=A0 > search on Ohloh, the Black Duck Open Hu= b! Try it now.<br> >>>> =C2=A0 =C2=A0 > <a href=3D"http://p.sf.net/sfu/bds" tar= get=3D"_blank">http://p.sf.net/sfu/bds</a><br> >>>> =C2=A0 =C2=A0 ><br> >>>><br> >>>><br> >>>><br> >>>> =C2=A0 =C2=A0 --------------------------------------------= ----------------------------------<br> >>>> =C2=A0 =C2=A0 Want fast and easy access to all the code in= your enterprise? Index and<br> >>>> =C2=A0 =C2=A0 search up to 200,000 lines of code with a fr= ee copy of Black Duck<br> >>>> =C2=A0 =C2=A0 Code Sight - the same software that powers t= he world's largest code<br> >>>> =C2=A0 =C2=A0 search on Ohloh, the Black Duck Open Hub! Tr= y it now.<br> >>>> =C2=A0 =C2=A0 <a href=3D"http://p.sf.net/sfu/bds" target= =3D"_blank">http://p.sf.net/sfu/bds</a><br> >>>> =C2=A0 =C2=A0 ____________________________________________= ___<br> >>>> =C2=A0 =C2=A0 Bitcoin-development mailing list<br> >>>> =C2=A0 =C2=A0 <a href=3D"mailto:Bitcoin-development@lists.= sourceforge.net">Bitcoin-development@lists.sourceforge.net</a><br> >>>> =C2=A0 =C2=A0 <mailto:<a href=3D"mailto:Bitcoin-develop= ment@lists.sourceforge.net">Bitcoin-development@lists.sourceforge.net</a>&g= t;<br> >>>> =C2=A0 =C2=A0 <a href=3D"https://lists.sourceforge.net/lis= ts/listinfo/bitcoin-development" target=3D"_blank">https://lists.sourceforg= e.net/lists/listinfo/bitcoin-development</a><br> >>>><br> >>>><br> >>>><br> >>>><br> >>>> ----------------------------------------------------------= --------------------<br> >>>> Want fast and easy access to all the code in your enterpri= se? Index and<br> >>>> search up to 200,000 lines of code with a free copy of Bla= ck Duck<br> >>>> Code Sight - the same software that powers the world's= largest code<br> >>>> search on Ohloh, the Black Duck Open Hub! Try it now.<br> >>>> <a href=3D"http://p.sf.net/sfu/bds" target=3D"_blank">http= ://p.sf.net/sfu/bds</a><br> >>>><br> >>>><br> >>>><br> >>>> _______________________________________________<br> >>>> Bitcoin-development mailing list<br> >>>> <a href=3D"mailto:Bitcoin-development@lists.sourceforge.ne= t">Bitcoin-development@lists.sourceforge.net</a><br> >>>> <a href=3D"https://lists.sourceforge.net/lists/listinfo/bi= tcoin-development" target=3D"_blank">https://lists.sourceforge.net/lists/li= stinfo/bitcoin-development</a><br> >>>><br> >>><br> >>><br> >>><br> >>> --------------------------------------------------------------= ----------------<br> >>> Want fast and easy access to all the code in your enterprise? = Index and<br> >>> search up to 200,000 lines of code with a free copy of Black D= uck<br> >>> Code Sight - the same software that powers the world's lar= gest code<br> >>> search on Ohloh, the Black Duck Open Hub! Try it now.<br> >>> <a href=3D"http://p.sf.net/sfu/bds" target=3D"_blank">http://p= .sf.net/sfu/bds</a><br> >>><br> >><br> >><br> >><br> >> ------------------------------------------------------------------= ------------<br> >> Want fast and easy access to all the code in your enterprise? Inde= x and<br> >> search up to 200,000 lines of code with a free copy of Black Duck<= br> >> Code Sight - the same software that powers the world's largest= code<br> >> search on Ohloh, the Black Duck Open Hub! Try it now.<br> >> <a href=3D"http://p.sf.net/sfu/bds" target=3D"_blank">http://p.sf.= net/sfu/bds</a><br> >> _______________________________________________<br> >> Bitcoin-development mailing list<br> >> <a href=3D"mailto:Bitcoin-development@lists.sourceforge.net">Bitco= in-development@lists.sourceforge.net</a><br> >> <a href=3D"https://lists.sourceforge.net/lists/listinfo/bitcoin-de= velopment" target=3D"_blank">https://lists.sourceforge.net/lists/listinfo/b= itcoin-development</a><br> ><br> > ----------------------------------------------------------------------= --------<br> > Want fast and easy access to all the code in your enterprise? Index an= d<br> > search up to 200,000 lines of code with a free copy of Black Duck<br> > Code Sight - the same software that powers the world's largest cod= e<br> > search on Ohloh, the Black Duck Open Hub! Try it now.<br> > <a href=3D"http://p.sf.net/sfu/bds" target=3D"_blank">http://p.sf.net/= sfu/bds</a><br> > _______________________________________________<br> > Bitcoin-development mailing list<br> > <a href=3D"mailto:Bitcoin-development@lists.sourceforge.net">Bitcoin-d= evelopment@lists.sourceforge.net</a><br> > <a href=3D"https://lists.sourceforge.net/lists/listinfo/bitcoin-develo= pment" target=3D"_blank">https://lists.sourceforge.net/lists/listinfo/bitco= in-development</a><br> ><br> <br> <br> <br> ---------------------------------------------------------------------------= ---<br> Want fast and easy access to all the code in your enterprise? Index and<br> search up to 200,000 lines of code with a free copy of Black Duck<br> Code Sight - the same software that powers the world's largest code<br> search on Ohloh, the Black Duck Open Hub! Try it now.<br> <a href=3D"http://p.sf.net/sfu/bds" target=3D"_blank">http://p.sf.net/sfu/b= ds</a><br> _______________________________________________<br> Bitcoin-development mailing list<br> <a href=3D"mailto:Bitcoin-development@lists.sourceforge.net">Bitcoin-develo= pment@lists.sourceforge.net</a><br> <a href=3D"https://lists.sourceforge.net/lists/listinfo/bitcoin-development= " target=3D"_blank">https://lists.sourceforge.net/lists/listinfo/bitcoin-de= velopment</a><br> </blockquote></div> --047d7b41cc74c4831904fe618858--