Class CadesSignatureCompression
Classe com métodos para comprimir e descomprimir assinaturas CAdES armazenando objetos que provavelmente se repetem entre assinaturas, como certificados e LCRs, em um store externo, evitando a redundância no armazenamento desses objetos quando se armazenam diversas assinaturas em um mesmo sistema.
Inherited Members
Namespace: Lacuna.Pki.Cades
Assembly: Lacuna.Pki.dll
Syntax
public static class CadesSignatureCompression
Remarks
Uma assinatura CAdES pode conter, espalhados dentro de sua codificação binária, diversos certificados, LCRs e outros objetos que correspondem por até 99% do tamanho do pacote de assinatura. Tais objetos tendem a se repetir em diferentes assinaturas, especialmente se realizadas em um curto espaço de tempo. Portanto, ao se armazenar diversas assinaturas CAdES, ocorre redundância desnecessária no armazenamento de tais objetos.
Os métodos dessa classe utilizam um store externo (uma implementação da interface ISimpleStore por exemplo um banco de dados, sistema de arquivos ou sistema de armazenamento em nuvem) para implementar uma estratégia de compressão que leva em consideração coletivamente os pacotes de assinatura armazenados em um sistema, ao invés de tratá-los como arquivos separados. Dado um pacote de assinatura e um store, o método Compress(Byte[], ISimpleStore) localiza os objetos passíveis de repetição em outras assinaturas, armazena os que ainda não se encontram no store, e retorna uma estrutura de dados proprietária que pode ser utilizada para realizar o procedimento inverso (veja Decompress(Byte[], ISimpleStore)).
Para mais informações, veja o artigo Compressão de assinaturas.
Examples
No exemplo a seguir, partimos de um pacote de assinatura previamente produzido (seja com classe CadesSigner ou mesmo por sistema de terceiros, não importa) e o comprimimos usando como store um FileSystemSimpleStore.
var signature = File.ReadAllBytes("existing-signature.p7s");
var store = new FileSystemSimpleStore(@"C:\Temp");
var compressedSignature = CadesSignatureCompression.Compress(signature, store);
var decompressedSignature = CadesSignatureCompression.Decompress(compressedSignature, store);
if (decompressedSignature.SequenceEqual(signature)) {
Console.WriteLine("OK!");
} else {
Console.WriteLine("NOT OK!");
}
Methods
Compress(Byte[], ISimpleStore)
Compresses a CAdES signature storing objects likely to be repeated across different signatures such as certificates and CRLs in an external store.
Declaration
public static byte[] Compress(byte[] cadesSignature, ISimpleStore store)
Parameters
Type | Name | Description |
---|---|---|
Byte[] | cadesSignature | The CAdES signature to be compressed. |
ISimpleStore | store | The external store on which to store the repeatable objects. |
Returns
Type | Description |
---|---|
Byte[] | The compressed signature in a proprietary format that can be decompressed with the Decompress(Byte[], ISimpleStore, Byte[]) method. |
Remarks
The given signature need not have been generated by the
If the given signature has an encapsulated content (attached signature), this method does not remove it. If you want to separate the encapsulated content from the signature during the compression, use the method Compress(Byte[], ISimpleStore, out Byte[]) instead.
Compress(Byte[], ISimpleStore, out Byte[])
Compresses a CAdES signature storing objects likely to be repeated across different signatures such as certificates and CRLs in an external store, separating the encapsulated content within the signature (attached signature) if present.
Declaration
public static byte[] Compress(byte[] cadesSignature, ISimpleStore store, out byte[] encapsulatedContent)
Parameters
Type | Name | Description |
---|---|---|
Byte[] | cadesSignature | The CAdES signature to be compressed. |
ISimpleStore | store | The external store on which to store the repeatable objects. |
Byte[] | encapsulatedContent | When this method returns, contains the encapsulated content within the signature, if any. |
Returns
Type | Description |
---|---|
Byte[] | The compressed signature in a proprietary format that can be decompressed with the Decompress(Byte[], ISimpleStore, Byte[]) method. |
Remarks
The given signature need not have been generated by the
If you wish to store the signature with the encapsulated content inside, or if you don´t care about the encapsulated content (for instance if all your signatures are detached), use the method Compress(Byte[], ISimpleStore) instead.
Decompress(Byte[], ISimpleStore)
Decompresses a CAdES signature previously compressed with the compression methods from this class.
Declaration
public static byte[] Decompress(byte[] compressedSignature, ISimpleStore store)
Parameters
Type | Name | Description |
---|---|---|
Byte[] | compressedSignature | The compressed signature in proprietary format. |
ISimpleStore | store | The external store where the repeatable objects were stored during the compression. |
Returns
Type | Description |
---|---|
Byte[] |
Decompress(Byte[], ISimpleStore, Byte[])
Decompresses a CAdES signature previously compressed with the compression methods from this class.
Declaration
public static byte[] Decompress(byte[] compressedSignature, ISimpleStore store, byte[] encapsulatedContent)
Parameters
Type | Name | Description |
---|---|---|
Byte[] | compressedSignature | The compressed signature in proprietary format. |
ISimpleStore | store | The external store where the repeatable objects were stored during the compression. |
Byte[] | encapsulatedContent | The encapsulated content separated during the compression, if any. |
Returns
Type | Description |
---|---|
Byte[] | The original signature. |
Remarks
If the original signature had an encapsulated content and the method Compress(Byte[], ISimpleStore, out Byte[])
was used to compress the signature, you