mirror of
https://github.com/ipxe/ipxe
synced 2025-12-07 18:00:28 +03:00
80e98dc0d105ae4cd427440ab6380192b927bf2e
The point at infinity cannot be represented in affine coordinates, and so cannot be returned as a valid result from weierstrass_multiply(). The implementation uses projective coordinates internally, in which a point at infinity is represented by a zero Z-coordinate. Treat a zero Z-coordinate as an invalid result. The projective coordinates are calculated modulo 4N, and so a zero value may be represented as 0, N, 2N, or 3N. To minimise code size, defer the test until after inverting the Z co-ordinate via Fermat's little theorem via bigint_mod_exp_ladder() (which will calculate the inverse of zero as zero, and will always produce a result strictly modulo N). Defer the test further until after converting the result back to affine coordinates, to allow the debug message showing the multiplication result to be printed. Signed-off-by: Michael Brown <mcb30@ipxe.org>
iPXE README File Quick start guide: cd src make For any more detailed instructions, see http://ipxe.org
Languages
C
97.3%
Assembly
1.5%
Perl
0.6%
Makefile
0.3%
Python
0.2%