in proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java [504:558]
PrivateKey readPrivateKey(String pemFile, String password)
{
if (bouncyCastleSetupException != null)
{
throw new TransportException("BouncyCastle failed to load", bouncyCastleSetupException);
}
final Object pemObject = readPemObject(pemFile);
PrivateKey privateKey = null;
try
{
Object keyConverter = JcaPEMKeyConverterCons.newInstance();
setProvider(keyConverter, "BC");
if (PEMEncryptedKeyPairClass.isInstance(pemObject))
{
Object decryptorBuilder = JcePEMDecryptorProviderBuilderCons.newInstance();
// Build a PEMDecryptProvider
Object decryptProvider = builderMethod.invoke(decryptorBuilder, password.toCharArray());
Object decryptedKeyPair = decryptKeyPairMethod.invoke(pemObject, decryptProvider);
KeyPair keyPair = (KeyPair) getKeyPairMethod.invoke(keyConverter, decryptedKeyPair);
privateKey = keyPair.getPrivate();
}
else if (PEMKeyPairClass.isInstance(pemObject))
{
// It's a KeyPair but not encrypted.
KeyPair keyPair = (KeyPair) getKeyPairMethod.invoke(keyConverter, pemObject);
privateKey = keyPair.getPrivate();
}
else if (PrivateKeyInfoClass.isInstance(pemObject))
{
// It's an unencrypted private key
privateKey = (PrivateKey) getPrivateKeyMethod.invoke(keyConverter, pemObject);
}
else
{
final String msg = "Unable to load PrivateKey, Unpexected Object [" + pemObject.getClass().getName()
+ "]";
_logger.log(Level.SEVERE, msg);
throw new TransportException(msg);
}
}
catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException | NoSuchMethodException | SecurityException e)
{
final String msg = "Failed to process key file [" + pemFile + "] - " + e.getMessage();
throw new TransportException(msg, e);
}
return privateKey;
}