Conseguir que GPG Decryption funcione en Java (Bouncy Castle)

Permítanme comenzar diciendo que soy extremadamente nuevo en todo esto. Lo que estoy tratando de hacer es usar gpg desde Java para descifrar un archivo cifrado.

Lo que he hecho con éxito:

Un colega encriptó un archivo con mi clave pública y su clave privada y lo descifra con éxito.

Fui por el otro lado

Si otro colega intentara descifrar un archivo que no era para él: falla (como se esperaba)

Mi clave fue generada así ...

(gpg --version me dice que estoy usando 1.4.5 y estoy usando Bouncy Castle 1.47)

gpg --gen-ley

Seleccione la opción "DSA y Elgamal (predeterminado)"

Rellena los otros campos y genera una clave.

El archivo fue cifrado usando mi clave pública y la clave secreta de otra persona. Quiero descifrarlo. He escrito el siguiente código de Java para lograr esto. Estoy usando varios métodos en desuso, pero no puedo averiguar cómo implementar correctamente los métodos de fábrica necesarios para usar las versiones no en desuso, por lo que si alguien tiene una idea sobre las implementaciones de los que debería usar, sería una bonificación agradable.

    Security.addProvider(new BouncyCastleProvider());

        PGPSecretKeyRingCollection secretKeyRing = new PGPSecretKeyRingCollection(new FileInputStream(new File("test-files/secring.gpg")));
        PGPSecretKeyRing pgpSecretKeyRing = (PGPSecretKeyRing) secretKeyRing.getKeyRings().next();
        PGPSecretKey secretKey = pgpSecretKeyRing.getSecretKey();
        PGPPrivateKey privateKey = secretKey.extractPrivateKey("mypassword".toCharArray(), "BC");

        System.out.println(privateKey.getKey().getAlgorithm());
        System.out.println(privateKey.getKey().getFormat());

        PGPObjectFactory pgpF = new PGPObjectFactory(
    new FileInputStream(new File("test-files/test-file.txt.gpg")));
        Object pgpObj = pgpF.nextObject();
        PGPEncryptedDataList encryptedDataList = (PGPEncryptedDataList) pgpObj;

        Iterator objectsIterator = encryptedDataList.getEncryptedDataObjects();

        PGPPublicKeyEncryptedData publicKeyEncryptedData = (PGPPublicKeyEncryptedData) objectsIterator.next();
        InputStream inputStream = publicKeyEncryptedData.getDataStream(privateKey, "BC");

Entonces, cuando ejecuto este código, descubro que mi algoritmo y formato son los siguientes para mi clave secreta:

Algoritmo: Formato DSA: PKCS # 8

Y luego se rompe en la última línea:

Exception in thread "main" org.bouncycastle.openpgp.PGPException: error setting asymmetric cipher
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder.decryptSessionData(Unknown Source)
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder.access$000(Unknown Source)
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder$2.recoverSessionData(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at TestBouncyCastle.main(TestBouncyCastle.java:74)

Causado por: java.security.InvalidKeyException: tipo de clave desconocida que se pasó a ElGamal en org.bouncycastle.jcajce.provider.asymmetric.elgamal.CipherSpi.engineInit (Fuente desconocida) en org.bouncycastle.jcajce.provider.asymetricric.pucial.pacial.cz. engineInit (Fuente desconocida) en javax.crypto.Cipher.init (DashoA13 * ..) en javax.crypto.Cipher.init (DashoA13 * ..) ... 8 más

Estoy abierto a muchas sugerencias aquí, desde "no usar gpg, use x en lugar de" a "no use bouncy castle, use x en lugar de" a cualquier cosa en el medio. ¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta