Start cleaning up oct2point and point2oct
authortb <tb@openbsd.org>
Tue, 22 Oct 2024 21:06:16 +0000 (21:06 +0000)
committertb <tb@openbsd.org>
Tue, 22 Oct 2024 21:06:16 +0000 (21:06 +0000)
commit5463a67785d3cc07fa43b57537b93d1584e29156
tree3a01c73b58cb3b1f64657a5c54b83596c908b76d
parente4baed355dd219eddd3a6e695e1691dbb8ddf6d7
Start cleaning up oct2point and point2oct

The SEC 1 standard defines various ways of encoding an elliptic curve
point as ASN.1 octet string. It's also used for the public key, which
isn't an octet string but a bit string for whatever historic reason.
The public API is incomplete and inconvenient, so we need to jump
through a few hoops to support it and to preserve our own sanity.

Split a small helper function out of ec_GFp_simple_point2oct() that
checks that a uint8_t represents a valid point conversion form. It
supports exactly the four possible variants and helps translating
from point_conversion_form_t at the API boundary.

Reject the form for the point at infinity since the function has
historically done that even for the case that the point actually is
the point at infinity.

ok jsing
lib/libcrypto/ec/ecp_oct.c