<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 11 Jul 2020 at 01:56, Guilherme Andrade <<a href="mailto:g@gandrade.net">g@gandrade.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><span>At any rate, along the way I encountered the ASN.1 concept of an "octet string"[1] - binary data whose length is a multiple of eight. It seems to fit the output of the code you've shown (the value of that extra byte, 4, when multiplied by 8, yields 32, and so it does look like a length prefix for the public key.)</span> It also seems to be the return format of some of the OpenSSL functions invoked by the code in question back in OTP 21.3, like `EC_POINT_point2oct`[1].</div></div></blockquote><div><br></div><div>Yeah, nevermind that, I clearly don't know what I'm talking about :-) - ASN.1 "octet strings" are byte-based strings as opposed to bit-based sequences, i.e. binary data as we commonly know it.</div><div><br></div><div>Please disregard my digression into foolishness.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>But this is mostly guessing and intuition - I'm very possibly talking out of my backside. Hopefully someone who knows what they're talking about will answer your question.<br></div><div><br></div><div>[1]: <a href="https://www.obj-sys.com/asn1tutorial/node10.html" target="_blank">https://www.obj-sys.com/asn1tutorial/node10.html</a><br>[2]: <a href="https://www.openssl.org/docs/man1.0.2/man3/EC_POINT_point2oct.html" target="_blank">https://www.openssl.org/docs/man1.0.2/man3/EC_POINT_point2oct.html</a></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 10 Jul 2020 at 15:38, <a href="mailto:ludovic@demblans.com" target="_blank">ludovic@demblans.com</a> <<a href="mailto:ludovic@demblans.com" target="_blank">ludovic@demblans.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
I am trying some crypto code, mostly for fun. I want to generate an Ethereum public key from a know private key.<br>
<br>
This is a sample private key : <<22,99,59,58,153,154,229,99,217,142,170,105,82,105,204,11,55,249,101,152,109,41,109,195,18,134,228,189,83,139,28,92>><br>
<br>
I run this code:<br>
<br>
    -module(t).<br>
    -export([run/0]).<br>
<br>
    run() -> <br>
        PrivateKey = <<22,99,59,58,153,154,229,99,217,142,170,105,82,105,204,11,55,249,101,152,109,41,109,195,18,134,228,189,83,139,28,92>>,<br>
        {PublicKey, NewPrivateKey} = crypto:generate_key(ecdh, secp256k1, PrivateKey),<br>
        dump_hex("Private key", PrivateKey),<br>
        dump_hex("Public key", PublicKey).<br>
<br>
    dump_hex(Label, Bin) -> <br>
        io:format("~s: ~s~n", [Label, [io_lib:format("~2.16.0B",[X]) || <<X:8>> <= Bin]]).<br>
<br>
And I get this result:<br>
<br>
    Private key: 16633B3A999AE563D98EAA695269CC0B37F965986D296DC31286E4BD538B1C5C<br>
    Public key: 047D5ED8E5B1843FF0EF0F443419E3DC589D900F3C683D2D7268AC1D9FE47F7E7350A1...(cut)<br>
 <br>
But I am expected to find this: 7D5ED8E5B1843FF0EF0F443419E3DC589D900F3C683D2D7268AC1D9FE47F7E7350A...(cut)<br>
<br>
At first I was quite discouraged because crypto is hard to learn, but after giving a closer look I found that I have the correct key actually. I just have an extra leading byte. The expected length is 512 bits and I have 520.<br>
<br>
Expected   7D5ED8E5B1843FF0EF0F443419E3DC589D900F3C683D...(cut)<br>
Mine     047D5ED8E5B1843FF0EF0F443419E3DC589D900F3C683D...(cut)<br>
<br>
Do you know why the crypto library behaves like this ? Can I just cut the extra leading byte ? <br>
<br>
Thank you<br>
<br>
- lud<br>
<br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Guilherme<br></div></div></div></div></div></div>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Guilherme<br></div></div></div></div></div></div></div>