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:
CadesSignature, IdCounterSignature

public 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
      Informações do assinante
    • isDetached

      protected boolean isDetached
      Indica se a assinatura possui conteúdo destacado
  • 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)
      Atribue o CMS ao qual o assinante pertence
      Parameters:
      parent - O objeto CMS
    • getSignedAttributeList

      public List<String> getSignedAttributeList()
    • getUnsignedAttributeList

      public List<String> getUnsignedAttributeList()
    • getAttributeList

      public List<String> getAttributeList()
      Retorna a lista de atributos assinados e não-assinados da assinatura
      Specified by:
      getAttributeList in interface Signature<org.bouncycastle.asn1.cms.Attribute>
      Returns:
      A lista de atributos assinados e não-assinados da assinatura
    • 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()
      Informa se a assinatura possui conteúdo destacado
      Specified by:
      isExternalSignedData in interface GenericCadesSignature
      Returns:
      Indica se a assinatura possui conteúdo destacado
    • getSignaturePolicyIdentifier

      public String getSignaturePolicyIdentifier() throws PbadException
      Retorna o identificador da política de assinatura usada
      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 CounterSignatureGenerator
      Parameters:
      counterSignatureAttribute - O atributo da contra-assinatura
    • getSignerInformation

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

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

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

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

      public CounterSignatureInterface getCounterSignature​(X509Certificate signerCertificate) throws CounterSignatureException
      Retorna a contra-assinatura
      Specified by:
      getCounterSignature in interface GenericCadesSignature
      Parameters:
      signerCertificate - O certificado do contra assinante que se deseja obter a contra assinatura
      Returns:
      A contra-assinatura feita pelo assinante dado
      Throws:
      CounterSignatureException - Exceção em caso de erro durante a busca pela contra-assinatura
    • getCounterSignatures

      public List<CounterSignatureInterface> getCounterSignatures()
      Retorna a lista de todas as contra-assinaturas
      Specified by:
      getCounterSignatures in interface GenericCadesSignature
      Returns:
      A lista de contra-assinaturas
    • buildSignerIdentifier

      protected org.bouncycastle.cms.SignerId buildSignerIdentifier​(X509Certificate counterSignerCertificate)
      Contró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 ultimos iténs indicados com * são opicionais 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 ultimos iténs indicados com * são opicionais 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()
      Retorna o modo de assinatura
      Specified by:
      getMode in interface GenericCadesSignature
      Returns:
      O modo da assinatura
    • getSignaturePolicyUri

      public String getSignaturePolicyUri()
      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
    • getSignaturePolicyHashValue

      public String getSignaturePolicyHashValue()
      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 calculo é 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