On Mon, 23 Aug 2021 15:48:10 GMT, Jamil Nimeh <jni...@openjdk.org> wrote:

>> This code change adds new methods to `DerInputStream` to easily and safely 
>> read optional fields in a ASN.1 DER-encoded value. It also adds several 
>> wrapping methods to `DerValue` to avoid unnecessary memory copying when 
>> calling by an internal method.
>> 
>> The new methods are applied to `OAEPParameters` to show out how they work. A 
>> new regression test is added to show that not only the new methods are 
>> simper but they are safer and more correct.
>
> src/java.base/share/classes/sun/security/util/DerInputStream.java line 353:
> 
>> 351:      */
>> 352:     public boolean seeOptionalContextSpecific(int n) throws IOException 
>> {
>> 353:         return checkNextTag(t -> (t & 0x0c0) == 0x080 && (t & 0x01f) == 
>> n);
> 
> Minor nit for clarity, the 0x080 could use the static DerValue.TAG_CONTEXT.
> 
> On an unrelated note, it's a bummer that we don't have names for the typical 
> masking constants 0x0c0 and 0x01f for getting at the tag class and number 
> values (or static methods maybe).  But those numeric literals are only in 
> wide use in DerValue.java and maybe not worth changing since you don't touch 
> that file.  It might make that code a bit clearer, but it is just a nit.

In fact, I tried using DerValue.TAG_CONTEXT at the beginning but it's defined 
as a byte so it's actually -128, and will never equal to any `t & 0x0c0`. Even 
the `DerValue::isContextSpecific` uses 0x80 directly. (Unfortunately this is 
not a static method otherwise I'll use it).

-------------

PR: https://git.openjdk.java.net/jdk/pull/5221

Reply via email to