RFR: 8246797: A convenient method to read OPTIONAL element [v2]

Valerie Peng valeriep at openjdk.java.net
Thu Aug 26 01:15:27 UTC 2021


On Tue, 24 Aug 2021 18:05:50 GMT, Weijun Wang <weijun at openjdk.org> wrote:

>> src/java.base/share/classes/sun/security/util/DerInputStream.java line 352:
>> 
>>> 350:      * @throws IOException if an I/O error happens while peeking the byte
>>> 351:      */
>>> 352:     public boolean seeOptionalContextSpecific(int n) throws IOException {
>> 
>> Given the two getOptionalXXXContextSpecific(int) method, do we really need this to be public? Same goes for the two checkNextTag(...) methods above.
>
> `checkNextTag()` is useful for other kinds of OPTIONAL fields. For example, `keyLength` inside
> 
> 
> PBKDF2-params ::= SEQUENCE {
>      salt CHOICE {
>        specified OCTET STRING,
>        otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}
>      },
>      iterationCount INTEGER (1..MAX),
>      keyLength INTEGER (1..MAX) OPTIONAL,
>      prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1
> }
>  ```
> Maybe I should create a `getOptional(byte)` method?
> 
> For `seeOptionalContextSpecific`, I was thinking about if I might need to read the field using another method. For example, PKCS7 `SignedData` contains a field
> 
> certificates [0] IMPLICIT CertificateSet OPTIONAL
> 
> After I confirm the [0] is actually there, I'll still need to call `outerStream.getSet(n, true)` to read the set. Maybe I should create a `DerValue::getSet(n)` method or expose the existing `subs()`?
> 
> I'll include more examples in this PR so you can judge the design better.

Sure, that'd be good if I have more examples to understand the planned usage better.

>> src/java.base/share/classes/sun/security/util/DerValue.java line 319:
>> 
>>> 317: 
>>> 318:     /**
>>> 319:      * Wraps a byte array at a single DerValue.
>> 
>> nit: at=>as
>
> I just want to give it a new name so a user knows the content is only wrapped but not cloned.

Hmm, I see. At some point, maybe we need to better document this or consolidate the APIs.

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

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



More information about the security-dev mailing list