Class PadesSignatureContainer
java.lang.Object
br.ufsc.labsec.signature.conformanceVerifier.pades.PadesSignatureContainer
- All Implemented Interfaces:
SignatureContainer<PadesSignature>
,Closeable
,AutoCloseable
,Iterable<PadesSignature>
,org.bouncycastle.util.Encodable
public class PadesSignatureContainer extends Object implements SignatureContainer<PadesSignature>, Closeable
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 class
PadesSignatureContainer.PadesIterator
Iterador para as assinaturas PAdES que permite capturar exceções que ocorreram durante a criação das assinaturas.static class
PadesSignatureContainer.PadesSignatureCreationException
-
Constructor Summary
Constructors Constructor Description PadesSignatureContainer(byte[] pdfBytes, boolean noDet)
Cria um contêiner de assinaturas PAdES a partir de um arquivo PDF. -
Method Summary
Modifier and Type Method Description void
close()
void
encode(OutputStream outputStream)
Escreve a assinatura, já codificada para seu formato, noOutputStream
desejadoorg.apache.pdfbox.pdmodel.PDDocument
getDocument()
PadesSignature
getSignatureAt(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.int
getSignatureCount()
Retorna o número de assinaturas contidas nesse contêiner.boolean
hasDetachedContent()
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.PadesIterator
iterator()
void
setExceptionHandler(ExceptionHandler exceptionHandler)
Define oExceptionHandler
que 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, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
Methods inherited from interface br.ufsc.labsec.signature.signer.SignatureContainer
getEncoded, getFirstSignature, getLastSignature, isEmpty, stream
-
Constructor Details
-
PadesSignatureContainer
Cria um contêiner de assinaturas PAdES a partir de um arquivo PDF.- Parameters:
pdfBytes
- Os bytes do arquivo PDFnoDet
- Parâmetro para otimização de memória que cria as assinaturas sem o conteúdo destacado (isso não permite a verificação da integridade do conteúdo)- Throws:
IOException
-
-
Method Details
-
getSignatureCount
public int getSignatureCount()Description copied from interface:SignatureContainer
Retorna o número de assinaturas contidas nesse contêiner. Isso inclui somente assinaturas em paralelo- Specified by:
getSignatureCount
in interfaceSignatureContainer<PadesSignature>
- Returns:
- O número de 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.PadesSignatureCreationException
que é uma subclasse deRuntimeException
. A abordagem não é ideal mas permite uma melhor utilização da interface pelos outrosSignatureContainer
.- Specified by:
getSignatureAt
in interfaceSignatureContainer<PadesSignature>
- Parameters:
index
- O índice da assinatura- Returns:
- A assinatura no índice especificado
-
encode
Description copied from interface:SignatureContainer
Escreve a assinatura, já codificada para seu formato, noOutputStream
desejado- Specified by:
encode
in interfaceSignatureContainer<PadesSignature>
- Parameters:
outputStream
- O stream que conterá a assinatura- Throws:
IOException
-
hasDetachedContent
public boolean hasDetachedContent()Description copied from interface:SignatureContainer
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. 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:
hasDetachedContent
in interfaceSignatureContainer<PadesSignature>
- Returns:
- Indica se a assinatura possui conteúdo destacado
-
setExceptionHandler
Define oExceptionHandler
que 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
- OExceptionHandler
que será utilizado
-
iterator
- Specified by:
iterator
in interfaceIterable<PadesSignature>
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Throws:
IOException
-
getDocument
public org.apache.pdfbox.pdmodel.PDDocument getDocument()
-