On Oct 23, 2015, at 5:57 AM, Nathaniel McCallum <npmccal...@redhat.com> wrote:

> Is there a generic way to do this?

Yes.  It’s just elementary algebra.  An Edwards curve has the form:

y^2 + x^2 = 1 + d(x^2)(y^2)

Just solve for x.  The answer turns out to be:

x = sqrt((y^2 -1) / (d(y^2) - 1))

> The official Ed25519 code (in python) has a function for this but it
> depends on some constants and I can't infer what they are doing. In
> particular, I'd like to recover x from y with Ed448.

The Ed25519 code is slightly different because Ed25519 is a twisted Edwards 
curve, i.e.

y^2 +a(x^2) = 1 + d(x^2)(y^2)

For Ed25519, a = -1 so you end up with d(y^2)+1 instead of d(y^2)-1 in the 
denominator.  The rest of the black magic in the Ed25519 xrecover routine is 
the modular square root computation.  I think that code makes some 
optimizations based on the value of the field modulus (i.e. 2^255-19) so you 
can’t use that code directly for Ed448 (but I could be wrong about that).

You can always check your result by plugging X and Y into the original curve 
equation and see if the two sides are equal.

rg

_______________________________________________
Curves mailing list
Curves@moderncrypto.org
https://moderncrypto.org/mailman/listinfo/curves

Reply via email to