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

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

Introduction

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

Prototype

public SignerInfo(ASN1Sequence seq) 

Source Link

Usage

From source file:es.gob.afirma.signers.multi.cades.CAdESTriPhaseCounterSigner.java

License:Open Source License

/** Contrafirma el árbol completo de forma recursiva, todos
 * los nodos creando un nuevo contraSigner.<br>
 * @param signerInfosRaiz/*w  ww .  ja va  2 s  .  co  m*/
 *        Nodo ra&iacute; que contiene todos los signerInfos que se
 *        deben firmar.
 * @param parameters
 *        Par&aacute;metros necesarios para firmar un determinado
 *        SignerInfo
 * @param key Clave privada a usar para firmar
 * @param contentType
 *         Tipo de contenido definido por su OID.
 * @param contentDescription
 *         Descripci&oacute;n textual del tipo de contenido firmado.
 * @return El SignerInfo ra&iacute;z con todos sus nodos Contrafirmados.
 * @throws java.security.NoSuchAlgorithmException
 * @throws java.io.IOException
 * @throws java.security.cert.CertificateException
 * @throws es.map.es.map.afirma.exceptions.AOException */
private ASN1EncodableVector counterTree(final ASN1Set signerInfosRaiz,
        final P7ContentSignerParameters parameters, final PrivateKey key,
        final java.security.cert.Certificate[] certChain, final String contentType,
        final String contentDescription, final AdESPolicy policy, final boolean signingCertificateV2)
        throws NoSuchAlgorithmException, IOException, CertificateException, AOException {

    final ASN1EncodableVector counterSigners = new ASN1EncodableVector();
    for (int i = 0; i < signerInfosRaiz.size(); i++) {
        final SignerInfo si = new SignerInfo((ASN1Sequence) signerInfosRaiz.getObjectAt(i));
        counterSigners.add(getCounterSignerInfo(si, parameters, key, certChain, contentType, contentDescription,
                policy, signingCertificateV2));
    }
    return counterSigners;
}

From source file:es.gob.afirma.signers.multi.cades.CAdESTriPhaseCounterSigner.java

License:Open Source License

/** Contrafirma las hojas del &aacute;rbol completo de forma
 * recursiva, todos los dodos creando un nuevo contraSigner.<br>
 * @param signerInfosRaiz//from  ww  w.j a  v a  2s  . c  om
 *        Nodo ra&iacute; que contiene todos los signerInfos que se
 *        deben firmar.
 * @param parameters
 *        Par&aacute;metros necesarios para firmar un determinado
 *        SignerInfo hoja.
 * @param key Clave privada a usar para firmar
 * @param contentType Tipo de contenido definido por su OID.
 * @param contentDescription Descripci&oacute;n textual del tipo de contenido firmado.
 * @return El SignerInfo ra&iacute;z con todos sus nodos Contrafirmados.
 * @throws java.security.NoSuchAlgorithmException
 * @throws java.io.IOException
 * @throws java.security.cert.CertificateException
 * @throws es.map.es.map.afirma.exceptions.AOException */
private ASN1EncodableVector counterLeaf(final ASN1Set signerInfosRaiz,
        final P7ContentSignerParameters parameters, final PrivateKey key,
        final java.security.cert.Certificate[] certChain, final String contentType,
        final String contentDescription, final AdESPolicy policy, final boolean signingCertificateV2)
        throws NoSuchAlgorithmException, IOException, CertificateException, AOException {

    final ASN1EncodableVector counterSigners = new ASN1EncodableVector();
    for (int i = 0; i < signerInfosRaiz.size(); i++) {
        final SignerInfo si = new SignerInfo((ASN1Sequence) signerInfosRaiz.getObjectAt(i));
        counterSigners.add(getLeafSignerInfo(si, parameters, key, certChain, contentType, contentDescription,
                policy, signingCertificateV2));
    }
    return counterSigners;
}

From source file:es.gob.afirma.signers.multi.cades.CAdESTriPhaseCounterSigner.java

License:Open Source License

/** Obtiene la contrafirma de los signerInfo de forma recursiva.<br>
 * @param signerInfo//from   w  ww .  j  a  va 2 s.  c om
 *        Nodo ra&iacute; que contiene todos los signerInfos que se
 *        deben firmar.
 * @param parameters
 *        Par&aacute;metros necesarios para firmar un determinado
 *        SignerInfo hoja.
 * @param key Clave privada a usar para firmar.
 * @param contentType
 *         Tipo de contenido definido por su OID.
 * @param contentDescription
 *         Descripci&oacute;n textual del tipo de contenido firmado.
 * @return El SignerInfo ra&iacute;z parcial con todos sus nodos
 *         Contrafirmados.
 * @throws java.security.NoSuchAlgorithmException
 * @throws java.io.IOException
 * @throws java.security.cert.CertificateException
 * @throws es.map.es.map.afirma.exceptions.AOException */
private SignerInfo getCounterSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters,
        final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentType,
        final String contentDescription, final AdESPolicy policy, final boolean signingCertificateV2)
        throws NoSuchAlgorithmException, IOException, CertificateException, AOException {
    final ASN1EncodableVector signerInfosU = new ASN1EncodableVector();
    final ASN1EncodableVector signerInfosU2 = new ASN1EncodableVector();
    SignerInfo counterSigner = null;
    if (signerInfo.getUnauthenticatedAttributes() != null) {
        final Enumeration<?> eAtributes = signerInfo.getUnauthenticatedAttributes().getObjects();

        while (eAtributes.hasMoreElements()) {
            final Attribute data = Attribute.getInstance(eAtributes.nextElement());
            if (!data.getAttrType().equals(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken)) {
                final ASN1Set setInto = data.getAttrValues();
                final Enumeration<?> eAtributesData = setInto.getObjects();
                while (eAtributesData.hasMoreElements()) {
                    final SignerInfo si = new SignerInfo((ASN1Sequence) eAtributesData.nextElement());
                    signerInfosU.add(getCounterSignerInfo(si, parameters, key, certChain, contentType,
                            contentDescription, policy, signingCertificateV2));
                }
            } else {
                signerInfosU.add(data);
            }

        }
        // FIRMA DEL NODO ACTUAL
        counterSigner = generateSignerInfo(parameters.getSignatureAlgorithm(), signerInfo, certChain,
                contentType, contentDescription, policy, signingCertificateV2);
        signerInfosU.add(counterSigner);

        // FIRMA DE CADA UNO DE LOS HIJOS
        ASN1Set a1;
        final ASN1EncodableVector contexExpecific = new ASN1EncodableVector();
        if (signerInfosU.size() > 1) {
            for (int i = 0; i < signerInfosU.size(); i++) {
                if (signerInfosU.get(i) instanceof Attribute) {
                    contexExpecific.add(signerInfosU.get(i));
                } else {
                    contexExpecific.add(
                            new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU.get(i))));
                }
            }
            a1 = SigUtils.getAttributeSet(new AttributeTable(contexExpecific));
            counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                    signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                    signerInfo.getEncryptedDigest(), a1 // unsignedAttr
            );

        } else {
            if (signerInfosU.size() == 1) {
                if (signerInfosU.get(0) instanceof Attribute) {
                    // anadimos el que hay
                    contexExpecific.add(signerInfosU.get(0));
                    // creamos el de la contrafirma.
                    signerInfosU2.add(generateSignerInfo(parameters.getSignatureAlgorithm(), signerInfo,
                            certChain, contentType, contentDescription, policy, signingCertificateV2));
                    final Attribute uAtrib = new Attribute(CMSAttributes.counterSignature,
                            new DERSet(signerInfosU2));
                    contexExpecific.add(uAtrib);

                } else {
                    contexExpecific.add(
                            new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU.get(0))));
                }
                a1 = SigUtils.getAttributeSet(new AttributeTable(contexExpecific));
                counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                        signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                        signerInfo.getEncryptedDigest(), a1 // unsignedAttr
                );
            } else {
                final Attribute uAtrib = new Attribute(CMSAttributes.counterSignature,
                        new DERSet(signerInfosU));
                counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                        signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                        signerInfo.getEncryptedDigest(), new DERSet(uAtrib) // unsignedAttr
                );
            }
        }

    } else {
        signerInfosU2.add(generateSignerInfo(parameters.getSignatureAlgorithm(), signerInfo, certChain,
                contentType, contentDescription, policy, signingCertificateV2));
        final Attribute uAtrib = new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU2));
        counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                signerInfo.getEncryptedDigest(), new DERSet(uAtrib) // unsignedAttr
        );

    }
    return counterSigner;
}

From source file:es.gob.afirma.signers.multi.cades.CAdESTriPhaseCounterSigner.java

License:Open Source License

/** Obtiene la contrafirma de los signerInfo de una determinada hoja de forma
 * recursiva.</br>/*from   w ww.  java2s  .  c  o m*/
 * @param signerInfo Nodo ra&iacute; que contiene todos los signerInfos que se deben firmar.
 * @param parameters Par&aacute;metros necesarios para firmar un determinado <i>SignerInfo</i> hoja.
 * @param cert Certificado de firma.
 * @param keyEntry Clave privada a usar para firmar
 * @param contentType Tipo de contenido definido por su OID.
 * @param contentDescription Descripci&oacute;n textual del tipo de contenido firmado.
 * @return SignerInfo ra&iacute;z parcial con todos sus nodos contrafirmados.
 * @throws java.security.NoSuchAlgorithmException
 * @throws java.io.IOException
 * @throws java.security.cert.CertificateException
 * @throws es.map.es.map.afirma.exceptions.AOException */
private SignerInfo getLeafSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters,
        final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentType,
        final String contentDescription, final AdESPolicy policy, final boolean signingCertificateV2)
        throws NoSuchAlgorithmException, IOException, CertificateException, AOException {

    final ASN1EncodableVector signerInfosU = new ASN1EncodableVector();
    final ASN1EncodableVector signerInfosU2 = new ASN1EncodableVector();
    SignerInfo counterSigner = null;
    if (signerInfo.getUnauthenticatedAttributes() != null) {
        final Enumeration<?> eAtributes = signerInfo.getUnauthenticatedAttributes().getObjects();

        while (eAtributes.hasMoreElements()) {
            final Attribute data = Attribute.getInstance(eAtributes.nextElement());
            if (!data.getAttrType().equals(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken)) {
                final ASN1Set setInto = data.getAttrValues();
                final Enumeration<?> eAtributesData = setInto.getObjects();
                while (eAtributesData.hasMoreElements()) {
                    final SignerInfo si = new SignerInfo((ASN1Sequence) eAtributesData.nextElement());
                    signerInfosU.add(getLeafSignerInfo(si, parameters, key, certChain, contentType,
                            contentDescription, policy, signingCertificateV2));
                }
            } else {
                signerInfosU.add(data);
            }

        }
        // FIRMA DE CADA UNO DE LOS HIJOS
        ASN1Set a1;
        final ASN1EncodableVector contexExpecific = new ASN1EncodableVector();
        if (signerInfosU.size() > 1) {
            for (int i = 0; i < signerInfosU.size(); i++) {
                if (signerInfosU.get(i) instanceof Attribute) {
                    contexExpecific.add(signerInfosU.get(i));
                } else {
                    contexExpecific.add(
                            new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU.get(i))));
                }
            }
            a1 = SigUtils.getAttributeSet(new AttributeTable(contexExpecific));
            counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                    signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                    signerInfo.getEncryptedDigest(), a1 // unsignedAttr
            );

        } else {
            if (signerInfosU.size() == 1) {
                if (signerInfosU.get(0) instanceof Attribute) {
                    // anadimos el que hay
                    contexExpecific.add(signerInfosU.get(0));
                    // creamos el de la contrafirma.
                    signerInfosU2.add(generateSignerInfo(parameters.getSignatureAlgorithm(), signerInfo,
                            certChain, contentType, contentDescription, policy, signingCertificateV2));
                    final Attribute uAtrib = new Attribute(CMSAttributes.counterSignature,
                            new DERSet(signerInfosU2));
                    contexExpecific.add(uAtrib);

                } else {
                    contexExpecific.add(
                            new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU.get(0))));
                }
                a1 = SigUtils.getAttributeSet(new AttributeTable(contexExpecific));
                counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                        signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                        signerInfo.getEncryptedDigest(), a1 // unsignedAttr
                );
            } else {
                final Attribute uAtrib = new Attribute(CMSAttributes.counterSignature,
                        new DERSet(signerInfosU));
                counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                        signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                        signerInfo.getEncryptedDigest(), new DERSet(uAtrib) // unsignedAttr
                );
            }

        }
    } else {
        signerInfosU2.add(generateSignerInfo(parameters.getSignatureAlgorithm(), signerInfo, certChain,
                contentType, contentDescription, policy, signingCertificateV2));
        final Attribute uAtrib = new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU2));
        counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(),
                signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(),
                signerInfo.getEncryptedDigest(), new DERSet(uAtrib) // unsignedAttr
        );

    }
    return counterSigner;
}

From source file:org.jmrtd.lds.SignedDataUtil.java

License:Open Source License

private static SignerInfo getSignerInfo(SignedData signedData) {
    ASN1Set signerInfos = signedData.getSignerInfos();
    if (signerInfos.size() > 1) {
        LOGGER.warning("Found " + signerInfos.size() + " signerInfos");
    }// w  w  w  .  j a v a  2 s. co m
    for (int i = 0; i < signerInfos.size(); i++) {
        SignerInfo info = new SignerInfo((ASN1Sequence) signerInfos.getObjectAt(i));
        return info;
    }
    return null;
}

From source file:org.jscep.pkcs7.SignedDataUtil.java

License:Open Source License

/**
 * Checks if the provided signedData was signed by the entity represented
 * by the provided certificate./*  www.ja  va2  s  . co  m*/
 *  
 * @param signedData the signedData to verify.
 * @param signer the signing entity.
 * @return <code>true</code> if the signedData was signed by the entity, <code>false</code> otherwise.
 */
public static boolean isSignedBy(SignedData signedData, X509Certificate signer) {
    X509Name signerName = X509Util.toX509Name(signer.getIssuerX500Principal());
    BigInteger signerSerialNo = signer.getSerialNumber();
    IssuerAndSerialNumber issuerIasn = new IssuerAndSerialNumber(signerName, signerSerialNo);

    final ASN1Set signerInfos = signedData.getSignerInfos();
    @SuppressWarnings("unchecked")
    Enumeration<ASN1Sequence> seqs = signerInfos.getObjects();
    while (seqs.hasMoreElements()) {
        final ASN1Sequence seq = seqs.nextElement();
        SignerInfo signerInfo = new SignerInfo(seq);
        signerInfo.getAuthenticatedAttributes();
        SignerIdentifier signerId = signerInfo.getSID();
        IssuerAndSerialNumber iasn = IssuerAndSerialNumber.getInstance(signerId.getId());

        if (areEqual(issuerIasn, iasn) == false) {
            continue;
        }
        // We've found the right issuer.
        ASN1OctetString signedDigest = signerInfo.getEncryptedDigest();
        String sigAlg = AlgorithmDictionary.lookup(signerInfo.getDigestAlgorithm());
        Signature sig;
        try {
            sig = Signature.getInstance(sigAlg);
        } catch (NoSuchAlgorithmException e) {
            return false;
        }
        try {
            sig.initVerify(signer);
        } catch (InvalidKeyException e) {
            return false;
        }
        try {
            sig.update(getHash(signerInfo));
            return sig.verify(signedDigest.getOctets());
        } catch (SignatureException e) {
            return false;
        } catch (IOException e) {
            return false;
        }
    }

    return false;
}

From source file:org.signserver.module.mrtdsodsigner.jmrtd.SODFile.java

License:Open Source License

private static SignerInfo getSignerInfo(SignedData signedData) {
    ASN1Set signerInfos = signedData.getSignerInfos();
    if (signerInfos.size() > 1) {
        LOGGER.warning("Found " + signerInfos.size() + " signerInfos");
    }//from w w  w  .  j av a  2s.  c om
    for (int i = 0; i < signerInfos.size(); i++) {
        SignerInfo info = new SignerInfo((DERSequence) signerInfos.getObjectAt(i));
        return info;
    }
    return null;
}

From source file:passwdmanager.hig.no.lds.DG_SOD.java

private static SignerInfo getSignerInfo(SignedData signedData) {
    ASN1Set signerInfos = signedData.getSignerInfos();
    if (signerInfos.size() > 1) {
        System.err.println("WARNING: found " + signerInfos.size() + " signerInfos");
    }// w ww.  j a  v  a  2s .c o  m
    for (int i = 0; i < signerInfos.size(); i++) {
        SignerInfo info = new SignerInfo((DERSequence) signerInfos.getObjectAt(i));
        return info;
    }
    return null;
}