Class CadesSignatureInformation

java.lang.Object
br.ufsc.labsec.signature.conformanceVerifier.cades.CadesSignatureInformation
All Implemented Interfaces:
CmsParent<CadesSignature>, GenericCadesSignature, Signature<org.bouncycastle.asn1.cms.Attribute>, SignatureObject
Direct Known Subclasses:
CadesSimpleSignatureInformation

public abstract class CadesSignatureInformation
extends Object
implements CmsParent<CadesSignature>, GenericCadesSignature
Esta classe representa tanto uma assinatura quanto uma contra-assinatura CAdES. Implementa CmsParent e GenericCadesSignature.
  • Field Details

    • signerInformation

      protected org.bouncycastle.cms.SignerInformation signerInformation
    • isDetached

      protected boolean isDetached
  • Constructor Details

    • CadesSignatureInformation

      protected CadesSignatureInformation​(org.bouncycastle.cms.SignerInformation signerInformation, boolean isDetached, CmsParent<CadesSignature> parent)
      Parameters:
      signerInformation - Objeto que encapsula uma assinatura
      isDetached - Indica se a assinatura é destacada
      parent - Objeto CMS ao qual o signerInformation pertence
  • Method Details

    • setParent

      public void setParent​(CmsParent<CadesSignature> parent)
    • getSignedAttributeList

      public List<String> getSignedAttributeList()
    • getUnsignedAttributeList

      public List<String> getUnsignedAttributeList()
    • getAttributeList

      public List<String> getAttributeList()
      Description copied from interface: Signature
      Retorna a lista de identificadores dos atributos utilizados no processo de assinatura. Se o atributo for do tipo CAdES, o identificador será um OID e se for do tipo XAdES, será o nome de uma tag
      Specified by:
      getAttributeList in interface Signature<org.bouncycastle.asn1.cms.Attribute>
      Returns:
      A lista de atributos assinados e não-assinados da assinatura
    • getCounterSignatures

      public List<Signature<org.bouncycastle.asn1.cms.Attribute>> getCounterSignatures()
      Specified by:
      getCounterSignatures in interface Signature<org.bouncycastle.asn1.cms.Attribute>
    • getEncodedAttribute

      public org.bouncycastle.asn1.cms.Attribute getEncodedAttribute​(String attributeId, Integer index) throws SignatureAttributeNotFoundException
      Retorna um objeto do atributo desejado
      Specified by:
      getEncodedAttribute in interface Signature<org.bouncycastle.asn1.cms.Attribute>
      Parameters:
      attributeId - O identificador do atributo
      index - Índice do atributo
      Returns:
      Um objeto do atributo desejado
      Throws:
      SignatureAttributeNotFoundException
    • getEncodedAttribute

      public org.bouncycastle.asn1.cms.Attribute getEncodedAttribute​(String attributeId) throws SignatureAttributeNotFoundException
      Obtém a codificação do primeiro atributo com este identificador na assinatura
      Specified by:
      getEncodedAttribute in interface GenericCadesSignature
      Parameters:
      attributeId - O OID de identificação do atributo
      Returns:
      A codificação específica do atributo
      Throws:
      SignatureAttributeNotFoundException
    • verify

      public boolean verify​(X509Certificate signerCertificate, SignatureReport sigReport, List<PbadException> exceptions, boolean isIcpBr) throws VerificationException
      Verifica a integridade da assinatura
      Specified by:
      verify in interface GenericCadesSignature
      Parameters:
      signerCertificate - O certificado do assinante
      sigReport - O relatório de verificação da assinatura
      isIcpBr - Se as assinaturas são ICP-BR
      Returns:
      Indica se a assinatura é íntegra
      Throws:
      VerificationException - Exceção em caso de erro durante a validação
    • getSignerInformationVerifier

      public org.bouncycastle.cms.SignerInformationVerifier getSignerInformationVerifier​(X509Certificate signerCertificate) throws VerificationException
      Constrói um SignerInformationVerifier relativo ao signerCertificate.
      Parameters:
      signerCertificate - O certificado do assinante
      Returns:
      O SignerInformationVerifier gerado
      Throws:
      VerificationException - Exceção em caso de erro na construção do objeto
    • isExternalSignedData

      public boolean isExternalSignedData()
      Description copied from interface: GenericCadesSignature
      Verifica se o dado assinado é externo à assinatura.
      Specified by:
      isExternalSignedData in interface GenericCadesSignature
      Returns:
      Indica se a assinatura possui conteúdo destacado
    • getSignaturePolicyIdentifier

      public String getSignaturePolicyIdentifier() throws PbadException
      Description copied from interface: GenericCadesSignature
      Obtém o identificador da PA (Política de Assinatura) utilizada nesta assinatura.
      Specified by:
      getSignaturePolicyIdentifier in interface GenericCadesSignature
      Returns:
      O identificador da política de assinatura
      Throws:
      PbadException - Exceção em caso de erro na obtenção da PA na assinatura
    • getSignatureValueHash

      public byte[] getSignatureValueHash​(String hashAlgorithmName) throws NoSuchAlgorithmException
      Utiliza o algoritmo indicado para realizar o resumo criptográfico da assinatura
      Specified by:
      getSignatureValueHash in interface GenericCadesSignature
      Parameters:
      hashAlgorithmName - O nome do algoritmo de resumo criptográfico
      Returns:
      Os bytes do resumo criptográfico da assinatura
      Throws:
      NoSuchAlgorithmException
    • isSignatureValueHashValid

      public boolean isSignatureValueHashValid​(String hashAlgorithmName, byte[] expected)
    • addUnsignedAttribute

      public void addUnsignedAttribute​(SignatureAttribute<org.bouncycastle.asn1.cms.Attribute> attribute) throws SignatureAttributeException
      Adiciona um atributo não-assinado
      Specified by:
      addUnsignedAttribute in interface Signature<org.bouncycastle.asn1.cms.Attribute>
      Parameters:
      attribute - O atributo a ser adicionado na assinatura
      Throws:
      SignatureAttributeException - Exceção em caso de erro no atributo a ser adicionado
    • addCounterSignature

      public void addCounterSignature​(IdCounterSignature counterSignatureAttribute)
      Adiciona uma contra-assinatura. Esse método não deve ser utilizado por usuários da biblioteca. Para a adição de contra assinaturas o usuário deve utiliza a classe
      Parameters:
      counterSignatureAttribute - O atributo da contra-assinatura
    • getSignerInformation

      public org.bouncycastle.cms.SignerInformation getSignerInformation()
      Specified by:
      getSignerInformation in interface GenericCadesSignature
      Returns:
      O conjunto de informações do assinante SignerInformation
    • getSignatureValue

      public byte[] getSignatureValue()
      Returns:
      Valor da assinatura em bytes
    • getUnsignedAttributes

      public org.bouncycastle.asn1.cms.AttributeTable getUnsignedAttributes()
      Returns:
      Os atributos não-assinados
    • getSignedAttributes

      public org.bouncycastle.asn1.cms.AttributeTable getSignedAttributes()
      Returns:
      Os atributos assinados
    • buildSignerIdentifier

      protected org.bouncycastle.cms.SignerId buildSignerIdentifier​(X509Certificate counterSignerCertificate)
      Constrói um SignerId para o certificado passado como parâmetro
      Parameters:
      counterSignerCertificate - Certificado o qual será criado um SignerId
      Returns:
      O objeto SignerId criado
    • replaceUnsignedAttribute

      public void replaceUnsignedAttribute​(SignatureAttribute<org.bouncycastle.asn1.cms.Attribute> attribute, Integer index) throws PbadException, SignatureAttributeException
      Substitui um atributo não assinado qualquer
      Parameters:
      attribute - O atributo que foi atualizado
      index - O índice do atributo em relação aos seus similares
      Throws:
      PbadException - Exceção em caso de erro na substituição do atributo
      SignatureAttributeException - Exceção em caso de erro no atributo a ser substituído
    • replaceChildSignature

      public void replaceChildSignature​(org.bouncycastle.cms.SignerInformation counterSignerToReplace)
      Substitui o primeiro contra-assinante que tiver o mesmo identificador do assinante passado como parâmetro.
      Specified by:
      replaceChildSignature in interface CmsParent<CadesSignature>
      Parameters:
      counterSignerToReplace - O contra-assinante a ser substituído
    • getSigAndRefsHashValue

      public byte[] getSigAndRefsHashValue​(String hashAlgorithmName) throws PbadException, NoSuchAlgorithmException
      Utiliza o algoritmo indicado para realizar o resumo criptográfico das seguintes informações em ordem: - Valor da assinatura - Carimbo do tempo da assinatura - Referências de certificados completa - Referências de dados de validação completa - Referências de certificados de atributo completas* - Referências de dados de validação de certificados de atributo completa*

      Os últimos iténs indicados com * são opcionais e podem ou não estar presentes. Os outros dados devem necessáriamente estar presentes para que se possa obter o resumo criptográfico.

      Specified by:
      getSigAndRefsHashValue in interface GenericCadesSignature
      Parameters:
      hashAlgorithmName - O algoritmo a ser utilizado para o resumo
      Returns:
      Os bytes do resumo criptográfico
      Throws:
      PbadException - Exceção em caso de erro no cálculo
      NoSuchAlgorithmException
    • isSigAndRefsHashValid

      public boolean isSigAndRefsHashValid​(String hashAlgorithmName, byte[] expected) throws PbadException
      Utiliza o algoritmo indicado para realizar o resumo criptográfico das seguintes informações em ordem: - Valor da assinatura - Carimbo do tempo da assinatura - Referências de certificados completa - Referências de dados de validação completa - Referências de certificados de atributo completas* - Referências de dados de validação de certificados de atributo completa*

      Os últimos iténs indicados com * são opcionais e podem ou não estar presentes. Os outros dados devem necessáriamente estar presentes para que se possa obter o resumo criptográfico.

      Parameters:
      hashAlgorithmName - O algoritmo a ser utilizado para o resumo
      Returns:
      Os bytes do resumo criptográfico
      Throws:
      PbadException - Exceção em caso de erro no cálculo
    • replaceSignerInformation

      protected void replaceSignerInformation()
      Atualiza as informações do SignerInformation da assinatura
    • toString

      public String toString()
      Retorna o identificador do assinante
      Overrides:
      toString in class Object
    • getMode

      public SignatureModeCAdES getMode()
      Description copied from interface: GenericCadesSignature
      Retorna o modo de assinatura
      Specified by:
      getMode in interface GenericCadesSignature
      Returns:
      O modo da assinatura
    • getFormat

      public FileFormat getFormat()
      Retorna o formato de assinatura
      Returns:
      O FileFormat da assinatura
    • getSignaturePolicyUri

      public String getSignaturePolicyUri()
      Description copied from interface: GenericCadesSignature
      Obtem a URI da LPA que contém a política de assinatura da assinatura
      Specified by:
      getSignaturePolicyUri in interface GenericCadesSignature
      Returns:
      A URI da LPA que contém a política de assinatura da assinatura
    • getSignaturePolicyHashValue

      public String getSignaturePolicyHashValue()
      Description copied from interface: GenericCadesSignature
      Retorna o valor de hash da política
      Specified by:
      getSignaturePolicyHashValue in interface GenericCadesSignature
      Returns:
      O valor de hash da política
    • removeUnsignedAttribute

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

      public byte[] getArchiveTimeStampHashValue​(String hashAlgorithmName) throws NoSuchAlgorithmException, PbadException
      Utiliza o algoritmo indicado para realizar o resumo criptográfico do carimbo de tempo de arquivamento
      Specified by:
      getArchiveTimeStampHashValue in interface GenericCadesSignature
      Parameters:
      hashAlgorithmName - O nome do algoritmo a ser utilizado para o resumo
      Returns:
      Os bytes do resumo criptográfico
      Throws:
      PbadException - Exceção em caso de erro no cálculo
      NoSuchAlgorithmException
    • getArchiveTimeStampHashValue

      public byte[] getArchiveTimeStampHashValue​(String hashAlgorithmName, Time timeReference) throws NoSuchAlgorithmException, PbadException
      Utiliza o algoritmo indicado para realizar o resumo criptográfico do carimbo de tempo de arquivamento.
      Specified by:
      getArchiveTimeStampHashValue in interface GenericCadesSignature
      Parameters:
      hashAlgorithmName - O algoritmo a ser utilizado para o resumo
      timeReference - A data de referência do carimbo
      Returns:
      Os bytes do resumo criptográfico
      Throws:
      PbadException - Exceção em caso de erro no cálculo
      NoSuchAlgorithmException
    • getArchiveTimeStampHashValue

      public byte[] getArchiveTimeStampHashValue​(String hashAlgorithmName, Time timeReference, boolean hashIncludingTag) throws PbadException, NoSuchAlgorithmException
      Utiliza o algoritmo indicado para realizar o resumo criptográfico do carimbo de tempo de arquivamento.
      Parameters:
      hashAlgorithmName - O algoritmo a ser utilizado para o resumo
      timeReference - A data de referência do carimbo
      hashIncludingTag - Indica a forma de cálculo da hash, de acordo com as notas 2 e 3 da página 109 do ETSI TS 101 733 V2.2.1. Se verdadeiro, indica que o cálculo é feito sem incluir tag e length.
      Returns:
      Os bytes do resumo criptográfico
      Throws:
      PbadException - Exceção em caso de erro no cálculo
      NoSuchAlgorithmException
    • getArchiveTimeStampATSHashValue

      public byte[] getArchiveTimeStampATSHashValue​(String hashAlgorithmName, CadesSignature signature, byte[] atsHashIndexV3) throws NoSuchAlgorithmException
      Utiliza o algoritmo indicado para realizar o resumo criptográfico do carimbo de tempo de arquivamento para verificação do ArchiveTimesStampV3
      Parameters:
      hashAlgorithmName - Algoritmo a ser usado para o resumo criptográfico
      signature - Assinatura com atributos a serem obtidos
      atsHashIndexV3 - ATSHashIndex utilizado na verificação
      Returns:
      Throws:
      PbadException
      NoSuchAlgorithmException
      IOException
    • isArchiveTimeStampWithATSHashValueValid

      public boolean isArchiveTimeStampWithATSHashValueValid​(String hashAlgorithmId, CadesSignature signature, byte[] atsHashIndexV3, byte[] expected) throws PbadException, IOException
      Throws:
      PbadException
      IOException
    • isArchiveTimeStampHashValid

      public boolean isArchiveTimeStampHashValid​(String hashAlgorithmName, Time timeReference, boolean hashIncludingTag, byte[] expected) throws PbadException
      Throws:
      PbadException
    • getSignedData

      public org.bouncycastle.cms.CMSSignedData getSignedData()
      Retorna uma representação do contêiner de assinaturas.
      Specified by:
      getSignedData in interface CmsParent<CadesSignature>
      Returns:
      O objeto CMSSignedData
    • getContentToBeSigned

      public byte[] getContentToBeSigned()
      Retorna os bytes do conteúdo que será assinado
      Specified by:
      getContentToBeSigned in interface CmsParent<CadesSignature>
      Returns:
      Os bytes do conteúdo que será assinado
    • getSignedContent

      public byte[] getSignedContent() throws CadesSignatureException
      Specified by:
      getSignedContent in interface CmsParent<CadesSignature>
      Throws:
      CadesSignatureException
    • getContainer

      public SignatureContainer<CadesSignature> getContainer()
      Retorna o contêiner da assinatura
      Specified by:
      getContainer in interface CmsParent<CadesSignature>
      Returns:
      O contêiner da assinatura
    • getMessageDigest

      public byte[] getMessageDigest​(org.bouncycastle.cms.SignerInformation signerInformation)
      Retorna o message digest para uma assinatura Cades
      Parameters:
      signerInformation - informações da assinatura cades
      Returns:
      byte do message digest