List of usage examples for org.bouncycastle.asn1.cms OriginatorInfo OriginatorInfo
public OriginatorInfo(ASN1Set certs, ASN1Set crls)
From source file:es.gob.afirma.envelopers.cades.CAdESEnvelopedData.java
License:Open Source License
/** Método que genera la firma de tipo EnvelopedData. * @param parameters//from www . java 2 s . c om * Parámetros necesarios para la generación de este * tipo. * @param config * Configuración del algoritmo para firmar * @param certDest * Certificado del destino al cual va dirigido la firma. * @param dataType * Identifica el tipo del contenido a firmar. * @return la firma de tipo EnvelopedData. * @throws java.io.IOException * Si ocurre algún problema leyendo o escribiendo los * datos * @throws java.security.cert.CertificateEncodingException * Si se produce alguna excepción con los certificados de * firma. * @throws java.security.NoSuchAlgorithmException * Si no se soporta alguno de los algoritmos de firma o huella * digital */ byte[] genEnvelopedData(final P7ContentSignerParameters parameters, final X509Certificate[] signerCertificateChain, final AOCipherConfig config, final X509Certificate[] certDest, final String dataType) throws IOException, CertificateEncodingException, NoSuchAlgorithmException { this.cipherKey = CAdESUtils.initEnvelopedData(config, certDest); // Datos previos útiles final String digestAlgorithm = AOSignConstants.getDigestAlgorithmName(parameters.getSignatureAlgorithm()); // 1. ORIGINATORINFO // obtenemos la lista de certificados final ASN1Set certificates = CAdESUtils.fetchCertificatesList(signerCertificateChain); final ASN1Set certrevlist = null; OriginatorInfo origInfo = null; if (signerCertificateChain.length != 0) { origInfo = new OriginatorInfo(certificates, certrevlist); } // 2. RECIPIENTINFOS final Info infos = CAdESUtils.getEnvelopeInfo(parameters.getContent(), config, certDest, this.cipherKey); // 3. ATRIBUTOS final ASN1Set unprotectedAttrs = SigUtils.getAttributeSet(new AttributeTable( CAdESUtils.initContexExpecific(digestAlgorithm, parameters.getContent(), dataType, null))); // construimos el Enveloped Data y lo devolvemos return new ContentInfo(PKCSObjectIdentifiers.envelopedData, new EnvelopedData(origInfo, new DERSet(infos.getRecipientInfos()), infos.getEncInfo(), unprotectedAttrs)) .getEncoded(ASN1Encoding.DER); }
From source file:es.gob.afirma.envelopers.cms.CMSAuthenticatedData.java
License:Open Source License
/** Genera una estructura PKCS#7 <code>AuthenticatedData</code>. * @param parameters Parámetros necesarios que contienen tanto la firma del * archivo a firmar como los datos del firmante. * @param signerCertChain Cadena de certificados del firmante. * @param autenticationAlgorithm Algoritmo para los codigos de autenticación MAC * @param config Configuración del algoritmo para firmar * @param certDest Certificado del destino al cual va dirigido la firma. * @param dataType Identifica el tipo del contenido a firmar. * @param applyTimestamp Si se aplica el Timestamp o no. * @param atrib Atributos firmados opcionales. * @param uatrib Atributos no autenticados firmados opcionales. * @param keySize Tamaño de la clave AES. * @return Firma de tipo AuthenticatedData. * @throws IOException Si ocurre algún problema leyendo o escribiendo los * datos/*from ww w .j ava 2s . c o m*/ * @throws CertificateEncodingException Si se produce alguna excepción con los certificados de * firma. * @throws NoSuchAlgorithmException Si no se encuentra un algoritmo válido. * @throws InvalidKeyException Cuando hay problemas de adecuación de la clave. * @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. */ static byte[] genAuthenticatedData(final P7ContentSignerParameters parameters, final X509Certificate[] signerCertChain, final String autenticationAlgorithm, final AOCipherConfig config, final X509Certificate[] certDest, final String dataType, final boolean applyTimestamp, final Map<String, byte[]> atrib, final Map<String, byte[]> uatrib, final Integer keySize) throws IOException, CertificateEncodingException, NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { final SecretKey cipherKey = Utils.initEnvelopedData(config, keySize); // Ya que el contenido puede ser grande, lo recuperamos solo una vez final byte[] content2 = parameters.getContent(); // 1. ORIGINATORINFO // obtenemos la lista de certificados final ASN1Set certificates = Utils.fetchCertificatesList(signerCertChain); ASN1Set certrevlist = null; OriginatorInfo origInfo = null; if (signerCertChain.length != 0) { // introducimos una lista vacia en los CRL ya que no podemos // modificar el codigo de bc. final List<ASN1Encodable> crl = new ArrayList<ASN1Encodable>(); certrevlist = SigUtils.createBerSetFromList(crl); origInfo = new OriginatorInfo(certificates, certrevlist); } // 2. RECIPIENTINFOS final Info infos = Utils.initVariables(content2, config, certDest, cipherKey); // 3. MACALGORITHM final AlgorithmIdentifier macAlgorithm = SigUtils.makeAlgId(config.getAlgorithm().getOid()); // 4. DIGESTALGORITMIDENTIFIER final String digestAlgorithm = AOSignConstants.getDigestAlgorithmName(parameters.getSignatureAlgorithm()); final AlgorithmIdentifier digAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID(digestAlgorithm)); // 5. ENCAPSULATEDCONTENTINFO // si se introduce el contenido o no ContentInfo encInfo = null; final ASN1ObjectIdentifier contentTypeOID = new ASN1ObjectIdentifier(dataType); final ByteArrayOutputStream bOut = new ByteArrayOutputStream(); final CMSProcessable msg = new CMSProcessableByteArray(content2); try { msg.write(bOut); } catch (final CMSException ex) { throw new IOException("Error en la escritura del procesable CMS: " + ex, ex); //$NON-NLS-1$ } encInfo = new ContentInfo(contentTypeOID, new BEROctetString(bOut.toByteArray())); // 6. ATRIBUTOS FIRMADOS ASN1Set authAttr = null; authAttr = generateSignedAtt(signerCertChain[0], digestAlgorithm, content2, dataType, applyTimestamp, atrib); // 7. MAC final byte[] mac = Utils.genMac(autenticationAlgorithm, authAttr.getEncoded(ASN1Encoding.DER), cipherKey); // 8. ATRIBUTOS NO FIRMADOS. ASN1Set unAuthAttr = null; unAuthAttr = Utils.generateUnsignedAtt(uatrib); // construimos el Authenticated data y lo devolvemos return new ContentInfo(PKCSObjectIdentifiers.id_ct_authData, new AuthenticatedData(origInfo, // OriginatorInfo new DERSet(infos.getRecipientInfos()), // ASN1Set macAlgorithm, // macAlgorithm digAlgId, // AlgorithmIdentifier encInfo, // ContentInfo authAttr, // ASN1Set new DEROctetString(mac), // ASN1OctetString unAuthAttr // ASN1Set )).getEncoded(ASN1Encoding.DER); }
From source file:es.gob.afirma.envelopers.cms.CMSAuthenticatedEnvelopedData.java
License:Open Source License
/** Genera una estructura PKCS#7 <code>AuthenticatedEnvelopedData</code>. * @param parameters Parámetros necesarios que contienen tanto la firma del * archivo a firmar como los datos del firmante. * @param signerCertificateChain Cadena de certificados del firmante. * @param autenticationAlgorithm Algoritmo de autenticacion * @param config Configuración del algoritmo para firmar * @param certDest Certificado del destino al cual va dirigido la firma. * @param dataType Identifica el tipo del contenido a firmar. * @param applySigningTime Si se aplica la hora de firma o no. * @param atrib Atributos firmados opcionales. * @param uatrib Atributos no autenticados firmados opcionales. * @param keySize Tamaño de la clave AES. * @return Firma de tipo AuthenticatedData. * @throws IOException Si ocurre algún problema leyendo o escribiendo los * datos//from w ww . j a va2s. com * @throws CertificateEncodingException Si se produce alguna excepción con los certificados de * firma. * @throws NoSuchAlgorithmException Si no se encuentra un algoritmo válido. * @throws InvalidKeyException Cuando hay problemas de adecuación de la clave. * @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. */ static byte[] genAuthenticatedEnvelopedData(final P7ContentSignerParameters parameters, final X509Certificate[] signerCertificateChain, final String autenticationAlgorithm, final AOCipherConfig config, final X509Certificate[] certDest, final String dataType, final boolean applySigningTime, final Map<String, byte[]> atrib, final Map<String, byte[]> uatrib, final Integer keySize) throws IOException, CertificateEncodingException, NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { final SecretKey cipherKey = Utils.initEnvelopedData(config, keySize); // Ya que el contenido puede ser grande, lo recuperamos solo una vez final byte[] content2 = parameters.getContent(); // 1. ORIGINATORINFO // obtenemos la lista de certificados final ASN1Set certificates = Utils.fetchCertificatesList(signerCertificateChain); ASN1Set certrevlist = null; OriginatorInfo origInfo = null; if (signerCertificateChain.length != 0) { // introducimos una lista vacia en los CRL ya que no podemos // modificar el codigo de bc. certrevlist = SigUtils.createBerSetFromList(new ArrayList<ASN1Encodable>()); origInfo = new OriginatorInfo(certificates, certrevlist); } // 2. RECIPIENTINFOS final Info infos = Utils.initVariables(content2, config, certDest, cipherKey); // 4. ATRIBUTOS FIRMADOS final ASN1Set authAttr = generateSignedAtt(dataType, applySigningTime, atrib); // 5. MAC final byte[] mac = Utils.genMac(autenticationAlgorithm, genPack(authAttr.getEncoded(ASN1Encoding.DER), content2), cipherKey); // 6. ATRIBUTOS NO FIRMADOS. final ASN1Set unAuthAttr = Utils.generateUnsignedAtt(uatrib); // construimos el Authenticated data y lo devolvemos return new ContentInfo(PKCSObjectIdentifiers.id_ct_authEnvelopedData, new AuthEnvelopedData(origInfo, // originatorInfo, new DERSet(infos.getRecipientInfos()), // recipientInfos, infos.getEncInfo(), // authEncryptedContentInfo, authAttr, // authAttrs new DEROctetString(mac), // MAC unAuthAttr // unauthAttrs )).getEncoded(ASN1Encoding.DER); }
From source file:es.gob.afirma.envelopers.cms.CMSEnvelopedData.java
License:Open Source License
/** Genera una estructura PKCS#7 <code>EnvelopedData</code>. * @param parameters Parámetros necesarios para la generación de este * tipo./* w ww. jav a 2 s. com*/ * @param signerCertificateChain Cadena de certificados del firmante. * @param config Configuración del algoritmo para firmar * @param certDest Certificado del destino al cual va dirigido la firma. * @param dataType Identifica el tipo del contenido a firmar. * @param uatrib Conjunto de atributos no firmados. * @param keySize Tamaño de la clave AES. * @return la firma de tipo EnvelopedData. * @throws java.io.IOException Si ocurre algún problema leyendo o escribiendo los * datos * @throws java.security.cert.CertificateEncodingException Si se produce alguna excepción con los certificados de * firma. * @throws java.security.NoSuchAlgorithmException Si no se soporta alguno de los algoritmos de firma o huella * digital * @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 InvalidKeyException Cuando hay problemas de adecuación de la clave. */ byte[] genEnvelopedData(final P7ContentSignerParameters parameters, final X509Certificate[] signerCertificateChain, final AOCipherConfig config, final X509Certificate[] certDest, final String dataType, final Map<String, byte[]> uatrib, final Integer keySize) throws IOException, CertificateEncodingException, NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { this.cipherKey = Utils.initEnvelopedData(config, keySize); // Ya que el contenido puede ser grande, lo recuperamos solo una vez final byte[] content2 = parameters.getContent(); // Datos previos útiles final String digestAlgorithm = AOSignConstants.getDigestAlgorithmName(parameters.getSignatureAlgorithm()); // 1. ORIGINATORINFO // obtenemos la lista de certificados final ASN1Set certificates = Utils.fetchCertificatesList(signerCertificateChain); final ASN1Set certrevlist = null; OriginatorInfo origInfo = null; if (signerCertificateChain.length != 0) { origInfo = new OriginatorInfo(certificates, certrevlist); } // 2. RECIPIENTINFOS final Info infos = Utils.initVariables(content2, config, certDest, this.cipherKey); // 4. ATRIBUTOS final ASN1Set unprotectedAttrs = Utils.generateSignerInfo(digestAlgorithm, content2, dataType, uatrib); // construimos el Enveloped Data y lo devolvemos return new ContentInfo(PKCSObjectIdentifiers.envelopedData, new EnvelopedData(origInfo, new DERSet(infos.getRecipientInfos()), infos.getEncInfo(), unprotectedAttrs)) .getEncoded(ASN1Encoding.DER); }
From source file:es.gob.afirma.envelopers.cms.Utils.java
License:Open Source License
static OriginatorInfo checkCertificates(final X509Certificate[] signerCertificateChain, final ASN1Set certs) throws IOException, CertificateEncodingException { OriginatorInfo origInfo = null;//from w ww. j a v a2s.co m // Si no hay certificados, se deja como esta. if (signerCertificateChain.length != 0) { // no tiene remitentes if (certs == null) { ASN1Set certificates = null; final ASN1Set certrevlist = null; final List<ASN1Encodable> ce = new ArrayList<ASN1Encodable>(); for (final X509Certificate element : signerCertificateChain) { if (element != null) { ce.add(Certificate.getInstance(ASN1Primitive.fromByteArray(element.getEncoded()))); } } // se introducen la nueva cadena de certificados. if (ce.size() != 0) { certificates = SigUtils.createBerSetFromList(ce); origInfo = new OriginatorInfo(certificates, certrevlist); } } // tiene remitentes else { // Se obtienen los certificados que tenia la firma. final ASN1EncodableVector v = new ASN1EncodableVector(); if (certs.getObjectAt(0) instanceof DERSequence) { final ASN1EncodableVector subv = new ASN1EncodableVector(); for (int i = 0; i < certs.size(); i++) { subv.add(certs.getObjectAt(i)); } v.add(new BERSet(subv)); } else { for (int i = 0; i < certs.size(); i++) { v.add(certs.getObjectAt(i)); } } ASN1Set certificates = null; final ASN1Set certrevlist = new BERSet(new ASN1EncodableVector()); final List<ASN1Encodable> ce = new ArrayList<ASN1Encodable>(); for (final X509Certificate element : signerCertificateChain) { if (element != null) { ce.add(Certificate.getInstance(ASN1Primitive.fromByteArray(element.getEncoded()))); } } // se introducen la nueva cadena de certificados. if (ce.size() != 0) { certificates = SigUtils.createBerSetFromList(ce); v.add(certificates); origInfo = new OriginatorInfo(new BERSet(v), certrevlist); } } } return origInfo; }