java.lang.Object
br.ufsc.labsec.signature.conformanceVerifier.xades.XadesSignature
All Implemented Interfaces:
Signature<Element>, GenericXadesSignature, SignatureObject
Direct Known Subclasses:
CounterSignature

public class XadesSignature
extends Object
implements GenericXadesSignature
Esta classe representa uma assinatura do tipo XAdES. Implementa GenericXadesSignature.
  • Field Details

  • Constructor Details

    • XadesSignature

      public XadesSignature​(Document xml, Element signature, XadesSignatureContainer xadesSignatureContainer)
      Constrói uma assinatura XAdES a partir da representação DOM do documento XML assinado, e do elemento que representa a assinatura no documento.
      Parameters:
      xml - A representação DOM de um documento XML
      signature - O elemento que representa a assinatura no documento
      xadesSignatureContainer - O contêiner de assinatura XAdES
  • Method Details

    • getSignatureElement

      public Element getSignatureElement()
      Informa em qual Element especifico está a representação da assinatura
      Returns:
      O nodo que contém a assinatura na estrutura XML do documento assinado
    • getSignatureMethod

      public String getSignatureMethod() throws SignatureException
      Throws:
      SignatureException
    • hasValidKeyInfo

      public boolean hasValidKeyInfo​(List<Reference> references, DOMValidateContext validateContext)
      Verifica se o estado do ds:KeyInfo permite a ausência de um XAdES:SignedProperties na assinatura
      Parameters:
      references - Lista de referências do SignedInfo
      validateContext - Contexto contendo assinatura e chave pública de verificação
      Returns:
      Verdadeiro se permite a ausência, falso se exige a presença do XAdES:SignedProperties
    • getAlgorithmFromSignature

      public String getAlgorithmFromSignature()
    • verify

      public boolean verify​(X509Certificate signerCertificate, SignatureReport sigReport, boolean isComplete, boolean isIcpBr) throws VerificationException
      Verifica a assinatura XAdES baseado no documento(http://www.w3.org/TR/XAdES/) e anexa ao report.
      Specified by:
      verify in interface GenericXadesSignature
      Parameters:
      signerCertificate - O certificado do signatário
      sigReport - O relátorio da assinatura
      isComplete - Se o relatório deve ser completo ou simples
      isIcpBr - Se a cadeia de certificados é Icp-BR para fazer ExtensionsReport
      Returns:
      Indica se a assinatura XAdES está de acordo com os padrões do documento (http://www.w3.org/TR/XAdES/)
      Throws:
      VerificationException - Exceção em caso de erro durante a verificação
    • getXml

      public Document getXml()
      Retorna a assinatura em forma de Document para que se possa navegar por ela mais livremente. Obs.: A referência interna é passada, por isso se for causado algum erro na assinatura através do document, esse erros posteriomente aparecerão dentro do XadesSignature também.
      Returns:
      A assinatura na representação DOM
    • getAttributeList

      public List<String> getAttributeList()
      Retorna a lista de atributos presente na assinatura.
      Specified by:
      getAttributeList in interface Signature<Element>
      Returns:
      A lista de atributos na assinatura
    • getEncodedAttribute

      public Element getEncodedAttribute​(String attributeId, Integer index) throws SignatureAttributeNotFoundException
      Retorna o atributo correspondente ao identificador dado
      Specified by:
      getEncodedAttribute in interface Signature<Element>
      Parameters:
      attributeId - O identificador do atributo
      index - O índice do atributo
      Returns:
      O atributo correspondente ao identificador dado
      Throws:
      SignatureAttributeNotFoundException - Exceção caso o atributo não seja encontrado
    • getEncodedAttribute

      public Element getEncodedAttribute​(String attributeId) throws SignatureAttributeNotFoundException
      Retorna o primeiro atributo da assinatura
      Specified by:
      getEncodedAttribute in interface GenericXadesSignature
      Parameters:
      attributeId - O identificador do atributo
      Returns:
      O primeiro atributo da assinatura
      Throws:
      SignatureAttributeNotFoundException - atributo não encontrado
    • hasImpliedPolicy

      public boolean hasImpliedPolicy​(SignaturePolicyInterface signaturePolicyInterface)
    • getSignaturePolicyIdentifier

      public String getSignaturePolicyIdentifier​(SignaturePolicyInterface signaturePolicyInterface)
      Retorna o identificador da política de assinatura
      Specified by:
      getSignaturePolicyIdentifier in interface GenericXadesSignature
      Returns:
      O identificador da política de assinatura
    • isExternalSignedData

      public boolean isExternalSignedData()
      Verifica se o conteúdo assinado é externo
      Specified by:
      isExternalSignedData in interface GenericXadesSignature
      Returns:
      Indica se o conteúdo assinado é externo
    • getSignatureValueHash

      public byte[] getSignatureValueHash​(String algorithm) throws PbadException, NoSuchAlgorithmException
      Retorna o valor de hash da assinatura
      Specified by:
      getSignatureValueHash in interface GenericXadesSignature
      Parameters:
      algorithm - O algoritmo a ser utilizado para o cálculo de hash
      Returns:
      Array de bytes com valor de hash da assinatura
      Throws:
      PbadException - Exceção em caso de erro no cálculo
      NoSuchAlgorithmException
    • isSignatureValueHashValid

      public boolean isSignatureValueHashValid​(String algorithm, byte[] expected) throws PbadException
      Throws:
      PbadException
    • addUnsignedAttribute

      public void addUnsignedAttribute​(SignatureAttribute<Element> attribute) throws SignatureAttributeException
      Adiciona um atributo à lista de atributos não-assinados
      Specified by:
      addUnsignedAttribute in interface Signature<Element>
      Parameters:
      attribute - O atributo a ser adicionado
      Throws:
      DOMException - Exceção em caso de erro na estrutura do XML
      SignatureAttributeException - Exceção em caso de erro no atributo
    • getCounterSignatures

      public List<XadesSignature> getCounterSignatures()
      Retorna uma lista de contra-assinatura
      Specified by:
      getCounterSignatures in interface Signature<Element>
      Returns:
      A lista de contra-assinaturas
    • buildSignerIdentifier

      protected org.bouncycastle.cms.SignerId buildSignerIdentifier​(X500Principal issuerName, BigInteger serialNumber)
      Constrói um objeto da classe SignerId.
      Parameters:
      issuerName - Nome do emissor do certificado
      serialNumber - Número do serial do certificado
      Returns:
      O SignerId gerado
    • hasSigningCertificate

      protected boolean hasSigningCertificate​(CounterSignature counterSignature)
      Verifica se existe a propriedade SigningCertificate na contra assinatura
      Parameters:
      counterSignature - A contra assinatura
      Returns:
      Indica se existe a propriedade SigningCertificate
    • getSignatureValueAttribute

      public String getSignatureValueAttribute()
      Obtém o valor do atributo Id da tag SignatureValue
      Returns:
      Valor do atributo Id da tag SignatureValue
    • replaceUnsignedAttribute

      public void replaceUnsignedAttribute​(SignatureAttribute<Element> attribute) throws SignatureAttributeException
      Substitui um atributo não-assinado
      Parameters:
      attribute - O novo valor do atributo não-assinado
      Throws:
      SignatureAttributeException - Exceção em caso de erro na manipulação dos atributos
    • getFormat

      public SignatureFormat getFormat()
      Retorna o formato da assinatura.
      Specified by:
      getFormat in interface GenericXadesSignature
      Returns:
      Formato XAdES
    • getSignaturePolicyUri

      public String getSignaturePolicyUri​(SignaturePolicyInterface signaturePolicyInterface)
      Retorna a URI da política de assinatura
      Specified by:
      getSignaturePolicyUri in interface GenericXadesSignature
      Returns:
      A URI da política de assinatura
    • getSignaturePolicyHashValue

      public String getSignaturePolicyHashValue​(SignaturePolicyInterface signaturePolicyInterface)
      Retorna o valor de hash no nodo da política de assinatura
      Specified by:
      getSignaturePolicyHashValue in interface GenericXadesSignature
      Returns:
      O hash da política de assinatura
    • removeUnsignedAttribute

      public void removeUnsignedAttribute​(String attributeId, int index) throws SignatureAttributeException
      Remove o nodo do atributo não-assinado no arquivo
      Parameters:
      attributeId - O identificador do atributo a ser removido
      index - O índice do atributo
      Throws:
      SignatureAttributeException - Exceção caso o atributo não seja encontrado
    • getArchiveTimeStampHashValue

      public byte[] getArchiveTimeStampHashValue​(String hashAlgorithmName) throws PbadException
      Calcula o valor de hash do carimbo de tempo de arquivamento
      Specified by:
      getArchiveTimeStampHashValue in interface GenericXadesSignature
      Parameters:
      hashAlgorithmName - O algoritmo a ser utilizado no cálculo
      Returns:
      O valor de hash do carimbo
      Throws:
      PbadException - Exceção em caso de erro na canonização
    • getArchiveTimeStampHashValue

      public byte[] getArchiveTimeStampHashValue​(String hashAlgorithmName, Time time) throws PbadException
      Calcula o valor de hash do carimbo de tempo de arquivamento
      Specified by:
      getArchiveTimeStampHashValue in interface GenericXadesSignature
      Parameters:
      hashAlgorithmName - O algoritmo a ser utilizado no cálculo
      time - O horário do carimbo
      Returns:
      O valor de hash do carimbo
      Throws:
      PbadException - Exceção em caso de erro na canonização
    • isArchiveTimeStampHashValue

      public boolean isArchiveTimeStampHashValue​(String hashAlgorithmName, Time time, byte[] expected) throws PbadException
      Throws:
      PbadException
    • calculateArchiveTimeStampHashValue

      protected void calculateArchiveTimeStampHashValue​(OutputStream octetStream, Time time) throws CanonicalizationException, SignatureAttributeException
      Passos para cálculo do hash do carimbo do tempo de arquivamento, conforme o documento ETSI TS 101 903 V1.4.1 (2009-06) seção 8.2.1
      Parameters:
      octetStream - Onde está sendo escrito os bytes contatenados do hash
      time - A data do carimbo do tempo
      Throws:
      SignatureAttributeException - Exceção em caso de erro nos atributos da assinatura
      EncodingException - Exceção em caso de erro na canonização
      CanonicalizationException
    • getContainer

      public XadesSignatureContainer getContainer()
      Retorna o contêiner da assinatura XAdES
      Specified by:
      getContainer in interface GenericXadesSignature
      Returns:
      O contêiner da assinatura XAdES
    • getSigningCertificate

      public Certificate getSigningCertificate()
      Retorna o certificado do assinante
      Returns:
      O certificado do assinante
    • getCertificatesAtKeyInfo

      public List<Certificate> getCertificatesAtKeyInfo()
      Retorna os certificados da estrutura KeyInfo
      Returns:
      Os certificados da estrutura KeyInfo ou nulo em caso de erro
    • getCrls

      public List<X509CRL> getCrls()
      Retorna as CRLs da assinatura
      Returns:
      As CRLs da assinatura
      Throws:
      CRLException - Exceção em caso de erro na manipulação das CRLs
    • addX509DataContent

      public static void addX509DataContent​(Collection<Certificate> certificates, Collection<X509CRL> crls, X509Data x509Data)
      Adiciona os certificados e CRLs, presentes na estrutura X509Data, nas listas dadas
      Parameters:
      certificates - A lista de certificados
      crls - A lista de CRLs
      x509Data - A estrutura X509Data
    • getSubjectName

      public String getSubjectName()
      Retorna o nome do assinante
      Returns:
      O nome do assinante
    • isEnveloped

      public boolean isEnveloped()
      Verifica se a assinatura Xades é do tipo envelopada por meio da URI da w3 dentro dos nodos com a tag Transform
      Returns:
      se ela é envelopada
    • getSignatureType

      public SignatureReport.SignerType getSignatureType()
    • hasValidKeyInfoElement

      public boolean hasValidKeyInfoElement​(X509Certificate signerCertificate)
    • resolveAttributeContentToBeHashed

      public byte[] resolveAttributeContentToBeHashed​(List<String> mandatoryAttrs, List<String> optionalAttrs, String namespace, String target, boolean withSignature) throws PbadException
      Throws:
      PbadException
    • getAlgorithmOid

      public String getAlgorithmOid()
      Retorna o identificador do algoritmo de assinatura (OID) utilizado na assinatura.
      Returns:
      Uma string contendo o OID do algoritmo de assinatura.