Example usage for org.bouncycastle.asn1 ASN1InputStream readObject

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

Introduction

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

Prototype

public ASN1Primitive readObject() throws IOException 

Source Link

Usage

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

License:Open Source License

/** Método que verifica que es una firma de tipo "Encrypted data"
 * @param data/*from   w w w  .j a  va  2s  .c om*/
 *        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 .  ja v  a 2s .co 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"/*ww w  .ja v a 2  s.  c om*/
 * @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  2s . 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"//from   w  ww.ja v  a2  s . 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;
}

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 "CompressedData"
 * @param data//from  w  w w  . j  a v a2s  . c  o m
 *        Datos CMS.
 * @return si es de este tipo. */
static boolean isCMSCompressedData(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 CompressedData.
        final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
        if (!doi.equals(CMSObjectIdentifiers.compressedData)) {
            isValid = false;
        } else {
            // Contenido de CompressedData
            final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();
            final ASN1Sequence compressedData = (ASN1Sequence) doj.getObject();
            CompressedData.getInstance(compressedData);
        }
    } catch (final Exception ex) {
        isValid = false;
    }
    return isValid;
}

From source file:es.gob.afirma.signers.cades.CAdESValidator.java

License:Open Source License

/** Verifica si los datos proporcionados se corresponden con una estructura de tipo <i>Data</i>.
 * @param data Datos PKCS#7/CMS/CAdES.// www.  j av a 2s .  co  m
 * @return <code>true</code> si los datos proporcionados se corresponden con una estructura de tipo <i>Data</i>,
 * <code>false</code> en caso contrario.
 * @throws IOException En caso de problemas leyendo el fichero */
@SuppressWarnings("unused")
static boolean isCAdESData(final byte[] data) throws IOException {

    // LEEMOS EL FICHERO QUE NOS INTRODUCEN
    final ASN1InputStream is = new ASN1InputStream(data);
    final Enumeration<?> e;
    try {
        e = ((ASN1Sequence) is.readObject()).getObjects();
    } catch (final ClassCastException ex) {
        // No es una secuencia
        return false;
    } finally {
        is.close();
    }

    // Elementos que contienen los elementos OID Data
    final ASN1ObjectIdentifier doi = (ASN1ObjectIdentifier) e.nextElement();
    if (!doi.equals(PKCSObjectIdentifiers.data)) {
        return false;
    }

    // Contenido de Data
    final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();

    try {
        /* Los valores de retorno 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 DEROctetString(doj.getObject());

    } catch (final Exception ex) {
        LOGGER.info("Los datos proporcionados no son de tipo Data: " + ex); //$NON-NLS-1$
        return false;
    }

    return true;
}

From source file:es.gob.afirma.signers.cades.CAdESValidator.java

License:Open Source License

/** Verifica si los datos proporcionados se corresponden con una estructura de tipo <i>SignedData</i>.
 * @param data Datos PKCS#7/CMS/CAdES.//w ww.  j  a va  2s .  c  o  m
 * @param enforceCAdES Si se establece a <code>true</code> se comprueba que los SignerInfos sean expl&iacute;citamente
 *                     de tipo CAdES, si se establece a <code>false</code> no se comprueba, por lo que se aceptan
 *                     <code>SignedData</code> de CMS y PKCS#7.
 * @return <code>true</code> si los datos proporcionados se corresponden con una estructura de tipo <i>SignedData</i>,
 * <code>false</code> en caso contrario.
 * @throws IOException Si ocurren problemas leyendo los datos */
public static boolean isCAdESSignedData(final byte[] data, final boolean enforceCAdES) throws IOException {
    try {
        final ASN1InputStream is = new ASN1InputStream(data);
        // LEEMOS EL FICHERO QUE NOS INTRODUCEN
        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)) {
            LOGGER.info(
                    "Los datos proporcionados no son de tipo SignedData de CAdES (no esta declarado el OID de SignedData)" //$NON-NLS-1$
            );
            return false;
        }

        // 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();

        if (enforceCAdES) {
            for (int i = 0; i < signerInfosSd.size(); i++) {
                if (!verifySignerInfo(SignerInfo.getInstance(signerInfosSd.getObjectAt(i)))) {
                    LOGGER.info(
                            "Los datos proporcionados no son de tipo SignedData de CAdES (al menos un SignerInfo no se ha declarado de tipo CAdES)" //$NON-NLS-1$
                    );
                    return false;
                }
            }
        }

    } catch (final Exception ex) {
        LOGGER.info("Los datos proporcionados no son de tipo SignedData de CAdES: " + ex); //$NON-NLS-1$
        return false;
    }

    return true;
}

From source file:es.gob.afirma.signers.cades.CAdESValidator.java

License:Open Source License

/** Verifica si los datos proporcionados se corresponden con una estructura de tipo <i>DigestedData</i>.
 * @param data Datos PKCS#7/CMS/CAdES./*from  w  ww.  ja v  a 2 s . c  om*/
 * @return <code>true</code> si los datos proporcionados se corresponden con una estructura de tipo <i>DigestedData</i>,
 * <code>false</code> en caso contrario.
 * @throws IOException Si ocurren problemas relacionados con la lectura de los datos */
@SuppressWarnings("unused")
static boolean isCAdESDigestedData(final byte[] data) throws IOException {
    boolean isValid = false;

    // LEEMOS EL FICHERO QUE NOS INTRODUCEN
    final ASN1InputStream is = new ASN1InputStream(data);
    final ASN1Sequence dsq;
    try {
        dsq = (ASN1Sequence) is.readObject();
    } catch (final Exception e) {
        // No es una secuencia valida
        return false;
    } finally {
        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 = true;
    }
    // Contenido de Data
    final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();

    try {
        /* Los resultados 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) {
        LOGGER.info("Los datos proporcionados no son de tipo DigestedData: " + ex); //$NON-NLS-1$
        return false;
    }

    return isValid;
}

From source file:es.gob.afirma.signers.cades.CAdESValidator.java

License:Open Source License

/** Verifica si los datos proporcionados se corresponden con una estructura de tipo <i>EncryptedData</i>.
 * @param data Datos PKCS#7/CMS/CAdES./*from w  w w .  j  ava2 s.  c om*/
 * @return <code>true</code> si los datos proporcionados se corresponden con una estructura de tipo <i>EncryptedData</i>,
 * <code>false</code> en caso contrario.
 * @throws IOException Si ocurren problemas relacionados con la lectura de los datos */
static boolean isCAdESEncryptedData(final byte[] data) throws IOException {
    boolean isValid = false;

    // LEEMOS EL FICHERO QUE NOS INTRODUCEN
    final ASN1InputStream is = new ASN1InputStream(data);
    final ASN1Sequence dsq;
    try {
        dsq = (ASN1Sequence) is.readObject();
    } catch (final Exception e) {
        // No es una secuencia valida
        return false;
    } finally {
        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 = true;
    }
    // Contenido de Data
    final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();

    final ASN1Sequence asq = (ASN1Sequence) doj.getObject();

    try {

        /* Los resultados de las llamadas no se usan, solo es para verificar que la
         * conversion ha sido correcta. De no ser asi, se pasaria al manejo
         * de la excepcion. */

        ASN1Integer.getInstance(asq.getObjectAt(0));
        EncryptedContentInfo.getInstance(asq.getObjectAt(1));

        if (asq.size() == 3) {
            asq.getObjectAt(2);
        }

    } catch (final Exception ex) {
        LOGGER.info("Los datos proporcionados no son de tipo EncryptedData: " + ex); //$NON-NLS-1$
        return false;
    }

    return isValid;
}