Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

View file
namealgchecker-1.1.0.jar

Info

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

CAdES

Detached, Enveloping

XAdES

Detached, Enveloping, Enveloped

PAdES

Enveloped

CMS

Detached, Enveloping

XMLDSIG

Detached, Enveloping, Enveloped

Formatos de algortimo

Algoritmo

JavaName

OID

XML

SHA1

SHA-1

1.3.14.3.2.26

http://www.w3.org/2000/09/xmldsig#sha1

SHA224

SHA-224

2.16.840.1.101.3.4.2.4

http://www.w3.org/2001/04/xmldsig-more#sha224

SHA256

SHA-256

2.16.840.1.101.3.4.2.1

http://www.w3.org/2001/04/xmlenc#sha256

SHA384

SHA-384

2.16.840.1.101.3.4.2.2

http://www.w3.org/2001/04/xmldsig-more#sha384

SHA512

SHA-512

2.16.840.1.101.3.4.2.3

http://www.w3.org/2001/04/xmlenc#sha512

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

Code Block
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();