List of usage examples for org.bouncycastle.asn1 ASN1EncodableVector add
public void add(ASN1Encodable element)
From source file:es.gob.afirma.envelopers.cms.Utils.java
License:Open Source License
/** Inicializa el contexto. * @param digestAlgorithm Algoritmo de huella digital. * @param datos Datos a firmar o envolver. * @param dataType Tipo de los datos a firmar o envolver. * @param messageDigest Huella digital de los datos a firmar o envolver. * @return ASN1EncodableVector Contexto codificado en ASN.1. * @throws NoSuchAlgorithmException Cuando el JRE no soporta algún algoritmo necesario. */ static ASN1EncodableVector initContexExpecific(final String digestAlgorithm, final byte[] datos, final String dataType, final byte[] messageDigest) throws NoSuchAlgorithmException { // authenticatedAttributes final ASN1EncodableVector contexExpecific = new ASN1EncodableVector(); // tipo de contenido if (dataType != null) { contexExpecific .add(new Attribute(CMSAttributes.contentType, new DERSet(new ASN1ObjectIdentifier(dataType)))); }//from w w w.ja v a2 s. c o m // fecha de firma contexExpecific.add(new Attribute(CMSAttributes.signingTime, new DERSet(new DERUTCTime(new Date())))); // MessageDigest contexExpecific.add(new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(messageDigest != null ? messageDigest : MessageDigest.getInstance(digestAlgorithm).digest(datos))))); return contexExpecific; }
From source file:es.gob.afirma.envelopers.cms.Utils.java
License:Open Source License
/** Método que genera la parte que contiene la información del * Usuario. Se generan los atributos no firmados. * @param uatrib/*w ww. j av a2s.c om*/ * Lista de atributos no firmados que se insertarán dentro * del archivo de firma. * @return Los atributos no firmados de la firma. */ static ASN1Set generateUnsignedAtt(final Map<String, byte[]> uatrib) { // // ATRIBUTOS // authenticatedAttributes final ASN1EncodableVector contexExpecific = new ASN1EncodableVector(); // agregamos la lista de atributos a mayores. if (uatrib.size() != 0) { final Iterator<Map.Entry<String, byte[]>> it = uatrib.entrySet().iterator(); while (it.hasNext()) { final Map.Entry<String, byte[]> e = it.next(); contexExpecific.add(new Attribute( // el oid new ASN1ObjectIdentifier(e.getKey().toString()), // el array de bytes en formato string new DERSet(new DERPrintableString(new String(e.getValue()))))); } } else { return null; } return SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); }
From source file:es.gob.afirma.envelopers.cms.Utils.java
License:Open Source License
static OriginatorInfo checkCertificates(final X509Certificate[] signerCertificateChain, final ASN1Set certs) throws IOException, CertificateEncodingException { OriginatorInfo origInfo = null;/*from w ww. ja v a 2s . c o m*/ // Si no hay certificados, se deja como esta. if (signerCertificateChain.length != 0) { // no tiene remitentes if (certs == null) { ASN1Set certificates = null; final ASN1Set certrevlist = null; final List<ASN1Encodable> ce = new ArrayList<ASN1Encodable>(); for (final X509Certificate element : signerCertificateChain) { if (element != null) { ce.add(Certificate.getInstance(ASN1Primitive.fromByteArray(element.getEncoded()))); } } // se introducen la nueva cadena de certificados. if (ce.size() != 0) { certificates = SigUtils.createBerSetFromList(ce); origInfo = new OriginatorInfo(certificates, certrevlist); } } // tiene remitentes else { // Se obtienen los certificados que tenia la firma. final ASN1EncodableVector v = new ASN1EncodableVector(); if (certs.getObjectAt(0) instanceof DERSequence) { final ASN1EncodableVector subv = new ASN1EncodableVector(); for (int i = 0; i < certs.size(); i++) { subv.add(certs.getObjectAt(i)); } v.add(new BERSet(subv)); } else { for (int i = 0; i < certs.size(); i++) { v.add(certs.getObjectAt(i)); } } ASN1Set certificates = null; final ASN1Set certrevlist = new BERSet(new ASN1EncodableVector()); final List<ASN1Encodable> ce = new ArrayList<ASN1Encodable>(); for (final X509Certificate element : signerCertificateChain) { if (element != null) { ce.add(Certificate.getInstance(ASN1Primitive.fromByteArray(element.getEncoded()))); } } // se introducen la nueva cadena de certificados. if (ce.size() != 0) { certificates = SigUtils.createBerSetFromList(ce); v.add(certificates); origInfo = new OriginatorInfo(new BERSet(v), certrevlist); } } } return origInfo; }
From source file:es.gob.afirma.envelopers.cms.Utils.java
License:Open Source License
/** Genera la parte que contiene la información del * usuario. Se generan los atributos que se necesitan para generar la firma. * @param digestAlgorithm Identifica el algoritmo utilizado firmado. * @param datos Datos firmados.// w ww. j a va 2s .co m * @param dataType Identifica el tipo del contenido a firmar. * @param uatrib Conjunto de atributos no firmados. * @return Los datos necesarios para generar la firma referente a los datos * del usuario. * @throws java.security.NoSuchAlgorithmException Cuando el JRE no soporta algún algoritmo necesario. */ static ASN1Set generateSignerInfo(final String digestAlgorithm, final byte[] datos, final String dataType, final Map<String, byte[]> uatrib) throws NoSuchAlgorithmException { // // ATRIBUTOS // authenticatedAttributes final ASN1EncodableVector contexExpecific = Utils.initContexExpecific(digestAlgorithm, datos, dataType, null); // agregamos la lista de atributos a mayores. if (uatrib.size() != 0) { final Iterator<Entry<String, byte[]>> it = uatrib.entrySet().iterator(); while (it.hasNext()) { final Map.Entry<String, byte[]> e = it.next(); contexExpecific.add(new Attribute( // el oid new ASN1ObjectIdentifier(e.getKey().toString()), // el array de bytes en formato string new DERSet(new DERPrintableString(new String(e.getValue()))))); } } else { return null; } return SigUtils.getAttributeSet(new AttributeTable(contexExpecific)); }
From source file:es.gob.afirma.signers.cades.CAdESTriPhaseSigner.java
License:Open Source License
/** Realiza una firma CAdES completa. * @param digestAlgorithmName Algoritmo de huella digital * @param content Datos a firmar (usar <code>null</code> si no se desean añadir a la firma) * @param signerCertificateChain Cadena de certificados del firmante * @param signature Firma PKCS#1 v1.5 de los atributos firmados * @param signedAttributes Atributos firmados (prefirma) * @return Firma CAdES completa//from ww w .j av a 2s .c o m * @throws AOException Cuando se produce cualquier error durante el proceso. */ public static byte[] postSign(final String digestAlgorithmName, final byte[] content, final X509Certificate[] signerCertificateChain, final byte[] signature, final byte[] signedAttributes) throws AOException { if (signerCertificateChain == null || signerCertificateChain.length == 0) { throw new IllegalArgumentException("La cadena de certificados debe contener al menos una entrada"); //$NON-NLS-1$ } final TBSCertificateStructure tbsCertificateStructure; try { tbsCertificateStructure = TBSCertificateStructure .getInstance(ASN1Primitive.fromByteArray(signerCertificateChain[0].getTBSCertificate())); } catch (final Exception e) { throw new AOException("No se ha podido crear la estructura de certificados", e); //$NON-NLS-1$ } final SignerIdentifier signerIdentifier = new SignerIdentifier( new IssuerAndSerialNumber(X500Name.getInstance(tbsCertificateStructure.getIssuer()), tbsCertificateStructure.getSerialNumber().getValue())); // Algoritmo de huella digital final AlgorithmIdentifier digestAlgorithmOID; try { digestAlgorithmOID = SigUtils.makeAlgId(AOAlgorithmID.getOID(digestAlgorithmName)); } catch (final Exception e) { throw new AOException("Error obteniendo el OID en ASN.1 del algoritmo de huella digital", e); //$NON-NLS-1$ } // EncryptionAlgorithm final AlgorithmIdentifier keyAlgorithmIdentifier; try { keyAlgorithmIdentifier = SigUtils.makeAlgId(AOAlgorithmID.getOID("RSA")); //$NON-NLS-1$ } catch (final Exception e) { throw new AOException("Error al codificar el algoritmo de cifrado", e); //$NON-NLS-1$ } // Firma PKCS#1 codificada final ASN1OctetString encodedPKCS1Signature = new DEROctetString(signature); // Atributos firmados final ASN1Set asn1SignedAttributes; try { asn1SignedAttributes = (ASN1Set) ASN1Primitive.fromByteArray(signedAttributes); } catch (final IOException e) { throw new AOException("Error en la inclusion de la recuperacion de los SignedAttibutes", e); //$NON-NLS-1$ } // SignerInfo final ASN1EncodableVector signerInfo = new ASN1EncodableVector(); signerInfo.add(new SignerInfo(signerIdentifier, digestAlgorithmOID, asn1SignedAttributes, keyAlgorithmIdentifier, encodedPKCS1Signature, null)); // ContentInfo final ContentInfo contentInfo; if (content != null) { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); final CMSProcessable msg = new CMSProcessableByteArray(content); try { msg.write(baos); } catch (final Exception e) { throw new AOException("Error en la escritura del contenido implicito en el ContentInfo", e); //$NON-NLS-1$ } contentInfo = new ContentInfo(new ASN1ObjectIdentifier(PKCSObjectIdentifiers.data.getId()), new BEROctetString(baos.toByteArray())); } else { contentInfo = new ContentInfo(new ASN1ObjectIdentifier(PKCSObjectIdentifiers.data.getId()), null); } // Certificados final List<ASN1Encodable> ce = new ArrayList<ASN1Encodable>(); for (final X509Certificate cert : signerCertificateChain) { try { ce.add(Certificate.getInstance(ASN1Primitive.fromByteArray(cert.getEncoded()))); } catch (final Exception e) { Logger.getLogger("es.gob.afirma").severe( //$NON-NLS-1$ "Error insertando el certificado '" + AOUtil.getCN(cert) + "' en la cadena de confianza"); //$NON-NLS-1$ //$NON-NLS-2$ } } final ASN1Set certificates = SigUtils.createBerSetFromList(ce); // Algoritmos de huella digital final ASN1EncodableVector digestAlgorithms = new ASN1EncodableVector(); digestAlgorithms.add(digestAlgorithmOID); try { return new ContentInfo(PKCSObjectIdentifiers.signedData, new SignedData(new DERSet(digestAlgorithms), contentInfo, certificates, null, new DERSet(signerInfo))).getEncoded(ASN1Encoding.DER); } catch (final IOException e) { throw new AOException("Error creando el ContentInfo de CAdES: " + e, e); //$NON-NLS-1$ } }
From source file:es.gob.afirma.signers.cades.CAdESUtils.java
License:Open Source License
/** Genera una estructura <i>SigningCertificateV2</i> según RFC 5035: * * <pre>/*from w ww . j a v a2s .co m*/ * id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) * member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) * smime(16) id-aa(2) 12 * } * * SigningCertificate ::= SEQUENCE { * certs SEQUENCE OF ESSCertID, * policies SEQUENCE OF PolicyInformation OPTIONAL * } * </pre> * * @param cert Certificado del firmante * @param digestAlgorithmName Nombre del algoritmo de huella digital a usar * @param policy Política de firma * @return Estructura <i>SigningCertificate</i> según RFC 5035 * @throws CertificateEncodingException Si el certificado proporcionado no es válido * @throws NoSuchAlgorithmException Si no se soporta el algoritmo de huella indicado */ private static Attribute getSigningCertificateV1(final X509Certificate cert, final String digestAlgorithmName, final AdESPolicy policy) throws CertificateEncodingException, NoSuchAlgorithmException { // INICIO SINGNING CERTIFICATE /** IssuerSerial ::= SEQUENCE { issuer GeneralNames, serialNumber * CertificateSerialNumber } */ final GeneralName gn = new GeneralName(X500Name.getInstance(cert.getIssuerX500Principal().getEncoded())); final GeneralNames gns = new GeneralNames(gn); final IssuerSerial isuerSerial = new IssuerSerial(gns, cert.getSerialNumber()); /** ESSCertID ::= SEQUENCE { certHash Hash, issuerSerial IssuerSerial * OPTIONAL } * Hash ::= OCTET STRING -- SHA1 hash of entire certificate */ final byte[] certHash = MessageDigest.getInstance(digestAlgorithmName).digest(cert.getEncoded()); final ESSCertID essCertID = new ESSCertID(certHash, isuerSerial); /** PolicyInformation ::= SEQUENCE { policyIdentifier CertPolicyId, * policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo * OPTIONAL } * CertPolicyId ::= OBJECT IDENTIFIER * PolicyQualifierInfo ::= SEQUENCE { policyQualifierId * PolicyQualifierId, qualifier ANY DEFINED BY policyQualifierId } */ final SigningCertificate scv; if (policy != null && policy.getPolicyIdentifier() != null) { /** SigningCertificateV2 ::= SEQUENCE { * certs SEQUENCE OF ESSCertIDv2, * policies SEQUENCE OF PolicyInformation OPTIONAL * } */ /* * HAY QUE HACER UN SEQUENCE, YA QUE EL CONSTRUCTOR DE BOUNCY * CASTLE NO TIENE DICHO CONSTRUCTOR. */ final ASN1EncodableVector v = new ASN1EncodableVector(); v.add(new DERSequence(essCertID)); v.add(new DERSequence(getPolicyInformation(policy))); scv = SigningCertificate.getInstance(new DERSequence(v)); // con politica } else { scv = new SigningCertificate(essCertID); // Sin politica } /** id-aa-signingCertificate OBJECT IDENTIFIER ::= { * iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) id-aa(2) 12 * } */ return new Attribute(PKCSObjectIdentifiers.id_aa_signingCertificate, new DERSet(scv)); }
From source file:es.gob.afirma.signers.cades.CAdESUtils.java
License:Open Source License
private static Attribute getSigPolicyId(final String digestAlgorithmName, final AdESPolicy policy) throws IOException { /** SigPolicyId ::= OBJECT IDENTIFIER Politica de firma. */ final ASN1ObjectIdentifier doiSigPolicyId = new ASN1ObjectIdentifier( policy.getPolicyIdentifier().toLowerCase(Locale.US).replace("urn:oid:", "") //$NON-NLS-1$ //$NON-NLS-2$ );/*w ww.j a v a 2 s .c o m*/ /** OtherHashAlgAndValue ::= SEQUENCE { * hashAlgorithm AlgorithmIdentifier, * hashValue OCTET STRING * } */ // Algoritmo para el hash final AlgorithmIdentifier hashid; // Si tenemos algoritmo de calculo de hash, lo ponemos if (policy.getPolicyIdentifierHashAlgorithm() != null) { hashid = SigUtils.makeAlgId(AOAlgorithmID .getOID(AOSignConstants.getDigestAlgorithmName(policy.getPolicyIdentifierHashAlgorithm()))); } // Si no tenemos, ponemos el algoritmo de firma. else { hashid = SigUtils.makeAlgId(AOAlgorithmID.getOID(digestAlgorithmName)); } // Huella del documento final byte[] hashed; if (policy.getPolicyIdentifierHash() != null) { hashed = Base64.decode(policy.getPolicyIdentifierHash()); } else { hashed = new byte[] { 0 }; } final DigestInfo otherHashAlgAndValue = new DigestInfo(hashid, hashed); /** AOSigPolicyQualifierInfo ::= SEQUENCE { * SigPolicyQualifierId SigPolicyQualifierId, * SigQualifier ANY DEFINED BY policyQualifierId * } */ AOSigPolicyQualifierInfo spqInfo = null; if (policy.getPolicyQualifier() != null) { spqInfo = new AOSigPolicyQualifierInfo(policy.getPolicyQualifier().toString()); } /** SignaturePolicyId ::= SEQUENCE { * sigPolicyId SigPolicyId, * sigPolicyHash SigPolicyHash, * sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF AOSigPolicyQualifierInfo OPTIONAL * } */ final ASN1EncodableVector v = new ASN1EncodableVector(); // sigPolicyId v.add(doiSigPolicyId); // sigPolicyHash v.add(otherHashAlgAndValue.toASN1Primitive()); // como sequence // sigPolicyQualifiers if (spqInfo != null) { v.add(new DERSequence(spqInfo.toASN1Primitive())); } final DERSequence ds = new DERSequence(v); return new Attribute(PKCSObjectIdentifiers.id_aa_ets_sigPolicyId, new DERSet(ds.toASN1Primitive())); }
From source file:es.gob.afirma.signers.cades.CAdESUtils.java
License:Open Source License
/** Genera la parte que contiene la información del Usuario. * Se generan los atributos que se necesitan para generar la firma. * * <pre>//from w w w . j ava 2s . co m * SignerInfo ::= SEQUENCE { * version CMSVersion, * sid SignerIdentifier, * digestAlgorithm DigestAlgorithmIdentifier, * signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, * signatureAlgorithm SignatureAlgorithmIdentifier, * signature SignatureValue, * unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL * } * * SignerIdentifier ::= CHOICE { * issuerAndSerialNumber IssuerAndSerialNumber, * subjectKeyIdentifier [0] SubjectKeyIdentifier * } * * SignedAttributes ::= SET SIZE (1..MAX) OF Attribute * * UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute * * Attribute ::= SEQUENCE { * attrType OBJECT IDENTIFIER, * attrValues SET OF AttributeValue * } * * AttributeValue ::= ANY * * SignatureValue ::= OCTET STRING * </pre> * * @param cert Certificado del firmante * @param digestAlgorithmName Nombre del algoritmo de huella digital a usar * @param data Datos firmados * @param policy Política de firma * @param signingCertificateV2 {@code true} para utilizar la versión 2 del campo * signingCertificate, {@code false} para utilizar la versión 1. * @param dataDigest Huella digital de los datos firmados * @param signDate Fecha de la firma (debe establecerse externamente para evitar desincronismos en la firma trifásica) * @param padesMode <code>true</code> para generar una firma CAdES compatible PAdES, <code>false</code> para generar una firma CAdES normal * @param contentType Tipo de contenido definido por su OID. * @param contentDescription Descripción textual del tipo de contenido firmado. * @param ctis Lista de compromisos adquiridos con esta firma * @param csm Metadatos sobre el firmante * @return Los datos necesarios para generar la firma referente a los datos del usuario. * @throws java.security.NoSuchAlgorithmException Cuando se introduce un algoritmo no válido. * @throws java.io.IOException Cuando se produce un error de entrada/salida. * @throws CertificateEncodingException Error de codificación en el certificado. */ public static ASN1EncodableVector generateSignerInfo(final Certificate cert, final String digestAlgorithmName, final byte[] data, final AdESPolicy policy, final boolean signingCertificateV2, final byte[] dataDigest, final Date signDate, final boolean padesMode, final String contentType, final String contentDescription, final List<CommitmentTypeIndicationBean> ctis, final CAdESSignerMetadata csm) throws NoSuchAlgorithmException, IOException, CertificateEncodingException { // // ATRIBUTOS // authenticatedAttributes (http://tools.ietf.org/html/rfc3852#section-11) final ASN1EncodableVector contexExpecific = initContexExpecific(digestAlgorithmName, data, dataDigest, signDate, padesMode); if (signingCertificateV2) { contexExpecific.add(getSigningCertificateV2((X509Certificate) cert, digestAlgorithmName, policy)); } else { contexExpecific.add(getSigningCertificateV1((X509Certificate) cert, digestAlgorithmName, policy)); } // SIGPOLICYID ATTRIBUTE if (policy != null && policy.getPolicyIdentifier() != null) { contexExpecific.add(getSigPolicyId(digestAlgorithmName, policy)); } /** Secuencia con el tipo de contenido firmado. No se agrega en firmas PAdES. * * ContentHints ::= SEQUENCE { * contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL, * contentType ContentType * } */ if (contentType != null && !padesMode) { final ContentHints contentHints; if (contentDescription != null) { contentHints = new ContentHints(new ASN1ObjectIdentifier(contentType), new DERUTF8String(contentDescription)); } else { contentHints = new ContentHints(new ASN1ObjectIdentifier(contentType)); } contexExpecific.add(new Attribute(PKCSObjectIdentifiers.id_aa_contentHint, new DERSet(contentHints.toASN1Primitive()))); } // Atributos adicionales segun seccion 5.11 de RFC 5126 // commitment-type-indication if (ctis != null && ctis.size() > 0) { for (final CommitmentTypeIndicationBean ctib : ctis) { contexExpecific.add(new Attribute(PKCSObjectIdentifiers.id_aa_ets_commitmentType, new DERSet( CommitmentTypeIndicationsHelper.generateCommitmentTypeIndication(ctib).toASN1Primitive()))); } } // id-aa-ets-signerLocation if (csm != null && CAdESSignerMetadataHelper.getSignerLocation(csm.getSignerLocation()) != null) { contexExpecific.add(new Attribute(PKCSObjectIdentifiers.id_aa_ets_signerLocation, new DERSet(CAdESSignerMetadataHelper.getSignerLocation(csm.getSignerLocation())))); } return contexExpecific; }
From source file:es.gob.afirma.signers.cades.CAdESUtils.java
License:Open Source License
/** Obtiene un <i>PolicyInformation</i> a partir de los datos de la política. * Sirve para los datos de SigningCertificate y SigningCertificateV2. Tiene que llevar algunos * datos de la política.//from ww w. j a va 2 s . c o m * * <pre> * PolicyInformation ::= SEQUENCE { * policyIdentifier CertPolicyId, * policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL * } * * CertPolicyId ::= OBJECT IDENTIFIER * * PolicyQualifierInfo ::= SEQUENCE { * policyQualifierId PolicyQualifierId, * qualifier ANY DEFINED BY policyQualifierId * } * * -- policyQualifierIds for Internet policy qualifiers * * id-qt OBJECT IDENTIFIER ::= { id-pkix 2 } * id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } * id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } * * PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice ) * * Qualifier ::= CHOICE { * cPSuri CPSuri, * userNotice UserNotice * } * * CPSuri ::= IA5String * * UserNotice ::= SEQUENCE { * noticeRef NoticeReference OPTIONAL, * explicitText DisplayText OPTIONAL * } * * NoticeReference ::= SEQUENCE { * organization DisplayText, * noticeNumbers SEQUENCE OF INTEGER * } * * DisplayText ::= CHOICE { * ia5String IA5String (SIZE (1..200)), * visibleString VisibleString (SIZE (1..200)), * bmpString BMPString (SIZE (1..200)), * utf8String UTF8String (SIZE (1..200)) * } * </pre> * * @param policy Política de la firma. * @return Estructura con la política preparada para insertarla en la firma. */ private static PolicyInformation[] getPolicyInformation(final AdESPolicy policy) { if (policy == null) { throw new IllegalArgumentException("La politica de firma no puede ser nula en este punto"); //$NON-NLS-1$ } /** PolicyQualifierInfo ::= SEQUENCE { * policyQualifierId PolicyQualifierId, * qualifier ANY DEFINED BY policyQualifierId * } */ final PolicyQualifierId pqid = PolicyQualifierId.id_qt_cps; DERIA5String uri = null; if (policy.getPolicyQualifier() != null && !policy.getPolicyQualifier().equals("")) { //$NON-NLS-1$ uri = new DERIA5String(policy.getPolicyQualifier().toString()); } final ASN1EncodableVector v = new ASN1EncodableVector(); PolicyQualifierInfo pqi = null; if (uri != null) { v.add(pqid); v.add(uri); pqi = PolicyQualifierInfo.getInstance(new DERSequence(v)); } /** PolicyInformation ::= SEQUENCE { * policyIdentifier CertPolicyId, * policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL * } */ if (policy.getPolicyQualifier() == null || pqi == null) { return new PolicyInformation[] { new PolicyInformation(new ASN1ObjectIdentifier( policy.getPolicyIdentifier().toLowerCase(Locale.US).replace("urn:oid:", "") //$NON-NLS-1$ //$NON-NLS-2$ )) }; } return new PolicyInformation[] { new PolicyInformation( new ASN1ObjectIdentifier(policy.getPolicyIdentifier().toLowerCase(Locale.US).replace("urn:oid:", "") //$NON-NLS-1$ //$NON-NLS-2$ ), new DERSequence(pqi)) }; }
From source file:es.gob.afirma.signers.cades.CAdESUtils.java
License:Open Source License
private static ASN1EncodableVector initContexExpecific(final String dataDigestAlgorithmName, final byte[] data, final byte[] dataDigest, final Date signDate, final boolean padesMode) throws NoSuchAlgorithmException { // authenticatedAttributes final ASN1EncodableVector contexExpecific = new ASN1EncodableVector(); // ContentType es obligatorio, y debe tener siempre el valor "id-data" contexExpecific.add(new Attribute(CMSAttributes.contentType, new DERSet(PKCSObjectIdentifiers.data))); // fecha de firma, no se anade en modo PAdES, pero es obligatorio en CAdES if (!padesMode) { contexExpecific.add(new Attribute(CMSAttributes.signingTime, new DERSet(new ASN1UTCTime(signDate)))); }/* w ww . j a va2s .c o m*/ // MessageDigest contexExpecific.add(new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(dataDigest != null ? dataDigest : MessageDigest.getInstance(dataDigestAlgorithmName).digest(data))))); return contexExpecific; }