Clamp the manifestNumber to 20 octets value
authortb <tb@openbsd.org>
Sun, 24 Mar 2024 00:38:58 +0000 (00:38 +0000)
committertb <tb@openbsd.org>
Sun, 24 Mar 2024 00:38:58 +0000 (00:38 +0000)
commitfee3cdecdfae867d1d2f64dc14b464b3063909ba
treeac747e84965b215c7e87b6c7422ef42681fa41da
parent2a4ca004863e035057631b6d836852ad799ae8c3
Clamp the manifestNumber to 20 octets value

The standards contain somewhat ambiguous language as to what the largest
acceptable value for a crlNumber or manifestNumber could be, due to a
limitation to 20 octets. The question is what 20 octets specifically are
meant...

Consensus seems to have emerged that the largest value is 2^159-1 since
2^160-1 would encode to 21 octets due to a padding octet to disambiguate
ff .. ff from -7f ff .. ff (iow the top bit of the first octet is a sign
bit).

Thus, switch from 2^160 - 1 to 2^159 - 1 as an upper bound by checking
the length of the value portion of the DER encoded ASN.1 integer to be
at most 20 octets.

Thanks to Martin Hoffmann, Tom Harrison, and Ben Maddison for raising and
discussing the issue. Thanks also to the spec authors for making me waste
a few hours of my life on a single bit.

ok job
usr.sbin/rpki-client/x509.c