{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "algorithm": { "type": "string" }, "format": { "type": "string" }, "suboperation": { "type": "string" }, "concurrenttimeout": { "type": "integer" }, "stoponerror": { "type": "boolean" }, "extraparams": { "type": "string" }, "singlesigns": { "type": "array", "items": [ { "type": "object", "properties": { "id": { "type": "string" }, "datareference": { "type": "string" }, "format": { "type": "string" }, "suboperation": { "type": "string" }, "extraparams": { "type": "string" } }, "required": [ "id", "datareference", "format", "suboperation", "extraparams" ] }, { "type": "object", "properties": { "id": { "type": "string" }, "datareference": { "type": "string" }, "suboperation": { "type": "string" }, "extraparams": { "type": "string" } }, "required": [ "id", "datareference", "suboperation", "extraparams" ] } ] } }, "required": [ "algorithm", "format", "suboperation", "concurrenttimeout", "stoponerror", "extraparams", "singlesigns" ] }Un ejemplo de definición JSON de lote de firmas podría ser este (ejemplo con dos firmas en el lote):
{ "algorithm":"SHA256withRSA", "format":"PAdES", "suboperation":"sign", "concurrenttimeout":30, "stoponerror":false, "extraparams":"Iw0KI1RodSBBdWcgMTMgMTY6Mjk6MDUgQ0VTVCAyMDE1DQpTaWduYXR1cmVJZD03NzI1Mzc0ZS03MjhkLTRhMzMtOWRiOS0zYTRlZmVhNGNlYWQNCg==", "singlesigns":[ { "id":"7725374e-728d-4a33-9db9-3a4efea4cead", "datareference":"QzovcHJ1ZWJhcy90ZXN0X2ZpY2hlcm8xLnBkZg==", "format":"XAdES", "suboperation":"sign", "extraparams":"Iw0KI1RodSBBdWcgMTMgMTY6Mjk6MDUgQ0VTVCAyMDE1DQpTaWduYXR1cmVJZD03NzI1Mzc0ZS03MjhkLTRhMzMtOWRiOS0zYTRlZmVhNGNlYWQNCg==" }, { "id":"93d1531c-cd32-4c8e-8cc8-1f1cfe66f64a", "datareference":"QzovcHJ1ZWJhcy90ZXN0X2ZpY2hlcm8yLnBkZg==", "suboperation":"sign", "extraparams":"Iw0KI1RodSBBdWcgMTMgMTY6Mjk6MDUgQ0VTVCAyMDE1DQpTaWduYXR1cmVJZD05M2QxNTMxYy1jZDMyLTRjOGUtOGNjOC0xZjFjZmU2NmY2NGENCg==" } ] }En este se distinguen los siguientes elementos:
Cabecera de definición de lote
En el ejemplo, es la línea "stoponerror":"false"
,
que contiene dos atributos configurables por el integrador:
stoponerror
Cuando se establece a false
se indica que el proceso debe continuar incluso
si alguna de las firmas del lote no puede completarse, y cuando se establece a true
el proceso se para en el momento en el que se produce el primer error.
algorithm
Algoritmo de firma a usar en todo el lote.
Se admiten los siguientes algoritmos:
SHA1withRSA
(no se recomienda por obsoleto)SHA256withRSA
SHA384withRSA
SHA512withRSA
Definición de cada firma dentro del lote
Dentro del elemento de definición de lote debemos incluir uno o varios elementos de tipo
singlesign
, que es obligatorio cuenten en origen con un identificados único
(en el ejemplo se observa la primera cabecera de definición de firma
"id":"7725374e-728d-4a33-9db9-3a4efea4cead"
, que indica que es una
firma dentro del lote identificada por la cadena 7725374e-728d-4a33-9db9-3a4efea4cead
.
Configuración de cada firma dentro del lote
Cada una de las firmas dentro del lote puede ser configurada individualmente con los siguientes parámetros:
El origen de los datos debe indicarse dentro del elemento datasource
del JSON, por ejemplo:
"datareference":""http://google.com"
El formato de firma a utilizar debe indicarse dentro del elemento format
del JSON, por ejemplo
"format":"XAdES"
.
XAdES
CAdES
PAdES
(válido únicamente para documentos PDF)
La operación concreta de firma a realizar debe indicarse dentro del elemento suboperation
del JSON, por ejemplo "suboperation":"sign"
.
sign
(firma)cosign
(cofirma)
Los parámetros adicionales para el formato y la operación concreta de firma (tal y como se describe
en la documentación del MiniApplet) deben indicarse dentro del elemento extraparams
del JSON,
por ejemplo "extraparams":"bW9kZT1pbXBsaWNpdA0Kc2lnbmF0dXJlUHJvZHVjdGlvbkNpdHk9TWFkcmlk"
.
Estos parámetros adicionales deben indicarse codificando su representación textual como Base64.
Así, las siguientes propiedades (indicando cada parámetro en una línea de texto con el formato
nombre_parĂ¡metro=valor):
mode=implicit
signatureProductionCity=Madrid
bW9kZT1pbXBsaWNpdA0Kc2lnbmF0dXJlUHJvZHVjdGlvbkNpdHk9TWFkcmlk