Bouncy Castle: PEMReader => PEMParser

Con un certificado PEM como

-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC,B9846B5D1803E..... 

utilizando BC 1.46, extraigo el par de llaves con el siguiente código:

 int myFunc(String pemString, char [] password) { ByteArrayInputStream tube = new ByteArrayInputStream(pemString.getBytes()); Reader fRd = new BufferedReader(new InputStreamReader(tube)); PEMReader pr = new PEMReader(fRd, new Password (password), "BC"); try { Object o = pr.readObject(); if (o instanceof KeyPair) ..... 

Ahora acabo de instalar BC 1.48, y me dicen que PEMReader está en desuso y debe ser reemplazado por PEMParser.

Mi problema es, AFAIK, no hay lugar para una contraseña en PEMParser.

¿Podría alguien darme un ejemplo de cómo migrar mi código a una versión de PEMParser?

TIA

Solo necesitaba resolver el mismo problema y no encontré respuesta. Así que pasé un tiempo estudiando BC API y encontré una solución que funciona para mí. Necesitaba leer la clave privada del archivo para que haya un parámetro privateKeyFileName en lugar del parámetro pemString en el método myFunc.

Usando BC 1.48 y PEMParser:

 int myFunc(String privateKeyFileName, char [] password) { File privateKeyFile = new File(privateKeyFileName); // private key file in PEM format PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile)); Object object = pemParser.readObject(); PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password); JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); KeyPair kp; if (object instanceof PEMEncryptedKeyPair) { System.out.println("Encrypted key - we will use provided password"); kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv)); } else { System.out.println("Unencrypted key - no password needed"); kp = converter.getKeyPair((PEMKeyPair) object); } } 

Para la versión 1.55 de bcpkix-jdk15on el código de descifrado cambia a esto:

 kp = ((PEMEncryptedKeyPair) object).decryptKeyPair(decryptorProvider); 

No revisé si esto es un error en la respuesta anterior o solo una diferencia API entre las versiones.