Example usage for org.bouncycastle.asn1.cms KeyTransRecipientInfo getEncryptedKey

List of usage examples for org.bouncycastle.asn1.cms KeyTransRecipientInfo getEncryptedKey

Introduction

In this page you can find the example usage for org.bouncycastle.asn1.cms KeyTransRecipientInfo getEncryptedKey.

Prototype

public ASN1OctetString getEncryptedKey() 

Source Link

Usage

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&aacute;metros de los certificados (<code>EncryptedKeyDatas</code>).
 * @throws AOInvalidRecipientException Si el destinatario es inv&aacute;lido por cualquier motivo.
 * @throws IOException Cuando hay problemas de entrada / salida.
 * @throws CertificateEncodingException Si hay problemas con la codificaci&oacute;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;
}