public class PEMInputStream
This class is here as implementation for the legacy public class
weblogic.security.PEMInputStream, which is now deprecated.
The original class simply served up the base64-decoded bytes of the
PEM data it was given, dropping the PEM headers, if any, in the process.
While the Certicom SSL stack could handle this (albeit in a rather fragile
way, by trying various decode strategies in turn until one worked), our JSSE
implementation can't. It looks for PEM headers, assumes specific DER
encoding if no headers are found, and fails is neither of those work.
While it might be possible to duplicate the Certicom logic in our JSSE
code, and such a strategy would provide backward-compatible behavior,
it would also introduce significant logic changes that could break
other use cases, and support for arbitrary PEM data in the absence
of accompanying headers is not a strategically important use case.
So, we'll make PEMInputStream preserve the header information instead.
Note: SSLClientInfo uses InputStreamsCloner to manage IS's for
input keys and certs, so InputStreamCloner must be modified to
preserve PEMInputStream's type and the additional data it carries,
handing back an actual PEMInputStream instance when cloning it.
Lastly, we will replace the base64 decoding logic here with utility
code from the JSSE adapter.