List of usage examples for org.bouncycastle.asn1.cms SignerInfo getInstance
public static SignerInfo getInstance(Object o) throws IllegalArgumentException
Accepted inputs:
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSigner.java
License:Open Source License
/** Contrafirma un nodo determinado del árbol buscándolo de * forma recursiva.<br>/*from w ww. j av a 2 s. c o m*/ * @param sd * SignedData que contiene el Nodo raíz. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @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 nodo Nodo signerInfo a firmar. * @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 El SignerInfo raíz con todos sus nodos Contrafirmados. * @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. * @throws AOException Cuando ocurre cualquier tipo de error */ private ASN1EncodableVector counterNode(final SignedData sd, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final int nodo, final AdESPolicy policy, final boolean signingCertificateV2, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException, AOException { final ASN1Set signerInfosRaiz = sd.getSignerInfos(); final ASN1EncodableVector counterSigners = new ASN1EncodableVector(); ASN1Set auxSignerRaiz; auxSignerRaiz = signerInfosRaiz; this.actualIndex = 0; for (int i = 0; i < auxSignerRaiz.size(); i++) { final SignerInfo si = SignerInfo.getInstance(auxSignerRaiz.getObjectAt(i)); SignerInfo counterSigner = null; if (this.actualIndex == nodo) { counterSigner = getNodeSignerInfo(si, parameters, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm); } else { if (this.actualIndex != nodo) { counterSigner = getNodeSignerInfo(si, parameters, key, certChain, contentDescription, nodo, policy, signingCertificateV2, ctis, csm); } } this.actualIndex++; counterSigners.add(counterSigner); } return counterSigners; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSigner.java
License:Open Source License
/** Obtiene la contrafirma de los signerInfo de forma recursiva.<br> * @param signerInfo/* www . ja va 2s . c om*/ * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @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> raíz parcial con todos sus nodos * Contrafirmados. * @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. * @throws AOException En caso de cualquier otro tipo de error */ private SignerInfo getCounterSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters, 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, 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 = SignerInfo.getInstance(eAtributesData.nextElement()); signerInfosU.add(getCounterSignerInfo(si, parameters, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); } } else { signerInfosU.add(data); } } // FIRMA DEL NODO ACTUAL counterSigner = generateSignerInfo(parameters.getSignatureAlgorithm(), signerInfo, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm); 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, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); 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, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); 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.CAdESCounterSigner.java
License:Open Source License
/** Obtiene la contrafirma de los signerInfo de una determinada hoja de forma * recursiva.<br>/*from www .java 2 s.c o m*/ * @param signerInfo * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @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 El SignerInfo raíz parcial con todos sus nodos * Contrafirmados. * @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. * @throws AOException En caso de cualquier otro tipo de error */ private SignerInfo getLeafSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters, 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, 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 = SignerInfo.getInstance(eAtributesData.nextElement()); signerInfosU.add(getLeafSignerInfo(si, parameters, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); } } 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, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); 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, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); 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.CAdESCounterSigner.java
License:Open Source License
/** Obtiene la contrafirma de los signerInfo sin ser recursivo. Esto es por * el caso especial de que puede ser el nodo raiz el nodo a firmar, por lo * que no sería necesario usar la recursividad.<br> * @param signerInfo//from w ww .j a v a 2 s .c o m * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @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 El SignerInfo raíz parcial con todos sus nodos * Contrafirmados. * @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 getNodeSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters, 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 { 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()) { signerInfosU.add(SignerInfo.getInstance(eAtributesData.nextElement())); } } else { signerInfosU.add(data); } } // FIRMA DEL NODO ACTUAL signerInfosU.add(generateSignerInfo(parameters.getSignatureAlgorithm(), signerInfo, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); // 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, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); 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, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm)); 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.CAdESCounterSigner.java
License:Open Source License
/** Obtiene la contrafirma de los signerInfo buscando el nodo de forma * recursiva.<br>/*from www .j av a 2 s. c o m*/ * @param signerInfo * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @param key Clave privada a usar para firmar. * @param certChain Cadena de certificados del firmante. * @param node Nodo específico a firmar. * @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 El SignerInfo raíz parcial con todos sus nodos contrafirmados. * @throws NoSuchAlgorithmException Si no se soporta alguno de los algoritmos necesarios. * @throws IOException Cuando hay errores de entrada / salida * @throws CertificateException Cuando hay problemas con los certificados proporcionados. * @throws AOException En caso de cualquier otro tipo de error */ private SignerInfo getNodeSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final int node, final AdESPolicy policy, final boolean signingCertificateV2, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException, AOException { final ASN1EncodableVector signerInfosU = 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 = SignerInfo.getInstance(eAtributesData.nextElement()); this.actualIndex++; if (this.actualIndex != node) { if (this.actualIndex < node) { signerInfosU.add(getNodeSignerInfo(si, parameters, key, certChain, contentDescription, node, policy, signingCertificateV2, ctis, csm)); } else { signerInfosU.add(si); } } else { final SignerInfo obtained = getNodeSignerInfo(si, parameters, key, certChain, contentDescription, policy, signingCertificateV2, ctis, csm); signerInfosU.add(obtained); } } } else { signerInfosU.add(data); } } // FIRMA DE CADA UNO DE LOS HIJOS final 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)); } 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 { counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), null // unsignedAttr ); } return counterSigner; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Método que contrafirma el arbol completo de forma recursiva, todos * los dodos creando un nuevo contraSigner.<br> * @param signerInfosRaiz//from ww w.jav a 2 s.co m * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo * @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 ctis Indicaciones sobre los tipos de compromisos adquiridos con la firma. * @param csm Metadatos sobre el firmante. * @return El SignerInfo raíz con todos sus nodos Contrafirmados. * @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. * @throws AOException En caso de cualquier otro tipo de error */ private ASN1EncodableVector counterTree(final ASN1Set signerInfosRaiz, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException, AOException { final ASN1EncodableVector counterSigners = new ASN1EncodableVector(); for (int i = 0; i < signerInfosRaiz.size(); i++) { final SignerInfo si = SignerInfo.getInstance(signerInfosRaiz.getObjectAt(i)); counterSigners.add(getCounterSignerInfo(si, parameters, key, certChain, contentDescription, ctis, csm)); } return counterSigners; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Método que contrafirma las hojas del arbol completo de forma * recursiva, todos los dodos creando un nuevo contraSigner.<br> * @param signerInfosRaiz/* w ww . j a va 2 s .c om*/ * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @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 ctis Indicaciones sobre los tipos de compromisos adquiridos con la firma. * @param csm Metadatos sobre el firmante. * @return El SignerInfo raíz con todos sus nodos Contrafirmados. * @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. * @throws AOException En caso de cualquier otro tipo de error */ private ASN1EncodableVector counterLeaf(final ASN1Set signerInfosRaiz, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException, AOException { final ASN1EncodableVector counterSigners = new ASN1EncodableVector(); for (int i = 0; i < signerInfosRaiz.size(); i++) { final SignerInfo si = SignerInfo.getInstance(signerInfosRaiz.getObjectAt(i)); counterSigners .add(getCounterLeafSignerInfo(si, parameters, key, certChain, contentDescription, ctis, csm)); } return counterSigners; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Método que contrafirma un nodo determinado del arbol buscandolo de * forma recursiva.<br>//from www . j a v a2 s .co m * @param sd <code>SignedAndEnvelopedData</code> que contiene el Nodo raíz. * @param parameters Parámetros necesarios para firmar un determinado * <code>SignerInfo</code> hoja. * @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 nodo Nodo signerInfo a firmar. * @param ctis Indicaciones sobre los tipos de compromisos adquiridos con la firma. * @param csm Metadatos sobre el firmante. * @return El SignerInfo raíz con todos sus nodos Contrafirmados. * @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. * @throws AOException En caso de cualquier otro tipo de error */ private ASN1EncodableVector counterNode(final SignedAndEnvelopedData sd, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final int nodo, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException, AOException { final ASN1Set signerInfosRaiz = sd.getSignerInfos(); final ASN1EncodableVector counterSigners = new ASN1EncodableVector(); ASN1Set auxSignerRaiz; auxSignerRaiz = signerInfosRaiz; this.actualIndex = 0; for (int i = 0; i < auxSignerRaiz.size(); i++) { final ASN1Sequence atribute = (ASN1Sequence) auxSignerRaiz.getObjectAt(i); final SignerInfo si = SignerInfo.getInstance(atribute); SignerInfo counterSigner = null; if (this.actualIndex == nodo) { counterSigner = getCounterNodeSignerInfo(si, parameters, key, certChain, contentDescription, ctis, csm); } else { if (this.actualIndex != nodo) { counterSigner = getCounterNodeSignerInfo(si, parameters, key, certChain, contentDescription, nodo, ctis, csm); } } this.actualIndex++; counterSigners.add(counterSigner); } return counterSigners; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Método utilizado por la firma del érbol para obtener la * contrafirma de los signerInfo de forma recursiva.<br> * @param signerInfo/*from w w w. java 2 s . c o m*/ * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @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 ctis Indicaciones sobre los tipos de compromisos adquiridos con la firma. * @param csm Metadatos sobre el firmante. * @return El SignerInfo raíz parcial con todos sus nodos * Contrafirmados. * @throws NoSuchAlgorithmException Si no se soporta alguno de los algoritmos necesarios. * @throws IOException Cuando hay errores de entrada / salida * @throws CertificateException Cuando hay problemas con los certificados proporcionados. * @throws AOException En caso de cualquier otro tipo de error */ private SignerInfo getCounterSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) 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 = SignerInfo.getInstance(eAtributesData.nextElement()); signerInfosU.add(getCounterSignerInfo(si, parameters, key, certChain, contentDescription, ctis, csm)); } } else { signerInfosU.add(data); } } // FIRMA DEL NODO ACTUAL counterSigner = generateSignerInfo(parameters, signerInfo, key, certChain, contentDescription, ctis, csm); 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, signerInfo, key, certChain, contentDescription, ctis, csm)); contexExpecific .add(new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU2))); } 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, signerInfo, key, certChain, contentDescription, ctis, csm)); counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), new DERSet(new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU2))) // unsignedAttr ); } return counterSigner; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Método utilizado por la firma de una hoja del érbol para * obtener la contrafirma de los signerInfo de una determinada hoja de forma * recursiva.<br>//from ww w . ja v a2 s. c o m * @param signerInfo * Nodo raí que contiene todos los signerInfos que se * deben firmar. * @param parameters * Parámetros necesarios para firmar un determinado * SignerInfo hoja. * @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 ctis Indicaciones sobre los tipos de compromisos adquiridos con la firma. * @param csm Metadatos sobre el firmante. * @return El SignerInfo raíz parcial con todos sus nodos * Contrafirmados. * @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. * @throws AOException En caso de cualquier otro tipo de error */ private SignerInfo getCounterLeafSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException, AOException { final ASN1EncodableVector signerInfosU = new ASN1EncodableVector(); final ASN1EncodableVector signerInfosU2 = new ASN1EncodableVector(); SignerInfo counterSigner = null; if (signerInfo.getUnauthenticatedAttributes() != null) { final Enumeration<?> eAttributes = signerInfo.getUnauthenticatedAttributes().getObjects(); while (eAttributes.hasMoreElements()) { final Attribute data = Attribute.getInstance(eAttributes.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 = SignerInfo.getInstance(eAtributesData.nextElement()); signerInfosU.add(getCounterLeafSignerInfo(si, parameters, key, certChain, contentDescription, ctis, csm)); } } 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 { counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), new DERSet(new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU))) // unsignedAttr ); } } else { signerInfosU2 .add(generateSignerInfo(parameters, signerInfo, key, certChain, contentDescription, ctis, csm)); counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), new DERSet(new Attribute(CMSAttributes.counterSignature, new DERSet(signerInfosU2))) // unsignedAttr ); } return counterSigner; }