Example usage for org.bouncycastle.asn1.cms EncryptedData EncryptedData

List of usage examples for org.bouncycastle.asn1.cms EncryptedData EncryptedData

Introduction

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

Prototype

private EncryptedData(ASN1Sequence seq) 

Source Link

Usage

From source file:es.gob.afirma.envelopers.cms.CMSDecipherEncryptedData.java

License:Open Source License

/** Método principal que descifra datos del tipo de EncryptedData.
 * @param encryptedData/* w w w .  ja v  a  2s .c om*/
 *        Datos del tipo CMS EncryptedData.
 * @param pass
 *        Contraseña o clave que se uso para cifrar los datos.
 * @return Datos sin encriptar.
 * @throws AOException
 *         Cuando ocurre un error durante el proceso de descifrado
 *         (formato o clave incorrecto,...)
 * @throws InvalidKeyException
 *         Cuando se proporciona una clave incorrecta para el
 *         descifrado.
 * @throws BadPaddingException Cuando hay problemas con un relleno de datos.
 * @throws IllegalBlockSizeException Cuando hay problemas internos con los tamaños de bloque de cifrado.
 * @throws InvalidAlgorithmParameterException Si no se soporta un parámetro necesario para un algoritmo.
 * @throws NoSuchPaddingException Cuando no se soporta un tipo de relleno necesario.
 * @throws NoSuchAlgorithmException Si el JRE no soporta algún algoritmo necesario
 * @throws IOException En caso de error en la lectura o tratamiento de datos
 * @throws InvalidKeySpecException Cuando ocurren problemas relacionados con la estructura interna de las claves */
@SuppressWarnings("unused")
byte[] dechiperEncryptedData(final byte[] encryptedData, final String pass)
        throws AOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException,
        InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException,
        InvalidKeySpecException, IOException {

    AlgorithmIdentifier alg = null;
    EncryptedContentInfo eci = null;

    // donde se guardara el resultad.
    final byte[] deciphered;

    try {
        final ASN1Sequence contentEncryptedData = Utils.fetchWrappedData(encryptedData);

        // Obtenemos los datos del encryptedData.
        final Enumeration<?> e2 = contentEncryptedData.getObjects();
        // version
        e2.nextElement();
        // EncryptedContentInfo. donde esta lo que necesitamos.
        eci = EncryptedContentInfo.getInstance(e2.nextElement());

        // Obtenemos el agoritmo de cifrado
        alg = eci.getContentEncryptionAlgorithm();

        // Se intenta obtener el encrypted data.
        // Si no puede convertirse, dara error.
        // "EncryptedData EncryptedData" no se usara. solo es para verificar
        // que es de este tipo.
        new EncryptedData(eci);
    } catch (final Exception ex) {
        throw new AOException("El fichero no contiene un tipo EncryptedData", ex); //$NON-NLS-1$
    }

    // asignamos la clave de descifrado a partir del algoritmo.
    assignKey(alg, pass);

    // Obtenemos el contenido cifrado.
    final byte[] contCifrado = eci.getEncryptedContent().getOctets();

    // Desciframos.
    return Utils.deCipherContent(contCifrado, this.config, this.cipherKey);

}