java.lang.Object
br.ufsc.labsec.signature.conformanceVerifier.jades.JadesVerifier
All Implemented Interfaces:
Verifier

public class JadesVerifier
extends Object
implements Verifier
Esta classe implementa os métodos para verificação de uma assinatura JAdES. Estende Verifier.
  • Field Details

    • certPath

      protected CertPath certPath
      Caminho de certificação do assinante
  • Constructor Details

    • JadesVerifier

      public JadesVerifier​(JadesSignatureComponent jadesSignatureComponent)
      Construtor
      Parameters:
      jadesSignatureComponent - Componente de assinatura JAdES
  • Method Details

    • getJadesSignatureComponent

      public JadesSignatureComponent getJadesSignatureComponent()
      Obtém o componente de assinaturas JAdES
      Returns:
      Componente de assinatura JAdES
    • selectTarget

      public void selectTarget​(byte[] target, byte[] detachedPayload) throws VerificationException
      Inicializa os bytes do documento JAdES assinado
      Parameters:
      target - Os bytes do documento JAdES assinado
      detachedPayload - Os bytes do conteúdo assinado no documento
      Throws:
      VerificationException - Exceção caso os bytes não sejam uma assinatura válida
    • selectSignatures

      public void selectSignatures​(boolean isComplete)
      Carrega as informações das assinaturas presentes no contâiner JAdES
      Parameters:
      isComplete - Se o relatório deve ser completo ou não
    • verifyConformity

      protected void verifyConformity​(CertPath certPath, boolean advanced, SignatureReport report)
      Verifica se a assinatura pertence a ICP-Brasil e adiciona a InitialSignatureReport a legislação ou âncoro de confiança que é respeitada pelo certificado do assinante
      Parameters:
      certPath - caminho de certificação
      advanced - se a assinatura é avançada
      report - O relatório de verificação da assinatura
    • getOrderedTimeStamps

      public List<TstToken> getOrderedTimeStamps() throws SignatureAttributeException
      Retorna uma lista de atributos de carimbo do tempo ordenada por identificador, de acordo com o especificado na lista de prioridade. No caso de a lista conter mais do que um carimbo com o mesmo identificador, eles são ordenado por tempo. Na ordenação por tempo, é considerado que o tempo mais recente (ou seja, maior) tem maior prioridade.
      Returns:
      A lista de carimbo de tempo ordenada
      Throws:
      SignatureAttributeException
    • verifyAttributesInMandatedList

      protected boolean verifyAttributesInMandatedList​(List<String> signatureAttributeList, List<String> attributesToExclude, SignatureReport sigReport)
      Os atributos da assinatura que tem o seu identificador presente na lista de atributos obrigatórios passados aqui serão verificados.

      Na lista errors serão retornados os erros que comprometem a assinatura, já na lista de warnings seram retornados os erros que aconteceram mas não infuenciam na validade da assinatura.

      Os atributos que tem seu identificador presente na lista attributesToExclude não serão verificados mesmo que presentes na lista de atributos obrigatórios

      Parameters:
      signatureAttributeList - lista de atributos presentes na assinatura que devem ser levados em conta
      attributesToExclude - lista de atributos que devem ser desconsiderados
      sigReport - o relatório de verificação
    • verifyOnlyUnmandatedAttributes

      protected boolean verifyOnlyUnmandatedAttributes​(List<String> signatureAttributeList, List<String> attributesToExclude, SignatureReport sigReport)
      Verifica apenas os atributos que não são obrigatórios segundo a lista passada. A lista de atributos que não devem ser verificados mesmo que não sejam obrigatórios será levada em conta.
      Parameters:
      signatureAttributeList - lista de atributos da assinatura
      attributesToExclude - atributos a serem ignorados
      sigReport -
    • getAttributeInstancesList

      public List<SignatureAttribute<JadesAttrCommonStruct>> getAttributeInstancesList​(List<String> attributeClasses)
      Retorna a lista de atributos na assinatura
      Returns:
      lista de atributos presente na assinatura
    • getAttribute

      Retorna Retorna um atributo na assinatura, se presente
      Returns:
      Atributo requisitado presente na assinatura
      Throws:
      SignatureAttributeException - quando o atributo não está presente na assinatura ou mal codificado
    • getAttribute

      public SignatureAttribute getAttribute​(JadesSignature signature, Class<? extends SignatureAttribute<JadesAttrCommonStruct>> attributeClass) throws SignatureAttributeException
      Retorna Retorna um atributo na assinatura, se presente
      Returns:
      Atributo requisitado presente na assinatura
      Throws:
      SignatureAttributeException - quando o atributo não está presente na assinatura ou mal codificado
    • getAvailableAttributes

      public List<String> getAvailableAttributes()
      Retorna os atributos das assinaturas
      Specified by:
      getAvailableAttributes in interface Verifier
      Returns:
      Os atributos das assinaturas
    • getSigningCertificateSigReport

      public X509Certificate getSigningCertificateSigReport​(SignatureReport sigReport)
      Busca certificado do assinante de um relatório de assinatura
      Specified by:
      getSigningCertificateSigReport in interface Verifier
      Parameters:
      sigReport - Relatório da assinatura que deseja descobrir o assinante
      Returns:
      Certificado do assinate
    • clear

      public boolean clear()
      Limpa as informações do verificador
      Specified by:
      clear in interface Verifier
      Returns:
      Indica se a limpeza foi bem sucedida
    • report

      public void report​(Report report, SignatureBytesWrapper wrapper) throws VerificationException
      Cria um objeto Report com as informações da verificação
      Specified by:
      report in interface Verifier
      Parameters:
      report - O relatório a ser preenchido
      wrapper - Wrapper com os bytes da assinatura e do conteúdo assinado
      Throws:
      VerificationException - Exceção caso haja algum problema na verificação
    • needSignedContent

      public boolean needSignedContent()
      Verifica se a assinatura possui conteúdo destacado
      Specified by:
      needSignedContent in interface Verifier
      Returns:
      Indica se a assinatura possui conteúdo destacado
    • getMandatedAttributes

      public List<String> getMandatedAttributes()
      Retorna uma lista de atributos obrigatórios
      Specified by:
      getMandatedAttributes in interface Verifier
      Returns:
      Uma lista de atributos obrigatórios
    • addValidationData

      public void addValidationData​(JadesSignature signature)
      Adiciona novos certificados e CRLs ao SignatureIdentityInformation da assinatura de acordo com a presença dos atributos CertificateValues e RevocationValues
      Parameters:
      signature - A assinatura JAdES
      Throws:
      CertificateException - Ocorre esta exceção quando for encontrado algum erro no certificado
      IOException - Ocorre esta exceção quando for encontrado algum erro no arquivo de entrada/saída
    • addCertificatesToValidation

      protected void addCertificatesToValidation​(SignatureReport sigReport, Certificate cert) throws SignatureNotICPBrException
      Realiza a verificação dos certificados e CRLs do caminho de certificação da assinatura e adiciona os resultados ao relatório da assinatura
      Parameters:
      sigReport - O relatório da verificação da assinatura
      cert - O certificado do assinante
      Throws:
      AIAException - Exceção em caso de erro ao obter o caminho de certificação
      SignatureNotICPBrException
    • supports

      public boolean supports​(byte[] signature, byte[] detached) throws SignatureNotICPBrException
      Verifica se o documento assinado é uma assinatura JAdES
      Specified by:
      supports in interface Verifier
      Parameters:
      signature - Os bytes do documento assinado
      detached - Os bytes do arquivo destacado
      Returns:
      Indica se o documento assinado é uma assinatura JAdES
      Throws:
      SignatureNotICPBrException - Exceção caso a assinatura não seja feita com um certificado ICP-Brasil
    • getCertPath

      public CertPath getCertPath​(Certificate certificate)
      Retorna o caminho de certificação do certificado dado
      Specified by:
      getCertPath in interface Verifier
      Parameters:
      certificate - O certificado usado para gerar o caminho de certificação
      Returns:
      O caminho de certificação do certificado dado
    • getSigningCertificate

      public X509Certificate getSigningCertificate​(JadesSignature sig)
      Busca o certificado do assinante
      Parameters:
      sig - A assinatura a ser verificada
      Returns:
      O certificado do assinante
    • checkCertPath

      public boolean checkCertPath​(X509Certificate certificate)
      Verifica se é possível criar o caminho de certificação da assinatura
      Parameters:
      certificate - Certificado utilizado na assinatura
      Returns:
      Indica se o caminho de certificação foi criado com sucesso
    • setPolicyType

      public void setPolicyType​(Profile.AdESType policyType)
      Atribue o tipo da política de assinatura
      Parameters:
      policyType - O tipo da política
    • getPolicyType

      public Profile.AdESType getPolicyType()
      Retorna o tipo da política de assinatura
      Returns:
      O tipo da política
    • getSelectedSignature

      public JadesSignature getSelectedSignature()
      Retorna a assinatura no documento selecionada para verificação
      Returns:
      A assinatura selecionada para verificação
    • getSignaturePolicy

      public SignaturePolicyInterface getSignaturePolicy()
      Retorna a Política de Assinatura da assinatura passada na construção desta classe.
      Returns:
      A política de assinatura
    • setTimeReference

      public void setTimeReference​(Time timeReference)
      Atribue uma refêrencia de tempo que será utilizada no algoritmo de validação dos caminhos de certificação
      Parameters:
      timeReference - tempo que será usado como referência para a validação do caminho de certificação
    • getTSTimeReference

      public Time getTSTimeReference()
      Retorna o tempo em que o carimbo do tempo foi criado pela ACT. Caso nenhum carimbo do tempo existir na assinatura, retorna-se nulo.
      Returns:
      Horário em que o camrimbo do tempo foi criado pela ACT.
    • getCurrentTimeReference

      public Time getCurrentTimeReference()
      Retorna o tempo atual definido pelo verificador. Caso o tempo atual não ter sido definido previamente, retorna-se nulo.
      Returns:
      Horário de tempo atual.
    • setCurrentTimeReference

      public void setCurrentTimeReference​(Time currentTimeReference)
      Define o tempo atual à ser utilizado pelo verificador.
    • getTimeReference

      public Time getTimeReference()
      Retorna o tempo em que o carimbo do tempo foi criado pela ACT. Caso nenhum carimbo do tempo existir na assinatura, retorna-se o tempo atual.
      Returns:
      Horário em que o camrimbo do tempo foi criado pela ACT ou horário atual.
    • hasProofOfExistence

      public boolean hasProofOfExistence()
      Retorna se há a presença de pelo menos um carimbo de tempo que forneça prova de existência.
      Returns:
      Retorna se há a presença de pelo menos um carimbo de tempo que forneça prova de existência.
    • getTimeStampPriorityList

      public List<String> getTimeStampPriorityList()
      Retorna a lista de prioridades dos carimbos do tempo
      Returns:
      a lista de prioridades dos carimbos do tempo
    • getCertPath

      public CertPath getCertPath()
      Retorna o caminho de certificação
      Returns:
      O caminho de certificação
    • getPaReport

      public PaReport getPaReport()
      Retorna o relatório da política de assinatura
      Returns:
      O relatório da política de assinatura
      Throws:
      SignatureAttributeException - Exceção em caso de erro no atributo
    • checkSignaturePolicyPeriod

      protected boolean checkSignaturePolicyPeriod()
      Verifica se a assinatura foi feita dentro do período válido para o uso de políticas.
      Returns:
      Indica se a assinatura está dentro do período válido para o uso de políticas
    • addProcessedCriticalHeader

      public void addProcessedCriticalHeader​(String attr)
      Adiciona um atributo aos atributos processados que são críticos
      Parameters:
      attr - Os atributos processados