<div dir="ltr">[+cc aaron]<div><br></div><div>We recently added an implementation of BIP 38 (password protected private keys) to bitcoinj. It came to my attention that the third test vector may be broken. It gives a hex version of what the NFC normalised version of the input string should be, but this does not match the results of the Java unicode normaliser, and in fact I can&#39;t even get Python to print the names of the characters past the embedded null. I&#39;m curious where this normalised version came from.<div>
<br></div><div>Given that &quot;pile of poo&quot; is not a character I think any sane user would put into a passphrase, I question the value of this test vector. NFC form is intended to collapse things like umlaut control characters onto their prior code point, but here we&#39;re feeding the algorithm what is basically garbage so I&#39;m not totally surprised that different implementations appear to disagree on the outcome.</div>
<div><br></div><div>Proposed action: we remove this test vector as it does not represent any real world usage of the spec, or if we desperately need to verify NFC normalisation I suggest using a different, more realistic test string, like Zürich, or something written in Thai.<br>
<div><br></div><div><br><div><br></div><div><span style="color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:15.454545021057129px;line-height:23.18181800842285px">Test 3:</span><ul style="padding:0px 0px 0px 30px;margin:15px 0px;color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:15.454545021057129px;line-height:23.18181800842285px">
<li>Passphrase ϓ␀𐐀💩 (<tt style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;margin:0px;border:1px solid rgb(221,221,221);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:0px;background-color:rgb(248,248,248)">\u03D2\u0301\u0000\U00010400\U0001F4A9</tt>; <a href="http://codepoints.net/U+03D2" target="_blank" style="color:rgb(65,131,196);text-decoration:none;background:transparent">GREEK UPSILON WITH HOOK</a>, <a href="http://codepoints.net/U+0301" target="_blank" style="color:rgb(65,131,196);text-decoration:none;background:transparent">COMBINING ACUTE ACCENT</a>, <a href="http://codepoints.net/U+0000" target="_blank" style="color:rgb(65,131,196);text-decoration:none;background:transparent">NULL</a>, <a href="http://codepoints.net/U+10400" target="_blank" style="color:rgb(65,131,196);text-decoration:none;background:transparent">DESERET CAPITAL LETTER LONG I</a>, <a href="http://codepoints.net/U+1F4A9" target="_blank" style="color:rgb(65,131,196);text-decoration:none;background:transparent">PILE OF POO</a>)</li>
<li>Encrypted key: 6PRW5o9FLp4gJDDVqJQKJFTpMvdsSGJxMYHtHaQBF3ooa8mwD69bapcDQn</li><li>Bitcoin Address: 16ktGzmfrurhbhi6JGqsMWf7TyqK9HNAeF</li><li>Unencrypted private key (WIF): 5Jajm8eQ22H3pGWLEVCXyvND8dQZhiQhoLJNKjYXk9roUFTMSZ4</li>
<li><i>Note:</i> The non-standard UTF-8 characters in this passphrase should be NFC normalized to result in a passphrase of<tt style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;margin:0px;border:1px solid rgb(221,221,221);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:0px;background-color:rgb(248,248,248)">0xcf9300f0909080f09f92a9</tt> before further processing</li>
</ul><div><font color="#333333" face="Helvetica, arial, freesans, clean, sans-serif, Segoe UI Emoji, Segoe UI Symbol"><span style="font-size:15px;line-height:23.18181800842285px"><br></span></font></div></div><div><br></div>
</div></div></div></div>