Bitcoin/public point to address: Difference between revisions
Content deleted Content added
Created page with "{{draft task}} Bitcoin uses a specific encoding format to encode the digest of an wp:elliptic curve public point into a short ASCII string. The purpose of ..." |
m using better hex notation |
||
Line 1: | Line 1: | ||
{{draft task}} |
{{draft task}} |
||
[[wp:Bitcoin|Bitcoin]] uses a specific encoding format to encode the digest of an [[wp:elliptic curve]] public point into a short ASCII string. The purpose of this task is to perform such a conversion. |
[[wp:Bitcoin|Bitcoin]] uses a specific encoding format to encode the digest of an [[wp:elliptic curve|elliptic curve]] public point into a short ASCII string. The purpose of this task is to perform such a conversion. |
||
The encoding steps are: |
The encoding steps are: |
||
Line 13: | Line 13: | ||
Here is an example public point: |
Here is an example public point: |
||
<pre>X = 0x50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352 |
|||
<pre>X = 50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352 |
|||
Y = 0x2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6</pre> |
|||
Y = 2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6</pre> |
|||
The corresponding address should be: |
The corresponding address should be: |
Revision as of 03:34, 29 November 2012
Bitcoin/public point to address is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Bitcoin uses a specific encoding format to encode the digest of an elliptic curve public point into a short ASCII string. The purpose of this task is to perform such a conversion.
The encoding steps are:
- take the X and Y coordinate of the given public point, and concatenate them in order to have a 64 byte-longed string ;
- add one byte prefix equal to 4 (it is a convention for this way of encoding a public point) ;
- compute the SHA-256 of this string ;
- compute the RIPEMD-160 of this SHA-256 digest ;
- compute the checksum of this RIPEMD-160 digest, as described in bitcoin/address validation ;
- Base-58 encode (see below) the concatenation of the version number (zero in this case), the ripemd digest and the checksum
The base-58 encoding is based on an alphabet of alphanumeric characters (numbers, upper case and lower case, in that order) but without the four characters 0, O, l and I.
Here is an example public point:
X = 0x50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352 Y = 0x2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
The corresponding address should be: 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
Extra credit: add a verification procedure about the public point, making sure it belongs to the secp256k1 elliptic curve