Bitcoin/public point to address

Revision as of 03:12, 29 November 2012 by Grondilu (talk | contribs) (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 ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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.

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.

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