Fix a surprising quirk in BN_GF2m_mod(3).
authorschwarze <schwarze@openbsd.org>
Sun, 20 Nov 2022 23:35:00 +0000 (23:35 +0000)
committerschwarze <schwarze@openbsd.org>
Sun, 20 Nov 2022 23:35:00 +0000 (23:35 +0000)
commitbf9201ee11afd5f5c4794b9e7c234feb941e52c0
treed5f9f45209afa71f953f7496b47d9d6c4fff7b49
parent0334e08b415550dd4e3ca9f961ff47ffdb00dc26
Fix a surprising quirk in BN_GF2m_mod(3).

All other wrappers in the same file that use a temporary array of
degrees size that array dynamically, such that they are able to
handle reducing polynomials of arbitrary lengths.  BN_GF2m_mod(3)
was the only one that used a static array of size 6 instead, limiting
it to trinomials and pentanomials and causing it to fail for longer
reducing polynomials.

Make this more uniform and less surprising by using exactly the
same code as in all the other wrappers, such that BN_GF2m_mod(3)
works with reducing polynomials of arbitrary length, too, just like
the others.

Again, tb@ points out this quirk is very unlikely to cause
vulnerabilities in practice because cryptographic applications do
not use longer reducing polynomials.

This patch is not expected to significantly impact performance
because the relevant caller, BN_GF2m_mod_div(3), already uses dynamic
allocation via BN_GF2m_mod_mul(3).

OK tb@
lib/libcrypto/bn/bn_gf2m.c
lib/libcrypto/man/BN_GF2m_add.3