List of usage examples for org.bouncycastle.asn1 DEROctetString DEROctetString
public DEROctetString(ASN1Encodable obj) throws IOException
From source file:es.gob.afirma.signers.cms.CoSigner.java
License:Open Source License
/** Método que genera la parte que contiene la información del * Usuario. Se generan los atributos que se necesitan para generar la firma. * En este caso se introduce el hash directamente. * @param cert Certificado necesario para la firma. * @param datos Datos firmados./*from w ww .j a v a 2s .co m*/ * @param dataType Identifica el tipo del contenido a firmar. * @param atrib Lista de atributos firmados que se insertarán dentro * del archivo de firma. * @return Atributos firmados de la firma. */ private ASN1Set generateSignerInfoFromHash(final X509Certificate cert, final byte[] datos, final String dataType, final Map<String, byte[]> atrib) { // // ATRIBUTOS // authenticatedAttributes final ASN1EncodableVector contexExpecific = new ASN1EncodableVector(); // tipo de contenido contexExpecific .add(new Attribute(CMSAttributes.contentType, new DERSet(new ASN1ObjectIdentifier(dataType)))); // fecha de firma contexExpecific.add(new Attribute(CMSAttributes.signingTime, new DERSet(new ASN1UTCTime(new Date())))); // MessageDigest contexExpecific.add(new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(datos)))); // Serial Number contexExpecific.add(new Attribute(RFC4519Style.serialNumber, new DERSet(new DERPrintableString(cert.getSerialNumber().toString())))); // agregamos la lista de atributos a mayores. if (atrib.size() != 0) { final Iterator<Map.Entry<String, byte[]>> it = atrib.entrySet().iterator(); while (it.hasNext()) { final Map.Entry<String, byte[]> e = it.next(); contexExpecific.add(new Attribute( // el oid new ASN1ObjectIdentifier(e.getKey().toString()), // el array de bytes en formato string new DERSet(new DERPrintableString(new String(e.getValue()))))); } } this.signedAttr2 = SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); return SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); }
From source file:es.gob.afirma.signers.cms.CoSigner.java
License:Open Source License
/** Realiza la firma usando los atributos del firmante. * @param signatureAlgorithm Algoritmo para la firma. * @param key Clave para firmar.//from w w w . j a v a2 s .c o m * @return Firma de los atributos. * @throws AOException Cuando ocurre cualquier problema durante el proceso */ private ASN1OctetString firma(final String signatureAlgorithm, final PrivateKey key) throws AOException { final Signature sig; try { sig = Signature.getInstance(signatureAlgorithm); } catch (final Exception e) { throw new AOException("Error obteniendo la clase de firma para el algoritmo " + signatureAlgorithm, e); //$NON-NLS-1$ } final byte[] tmp; try { tmp = this.signedAttr2.getEncoded(ASN1Encoding.DER); } catch (final IOException ex) { throw new AOException("Error obteniendo los atributos firmados", ex); //$NON-NLS-1$ } // Indicar clave privada para la firma try { sig.initSign(key); } catch (final Exception e) { throw new AOException("Error al inicializar la firma con la clave privada", e); //$NON-NLS-1$ } // Actualizamos la configuracion de firma try { sig.update(tmp); } catch (final SignatureException e) { throw new AOException("Error al configurar la informacion de firma", e); //$NON-NLS-1$ } // firmamos. final byte[] realSig; try { realSig = sig.sign(); } catch (final Exception e) { throw new AOException("Error durante el proceso de firma", e); //$NON-NLS-1$ } return new DEROctetString(realSig); }
From source file:es.gob.afirma.signers.cms.CounterSigner.java
License:Open Source License
/** Genera la parte que contiene la información del * Usuario. Se generan los atributos que se necesitan para generar la * firma./*from w w w .j av a 2 s .c o m*/ * @param cert Certificado necesario para la firma. * @param digestAlgorithm Algoritmo Firmado. * @param datos Datos firmados. * @return Los datos necesarios para generar la firma referente a los datos * del usuario. * @throws java.security.NoSuchAlgorithmException Cuando el JRE no soporta algún algoritmo necesario. */ private ASN1Set generateSignerInfo(final X509Certificate cert, final String digestAlgorithm, final byte[] datos) throws NoSuchAlgorithmException { // // ATRIBUTOS // authenticatedAttributes final ASN1EncodableVector contexExpecific = new ASN1EncodableVector(); // Las Contrafirmas CMS no tienen ContentType // fecha de firma contexExpecific.add(new Attribute(CMSAttributes.signingTime, new DERSet(new ASN1UTCTime(new Date())))); // MessageDigest contexExpecific.add(new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(MessageDigest .getInstance(AOSignConstants.getDigestAlgorithmName(digestAlgorithm)).digest(datos))))); // Serial Number contexExpecific.add(new Attribute(RFC4519Style.serialNumber, new DERSet(new DERPrintableString(cert.getSerialNumber().toString())))); // agregamos la lista de atributos a mayores. if (this.atrib2.size() != 0) { final Iterator<Map.Entry<String, byte[]>> it = this.atrib2.entrySet().iterator(); while (it.hasNext()) { final Map.Entry<String, byte[]> e = it.next(); contexExpecific.add(new Attribute(new ASN1ObjectIdentifier(e.getKey().toString()), // el oid new DERSet(new DERPrintableString(new String(e.getValue()))))); // el array de bytes en formato string } } this.signedAttr2 = SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); return SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); }
From source file:es.gob.afirma.signers.cms.CounterSigner.java
License:Open Source License
/** Realiza la firma usando los atributos del firmante. * @param signatureAlgorithm Algoritmo para la firma. * @param key Clave para firmar.//from w w w.j a v a 2 s .c o m * @return Firma de los atributos. * @throws AOException EN caso de cualquier error durante el proceso */ private ASN1OctetString firma(final String signatureAlgorithm, final PrivateKey key) throws AOException { final Signature sig; try { sig = Signature.getInstance(signatureAlgorithm); } catch (final Exception e) { throw new AOException("Error obteniendo la clase de firma para el algoritmo " + signatureAlgorithm, e); //$NON-NLS-1$ } final byte[] tmp; try { tmp = this.signedAttr2.getEncoded(ASN1Encoding.DER); } catch (final IOException ex) { throw new AOException("Error obteniendo los datos a firmar", ex); //$NON-NLS-1$ } // Indicar clave privada para la firma try { sig.initSign(key); } catch (final Exception e) { throw new AOException("Error al inicializar la firma con la clave privada", e); //$NON-NLS-1$ } // Actualizamos la configuracion de firma try { sig.update(tmp); } catch (final SignatureException e) { throw new AOException("Error al configurar la informacion de firma", e); //$NON-NLS-1$ } // firmamos. final byte[] realSig; try { realSig = sig.sign(); } catch (final Exception e) { throw new AOException("Error durante el proceso de firma", e); //$NON-NLS-1$ } return new DEROctetString(realSig); }
From source file:es.gob.afirma.signers.cms.GenSignedData.java
License:Open Source License
/** Genera los atributos firmados. * @param digestAlgorithm Algoritmo Firmado. * @param datos Datos firmados./*from ww w . j a v a 2s.com*/ * @param dataType Identifica el tipo del contenido a firmar. * @param timestamp Introducir el momento de la firma como atributo firmado (no confundir con un sello de tiempo reconocido) * @param atrib Lista de atributos firmados que se insertarán dentro * del archivo de firma. * @param messageDigest Huella digital. * @return Los atributos firmados de la firma. * @throws java.security.NoSuchAlgorithmException Cuando el JRE no soporta algún algoritmo necesario. */ private ASN1Set generateSignedInfo(final String digestAlgorithm, final byte[] datos, final String dataType, final boolean timestamp, final Map<String, byte[]> atrib, final byte[] messageDigest) throws NoSuchAlgorithmException { // // ATRIBUTOS // authenticatedAttributes final ASN1EncodableVector contexExpecific = new ASN1EncodableVector(); // tipo de contenido contexExpecific .add(new Attribute(CMSAttributes.contentType, new DERSet(new ASN1ObjectIdentifier(dataType)))); // fecha de firma if (timestamp) { contexExpecific.add(new Attribute(CMSAttributes.signingTime, new DERSet(new ASN1UTCTime(new Date())))); } // Si nos viene el hash de fuera no lo calculamos final byte[] md; if (messageDigest == null || messageDigest.length < 1) { md = MessageDigest.getInstance(AOSignConstants.getDigestAlgorithmName(digestAlgorithm)).digest(datos); } else { md = messageDigest; } // MessageDigest contexExpecific.add(new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(md.clone())))); // agregamos la lista de atributos a mayores. if (atrib.size() != 0) { final Iterator<Map.Entry<String, byte[]>> it = atrib.entrySet().iterator(); while (it.hasNext()) { final Map.Entry<String, byte[]> e = it.next(); contexExpecific.add(new Attribute(new ASN1ObjectIdentifier(e.getKey()), // el oid new DERSet(new DERPrintableString(new String(e.getValue()))) // el array de bytes en formato string )); } } this.signedAttr2 = SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); return SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); }
From source file:es.gob.afirma.signers.cms.GenSignedData.java
License:Open Source License
/** Realiza la firma usando los atributos del firmante. * @param signatureAlgorithm Algoritmo para la firma. * @param key Clave para firmar.// w w w. j a va 2 s .c om * @return Firma de los atributos. * @throws AOException Si ocurre cualquier problema durante el proceso */ private ASN1OctetString firma(final String signatureAlgorithm, final PrivateKey key) throws AOException { final Signature sig; try { sig = Signature.getInstance(signatureAlgorithm); } catch (final Exception e) { throw new AOException("Error obteniendo la clase de firma para el algoritmo " + signatureAlgorithm, e); //$NON-NLS-1$ } // Indicar clave privada para la firma try { sig.initSign(key); } catch (final Exception e) { throw new AOException("Error al inicializar la firma con la clave privada", e); //$NON-NLS-1$ } // Actualizamos la configuracion de firma try { sig.update(this.signedAttr2.getEncoded(ASN1Encoding.DER)); } catch (final Exception e) { throw new AOException("Error al configurar la informacion de firma o al obtener los atributos a firmar", //$NON-NLS-1$ e); } // firmamos. final byte[] realSig; try { realSig = sig.sign(); } catch (final Exception e) { throw new AOException("Error durante el proceso de firma", e); //$NON-NLS-1$ } return new DEROctetString(realSig); }
From source file:es.gob.afirma.signers.multi.cades.CAdESCoSigner.java
License:Open Source License
/** Realiza la firma usando los atributos del firmante. * @param signatureAlgorithm/*from w w w. ja v a 2s . c om*/ * Algoritmo para la firma * @param key Clave para firmar. * @param certChain Cadena de certificados del firmante. * @return Firma de los atributos. * @throws AOException Cuando ocurre cualquier tipo de error */ private ASN1OctetString firma(final String signatureAlgorithm, final PrivateKey key, final java.security.cert.Certificate[] certChain) throws AOException { final byte[] tmp; try { tmp = this.signedAttr2.getEncoded(ASN1Encoding.DER); } catch (final IOException ex) { throw new AOException("Error al obtener los datos a firmar", ex); //$NON-NLS-1$ } return new DEROctetString(new AOPkcs1Signer().sign(tmp, signatureAlgorithm, key, certChain, null)); }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSigner.java
License:Open Source License
/** Genera un signerInfo específico utilizando los * datos necesarios para crearlo. Se utiliza siempre que no se sabe cual es * el signerInfo que se debe firmar./* w w w. j a v a 2s .co m*/ * @param signatureAlgorithm Algoritmo de firma a usar. * @param si SignerInfo del que se debe recoger la información para * realizar la contrafirma específica. * @param key Clave privada a usar para firmar. * @param certChain Cadena de certificados del firmante. * @param contentDescription Descripción textual del tipo de contenido firmado. * @param policy Política de firma. * @param signingCertificateV2 <code>true</code> si se desea usar <i>SigningCertificateV2</i>, <code>false</code> * para usar <i>SigningCertificateV1</i>. * @param ctis Indicaciones sobre los tipos de compromisos adquiridos con la firma. * @param csm Metadatos sobre el firmante. * @return <i>SignerInfo</i> contrafirmado. * @throws NoSuchAlgorithmException Si no se soporta alguno de los algoritmos necesarios. * @throws java.io.IOException Cuando hay errores de entrada / salida * @throws CertificateException Cuando hay problemas con los certificados proporcionados. */ private SignerInfo generateSignerInfo(final String signatureAlgorithm, final SignerInfo si, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final AdESPolicy policy, final boolean signingCertificateV2, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException { // buscamos que timo de algoritmo es y lo codificamos con su OID final String digestAlgorithm = AOSignConstants.getDigestAlgorithmName(signatureAlgorithm); // authenticatedAttributes final ASN1EncodableVector contextExcepcific = CAdESUtils.generateSignerInfo(certChain[0], digestAlgorithm, si.getEncryptedDigest().getOctets(), policy, signingCertificateV2, null, this.date != null ? this.date : new Date(), // Usamos fecha y hora actual nueva si no se nos ha indicado otra distinta false, null, // En contrafirma el ContentType no se pone contentDescription, ctis, csm); final ASN1Set signedAttr = SigUtils.getAttributeSet(new AttributeTable(contextExcepcific)); final ASN1OctetString sign2; try { sign2 = new DEROctetString( pkcs1Sign(signedAttr.getEncoded(ASN1Encoding.DER), signatureAlgorithm, key, certChain)); } catch (final AOException ex) { throw new IOException("Error al realizar la firma: " + ex, ex); //$NON-NLS-1$ } // AlgorithmIdentifier final AlgorithmIdentifier digAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID(digestAlgorithm)); // digEncryptionAlgorithm final AlgorithmIdentifier encAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID("RSA")); //$NON-NLS-1$ // 5. SIGNERINFO // raiz de la secuencia de SignerInfo final TBSCertificateStructure tbs = TBSCertificateStructure .getInstance(ASN1Primitive.fromByteArray(((X509Certificate) certChain[0]).getTBSCertificate())); final IssuerAndSerialNumber encSid = new IssuerAndSerialNumber(X500Name.getInstance(tbs.getIssuer()), tbs.getSerialNumber().getValue()); final SignerIdentifier identifier = new SignerIdentifier(encSid); // UNAUTHENTICATEDATTRIBUTES final ASN1Set unsignedAttr = SigUtils.getAttributeSet(new AttributeTable(contextExcepcific)); return new SignerInfo(identifier, digAlgId, unsignedAttr, encAlgId, sign2, null); }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Realiza la firma usando los atributos del firmante. * @param signatureAlgorithm Algoritmo para la firma * @param key Clave para firmar.//from w w w . j a v a 2 s . c o m * @param certChain Cadena de certificados del firmante. * @return Firma de los atributos. * @throws AOException En caso de cualquier otro tipo de error */ private ASN1OctetString firma(final String signatureAlgorithm, final PrivateKey key, final java.security.cert.Certificate[] certChain) throws AOException { final byte[] tmp; try { tmp = this.signedAttr2.getEncoded(ASN1Encoding.DER); } catch (final Exception ex) { throw new AOException("Error obteniendo los atributos firmados: " + ex); //$NON-NLS-1$ } return new DEROctetString(new AOPkcs1Signer().sign(tmp, signatureAlgorithm, key, certChain, null)); }
From source file:es.gob.afirma.signers.multi.cades.CAdESTriPhaseCoSigner.java
License:Open Source License
/** Realiza una post-cofirma CAdES. * @param pkcs1sign Firma PKCS#1 de la pre-cofirma (de los SignedAttributes) * @param preCoSign Pre-cofirma CAdES (SignedAttributes) * @param content Contenido a post-cofirmar (indicar null si se desea omitir su inclusión en la firma) * @param signatureAlgorithm Algoritmo de firma * @param signerCertificateChain Cadena de certificados del firmante * @param sign Firma donde insertar la cofirma * @return Cofirma CAdES/*from ww w . j a v a 2 s .com*/ * @throws IOException Cuando ocurren problemas de entrada / salida * @throws CertificateEncodingException Si alguno de los certificados proporcionados tienen problemas de formatos */ public static byte[] postCoSign(final byte[] pkcs1sign, final byte[] preCoSign, final byte[] content, final String signatureAlgorithm, final X509Certificate[] signerCertificateChain, final byte[] sign) throws IOException, CertificateEncodingException { // Firma en ASN.1 final ASN1OctetString asn1sign = new DEROctetString(pkcs1sign); // Identificador del firmante ISSUER AND SERIAL-NUMBER final TBSCertificateStructure tbs = TBSCertificateStructure .getInstance(ASN1Primitive.fromByteArray(signerCertificateChain[0].getTBSCertificate())); final IssuerAndSerialNumber encSid = new IssuerAndSerialNumber(X500Name.getInstance(tbs.getIssuer()), tbs.getSerialNumber().getValue()); final SignerIdentifier identifier = new SignerIdentifier(encSid); // digEncryptionAlgorithm final AlgorithmIdentifier encAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID("RSA")); //$NON-NLS-1$ final AlgorithmIdentifier digAlgId = SigUtils .makeAlgId(AOAlgorithmID.getOID(AOSignConstants.getDigestAlgorithmName(signatureAlgorithm))); final ASN1Sequence contentSignedData = getContentSignedData(sign); final SignedData sd = SignedData.getInstance(contentSignedData); // CERTIFICADOS // Obtenemos la lista de certificados final ASN1Set certificatesSigned = sd.getCertificates(); final Enumeration<?> certs = certificatesSigned.getObjects(); final ASN1EncodableVector vCertsSig = new ASN1EncodableVector(); // COGEMOS LOS CERTIFICADOS EXISTENTES EN EL FICHERO while (certs.hasMoreElements()) { vCertsSig.add((ASN1Encodable) certs.nextElement()); } ASN1Set certificates = null; if (signerCertificateChain.length != 0) { final List<ASN1Encodable> ce = new ArrayList<ASN1Encodable>(); for (final X509Certificate element : signerCertificateChain) { ce.add(Certificate.getInstance(ASN1Primitive.fromByteArray(element.getEncoded()))); } certificates = SigUtils.fillRestCerts(ce, vCertsSig); } // SIGNERINFO // raiz de la secuencia de SignerInfo // Obtenemos los signerInfos del SignedData final ASN1Set signerInfosSd = sd.getSignerInfos(); // introducimos los SignerInfos Existentes final ASN1EncodableVector signerInfos = new ASN1EncodableVector(); // introducimos el nuevo SignerInfo del firmante actual. for (int i = 0; i < signerInfosSd.size(); i++) { signerInfos.add(SignerInfo.getInstance(signerInfosSd.getObjectAt(i))); } // Creamos los signerInfos del SignedData signerInfos .add(new SignerInfo(identifier, digAlgId, ASN1Set.getInstance(preCoSign), encAlgId, asn1sign, null // unsignedAttr )); final ContentInfo encInfo = getContentInfoFromContent(content); // Construimos el Signed Data y lo devolvemos return new ContentInfo(PKCSObjectIdentifiers.signedData, new SignedData(sd.getDigestAlgorithms(), encInfo, certificates, (ASN1Set) null, // CRLS no usado new DERSet(signerInfos) // UnsignedAttr )).getEncoded(ASN1Encoding.DER); }