`Curve448` with full coordinates
This PR implements a set of types for Montgomery points with a full coordinate system and corresponding
Curve448type with aCurveArithmeticimplementation. Our currentMontgomeryPointx-coordinate only remains in place for use withX448and is renamed toMontgomeryXpoint.For context: the x-only coordinate system can't implement a full set of arithmetic operations because of the missing y-coordinate. While the y-coordinate could be recovered, it is costly and is missing the sign. Some protocols exist that set the sign of the y-coordinate, which is why we have some methods in place for
MontgomeryXpointto do exactly that.I made sure to add a full set of conversion methods between the new types.
I'm aware that I'm proposing very large changes that have not previously been discussed. I'm happy to take any feedback. It should be much easier to review than #1291 on account that it can be done commit by commit.
Take 2 on #1291.
Do you have any protocol in mind where this would be used?
Yes, I am planning on using it with OPRF inside OPAQUE.