Class PadesSignatureContainer
java.lang.Object
br.ufsc.labsec.signature.conformanceVerifier.pades.PadesSignatureContainer
- All Implemented Interfaces:
SignatureContainer<PadesSignature>,AutoCloseable,Iterable<PadesSignature>,org.bouncycastle.util.Encodable
public class PadesSignatureContainer extends Object implements SignatureContainer<PadesSignature>
Esta classe representa um contêiner de assinaturas PAdES. Para padronização dos contêineres de assinaturas, esta
classe implementa
SignatureContainer que, por sua vez, estende Iterable. Assim, é possível
iterar sobre as assinaturas contidas no contêiner com um for-each. a vantagem deste comportamento é que a leitura e o
armazenamento dos bytes das assinaturas são feitos apenas no escopo da iteração, evitando a sobrecarga de memória.
No entanto, para o caso específico de assinaturas PAdES, é possível que uma exceção seja lançada durante a iteração.
Para lidar com isso, é possível definir um ExceptionHandler que será chamado sempre que uma exceção for
lançada. Caso não seja definido, a exceção será lançada como uma RuntimeException.
Adicionalmente, sempre que uma exceção é lançada durante a iteração, a assinatura correspondente é retornada como nula.
Assim, recomenda-se para o uso específico dessa classe a definição do ExceptionHandler em setExceptionHandler(ExceptionHandler)
e a verificação da assinatura retornada no iterador.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classPadesSignatureContainer.EmbeddedIterableclassPadesSignatureContainer.PadesIteratorIterador para as assinaturas PAdES que permite capturar exceções que ocorreram durante a criação das assinaturas.static classPadesSignatureContainer.PadesSignatureCreationException -
Field Summary
Fields Modifier and Type Field Description StringxpathBefore -
Constructor Summary
Constructors Constructor Description PadesSignatureContainer(byte[] pdfBytes)Cria um contêiner de assinaturas PAdES a partir de um arquivo PDF.PadesSignatureContainer(byte[] pdfBytes, String xpathBefore)Cria um contêiner de assinaturas PAdES a partir de um arquivo PDF. -
Method Summary
Modifier and Type Method Description voidcaptureInitialSignatureInformation(InitialReportGenerator<PadesSignature> generator)Captura informações iniciais sobre as assinaturasvoidclose()voidencode(OutputStream outputStream)Obtém a assinatura codificada em uma output stream.voidexecuteInAllSignatures(BiConsumer<PadesSignature,Integer> consumer, ExceptionHandler exceptionHandler)org.apache.pdfbox.pdmodel.PDDocumentgetDocument()PadesSignatureContainer.EmbeddedIterablegetEmbeddedFiles()intgetIndexOfSignature(PadesSignature signature)byte[]getPdfBytes()List<org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature>getPDSignatures()PadesSignaturegetSignatureAt(int index)Obtém a assinatura no índice especificado, para o caso específico de assinaturas PAdES é possível que uma exceção seja lançada caso não seja possível criar a assinatura.intgetSignatureCount()Retorna o número de assinaturas contidas nesse contêiner.List<org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature>getSignatures()Retorna as assinaturas contidas nesse contêiner.voidhasAddedUnsignedAttributes(boolean has)booleanhasDetachedContent()Informa se uma assinatura está assinando algo que não está anexado ao arquivo da mesma, ou seja, se o conteúdo assinado é destacado da assinatura.@NotNull PadesSignatureContainer.PadesIteratoriterator()voidreloadDocument()voidsetExceptionHandler(ExceptionHandler exceptionHandler)Define oExceptionHandlerque será utilizado para capturar exceções que ocorreram durante a iteração das assinaturasPadesSignature.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliteratorMethods inherited from interface br.ufsc.labsec.signature.signer.SignatureContainer
getEncoded, getFirstSignature, getLastSignature, isEmpty, stream
-
Field Details
-
xpathBefore
-
-
Constructor Details
-
PadesSignatureContainer
Cria um contêiner de assinaturas PAdES a partir de um arquivo PDF.- Parameters:
pdfBytes- Os bytes do arquivo PDF- Throws:
IOException- Exceção em caso de erro ao abrir o documento PDF
-
PadesSignatureContainer
Cria um contêiner de assinaturas PAdES a partir de um arquivo PDF.- Parameters:
pdfBytes- Os bytes do arquivo PDFxpathBefore- XPath prévio ("" caso seja raiz)- Throws:
IOException- Exceção em caso de erro ao abrir o documento PDF
-
-
Method Details
-
getSignatureCount
public int getSignatureCount()Description copied from interface:SignatureContainerRetorna o número de assinaturas contidas nesse contêiner. Isso inclui somente assinaturas em paralelo- Specified by:
getSignatureCountin interfaceSignatureContainer<PadesSignature>- Returns:
- O número de assinaturas presentes
-
getSignatures
Description copied from interface:SignatureContainerRetorna as assinaturas contidas nesse contêiner.- Specified by:
getSignaturesin interfaceSignatureContainer<PadesSignature>- Returns:
- As assinaturas presentes
-
getSignatureAt
Obtém a assinatura no índice especificado, para o caso específico de assinaturas PAdES é possível que uma exceção seja lançada caso não seja possível criar a assinatura. Neste caso, a exceção é encapsulada em umaPadesSignatureContainer.PadesSignatureCreationExceptionque é uma subclasse deRuntimeException. A abordagem não é ideal mas permite uma melhor utilização da interface pelos outrosSignatureContainer.- Specified by:
getSignatureAtin interfaceSignatureContainer<PadesSignature>- Parameters:
index- O índice da assinatura- Returns:
- A assinatura no índice especificado
-
getIndexOfSignature
- Specified by:
getIndexOfSignaturein interfaceSignatureContainer<PadesSignature>
-
getPdfBytes
public byte[] getPdfBytes() -
encode
Obtém a assinatura codificada em uma output stream. Caso nenhum atributo não-assinado tenha sido adicionado após a criação do contâiner, a atualização incremental extra não é necessária.- Specified by:
encodein interfaceSignatureContainer<PadesSignature>- Parameters:
outputStream- O stream que conterá a assinatura- Throws:
IOException- Falha em escrever na stream
-
reloadDocument
- Throws:
IOExceptionPbadException
-
getPDSignatures
-
hasDetachedContent
public boolean hasDetachedContent()Description copied from interface:SignatureContainerInforma se uma assinatura está assinando algo que não está anexado ao arquivo da mesma, ou seja, se o conteúdo assinado é destacado da assinatura. Esse método é útil principalmente para assinaturas do tipo CAdES, que normalmente não possuí método para encontrar o arquivo assinado, logo esse método explicita a necessidade de se informar ou não qual o conteúdo foi assinado.- Specified by:
hasDetachedContentin interfaceSignatureContainer<PadesSignature>- Returns:
- Indica se a assinatura possui conteúdo destacado
-
setExceptionHandler
Define oExceptionHandlerque será utilizado para capturar exceções que ocorreram durante a iteração das assinaturasPadesSignature. Caso não seja definido, a exceção será lançada como umaRuntimeException.- Parameters:
exceptionHandler- OExceptionHandlerque será utilizado
-
iterator
- Specified by:
iteratorin interfaceIterable<PadesSignature>
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceSignatureContainer<PadesSignature>
-
captureInitialSignatureInformation
Description copied from interface:SignatureContainerCaptura informações iniciais sobre as assinaturas- Specified by:
captureInitialSignatureInformationin interfaceSignatureContainer<PadesSignature>- Parameters:
generator- gerador do relatório inicial das assinaturas
-
getEmbeddedFiles
-
executeInAllSignatures
public void executeInAllSignatures(BiConsumer<PadesSignature,Integer> consumer, ExceptionHandler exceptionHandler) throws IOException- Throws:
IOException
-
hasAddedUnsignedAttributes
public void hasAddedUnsignedAttributes(boolean has) -
getDocument
public org.apache.pdfbox.pdmodel.PDDocument getDocument()
-