Is there a point on the secp256k1 curve for any given X coordinate?

6

There function in libsecp256k1 that allows you to directly set the field element to 32 bytes of your choice. Does secp256k1 always return a valid group element for any 32 byte value?

secp256k1_fe_set_b32(&xpoint, bytes)

secp256k1_ge_set_xo_var(ge, &xpoint, 0)

Penquin

Posted 2017-07-03T18:08:40.747

Reputation: 609

Answers

7

The size of secp256k1's coordinate field is 2256 - 232 - 977.

That means there are only 232 + 977 (about 4 billion) possible 32-byte combinations that are not a valid coordinate.

Only slightly less than half (around 2255 - 1.17 * 2127) of those are the X coordinate of a point on the curve (in fact, for every valid X coordinate, there are either exactly 0 or exactly 2 points on the curve).

Pieter Wuille

Posted 2017-07-03T18:08:40.747

Reputation: 54 032