List of usage examples for org.bouncycastle.asn1.cms SignerInfo SignerInfo
public SignerInfo(SignerIdentifier sid, AlgorithmIdentifier digAlgorithm, Attributes authenticatedAttributes,
AlgorithmIdentifier digEncryptionAlgorithm, ASN1OctetString encryptedDigest,
Attributes unauthenticatedAttributes)
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 w w w. j a va2 s. co 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; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Método utilizado por la firma de un nodo del érbol para * obtener 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 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 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 en el tratamiento de los datos. * @throws CertificateException Cuando hay problemas con los certificados proporcionados. */ private SignerInfo getCounterNodeSignerInfo(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 { 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()) { signerInfosU.add(SignerInfo.getInstance(eAtributesData.nextElement())); } } else { signerInfosU.add(data); } } // FIRMA DEL NODO ACTUAL signerInfosU .add(generateSignerInfo(parameters, signerInfo, key, certChain, contentDescription, ctis, csm)); // FIRMA DE CADA UNO DE LOS HIJOS 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)))); } } counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), SigUtils.getAttributeSet(new AttributeTable(contexExpecific)) // 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)); 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)))); } counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), SigUtils.getAttributeSet(new AttributeTable(contexExpecific)) // 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; }
From source file:es.gob.afirma.signers.multi.cades.CAdESCounterSignerEnveloped.java
License:Open Source License
/** Método utilizado por la firma de un nodo del érbol para * obtener la contrafirma de los signerInfo buscando el nodo de forma * recursiva.<br>//from ww w . j ava 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 node Nodo específico 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 parcial con todos sus nodos * Contrafirmados. * @throws NoSuchAlgorithmException Si no se soporta alguno de los algoritmos necesarios. * @throws IOException Cuando hay errores en el tratamiento de los datos. * @throws CertificateException Cuando hay problemas con los certificados proporcionados. * @throws AOException En caso de cualquier otro tipo de error */ private SignerInfo getCounterNodeSignerInfo(final SignerInfo signerInfo, final P7ContentSignerParameters parameters, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final int node, 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 Enumeration<?> eAtributesData = data.getAttrValues().getObjects(); while (eAtributesData.hasMoreElements()) { final ASN1Sequence atrib = (ASN1Sequence) eAtributesData.nextElement(); final SignerInfo si = SignerInfo.getInstance(atrib); this.actualIndex++; if (this.actualIndex != node) { if (this.actualIndex < node) { signerInfosU.add(getCounterNodeSignerInfo(si, parameters, key, certChain, contentDescription, node, ctis, csm)); } else { signerInfosU.add(si); } } else { signerInfosU.add(getCounterNodeSignerInfo(si, parameters, key, certChain, contentDescription, ctis, csm)); } } } else { signerInfosU.add(data); } } // FIRMA DE CADA UNO DE LOS HIJOS 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)))); } } counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), SigUtils.getAttributeSet(new AttributeTable(contexExpecific)) // 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)))); } counterSigner = new SignerInfo(signerInfo.getSID(), signerInfo.getDigestAlgorithm(), signerInfo.getAuthenticatedAttributes(), signerInfo.getDigestEncryptionAlgorithm(), signerInfo.getEncryptedDigest(), SigUtils.getAttributeSet(new AttributeTable(contexExpecific)) // 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 { 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 genera un signerInfo específico utilizando los * datos necesarios para crearlo. Se utiliza siempre que no se sabe cual es * el signerInfo que se debe firmar.//from www . j a v a 2s .co m * @param parameters Parámetros necesarios para firmar un determinado * <i>SignerInfo</i> hoja. * @param si SignerInfo del que se debe recoger la información para * realizar la contrafirma específica. * @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 contrafirmado. * @throws NoSuchAlgorithmException Si no se soporta alguno de los algoritmos necesarios. * @throws IOException Cuando hay errores en el tratamiento de los datos. * @throws CertificateException Cuando hay problemas con los certificados proporcionados. */ private SignerInfo generateSignerInfo(final P7ContentSignerParameters parameters, final SignerInfo si, final PrivateKey key, final java.security.cert.Certificate[] certChain, final String contentDescription, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateException { // // UNAUTHENTICATEDATTRIBUTES // buscamos que timo de algoritmo es y lo codificamos con su OID final String signatureAlgorithm = parameters.getSignatureAlgorithm(); final String digestAlgorithm = AOSignConstants.getDigestAlgorithmName(signatureAlgorithm); final ASN1EncodableVector contextExcepcific = CAdESUtils.generateSignerInfo(certChain[0], digestAlgorithm, si.getEncryptedDigest().getOctets(), getGlobalPolicy(), isGlobalSigningCertificateV2(), null, new Date(), false, null, // En contrafirmas no se pone el ContentType contentDescription, ctis, csm); this.signedAttr2 = SigUtils.getAttributeSet(new AttributeTable(contextExcepcific)); final ASN1Set unsignedAttr = SigUtils.getAttributeSet(new AttributeTable(contextExcepcific)); // 5. SIGNERINFO // raiz de la secuencia de SignerInfo final TBSCertificateStructure tbs = TBSCertificateStructure .getInstance(ASN1Primitive.fromByteArray(((X509Certificate) certChain[0]).getTBSCertificate())); final IssuerAndSerialNumber encSid = new IssuerAndSerialNumber(X500Name.getInstance(tbs.getIssuer()), tbs.getSerialNumber().getValue()); final SignerIdentifier identifier = new SignerIdentifier(encSid); // AlgorithmIdentifier final AlgorithmIdentifier digAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID(digestAlgorithm)); // // FIN ATRIBUTOS // digEncryptionAlgorithm final AlgorithmIdentifier encAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID("RSA")); //$NON-NLS-1$ final ASN1OctetString sign2; try { sign2 = firma(signatureAlgorithm, key, certChain); } catch (final AOException ex) { throw new IOException("Error al realizar la firma electronica: " + ex, ex); //$NON-NLS-1$ } return new SignerInfo(identifier, digAlgId, unsignedAttr, encAlgId, sign2, null); }
From source file:es.gob.afirma.signers.multi.cades.CAdESTriPhaseCoSigner.java
License:Open Source License
/** Realiza una post-cofirma CAdES. * @param pkcs1sign Firma PKCS#1 de la pre-cofirma (de los SignedAttributes) * @param preCoSign Pre-cofirma CAdES (SignedAttributes) * @param content Contenido a post-cofirmar (indicar null si se desea omitir su inclusión en la firma) * @param signatureAlgorithm Algoritmo de firma * @param signerCertificateChain Cadena de certificados del firmante * @param sign Firma donde insertar la cofirma * @return Cofirma CAdES// w w w .j a v a2 s .c o m * @throws IOException Cuando ocurren problemas de entrada / salida * @throws CertificateEncodingException Si alguno de los certificados proporcionados tienen problemas de formatos */ public static byte[] postCoSign(final byte[] pkcs1sign, final byte[] preCoSign, final byte[] content, final String signatureAlgorithm, final X509Certificate[] signerCertificateChain, final byte[] sign) throws IOException, CertificateEncodingException { // Firma en ASN.1 final ASN1OctetString asn1sign = new DEROctetString(pkcs1sign); // Identificador del firmante ISSUER AND SERIAL-NUMBER final TBSCertificateStructure tbs = TBSCertificateStructure .getInstance(ASN1Primitive.fromByteArray(signerCertificateChain[0].getTBSCertificate())); final IssuerAndSerialNumber encSid = new IssuerAndSerialNumber(X500Name.getInstance(tbs.getIssuer()), tbs.getSerialNumber().getValue()); final SignerIdentifier identifier = new SignerIdentifier(encSid); // digEncryptionAlgorithm final AlgorithmIdentifier encAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID("RSA")); //$NON-NLS-1$ final AlgorithmIdentifier digAlgId = SigUtils .makeAlgId(AOAlgorithmID.getOID(AOSignConstants.getDigestAlgorithmName(signatureAlgorithm))); final ASN1Sequence contentSignedData = getContentSignedData(sign); final SignedData sd = SignedData.getInstance(contentSignedData); // CERTIFICADOS // Obtenemos la lista de certificados final ASN1Set certificatesSigned = sd.getCertificates(); final Enumeration<?> certs = certificatesSigned.getObjects(); final ASN1EncodableVector vCertsSig = new ASN1EncodableVector(); // COGEMOS LOS CERTIFICADOS EXISTENTES EN EL FICHERO while (certs.hasMoreElements()) { vCertsSig.add((ASN1Encodable) certs.nextElement()); } ASN1Set certificates = null; if (signerCertificateChain.length != 0) { final List<ASN1Encodable> ce = new ArrayList<ASN1Encodable>(); for (final X509Certificate element : signerCertificateChain) { ce.add(Certificate.getInstance(ASN1Primitive.fromByteArray(element.getEncoded()))); } certificates = SigUtils.fillRestCerts(ce, vCertsSig); } // SIGNERINFO // raiz de la secuencia de SignerInfo // Obtenemos los signerInfos del SignedData final ASN1Set signerInfosSd = sd.getSignerInfos(); // introducimos los SignerInfos Existentes final ASN1EncodableVector signerInfos = new ASN1EncodableVector(); // introducimos el nuevo SignerInfo del firmante actual. for (int i = 0; i < signerInfosSd.size(); i++) { signerInfos.add(SignerInfo.getInstance(signerInfosSd.getObjectAt(i))); } // Creamos los signerInfos del SignedData signerInfos .add(new SignerInfo(identifier, digAlgId, ASN1Set.getInstance(preCoSign), encAlgId, asn1sign, null // unsignedAttr )); final ContentInfo encInfo = getContentInfoFromContent(content); // Construimos el Signed Data y lo devolvemos return new ContentInfo(PKCSObjectIdentifiers.signedData, new SignedData(sd.getDigestAlgorithms(), encInfo, certificates, (ASN1Set) null, // CRLS no usado new DERSet(signerInfos) // UnsignedAttr )).getEncoded(ASN1Encoding.DER); }
From source file:es.gob.afirma.signers.multi.cades.CAdESTriPhaseCounterSigner.java
License:Open Source License
/** Genera un signerInfo específico utilizando los * datos necesarios para crearlo. Se utiliza siempre que no se sabe cual es * el signerInfo que se debe firmar.</br> * @param parameters Parámetros necesarios para firmar un determinado SignerInfo hoja. * @param si SignerInfo del que se debe recoger la información para * realizar la contrafirma específica. * @param key Clave privada a usar para firmar * @param contentType Tipo de contenido definido por su OID. * @param contentDescription Descripción textual del tipo de contenido firmado. * @return SignerInfo contrafirmado.//www . j a v a2s .c om * @throws java.security.NoSuchAlgorithmException * @throws java.io.IOException * @throws java.security.cert.CertificateException */ private SignerInfo generateSignerInfo(final String signatureAlgorithm, final SignerInfo si, final java.security.cert.Certificate[] certChain, final String contentType, final String contentDescription, final AdESPolicy policy, final boolean signingCertificateV2) throws NoSuchAlgorithmException, IOException, CertificateException { // buscamos que timo de algoritmo es y lo codificamos con su OID final String digestAlgorithm = AOSignConstants.getDigestAlgorithmName(signatureAlgorithm); // authenticatedAttributes final ASN1EncodableVector contextExcepcific = CAdESUtils.generateSignerInfo((X509Certificate) certChain[0], digestAlgorithm, si.getEncryptedDigest().getOctets(), policy, signingCertificateV2, null, new Date(), false, contentType, contentDescription); final ASN1Set signedAttr = SigUtils.getAttributeSet(new AttributeTable(contextExcepcific)); // Anadimos los SignedAttributes a la lista en la posicion adecuada this.signedDatas.add(this.counterIndex, signedAttr.getEncoded(ASN1Encoding.DER)); // Obtenemos el sustituto del PKCS#1, relleno con el numero de contrafirma final ASN1OctetString sign2 = new DEROctetString(firma()); // Incrementamos el indice de contrafirmas this.counterIndex = this.counterIndex + 1; if (this.counterIndex > 9) { throw new UnsupportedOperationException("No se soportan mas de 10 contrafirmas en una misma firma"); //$NON-NLS-1$ } // AlgorithmIdentifier final AlgorithmIdentifier digAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID(digestAlgorithm)); // digEncryptionAlgorithm final AlgorithmIdentifier encAlgId = SigUtils.makeAlgId(AOAlgorithmID.getOID("RSA")); //$NON-NLS-1$ // 5. SIGNERINFO // raiz de la secuencia de SignerInfo final TBSCertificateStructure tbs = TBSCertificateStructure .getInstance(ASN1Primitive.fromByteArray(((X509Certificate) certChain[0]).getTBSCertificate())); final IssuerAndSerialNumber encSid = new IssuerAndSerialNumber(X500Name.getInstance(tbs.getIssuer()), tbs.getSerialNumber().getValue()); final SignerIdentifier identifier = new SignerIdentifier(encSid); // UNAUTHENTICATEDATTRIBUTES final ASN1Set unsignedAttr = SigUtils.getAttributeSet(new AttributeTable(contextExcepcific)); return new SignerInfo(identifier, digAlgId, unsignedAttr, encAlgId, sign2, null); }
From source file:it.trento.comune.j4sign.cms.ExternalSignatureSignerInfoGenerator.java
License:Open Source License
/** * Generates the SignerInfo CMS structure information for a single signer. * This method has to be called after setting {@link #cert} * {@link #signedBytes}.//from www .j a va 2 s .c om * * @return the <code>org.bouncycastle.asn1.cms.SignerInfo</code> object for * a signer. * @throws CertificateEncodingException * @throws IOException */ SignerInfo generate() throws CertificateEncodingException, IOException { AlgorithmIdentifier digAlgId = null; AlgorithmIdentifier encAlgId = null; digAlgId = new AlgorithmIdentifier(new DERObjectIdentifier(this.getDigestAlgOID()), new DERNull()); if (this.getEncryptionAlgOID().equals(CMSSignedDataGenerator.ENCRYPTION_DSA)) { encAlgId = new AlgorithmIdentifier(new DERObjectIdentifier(this.getEncryptionAlgOID())); } else { encAlgId = new AlgorithmIdentifier(new DERObjectIdentifier(this.getEncryptionAlgOID()), new DERNull()); } ASN1OctetString encDigest = new DEROctetString(this.signedBytes); X509Certificate cert = this.getCertificate(); ByteArrayInputStream bIn = new ByteArrayInputStream(cert.getTBSCertificate()); ASN1InputStream aIn = new ASN1InputStream(bIn); TBSCertificateStructure tbs = TBSCertificateStructure.getInstance(aIn.readObject()); IssuerAndSerialNumber encSid = new IssuerAndSerialNumber(tbs.getIssuer(), cert.getSerialNumber()); return new SignerInfo(new SignerIdentifier(encSid), digAlgId, signedAttr, encAlgId, encDigest, unsignedAttr); }
From source file:org.jmrtd.lds.SignedDataUtil.java
License:Open Source License
public static SignerInfo createSignerInfo(String digestAlgorithm, String digestEncryptionAlgorithm, String contentTypeOID, ContentInfo contentInfo, byte[] encryptedDigest, X509Certificate docSigningCertificate) throws NoSuchAlgorithmException { /* Get the issuer name (CN, O, OU, C) from the cert and put it in a SignerIdentifier struct. */ X500Principal docSignerPrincipal = ((X509Certificate) docSigningCertificate).getIssuerX500Principal(); X500Name docSignerName = new X500Name(docSignerPrincipal.getName(X500Principal.RFC2253)); BigInteger serial = ((X509Certificate) docSigningCertificate).getSerialNumber(); SignerIdentifier sid = new SignerIdentifier(new IssuerAndSerialNumber(docSignerName, serial)); AlgorithmIdentifier digestAlgorithmObject = new AlgorithmIdentifier( new ASN1ObjectIdentifier(SignedDataUtil.lookupOIDByMnemonic(digestAlgorithm))); AlgorithmIdentifier digestEncryptionAlgorithmObject = new AlgorithmIdentifier( new ASN1ObjectIdentifier(SignedDataUtil.lookupOIDByMnemonic(digestEncryptionAlgorithm))); ASN1Set authenticatedAttributes = createAuthenticatedAttributes(digestAlgorithm, contentTypeOID, contentInfo); // struct containing the hash of content ASN1OctetString encryptedDigestObject = new DEROctetString(encryptedDigest); // this is the signature ASN1Set unAuthenticatedAttributes = null; // should be empty set? return new SignerInfo(sid, digestAlgorithmObject, authenticatedAttributes, digestEncryptionAlgorithmObject, encryptedDigestObject, unAuthenticatedAttributes); }
From source file:org.signserver.module.mrtdsodsigner.jmrtd.SODFile.java
License:Open Source License
private static SignerInfo createSignerInfo(String digestAlgorithm, String digestEncryptionAlgorithm, ASN1Encodable digestEncryptionAlgorithmParams, byte[] content, byte[] encryptedDigest, X509Certificate docSigningCertificate) throws NoSuchAlgorithmException, CertificateEncodingException { /* Get the issuer name (CN, O, OU, C) from the cert and put it in a SignerIdentifier struct. */ BigInteger serial = ((X509Certificate) docSigningCertificate).getSerialNumber(); IssuerAndSerialNumber iasn = new IssuerAndSerialNumber(JcaX500NameUtil.getIssuer(docSigningCertificate), serial);//from www.j a va 2s . c o m SignerIdentifier sid = new SignerIdentifier(iasn); AlgorithmIdentifier digestAlgorithmObject = new AlgorithmIdentifier(lookupOIDByMnemonic(digestAlgorithm)); final AlgorithmIdentifier digestEncryptionAlgorithmObject; if (digestEncryptionAlgorithmParams == null) { digestEncryptionAlgorithmObject = new AlgorithmIdentifier( lookupOIDByMnemonic(digestEncryptionAlgorithm)); } else { digestEncryptionAlgorithmObject = new AlgorithmIdentifier( lookupOIDByMnemonic(digestEncryptionAlgorithm), digestEncryptionAlgorithmParams); } ASN1Set authenticatedAttributes = createAuthenticatedAttributes(digestAlgorithm, content); // struct containing the hash of content ASN1OctetString encryptedDigestObject = new DEROctetString(encryptedDigest); // this is the signature ASN1Set unAuthenticatedAttributes = null; // should be empty set? return new SignerInfo(sid, digestAlgorithmObject, authenticatedAttributes, digestEncryptionAlgorithmObject, encryptedDigestObject, unAuthenticatedAttributes); }
From source file:passwdmanager.hig.no.lds.DG_SOD.java
private static SignerInfo createSignerInfo(String digestAlgorithm, String digestEncryptionAlgorithm, byte[] content, byte[] encryptedDigest, X509Certificate docSigningCertificate) throws NoSuchAlgorithmException { /*/* w ww .j a v a2 s . com*/ * Get the issuer name (CN, O, OU, C) from the cert and put it in a * SignerIdentifier struct. */ X500Principal docSignerPrincipal = ((X509Certificate) docSigningCertificate).getIssuerX500Principal(); X509Name docSignerName = new X509Name(true, docSignerPrincipal.getName()); // RFC 2253 format BigInteger serial = ((X509Certificate) docSigningCertificate).getSerialNumber(); SignerIdentifier sid = new SignerIdentifier(new IssuerAndSerialNumber(docSignerName, serial)); AlgorithmIdentifier digestAlgorithmObject = new AlgorithmIdentifier(lookupOIDByMnemonic(digestAlgorithm), new DERNull()); AlgorithmIdentifier digestEncryptionAlgorithmObject = new AlgorithmIdentifier( lookupOIDByMnemonic(digestEncryptionAlgorithm), new DERNull()); ASN1Set authenticatedAttributes = createAuthenticatedAttributes(digestAlgorithm, content); // struct containing the hash of // content ASN1OctetString encryptedDigestObject = new DEROctetString(encryptedDigest); // this is the signature ASN1Set unAuthenticatedAttributes = null; // should be empty set? return new SignerInfo(sid, digestAlgorithmObject, authenticatedAttributes, digestEncryptionAlgorithmObject, encryptedDigestObject, unAuthenticatedAttributes); }