Example usage for org.bouncycastle.asn1.cms AuthEnvelopedData AuthEnvelopedData

List of usage examples for org.bouncycastle.asn1.cms AuthEnvelopedData AuthEnvelopedData

Introduction

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

Prototype

public AuthEnvelopedData(OriginatorInfo originatorInfo, ASN1Set recipientInfos,
            EncryptedContentInfo authEncryptedContentInfo, ASN1Set authAttrs, ASN1OctetString mac,
            ASN1Set unauthAttrs) 

Source Link

Usage

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&aacute;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&oacute;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&ntilde;o de la clave AES.
 * @return Firma de tipo AuthenticatedData.
 * @throws IOException Si ocurre alg&uacute;n problema leyendo o escribiendo los
 *                     datos/*from  www.ja  va 2 s  .com*/
 * @throws CertificateEncodingException Si se produce alguna excepci&oacute;n con los certificados de
 *                                      firma.
 * @throws NoSuchAlgorithmException Si no se encuentra un algoritmo v&aacute;lido.
 * @throws InvalidKeyException Cuando hay problemas de adecuaci&oacute;n de la clave.
 * @throws BadPaddingException Cuando hay problemas con un relleno de datos.
 * @throws IllegalBlockSizeException Cuando hay problemas internos con los tama&ntilde;os de bloque de cifrado.
 * @throws InvalidAlgorithmParameterException Si no se soporta un par&aacute;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.CMSAuthenticatedEnvelopedData.java

License:Open Source License

/** M&eacute;todo que inserta remitentes en el "OriginatorInfo" de un sobre
 * de tipo AuthenticatedEnvelopedData./*  w  w w  .ja v  a2s. c  o m*/
 * @param data
 *        Datos CMS de tipo AuthenticatedEnvelopedData.
 * @param signerCertificateChain
 *        Cadena de certificados a agregar.
 * @return La nueva firma AuthenticatedEnvelopedData con los remitentes que
 *         ten&iacute;a (si los tuviera) con la cadena de certificados
 *         nueva.
 * @throws IOException Cuando hay errores de lectura o escritura de datos
 * @throws CertificateEncodingException Si hay alg&uacute;n certificado inv&aacute;lido en la cadena */
public static byte[] addOriginatorInfo(final byte[] data, final X509Certificate[] signerCertificateChain)
        throws IOException, CertificateEncodingException {

    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.id_ct_authEnvelopedData)) {
        // Contenido de Data
        final ASN1TaggedObject doj = (ASN1TaggedObject) e.nextElement();

        final AuthEnvelopedData authEnv = AuthEnvelopedData.getInstance(doj.getObject());

        // Obtenemos los originatorInfo
        OriginatorInfo origInfo = authEnv.getOriginatorInfo();
        ASN1Set certs = null;
        if (origInfo != null) {
            certs = origInfo.getCertificates();
        }

        final OriginatorInfo origInfoChecked = Utils.checkCertificates(signerCertificateChain, certs);
        if (origInfoChecked != null) {
            origInfo = origInfoChecked;
        }

        // Se crea un nuevo AuthenticatedEnvelopedData a partir de los
        // datos anteriores con los nuevos originantes.
        return new ContentInfo(PKCSObjectIdentifiers.id_ct_authEnvelopedData, new AuthEnvelopedData(origInfo, // OriginatorInfo
                authEnv.getRecipientInfos(), // ASN1Set
                authEnv.getAuthEncryptedContentInfo(), authEnv.getAuthAttrs(), authEnv.getMac(),
                authEnv.getUnauthAttrs())).getEncoded(ASN1Encoding.DER);
    }

    return null;
}