RFR JDK-8006182
Chris Hegarty
chris.hegarty at oracle.com
Fri Feb 15 15:50:08 UTC 2013
This looks good to me Mark, some minor comments:
- in places you you have imported java.util.Base64, where java.util.*
is already imported. Or you may need to slot the new import along
with other java.util.<TYPE> imports.
- Personally I would go with the NoCloseWrapperOutputStreamwrapper,
rather than converting to a String, especially if the incoming
data can be rather large.
-Chris.
On 14/02/2013 13:24, Mark Sheppard wrote:
> Hi,
> as part of a refactoring of the jdk codebase to use the base64
> capabilities of java.util.Base64, the following modifications,
> as per the webrev,
>
> http://cr.openjdk.java.net/~chegar/8006182/webrev.00/
>
> have been made to complete task JDK-8006182.
>
> Could you oblige and review these changes, please?
>
> Description:
> jdk8 has java.util.Base64 to define a standard API for base64
> encoding/decoding. It would be good to investigate whether this API
> could be used in the security components, providers and regression tests.
>
> In the main this work involved replacing the sun.misc.BASE64Encoder and
> sun.misc.BASE64Decoder with the
> corresponding Mime Base64 Encoder/Decoder (as per rfc2045) from the
> java.util.Base64 class.
> This is a like for like replacement.
> As such, sun.misc.BASE64Encoder maps to the encoder returned by
> java.util.Base64.getMimeEncoder()
> sun.misc.BASE64Decoder maps to the decoder returned by
> java.util.Base64.getMimeDecoder()
>
> However a couple of items worth noting:
>
> In the jarsigner (Main.java) the standard Base64 encoder (rfc 4648),
> java.util.Base64.getEncoder(), has been used to replace the
> JarBASE64Encoder, which was a package private extension of
> BASE64Encoder, which avoids writing newline to the encoded data.
>
> In the keytool (Main.java), methods such as dumpCert, printCert.
> printCRL, and so on, write a Base64 encoding to an OutputStream,
> typically std out.
> This is achieved in the BASE64Encoder, by passing the OutputStream to
> methods such as encodeBuffer().
>
> A couple of options exist to do this under the new Base64 utilities,
> which include:
>
> * using a Mime Encoder encodeToString() and output to the stream via
> println()
>
> * use the wrap capabilities of the Base64.Encoder:
> - define a package private class, which extends FilterOutputStream (e.g.
> NoCloseWrapperOutputStream) and, overrides close() to do nothing
> - inject the OutputStream, passed to the keytool method, into the
> NoCloseWrapperOutputStreamwapper,
> - wrap() the NoCloseWrapperOutputStreamwrapper in the Mime Encoder,
> which will in turn return an encapsulating OutputStream;
> - write the data buffer to be encoded to the encoder's OutputStream;
> - close the encoder's OutputStream, which completes the base64 encoding;
> - append a newline to the initial OutputStream.
>
> pragmatics and the simplest thing that works, went for the first option.
>
> regards
> Mark
>
>
>
>
>
>
More information about the security-dev
mailing list