4.- Librerías

Recuperación del algoritmo de una firma

Introducción

A la hora de tratar con documentos de gran tamaño, es necesario realizar las verificaciones de las firmas utilizando el hash del documento.

El problema radica en que hay aplicaciones que reciben firmas externas sin información asociada, de tal manera que al desconocerse el algoritmo utilizado no se puede verificar vía hash.

Es aquí donde entra esta librería, la cual permite recuperar el algoritmo que se utilizó al realizar la firma, solventando de esta manera el problema con las firmas externas o aquellas cuyo algoritmo se desconoce.

Librería

 

 

La librería está en el repositorio de Bitbucket COMMONS con el nombre de algchecker

https://bitbucket.org/amm_lote2/commons/src/master/

Formatos de firma soportados

Formato

Empaquetado

Formato

Empaquetado

CAdES

Detached, Enveloping

XAdES

Detached, Enveloping, Enveloped

PAdES

Enveloped

CMS

Detached, Enveloping

XMLDSIG

Detached, Enveloping, Enveloped

 

Formatos de algortimo

Algoritmo

JavaName

OID

XML

Algoritmo

JavaName

OID

XML

SHA1

SHA-1

1.3.14.3.2.26

XML-Signature Syntax and Processing

SHA224

SHA-224

2.16.840.1.101.3.4.2.4

xmldsig-more namespace

SHA256

SHA-256

2.16.840.1.101.3.4.2.1

XML Encryption Syntax and Processing

SHA384

SHA-384

2.16.840.1.101.3.4.2.2

xmldsig-more namespace

SHA512

SHA-512

2.16.840.1.101.3.4.2.3

XML Encryption Syntax and Processing

 

Excepciones

La librería lanza excepciones del tipo AlgorithmCheckException. Se pueden dar estas excepciones por dos motivos:

  • No se ha encontrado el algoritmo en la firma digital.

  • No se ha podido recuperar el algoritmo de la firma ya que han aparecido excepciones durante el proceso.

Ejemplo de uso

byte[] data = Files.readAllBytes(Paths.get("PATH_TO_SIGNATURE")); // Cades Signature AlgorithmChecker checker = new AlgorithmChecker.ACBuilder(DigitalSignature.CAdES, data).build(); DigestAlgorithm algorithm = checker.getAlgorithm(); String name = algorithm.getName(); String javaName = algorithm.getJavaName(); String oid = algorithm.getOid(); String xml = algorithm.getUri();