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
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 | |
SHA224 | SHA-224 | 2.16.840.1.101.3.4.2.4 | |
SHA256 | SHA-256 | 2.16.840.1.101.3.4.2.1 | |
SHA384 | SHA-384 | 2.16.840.1.101.3.4.2.2 | |
SHA512 | SHA-512 | 2.16.840.1.101.3.4.2.3 |
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();