I am wondering if anyone would be willing to give me the quick tl;dr for how to get an elliptic curve point's Y given X. Or in other words get the uncompressed version of a compressed point.
My understanding is that for every X, there's two possible Y's, and they differ in some trivial way (such as one is odd and one is even), and which to use is denoted by the byte that comes in front of X. Further, I understand that the equation y^2=x^3+ax+b is involved, but am not clear how to wrap my head around that and the finite field arithmetic, and my main objective is to upgrade my Casascius Bitcoin Address Utility to support compressed keys.
I'm using BouncyCastle. Would someone be so kind as to point me in the right direction or offer the code snippet that does this? Perhaps this functionality (or some primitive it's based upon) is built into BouncyCastle and I just don't know it. For example, I'm able to find things like this
http://www.item.ntnu.no/europki08/presentations/europki08-brumley.pdf but would prefer to use tested code instead of reinventing the wheel. Thanks in advance.
Edit: I think I'm probably warm with BouncyCastle's decodePoint