Uso bouncycastle (JAVA) para firmar, encriptar, desencriptar y verificar firmas en la implementación de SSO. Tengo claves PGP públicas y privadas sin formato y necesito almacenarlas en el almacén de claves Java. Estas claves públicas de PGP no tienen certificado.Tienda de llaves PGP (públicas) en java keystore - Bouncycastle
Entiendo que para las claves públicas (de acuerdo con javadoc de Keystore: http://docs.oracle.com/javase/6/docs/api/java/security/KeyStore.html) tengo que crear el certificado. Una vez que se crea el certificado, puedo importarlo al almacén de claves como KeyStore.TrustedCertificateEntry. Sin embargo, no puedo crear una entrada de certificado para el tipo org.bouncycastle.openpgp.PGPPublicKey.
He buscado a través de la web, pero no pude encontrar ningún ejemplo válido:
- documentación BouncyCastle: http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+Certificate+and+Certification+Request+Generation Genera certificado X.509 para las llaves -
ejemplos BouncyCastle - org.bouncycastle.openpgp. examples.DirectKeySignature: Agregue certificat (objeto de tipo PGPSignature) directamente a PGPPublicKey. Para concluir, he firmado PGPPublicKey (certificado) pero no puedo almacenar este tipo de clave en el almacén de claves de Java.
OutputStream out = new ByteArrayOutputStream(); if (armor) { out = new ArmoredOutputStream(out); } PGPPrivateKey pgpPrivKey = secretKey.extractPrivateKey(secretKeyPass.toCharArray(), "BC"); PGPSignatureGenerator sGen = new PGPSignatureGenerator(secretKey.getPublicKey().getAlgorithm(), PGPUtil.SHA1, "BC"); sGen.initSign(PGPSignature.DIRECT_KEY, pgpPrivKey); BCPGOutputStream bOut = new BCPGOutputStream(out); sGen.generateOnePassVersion(false).encode(bOut); PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator(); boolean isHumanReadable = true; spGen.setNotationData(true, isHumanReadable, notationName, notationValue); PGPSignatureSubpacketVector packetVector = spGen.generate(); sGen.setHashedSubpackets(packetVector); bOut.flush(); return PGPPublicKey.addCertification(keyToBeSigned, sGen.generate()).getEncoded();
estoy interesado principalmente en solución programática (código fuente de Java) pero los ejemplos que utilizan algunas herramientas será útil también.
Gracias!