Class XadesSignature
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 Summary
-
Constructor Summary
Constructors Constructor Description 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. -
Method Summary
Modifier and Type Method Description void
addUnsignedAttribute(SignatureAttribute<Element> attribute)
Adiciona um atributo à lista de atributos não-assinadosstatic void
addX509DataContent(Collection<Certificate> certificates, Collection<X509CRL> crls, X509Data x509Data)
Adiciona os certificados e CRLs, presentes na estrutura X509Data, nas listas dadasprotected org.bouncycastle.cms.SignerId
buildSignerIdentifier(X500Principal issuerName, BigInteger serialNumber)
Constrói um objeto da classeSignerId
.protected void
calculateArchiveTimeStampHashValue(OutputStream octetStream, Time time)
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.1String
getAlgorithmFromSignature()
byte[]
getArchiveTimeStampHashValue(String hashAlgorithmName)
Calcula o valor de hash do carimbo de tempo de arquivamentobyte[]
getArchiveTimeStampHashValue(String hashAlgorithmName, Time time)
Calcula o valor de hash do carimbo de tempo de arquivamentoList<String>
getAttributeList()
Retorna a lista de atributos presente na assinatura.protected void
getAttributes(List<String> attrList, NodeList properties)
List<Certificate>
getCertificatesAtKeyInfo()
Retorna os certificados da estrutura KeyInfoXadesSignatureContainer
getContainer()
Retorna o contêiner da assinatura XAdESCounterSignatureInterface
getCounterSignature(X509Certificate signerCertificate)
Retorna a contra-assinaturaList<CounterSignatureInterface>
getCounterSignatures()
Retorna uma lista de contra-assinaturaList<X509CRL>
getCrls()
Retorna as CRLs da assinaturaElement
getEncodedAttribute(String attributeId)
Retorna o primeiro atributo da assinaturaElement
getEncodedAttribute(String attributeId, Integer index)
Retorna o atributo correspondente ao identificador dadoSignatureFormat
getFormat()
Retorna o formato da assinatura.Element
getSignatureElement()
Informa em qualElement
especifico está a representação da assinaturaString
getSignatureMethod()
String
getSignaturePolicyHashValue(SignaturePolicyInterface signaturePolicyInterface)
Retorna o valor de hash no nodo da política de assinaturaString
getSignaturePolicyIdentifier(SignaturePolicyInterface signaturePolicyInterface)
Retorna o identificador da política de assinaturaString
getSignaturePolicyUri(SignaturePolicyInterface signaturePolicyInterface)
Retorna a URI da política de assinaturaSignatureReport.SignerType
getSignatureType()
String
getSignatureValueAttribute()
Obtém o valor do atributo Id da tag SignatureValuebyte[]
getSignatureValueHash(String algorithm)
Retorna o valor de hash da assinaturaCertificate
getSigningCertificate()
Retorna o certificado do assinanteString
getSubjectName()
Retorna o nome do assinanteDocument
getXml()
Retorna a assinatura em forma deDocument
para que se possa navegar por ela mais livremente.boolean
hasImpliedPolicy(SignaturePolicyInterface signaturePolicyInterface)
protected boolean
hasSigningCertificate(CounterSignature counterSignature)
Verifica se existe a propriedade SigningCertificate na contra assinaturaboolean
hasValidKeyInfo(List<Reference> references, DOMValidateContext validateContext)
Verifica se o estado do ds:KeyInfo permite a ausência de um XAdES:SignedProperties na assinaturaboolean
hasValidKeyInfoElement(X509Certificate signerCertificate)
boolean
isArchiveTimeStampHashValue(String hashAlgorithmName, Time time, byte[] expected)
boolean
isEnveloped()
Verifica se a assinatura Xades é do tipo envelopada por meio da URI da w3 dentro dos nodos com a tag Transformboolean
isExternalSignedData()
Verifica se o conteúdo assinado é externoboolean
isSignatureValueHashValid(String algorithm, byte[] expected)
void
removeUnsignedAttribute(String attributeId, int index)
Remove o nodo do atributo não-assinado no arquivovoid
replaceUnsignedAttribute(SignatureAttribute<Element> attribute, Integer index)
Substitui um atributo não-assinadobyte[]
resolveAttributeContentToBeHashed(List<String> mandatoryAttrs, List<String> optionalAttrs, String namespace, String target, boolean withSignature)
boolean
verify(X509Certificate signerCertificate, SignatureReport sigReport, boolean isComplete, boolean isIcpBr)
Verifica a assinatura XAdES baseado no documento(http://www.w3.org/TR/XAdES/) e anexa ao report.
-
Field Details
-
SIGNED_SIGNATURE_PROPERTIES
- See Also:
- Constant Field Values
-
COLON
- See Also:
- Constant Field Values
-
UNSIGNED_PROPERTIES
- See Also:
- Constant Field Values
-
XADES_COUNTER_SIGNATURE
- See Also:
- Constant Field Values
-
SIGNING_CERTIFICATE
- See Also:
- Constant Field Values
-
SIGNED_PROPERTIES
- See Also:
- Constant Field Values
-
DOM
- See Also:
- Constant Field Values
-
XADES_ARCHIVE_TIME_STAMP
- See Also:
- Constant Field Values
-
REFERENCE
- See Also:
- Constant Field Values
-
SPURI
- See Also:
- Constant Field Values
-
SIG_POLICY_QUALIFIERS
- See Also:
- Constant Field Values
-
SIGNED_INFO
- See Also:
- Constant Field Values
-
KEY_INFO
- See Also:
- Constant Field Values
-
ID
- See Also:
- Constant Field Values
-
SIGNATURE_VALUE
- See Also:
- Constant Field Values
-
QUALIFYING_PROPERTIES
- See Also:
- Constant Field Values
-
SIGNATURE_TIME_STAMP
- See Also:
- Constant Field Values
-
COMPLETE_CERTIFICATE_REFS
- See Also:
- Constant Field Values
-
COMPLETE_CERTIFICATE_REFSV2
- See Also:
- Constant Field Values
-
COMPLETE_REVOCATION_REFS
- See Also:
- Constant Field Values
-
ATTRIBUTE_CERTIFICATE_REFS
- See Also:
- Constant Field Values
-
ATTRIBUTE_CERTIFICATE_REFSV2
- See Also:
- Constant Field Values
-
ATTRIBUTE_REVOCATION_REFS
- See Also:
- Constant Field Values
-
TYPE
- See Also:
- Constant Field Values
-
SIGNATURE_POLICY_IDENTIFIER
- See Also:
- Constant Field Values
-
UNSIGNED_DATA_OBJECT_PROPERTIES
- See Also:
- Constant Field Values
-
UNSIGNED_SIGNATURE_PROPERTIES
- See Also:
- Constant Field Values
-
SIGNED_DATA_OBJECT_PROPERTIES
- See Also:
- Constant Field Values
-
REVOCATION_VALUES
- See Also:
- Constant Field Values
-
CERTIFICATE_VALUES
- See Also:
- Constant Field Values
-
ATTR_AUTHORITIES_CERT_VALUES
- See Also:
- Constant Field Values
-
ATTRIBUTE_REVOCATION_VALUES
- See Also:
- Constant Field Values
-
xml
O documento de assinatura -
signatureElement
O nodo XML da assinatura
-
-
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 XMLsignature
- O elemento que representa a assinatura no documentoxadesSignatureContainer
- O contêiner de assinatura XAdES
-
-
Method Details
-
getSignatureElement
Informa em qualElement
especifico está a representação da assinatura- Returns:
- O nodo que contém a assinatura na estrutura XML do documento assinado
-
getSignatureMethod
- Throws:
SignatureException
-
hasValidKeyInfo
Verifica se o estado do ds:KeyInfo permite a ausência de um XAdES:SignedProperties na assinatura- Parameters:
references
- Lista de referências do SignedInfovalidateContext
- 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
-
verify
public boolean verify(X509Certificate signerCertificate, SignatureReport sigReport, boolean isComplete, boolean isIcpBr) throws VerificationExceptionVerifica a assinatura XAdES baseado no documento(http://www.w3.org/TR/XAdES/) e anexa ao report.- Specified by:
verify
in interfaceGenericXadesSignature
- Parameters:
signerCertificate
- O certificado do signatáriosigReport
- O relátorio da assinaturaisComplete
- Se o relatório deve ser completo ou simplesisIcpBr
- 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
Retorna a assinatura em forma deDocument
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 doXadesSignature
também.- Returns:
- A assinatura na representação DOM
-
getAttributeList
Retorna a lista de atributos presente na assinatura.- Specified by:
getAttributeList
in interfaceSignature<Element>
- Returns:
- A lista de atributos na assinatura
- Throws:
ClassCastException
-
getAttributes
-
getEncodedAttribute
public Element getEncodedAttribute(String attributeId, Integer index) throws SignatureAttributeNotFoundExceptionRetorna o atributo correspondente ao identificador dado- Specified by:
getEncodedAttribute
in interfaceSignature<Element>
- Parameters:
attributeId
- O identificador do atributoindex
- O índice do atributo- Returns:
- O atributo correspondente ao identificador dado
- Throws:
SignatureAttributeNotFoundException
- Exceção caso o atributo não seja encontrado
-
getEncodedAttribute
Retorna o primeiro atributo da assinatura- Specified by:
getEncodedAttribute
in interfaceGenericXadesSignature
- Parameters:
attributeId
- O identificador do atributo- Returns:
- O primeiro atributo da assinatura
- Throws:
SignatureAttributeNotFoundException
- atributo não encontrado
-
hasImpliedPolicy
-
getSignaturePolicyIdentifier
Retorna o identificador da política de assinatura- Specified by:
getSignaturePolicyIdentifier
in interfaceGenericXadesSignature
- Returns:
- O identificador da política de assinatura
-
isExternalSignedData
public boolean isExternalSignedData()Verifica se o conteúdo assinado é externo- Specified by:
isExternalSignedData
in interfaceGenericXadesSignature
- Returns:
- Indica se o conteúdo assinado é externo
-
getSignatureValueHash
public byte[] getSignatureValueHash(String algorithm) throws PbadException, NoSuchAlgorithmExceptionRetorna o valor de hash da assinatura- Specified by:
getSignatureValueHash
in interfaceGenericXadesSignature
- 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álculoNoSuchAlgorithmException
-
isSignatureValueHashValid
- Throws:
PbadException
-
addUnsignedAttribute
public void addUnsignedAttribute(SignatureAttribute<Element> attribute) throws SignatureAttributeExceptionAdiciona um atributo à lista de atributos não-assinados- Specified by:
addUnsignedAttribute
in interfaceSignature<Element>
- Parameters:
attribute
- O atributo a ser adicionado- Throws:
DOMException
- Exceção em caso de erro na estrutura do XMLSignatureAttributeException
- Exceção em caso de erro no atributo
-
getCounterSignature
public CounterSignatureInterface getCounterSignature(X509Certificate signerCertificate) throws CounterSignatureExceptionRetorna a contra-assinatura- Specified by:
getCounterSignature
in interfaceGenericXadesSignature
- Parameters:
signerCertificate
- O certificado do assinante- Returns:
- A contra-assinatura ou nulo caso não seja encontrada
- Throws:
CounterSignatureException
- Exceção em caso de problema com o certificado na contra-assinatura
-
getCounterSignatures
Retorna uma lista de contra-assinatura- Specified by:
getCounterSignatures
in interfaceGenericXadesSignature
- Returns:
- A lista de contra-assinaturas
-
buildSignerIdentifier
protected org.bouncycastle.cms.SignerId buildSignerIdentifier(X500Principal issuerName, BigInteger serialNumber)Constrói um objeto da classeSignerId
.- Parameters:
issuerName
- Nome do emissor do certificadoserialNumber
- Número do serial do certificado- Returns:
- O
SignerId
gerado
-
hasSigningCertificate
Verifica se existe a propriedade SigningCertificate na contra assinatura- Parameters:
counterSignature
- A contra assinatura- Returns:
- Indica se existe a propriedade SigningCertificate
-
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, Integer index) throws SignatureAttributeExceptionSubstitui um atributo não-assinado- Parameters:
attribute
- O novo valor do atributo não-assinadoindex
- O índice do atributo a ser substituído- Throws:
SignatureAttributeException
- Exceção em caso de erro na manipulação dos atributos
-
getFormat
Retorna o formato da assinatura.- Specified by:
getFormat
in interfaceGenericXadesSignature
- Returns:
- Formato XAdES
-
getSignaturePolicyUri
Retorna a URI da política de assinatura- Specified by:
getSignaturePolicyUri
in interfaceGenericXadesSignature
- Returns:
- A URI da política de assinatura
-
getSignaturePolicyHashValue
Retorna o valor de hash no nodo da política de assinatura- Specified by:
getSignaturePolicyHashValue
in interfaceGenericXadesSignature
- Returns:
- O hash da política de assinatura
-
removeUnsignedAttribute
public void removeUnsignedAttribute(String attributeId, int index) throws SignatureAttributeExceptionRemove o nodo do atributo não-assinado no arquivo- Parameters:
attributeId
- O identificador do atributo a ser removidoindex
- O índice do atributo- Throws:
SignatureAttributeException
- Exceção caso o atributo não seja encontrado
-
getArchiveTimeStampHashValue
Calcula o valor de hash do carimbo de tempo de arquivamento- Specified by:
getArchiveTimeStampHashValue
in interfaceGenericXadesSignature
- 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 PbadExceptionCalcula o valor de hash do carimbo de tempo de arquivamento- Specified by:
getArchiveTimeStampHashValue
in interfaceGenericXadesSignature
- Parameters:
hashAlgorithmName
- O algoritmo a ser utilizado no cálculotime
- 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, SignatureAttributeExceptionPassos 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 hashtime
- A data do carimbo do tempo- Throws:
SignatureAttributeException
- Exceção em caso de erro nos atributos da assinaturaEncodingException
- Exceção em caso de erro na canonizaçãoCanonicalizationException
-
getContainer
Retorna o contêiner da assinatura XAdES- Specified by:
getContainer
in interfaceGenericXadesSignature
- Returns:
- O contêiner da assinatura XAdES
-
getSigningCertificate
Retorna o certificado do assinante- Returns:
- O certificado do assinante
-
getCertificatesAtKeyInfo
Retorna os certificados da estrutura KeyInfo- Returns:
- Os certificados da estrutura KeyInfo ou nulo em caso de erro
-
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 certificadoscrls
- A lista de CRLsx509Data
- A estrutura X509Data
-
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
-
hasValidKeyInfoElement
-
resolveAttributeContentToBeHashed
public byte[] resolveAttributeContentToBeHashed(List<String> mandatoryAttrs, List<String> optionalAttrs, String namespace, String target, boolean withSignature) throws PbadException- Throws:
PbadException
-