Bitcoin/public point to address
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 wp: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 = 50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352 Y = 2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
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