List of usage examples for org.bouncycastle.asn1 ASN1InputStream readObject
public ASN1Primitive readObject() throws IOException
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é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é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é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é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é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í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; }