List of usage examples for org.bouncycastle.asn1.cms EncryptedData EncryptedData
private EncryptedData(ASN1Sequence seq)
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); }