RFR: 8298420: PEM API: Implementation (Preview) [v15]

Anthony Scarpino ascarpino at openjdk.org
Thu May 8 20:47:13 UTC 2025


On Wed, 7 May 2025 18:38:31 GMT, Sean Mullan <mullan at openjdk.org> wrote:

>> Anthony Scarpino has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 66 commits:
>> 
>>  - major code review comments update
>>  - Merge branch 'master' into pem
>>  - Merge branch 'master' into pem
>>  - javadoc updates
>>  - code review comments
>>  - merge with master
>>  - better comment and remove commented out code
>>  - Merge branch 'master' into pem
>>  - Merge branch 'pem-merge' into pem
>>  - merge
>>  - ... and 56 more: https://git.openjdk.org/jdk/compare/e2ae50d8...0c540327
>
> src/java.base/share/classes/java/security/PEMDecoder.java line 68:
> 
>> 66:  * class is specified.
>> 67:  *
>> 68:  * <p> A new immutable {@code PEMDecoder} instance is created when configured
> 
> no need to say "immutable" as first sentence says all PEMDecoders are immutable.

ok

> src/java.base/share/classes/java/security/PEMDecoder.java line 71:
> 
>> 69:  * with {@linkplain #withFactory} and/or {@linkplain #withDecryption}.
>> 70:  * Configuring an instance for decryption does not prevent decoding with
>> 71:  * unencrypted PEM. Any encrypted PEM that does not use the configured password
> 
> I found the last 3 sentences a bit jumping too quickly into details. I suggest having 2 sentences after the first one, where each sentence explains what the `withDecryption` and `withFactory` methods do, respectively.

I split them and reworded it, HTH.

> src/java.base/share/classes/java/security/PEMDecoder.java line 92:
> 
>> 90:  * @spec https://www.rfc-editor.org/info/rfc7468
>> 91:  *       RFC 7468: Textual Encodings of PKIX, PKCS, and CMS Structures
>> 92:  *
> 
> Might be useful to add an `@see PEMEncoder` (and vice-versa).

ok. I added a link

> src/java.base/share/classes/java/security/PEMDecoder.java line 228:
> 
>> 226:      * <p>This method will read the {@code InputStream} until PEM data is
>> 227:      * found or until the end of the stream.  Non-PEM data in the
>> 228:      * {@code InputStream} before the PEM header will be ignored by the decoder.
> 
> s/will be/is/

ok

> src/java.base/share/classes/java/security/PEMDecoder.java line 230:
> 
>> 228:      * {@code InputStream} before the PEM header will be ignored by the decoder.
>> 229:      * If only non-PEM data is found a {@link PEMRecord} is returned with that
>> 230:      * data.
> 
> Why? Shouldn't this be an exception as it isn't PEM?

I think you're right.

> src/java.base/share/classes/java/security/PEMDecoder.java line 252:
> 
>> 250:      * <p>
>> 251:      * {@code tClass} can be used to change the return type instance:
>> 252:      * <ul>
> 
> This list feels more like programming advice. I would suggest either removing this, or putting it in the class description but not as a bulleted list, instead use complete sentences.

Rewriting sounds fine.

> src/java.base/share/classes/java/security/PEMDecoder.java line 399:
> 
>> 397: 
>> 398:     /**
>> 399:      * Returns a new {@code PEMDecoder} instance from the current instance
> 
> I find the words "a new instance from a current instance" a little unusual.
> 
> It might be simpler and clearer to say "Returns a copy of this PEMDecoder that will decrypt encrypted PEM data such as encrypted private keys with the specified password."
> 
> (I don't feel it is necessary to mention that it still also decodes unencrypted PEM - that seems implied to me).

The rewrite looks good, but I want to keep the comment about unencrypted PEM.  PEMEncoder only encrypts PrivateKey and rejects any other DEREncodable.  I think it's worth mentioning.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2078839633
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2078849405
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2078855537
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2078876102
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2078948310
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2080055983
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2078969843


More information about the security-dev mailing list