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

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

Introduction

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

Prototype

public OriginatorInfo getOriginatorInfo() 

Source Link

Usage

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

License:Open Source License

/** Método que inserta remitentes en el "OriginatorInfo" de un sobre
 * de tipo AuthenticatedEnvelopedData./*from ww w .  jav a  2s  .  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í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ún certificado invá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;
}