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

Jamil Nimeh jnimeh at openjdk.org
Tue Mar 18 17:07:29 UTC 2025


On Thu, 13 Mar 2025 01:15:03 GMT, Anthony Scarpino <ascarpino at openjdk.org> wrote:

>> Hi all,
>> 
>> I need a code review of the PEM API.  Privacy-Enhanced Mail (PEM) is a format for encoding and decoding cryptographic keys and certificates.  It will be integrated into JDK24 as a Preview Feature.  Preview features does not permanently define the API and it is subject to change in future releases until it is finalized.
>> 
>> Details about this change can be seen at [PEM API JEP](https://bugs.openjdk.org/browse/JDK-8300911).
>> 
>> Thanks
>> 
>> Tony
>
> Anthony Scarpino has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 61 commits:
> 
>  - merge with master
>  - better comment and remove commented out code
>  - Merge branch 'master' into pem
>  - Merge branch 'pem-merge' into pem
>  - merge
>  - Merge in PEMRecord as part of the API.
>  - Merge branch 'pem-record' into pem-merge
>    
>    # Conflicts:
>    #	src/java.base/share/classes/java/security/PEMDecoder.java
>    #	src/java.base/share/classes/java/security/PEMRecord.java
>    #	src/java.base/share/classes/sun/security/util/Pem.java
>    #	test/jdk/java/security/PEM/PEMData.java
>    #	test/jdk/java/security/PEM/PEMDecoderTest.java
>    #	test/jdk/java/security/PEM/PEMEncoderTest.java
>  - Merge branch 'master' into pem-record
>    
>    # Conflicts:
>    #	src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java
>  - test fixes & cleanup
>  - Implement stream decoding
>    fix StringBuffer/Builder
>    X509C* changes
>  - ... and 51 more: https://git.openjdk.org/jdk/compare/a347ecde...106788ef

src/java.base/share/classes/sun/security/ec/ECKeyFactory.java line 232:

> 230:         } else if (keySpec instanceof PKCS8EncodedKeySpec p8) {
> 231:             PKCS8Key p8key = new ECPrivateKeyImpl(p8.getEncoded());
> 232:             if (p8key.hasPublicKey()) {

Shouldn't that be `if (!p8key.hasPublicKey()) {`, similar to XDHKeyFactory.generatePublicImpl() and others?

src/java.base/share/classes/sun/security/pkcs/PKCS8Key.java line 55:

> 53:  *        ...
> 54:  *      }
> 55:  * <p>

Actually this is for the next line, and just a nit: It appears that now we are at least parsing/saving the attributes and definitely attaching the public key when decoding from DER.  Should this line be removed?

src/java.base/share/classes/sun/security/pkcs/PKCS8Key.java line 207:

> 205:             byte[] internal = rawKey.generateEncoding();
> 206:             PKCS8EncodedKeySpec pkcs8KeySpec =
> 207:                 new PKCS8EncodedKeySpec(internal);

Since you don't use `internal` beyond this point AFAICT, you may not need the reference as a local variable and just inline the call to `rawKey.generateEncoding()`.  But this is more of a nit/style thing so no big deal if you want to leave it as-is.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2001457211
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2001501575
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r2001518767


More information about the security-dev mailing list