java.lang.Object
br.ufsc.labsec.signature.conformanceVerifier.xades.attributes.signed.SigningCertificate
All Implemented Interfaces:
SignatureAttribute<Element>, SigningCertificateInterface, Cloneable, CertSelector, org.bouncycastle.util.Selector<Certificate>

public class SigningCertificate
extends Object
implements SigningCertificateInterface
O atributo SigningCertificate é designado para previnir o ataque de substituição, e para permitir um conjunto restrito de certificados de autorização a serem usados na verificação da assinatura. Esta versão representa uma referência do certificado do signatário utilizando o algoritmo de hash SHA1. SigningCertificate implementa SigningCertificateInterface, que por sua vez extende as interfaces SignatureAttribute, que representa um atributo da assinatura, e CertSelector, que é utilizado para selecionar certificados de um CertStore utilizando critérios. O SigningCertificate pode ser composto por um identificador e obrigatoriamente pelo hash do certificado dos signatário, sendo que o hash é utilizado como critério no CertSelector para encontrar o certificado no CertStore. Esquema do atributo SigningCertificate retirado do ETSI TS 101 903: <xsd:element name="SigningCertificate" type="CertIDListType"/><br> <xsd:complexType name="CertIDListType"><br> <xsd:sequence><br> <xsd:element name="Cert" type="CertIDType"<br> maxOccurs="unbounded"/><br> </xsd:sequence><br> </xsd:complexType><br> <xsd:complexType name="CertIDType"><br> <xsd:complexType name="CertIDType"><br> <xsd:sequence><br> <xsd:element name="CertDigest" type="DigestAlgAndValueType"/><br> <xsd:element name="IssuerSerial" type="ds:X509IssuerSerialType"/><br> </xsd:sequence><br> <xsd:attribute name="URI" type="xsd:anyURI" use="optional"/><br> </xsd:complexType><br> <xsd:complexType name="DigestAlgAndValueType"><br> <xsd:sequence><br> <xsd:element ref="ds:DigestMethod"/><br> <xsd:element ref="ds:DigestValue"/><br> </xsd:sequence><br> </xsd:complexType><br>
  • Field Details

    • IDENTIFIER

      public static final String IDENTIFIER
      See Also:
      Constant Field Values
    • signingCertificateElement

      protected Element signingCertificateElement
      Elemento XML do atributo
    • signatureVerifier

      protected SignatureVerifier signatureVerifier
      Objeto de verificador
  • Constructor Details

    • SigningCertificate

      public SigningCertificate​(AbstractVerifier signatureVerifier, Integer index) throws SignatureAttributeException
      Deve-se utilizar este construtor no momento de validação do atributo. Este método decodifica todos os certificados que foram adicionados no atributo SigningCertificate. Ou seja, ele funciona para os casos SignerOnly e FullPath.
      Parameters:
      signatureVerifier - Usado para criar e verificar o atributo
      index - Este valor deve ser 0
      Throws:
      SignatureAttributeException - Caso ocorra algum erro relativo aos atributos da assinatura.
    • SigningCertificate

      public SigningCertificate​(Element genericEncoding)
      Constrói um objeto SigningCertificate
      Parameters:
      genericEncoding - O atributo codificado
    • SigningCertificate

      public SigningCertificate​(List<Certificate> certs, org.bouncycastle.asn1.x509.AlgorithmIdentifier digestAlgorithm) throws SignatureAttributeException
      Cria o atributo id-aa-signingCertificate a partir de uma lista de certificados. Este método decodifica todos os certificados que foram adicionados no SigningCertificate. Ou seja, ele funciona para os casos SignerOnly e FullPath.
      Parameters:
      certs - Lista de certificados que serão guardados no atributo signing certificate da assinatura
      digestAlgorithm - O algoritmo de cálculo de hash
      Throws:
      SignatureAttributeException - Caso ocorra algum erro relativo aos atributos da assinatura.
    • SigningCertificate

      public SigningCertificate​(List<Certificate> certs, org.bouncycastle.asn1.ASN1ObjectIdentifier digestIdentifier) throws SignatureAttributeException
      Cria o atributo id-aa-signingCertificate a partir de uma lista de certificados. Este método decodifica todos os certificados que foram adicionados no SigningCertificate. Ou seja, ele funciona para os casos SignerOnly e FullPath.
      Parameters:
      certs - Lista de certificados que serão guardados no atributo signing certificate da assinatura
      digestIdentifier - O algoritmo de cálculo de hash
      Throws:
      SignatureAttributeException - Caso ocorra algum erro relativo aos atributos da assinatura.
    • SigningCertificate

      public SigningCertificate​(List<Certificate> certs, String digestAlgorithm) throws SignatureAttributeException
      Cria o atributo id-aa-signingCertificate a partir de uma lista de certificados. Este método decodifica todos os certificados que foram adicionados no SigningCertificate. Ou seja, ele funciona para os casos SignerOnly e FullPath.
      Parameters:
      certs - Lista de certificados que serão guardados no atributo signing certificate da assinatura
      digestAlgorithm - O algoritmo de cálculo de hash
      Throws:
      SignatureAttributeException - Caso ocorra algum erro relativo aos atributos da assinatura.
  • Method Details

    • getIdentifier

      public String getIdentifier()
      Retorna o identificador do atributo
      Specified by:
      getIdentifier in interface SignatureAttribute<Element>
      Returns:
      O identificador do atributo
    • validate

      public void validate() throws SignatureAttributeException
      Valida o atributo de acordo com suas regras específicas
      Specified by:
      validate in interface SignatureAttribute<Element>
      Throws:
      SignatureAttributeException
    • getEncoded

      public Element getEncoded() throws SignatureAttributeException
      Retorna o atributo codificado
      Specified by:
      getEncoded in interface SignatureAttribute<Element>
      Returns:
      O atributo em formato de nodo XML
      Throws:
      SignatureAttributeException
    • isSigned

      public boolean isSigned()
      Informa se o atributo é assinado.
      Specified by:
      isSigned in interface SignatureAttribute<Element>
      Returns:
      Indica se o atributo é assinado
    • match

      public boolean match​(Certificate certificate)
      Verifica se o certificado dado é o mesmo que está no atributo
      Specified by:
      match in interface CertSelector
      Specified by:
      match in interface org.bouncycastle.util.Selector<Certificate>
      Parameters:
      certificate - O certificado a ser comparado
      Returns:
      Indica se o certificado dado é o mesmo que está no atributo
    • clone

      public CertSelector clone()
      Faz uma cópia deste objeto
      Specified by:
      clone in interface CertSelector
      Specified by:
      clone in interface org.bouncycastle.util.Selector<Certificate>
      Overrides:
      clone in class Object
      Returns:
      Uma cópia do objeto
    • getSigningCertificateElement

      public Element getSigningCertificateElement()
      Obtém todos os certificados que foram guardados no atributo SigningCertificate da assinatura.
      Returns:
      Certificados que foram guardados no atributo signing certificate da assinatura.
    • isUnique

      public boolean isUnique()
      Verifica se o atributo deve ter apenas uma instância na assinatura
      Specified by:
      isUnique in interface SignatureAttribute<Element>
      Returns:
      Indica se o atributo deve ter apenas uma instância na assinatura