RFR: 8298420: PEM API: Implementation (Preview)
Anthony Scarpino
ascarpino at openjdk.org
Thu Jul 25 03:42:03 UTC 2024
On Fri, 10 May 2024 23:51:36 GMT, ExE Boss <duke 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
>
> src/java.base/share/classes/sun/security/util/Pem.java line 93:
>
>> 91:
>> 92: public static final byte[] LINESEPARATOR = "\r\n"
>> 93: .getBytes(StandardCharsets.UTF_8);
>
> These arrays should probably be marked as [`@Stable`]:
> Suggestion:
>
> /**
> * Public Key PEM header & footer
> */
> public static final @Stable byte[] PUBHEADER = "-----BEGIN PUBLIC KEY-----"
> .getBytes(StandardCharsets.UTF_8);
> public static final @Stable byte[] PUBFOOTER = "-----END PUBLIC KEY-----"
> .getBytes(StandardCharsets.UTF_8);
>
> /**
> * Private Key PEM header & footer
> */
> public static final @Stable byte[] PKCS8HEADER = "-----BEGIN PRIVATE KEY-----"
> .getBytes(StandardCharsets.UTF_8);
> public static final @Stable byte[] PKCS8FOOTER = "-----END PRIVATE KEY-----"
> .getBytes(StandardCharsets.UTF_8);
>
> /**
> * Encrypted Private Key PEM header & footer
> */
> public static final @Stable byte[] PKCS8ENCHEADER = "-----BEGIN ENCRYPTED PRIVATE KEY-----"
> .getBytes(StandardCharsets.UTF_8);
> public static final @Stable byte[] PKCS8ENCFOOTER = "-----END ENCRYPTED PRIVATE KEY-----"
> .getBytes(StandardCharsets.UTF_8);
>
> /**
> * Certificate PEM header & footer
> */
> public static final @Stable byte[] CERTHEADER = "-----BEGIN CERTIFICATE-----"
> .getBytes(StandardCharsets.UTF_8);
> public static final @Stable byte[] CERTFOOTER = "-----END CERTIFICATE-----"
> .getBytes(StandardCharsets.UTF_8);
>
> /**
> * CRL PEM header & footer
> */
> public static final @Stable byte[] CRLHEADER = "-----BEGIN CRL-----"
> .getBytes(StandardCharsets.UTF_8);
> public static final @Stable byte[] CRLFOOTER = "-----END CRL-----"
> .getBytes(StandardCharsets.UTF_8);
>
> /**
> * PKCS#1/slleay/OpenSSL RSA PEM header & footer
> */
> public static final @Stable byte[] PKCS1HEADER = "-----BEGIN RSA PRIVATE KEY-----"
> .getBytes(StandardCharsets.UTF_8);
> public static final @Stable byte[] PKCS1FOOTER = "-----END RSA PRIVATE KEY-----"
> .getBytes(StandardCharsets.UTF_8);
>
> public static final @Stable byte[] LINESEPARATOR = "\r\n"
> .getBytes(StandardCharsets.UTF_8);
>
>
> [`@Stable`]: https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/jdk/internal/vm/annotation/Stable.java
I have not seen `@Stable` before. I will have to evaluate this suggestion further
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17543#discussion_r1688737679
More information about the security-dev
mailing list