Avoid division by zero in hybrid point encoding
authortb <tb@openbsd.org>
Mon, 19 Apr 2021 17:06:37 +0000 (17:06 +0000)
committertb <tb@openbsd.org>
Mon, 19 Apr 2021 17:06:37 +0000 (17:06 +0000)
commiteec146bd45a3fe2bbd65928cb2797588727ad017
tree319f975dbdf195561cda55b1f31695f90c8c3caf
parent95b65f7cb12778aed0b7bf7f8d48fbe80c48b411
Avoid division by zero in hybrid point encoding

In hybrid and compressed point encodings, the form octet contains a bit
of information allowing to calculate y from x.  For a point on a binary
curve, this bit is zero if x is zero, otherwise it must match the
rightmost bit of of the field element y / x. The existing code only
considers the second possibility. It could thus fail with a division by
zero error as found by Guido Vranken's cryptofuzz.

This commit adds a few explanatory comments to oct2point and fixes some
KNF issues. The only actual code change is in the last hunk which adds a
BN_is_zero(x) check to avoid the division by zero.

ok jsing
lib/libcrypto/ec/ec2_oct.c