Rewrite asn1_check_tlen() using CBS.
authorjsing <jsing@openbsd.org>
Thu, 28 Apr 2022 18:30:57 +0000 (18:30 +0000)
committerjsing <jsing@openbsd.org>
Thu, 28 Apr 2022 18:30:57 +0000 (18:30 +0000)
commit21ceecff9317929f9e0600169835407d8ad3c75b
treead55fbf21daccdca70683d44a6f52378acbee926
parent09d7b7f43bc80ca1c0b996f24405859d47161c80
Rewrite asn1_check_tlen() using CBS.

Rather than calling asn1_get_object_cbs(), call asn1_get_identifier_cbs(),
then immediately proceed with the tag number and tag class check. Only if
that succeeds (or it is not required) do we call asn1_get_length_cbs().
This avoids incurring the overhead of decoding the length in the case where
the tag number and tag class do not match.

While here rename asn1_check_tlen() to asn1_check_tag() - while we decode
the length, what we are normally checking is the tag number and tag class.
Also rename the arguments for readability. For now the argument types
and encoding remain unchanged.

ok inoguchi@ tb@
lib/libcrypto/asn1/asn1_lib.c
lib/libcrypto/asn1/asn1_locl.h
lib/libcrypto/asn1/tasn_dec.c