List of usage examples for org.bouncycastle.asn1.cms KeyTransRecipientInfo getEncryptedKey
public ASN1OctetString getEncryptedKey()
From source file:es.gob.afirma.envelopers.cms.Utils.java
License:Open Source License
/** Obtiene los parámetros de los certificados. * @param userCert Certificado del usuario * @param elementRecipient Listado de destinatarios * @return Parámetros de los certificados (<code>EncryptedKeyDatas</code>). * @throws AOInvalidRecipientException Si el destinatario es inválido por cualquier motivo. * @throws IOException Cuando hay problemas de entrada / salida. * @throws CertificateEncodingException Si hay problemas con la codificación de los certificados. */ static EncryptedKeyDatas fetchEncryptedKeyDatas(final X509Certificate userCert, final Enumeration<?> elementRecipient) throws AOInvalidRecipientException, IOException, CertificateEncodingException { final EncryptedKeyDatas encryptedKeyDatas = new EncryptedKeyDatas(); AlgorithmIdentifier algEncryptedKey = null; byte[] encryptedKey = null; // Obtenemos los datos del certificado destino. IssuerAndSerialNumber isse;//w w w . ja va 2 s . c o m TBSCertificateStructure tbs = null; tbs = TBSCertificateStructure.getInstance(ASN1Primitive.fromByteArray(userCert.getTBSCertificate())); // Obtenemos el Isuer & serial number isse = new IssuerAndSerialNumber(X500Name.getInstance(tbs.getIssuer()), tbs.getSerialNumber().getValue()); // obtenesmos los recipientInfo. RecipientInfo reci = null; while (elementRecipient.hasMoreElements()) { // obtengo los recipientInfo final ASN1Sequence intermedio = (ASN1Sequence) elementRecipient.nextElement(); reci = RecipientInfo.getInstance(intermedio); final KeyTransRecipientInfo kri = KeyTransRecipientInfo.getInstance(reci.toASN1Primitive()); final IssuerAndSerialNumber actual = IssuerAndSerialNumber .getInstance(kri.getRecipientIdentifier().toASN1Primitive()); // Comparo el issuer y el serial number con el certificado que me // pasan para descifrar. if (actual.equals(isse)) { // Obtengo los datos para descifrar. encryptedKey = kri.getEncryptedKey().getOctets(); algEncryptedKey = kri.getKeyEncryptionAlgorithm(); } } // si no se encuentran coincidencias es tonteria continuar. if (encryptedKey == null || algEncryptedKey == null) { throw new AOInvalidRecipientException( "El usuario indicado no es uno de los destinatarios del sobre digital"); //$NON-NLS-1$ } encryptedKeyDatas.setAlgEncryptedKey(algEncryptedKey); encryptedKeyDatas.setEncryptedKey(encryptedKey); return encryptedKeyDatas; }