Example usage for org.bouncycastle.asn1 ASN1InputStream ASN1InputStream

List of usage examples for org.bouncycastle.asn1 ASN1InputStream ASN1InputStream

Introduction

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

Prototype

public ASN1InputStream(byte[] input) 

Source Link

Document

Create an ASN1InputStream based on the input byte array.

Usage

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

License:Open Source License

/** Obtiene el contenido de un archivo encriptado.
 * @param file Archivo con los datos/*from   ww  w  .ja  v  a2s .c  o m*/
 * @param config Configuracion de cifrado
 * @param params Parametros
 * @param cipher Encriptador
 * @return Contenido de un archivo encriptado.
 * @throws BadPaddingException Cuando hay problemas con un relleno de datos.
 * @throws IOException Cuando hay problemas con el tratamiento de datos.
 * @throws IllegalBlockSizeException Cuando hay problemas internos con los tamaños de bloque de cifrado. */
private static EncryptedContentInfo getEncryptedContentInfo(final byte[] file, final AOCipherConfig config,
        final AlgorithmParameterSpec params, final Cipher cipher)
        throws IOException, IllegalBlockSizeException, BadPaddingException {

    ASN1Encodable asn1Params;
    if (params != null) {
        final ASN1InputStream aIn = new ASN1InputStream(cipher.getParameters().getEncoded("ASN.1")); //$NON-NLS-1$
        asn1Params = aIn.readObject();
        aIn.close();
    } else {
        asn1Params = DERNull.INSTANCE;
    }

    // obtenemos el OID del algoritmo de cifrado
    final AlgorithmIdentifier encAlgId = new AlgorithmIdentifier(
            new ASN1ObjectIdentifier(config.getAlgorithm().getOid()), asn1Params);

    // Obtenemos el identificador
    final ASN1ObjectIdentifier contentType = PKCSObjectIdentifiers.encryptedData;
    return new EncryptedContentInfo(contentType, encAlgId, new DEROctetString(cipher.doFinal(file)));
}

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

License:Open Source License

/** Obtiene los datos envueltos
 * @param cmsData/*from w w w  .  j av a 2s  . c  o  m*/
 *        Bytes con los datos
 * @return ASN1Sequence
 * @throws IOException Cuando hay problemas de entrada / salida. */
static ASN1Sequence fetchWrappedData(final byte[] cmsData) throws IOException {
    // Leemos el fichero que contiene el envoltorio
    final ASN1InputStream is = new ASN1InputStream(cmsData);

    // Comenzamos a obtener los datos.
    final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
    is.close();
    final Enumeration<?> e = dsq.getObjects();

    // Elementos que contienen los elementos OID EnvelopedData.
    e.nextElement();

    // Contenido de EnvelopedData
    return (ASN1Sequence) ((ASN1TaggedObject) e.nextElement()).getObject();

}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo "data"
 * @param data//from w w  w. j  a va2 s .  c  o  m
 *        Datos CMS.
 * @return si es de este tipo. */
@SuppressWarnings("unused")
static boolean isCMSData(final byte[] data) {
    boolean isValid = true;
    try {
        final ASN1InputStream is = new ASN1InputStream(data);
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID Data
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.data)) {
            isValid = false;
        } else {
            // Contenido de Data
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();

            /*
             * Si no es un objeto de tipo Dara se pasa al manejo de la
             * excepcion
             */
            new DEROctetString(doj.getObject());
        }
    } catch (final Exception ex) {
        isValid = false;
    }

    return isValid;
}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo "Signed data"
 * @param data/*  w  w w  .  java 2s  .co  m*/
 *        Datos CMS.
 * @return si es de este tipo. */
static boolean isCMSSignedData(final byte[] data) {
    boolean isValid = true;
    try {
        final ASN1InputStream is = new ASN1InputStream(data);
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID Data
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.signedData)) {
            isValid = false;
        } else {
            // Contenido de SignedData
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();
            final ASN1Sequence datos = (ASN1Sequence) doj.getObject();
            final SignedData sd = SignedData.getInstance(datos);
            final ASN1Set signerInfosSd = sd.getSignerInfos();

            for (int i = 0; isValid && i < signerInfosSd.size(); i++) {
                final SignerInfo si = SignerInfo.getInstance(signerInfosSd.getObjectAt(i));
                isValid = verifySignerInfo(si);
            }
        }
    } catch (final Exception ex) {
        isValid = false;
    }
    return isValid;
}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo "Digested data"
 * @param data/*from   w w  w. j a v  a  2 s. c  o m*/
 *        Datos CMS.
 * @return si es de este tipo. */
@SuppressWarnings("unused")
static boolean isCMSDigestedData(final byte[] data) {
    boolean isValid = true;
    try {
        final ASN1InputStream is = new ASN1InputStream(data);
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID Data
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.digestedData)) {
            isValid = false;
        } else {
            // Contenido de Data
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();

            /*
             * Estas variables no se usan, solo es para verificar que la
             * conversion ha sido correcta. De no ser asi, se pasaria al
             * manejo de la excepcion.
             */
            new DigestedData((ASN1Sequence) doj.getObject());
        }
    } catch (final Exception ex) {
        isValid = false;
    }

    return isValid;
}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo "Encrypted data"
 * @param data//www  .j  a va  2 s  .c o m
 *        Datos CMS.
 * @return si es de este tipo. */
static boolean isCMSEncryptedData(final byte[] data) {
    boolean isValid = true;
    try {
        final ASN1InputStream is = new ASN1InputStream(data);
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID Data
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.encryptedData)) {
            isValid = false;
        } else {
            // Contenido de Data
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();
            final ASN1Sequence asq = (ASN1Sequence) doj.getObject();

            /*
             * Si no es de tipo EncryptedData se pasa al manejo de la
             * excepcion
             */
            ASN1Integer.getInstance(asq.getObjectAt(0));
            EncryptedContentInfo.getInstance(asq.getObjectAt(1));
        }
    } catch (final Exception ex) {
        isValid = false;
    }

    return isValid;
}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo "Enveloped data"
 * @param data/*ww w  .  j  a va  2  s  .c o  m*/
 *        Datos CMS.
 * @return si es de este tipo. */
static boolean isCMSEnvelopedData(final byte[] data) {
    boolean isValid = true;
    try {
        final ASN1InputStream is = new ASN1InputStream(data);
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID Data
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.envelopedData)) {
            isValid = false;
        } else {
            // Contenido de Data
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();
            /*
             * Si no se construye el objeto correctamente, se pasa al manejo
             * de la excepcion
             */
            EnvelopedData.getInstance(doj.getObject());
        }

    } catch (final Exception ex) {
        isValid = false;
    }

    return isValid;
}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo
 * "Signed and Enveloped data"//from www  .  java2 s.  co m
 * @param data
 *        Datos CMS.
 * @return si es de este tipo. */
static boolean isCMSSignedAndEnvelopedData(final byte[] data) {
    boolean isValid = true;
    try {
        final ASN1InputStream is = new ASN1InputStream(data);
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID Data
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.signedAndEnvelopedData)) {
            isValid = false;
        } else {
            // Contenido de SignedData
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();
            final ASN1Sequence datos = (ASN1Sequence) doj.getObject();
            final SignedAndEnvelopedData sd = new SignedAndEnvelopedData(datos);
            final ASN1Set signerInfosSd = sd.getSignerInfos();

            for (int i = 0; i < signerInfosSd.size() && isValid; i++) {
                final SignerInfo si = SignerInfo.getInstance(signerInfosSd.getObjectAt(i));
                isValid = verifySignerInfo(si);
            }
        }

    } catch (final Exception ex) {
        isValid = false;
    }
    return isValid;
}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo "AuthenticatedData"
 * @param data/*w w  w .j a v  a  2  s  .c  o m*/
 *        Datos CMS.
 * @return si es de este tipo. */
static boolean isCMSAuthenticatedData(final byte[] data) {
    boolean isValid = true;

    try {
        // Leemos el fichero que contiene la firma.
        final ASN1InputStream is = new ASN1InputStream(data);
        // Comenzamos a obtener los datos.
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID AuthenticatedData.
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.id_ct_authData)) {
            isValid = false;
        } else {
            // Contenido de AuthenticatedData
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();
            final ASN1Sequence authenticatedData = (ASN1Sequence) doj.getObject();
            AuthenticatedData.getInstance(authenticatedData);
        }
    } catch (final Exception ex) {
        isValid = false;
    }
    return isValid;
}

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

License:Open Source License

/** M&eacute;todo que verifica que es una firma de tipo
 * "AuthenticatedEnvelopedData"//w  ww . j  a  v a2s. c  o  m
 * @param data
 *        Datos CMS.
 * @return si es de este tipo. */
static boolean isCMSAuthenticatedEnvelopedData(final byte[] data) {
    boolean isValid = true;

    try {
        // Leemos el fichero que contiene la firma.
        final ASN1InputStream is = new ASN1InputStream(data);
        // Comenzamos a obtener los datos.
        final ASN1Sequence dsq = (ASN1Sequence) is.readObject();
        is.close();
        final Enumeration<?> e = dsq.getObjects();
        // Elementos que contienen los elementos OID
        // AuthenticatedEnvelopedData.
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(PKCSObjectIdentifiers.id_ct_authEnvelopedData)) {
            isValid = false;
        } else {
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();
            final ASN1Sequence authenticatedEnvelopedData = (ASN1Sequence) doj.getObject();
            AuthEnvelopedData.getInstance(authenticatedEnvelopedData);
        }

    } catch (final Exception ex) {
        isValid = false;
    }
    return isValid;
}