Index of modules
Module sign
Name: sign
Title: Gestor de signatures electròniques
Namespace: http://sign.matrix.org/
Service: SignatureManagerService
Port: SignatureManagerPort
Java package: org.matrix.sign
Version: 2.0
Status: DRAFT
Authors: Ricard Real
WSDL: sign.wsdl
Imports:
prefix namespace
xs http://www.w3.org/2001/XMLSchema
mime http://www.w3.org/2005/05/xmlmime
mx http://base.matrix.org/
security http://security.matrix.org/
dic http://dic.matrix.org/
doc http://doc.matrix.org/
Documentation:

Característiques generals

El mòdul sign és l'encarregat de:
  • Signar electrònicament documents emmagatzemats al gestor de documents (mòdul doc).
  • Gestionar l'estat i el flux de signatura del document.
  • Obtenir la llista de documents pendents de signar d'un determinat signatari (funció porta-firmes)
  • Validar les signatures d'un document.
  • Generar còpies autèntiques i realitzar transformacions de documents electrònics originals.

Document signat (SignedDocument)

Els documents signats es representen en el mòdul sign mitjançant objectes SignedDocument. Un SignedDocument es defineix com una extensió de l'objecte Document del mòdul doc i per tant, igual que aquest, conté les metadades i el contingut del document, però a més, incorpora:
  • La llista de signatures i de signataris del document.
  • Una representació de l'estructura interna del document, que és independent del seu format documental.
  • La relació estructural entre les signatures i les dades signades.
  • La semàntica i el flux de les signatures del document.

Formats de signatura

Les signatures d'un document signat es representaran mitjançant algun dels següents formats estàndard: En la majoria dels casos, el format de les signatures estarà condicionat pel format del document.

Estructura interna d'un document signat

L'objecte SignedDocument proporciona una representació genèrica de l'estructura interna del document. En aquesta representació, el document es veu com un contenidor d'una seqüència de blocs de dades, on cada bloc (Block) pot ser d'un d'aquests dos tipus:
  • Dades (Data): bloc que conté dades a signar
  • Signatura (Signature): bloc que representa una signatura electrònica que signa el contingut d'altres blocs.
Alhora, un bloc (de dades o de signatura) pot contenir una nova seqüència de blocs.

En funció de la relació estructural entre una signatura (bloc de signatura) i les dades que signa (blocs de dades), aquesta pot ser:
  • Adjunta (Attached): si els respectius blocs estan imbricats. En aquest cas, la signatura pot ser:
    • Embolcallant (Enveloping): si la signatura embolcalla la informació que signa (la signatura conté el bloc de dades).
    • Embolcallada (Enveloped): si la signatura està embolcallada per la informació que signa (la signatura està dins del bloc de dades).
  • Separada (Dettached): si estan en blocs separats. En aquest cas, la signatura pot ser:
    • Interna (Internally dettached): si la signatura i la informació que signa estan dins del mateix contenidor.
    • Externa (Externally dettached): si la signatura referencia un contingut d'un altre document, és a dir, la signatura i la informació que signa no estan en el mateix contenidor.
tipus de signatura
Figura 1: tipus de signatura

Formats documentals que admeten signatures

El mòdul sign pot gestionar les signatures electròniques de documents representats en diferents formats documentals. A continuació es descriuen alguns d'aquests formats:
format descripció signatura
PAdES
PDF (Portable Document Format) + Advanced Electronic Signature (ISO 32000)
Format estàndard utilitzat principalment per representar documents de text. És el format escollit per signar documents de compulsa, còpies autèntiques o documents de vida curta. CAdES internally dettached
ASiC
Associate Signature Container (ETSI TS 102 918 V1.1.1)
Arxiu ZIP que conté fitxers de dades en qualsevol format i seves les signatures CADES o XAdES. Alineat amb normes ENI. Compatible amb el format Open Document Format. Aquest és el format preferent. CAdES/XAdES internally dettached
OOXML
Office Open XML (ECMA-376/ISO/IEC 29500:2008)
Format estàndard d'ofimàtica. És un arxiu ZIP que conté fitxers XML, imatges i signatures XMLDSig. XMLDSig internally dettached
MatrixSD
Matrix Signed Document
Format basat en XML que s'utilitza per la creació d'instàncies telemàtiques i relacions de documents (foliat d'expedients) dins la plataforma MATRIX. Pot contenir text, binaris i referències a continguts externs. XAdES internally/externally dettached
Facturae
Factura electrònica (http://www.facturae.es)
Format basat en XML que representa una factura electrònica. XAdES enveloped
ENIDoc
Document de l'Esquema Nacional d'Interoperabilitat
Format basat en XML dissenyat per l'intercanvi de documents signats entre administracions. CAdES/XAdES internally dettached
Cada implementació indicarà la llista de formats que suporta per mitjà de la propietat sigDocFormatSupport de SignatureManagerMetaData.

Modalitats de generació de la signatura

Existeixen diferents modalitats de generació de la signatura en funció de:
  • 1) On està la clau privada del certificat del signatari:
    • a. Clau privada externa: En aquest cas, el mòdul sign no té accés al dispositiu criptogràfic que genera la signatura (Per exemple, quan l'usuari signa amb el seu clauer IDCat). El xifrat amb clau privada es fa fora d'aquest mòdul.
    • b. Clau privada interna: En aquest altre cas, el mòdul sign té accés al dispositiu criptogràfic que genera la signatura (Per exemple, quan es tracta d'una signatura d'òrgan o segell de temps). El xifrat amb clau privada es fa dins d'aquest mòdul.
  • 2) On es construeix l'objecte que representa la signatura (CAdES o XAdES):
    • a. El servidor: la signatura, amb tots els seus atributs, es construeix dins del mòdul sign.
    • b. El client: l'aplicació client (per exemple, Adobe Acrobat o Microsoft Word) construeix la signatura amb els seus atributs.

En total, hi ha 4 possibles modalitats de generació de la signatura:
  • Modalitat 1: clau privada externa, construcció en el client. En aquesta modalitat, l'aplicació client recupera el document a signar del gestor documental, el signa (en un determinat format) i un cop signat, el torna a desar en el gestor. El mòdul sign, en aquest cas, només s'encarrega de validar les signatures del document i comprovar que es respecta el flux de signatura establert.
  • Modalitat 2: clau privada externa, construcció en el servidor. En aquest cas, la signatura electrònica es fa en tres passos:
    • Pas 1. El mòdul sign inicia la construcció de la signatura del document en un determinat format (CAdES o XAdES), i calcula el hash (resum criptogràfic) que ha de signar l'aplicació client (per exemple, un applet Java).
    • Pas 2. L'aplicació client signa el hash per mitjà del dispositiu criptogràfic de l'usuari i retorna el hash signat al mòdul sign.
    • Pas 3. El mòdul sign rep el hash signat i completa la construcció de la signatura amb tots els seus atributs.
  • Modalitat 3: clau privada interna, construcció en el servidor. En aquest tercer cas, el mòdul sign fa tot el procés de xifrat i de construcció de la signatura. Acostuma a ser el mètode utilitzat per generar signatures d'òrgan.
  • Modalitat 4: clau privada interna, construcció en el client. Aquesta modalitat permet a l'usuari signar un document des d'una aplicació client, tenint el seu certificat instal·lat en el servidor al qual accedeix a través d'un canal segur. És equivalent a la modalitat 1, però aquí el servidor també actua com un magatzem de certificats d'usuari. Tot i que aquesta modalitat pot ser interessant en alguns casos (per exemple, signatura des d'un smartphone) no estarà inicialment suportada pel mòdul sign.

Flux de signatura d'un document

El flux de signatura d'un document determina en quin ordre s'han de produïr les seves signatures. Aquest flux s'especifica dins del propi objecte SignedDocument mitjançant la propietat signingAct que defineix una seqüència ordenada d'actes de signatura (SigningAct), on cada acte agrupa un conjunt de signatures que tenen la mateixa semàntica.

El processament del flux de signatura es fa d'acord amb aquests criteris:
  • L'ordre de les signatures dins d'un mateix acte és irrellevant. Si dues signatures s'han de produir en un determinat ordre, llavors hauran de pertànyer a actes diferents.
  • Un acte es considera tancat quan el nombre de signatures produïdes dins d'aquest acte és igual al valor de la propietat minimumSigners.
  • Les signatures d'un acte no es produiran fins que no s'hagin tancat tots els actes anteriors.
  • La propietat currentSigningAct del document indica quin és l'acte de signatura actual, que és el primer acte no tancat de la seqüència d'actes.
  • En qualsevol moment, un usuari autoritzat (amb rol SIGN_ADMIN) podrà modificar el flux de signatura del document, afegint nous actes de signatura al final de la seqüència d'actes.

Casos d'ús

  • Enviar a signar un document emmagatzemat al gestor documental:
    SignedDocument sd = new SignedDocument();
    sd.setDocId(docId); // docId del document a signar
    // Establim el mode incremental perquè no volem informar les metadades del document:
    sd.setIncremental(true);
    SigningAct sa1 = ... // creem l'acte signatura
    Signer signer1 = ... // establim les dades del signatari
    Signature sig1 = ... // creem el bloc de signatura
    sd.getSigningAct().add(sa1);
    sd.getSignature().add(sig1);
    sd.getSigner().add(signer1);
    sd = port.storeSignedDocument(sd); // desem el document
  • Crear un nou document a partir d'un contingut i enviar a signar:
    SignedDocument sd = new SignedDocument();
    // Informem les metadades del document
    sd.setTitle("Informe tècnic del cas Sau"); // títol del document
    sd.setDocTypeId("INFORME_TECNIC"); // codi del tipus de document
    sd.getClassId().add("G049"); // serie documental
    ...
    sd.setSigDocFormatId("PADES"); // indiquem el format del document
    sd.setContent(...);  // passem el contingut a signar
    SigningAct sa1 = ... // creem l'acte signatura
    Signer signer1 = ... // establim les dades del signatari
    Signature sig1 = ...// creem el bloc de signatura
    // Afegim aquests objectes al document:
    sd.getSigningAct().add(sa1);
    sd.getSignature().add(sig1);
    sd.getSigner().add(signer1);
    sd = port.storeSignedDocument(sd); // desem el document
  • Crear un nou document, afegir-li dades i enviar a signar:
    SignedDocument sd = new SignedDocument();
    // Informem les metadades del document
    sd.setTitle("Índex de l'expedient G024-20110189"); // títol del document
    sd.setDocTypeId("FOLIAT"); // codi del tipus de document
    sd.getClassId().add("G024"); // serie documental
    ...
    sd.setSigDocFormatId("MATRIXSD"); // indiquem el format del document
    sd.getData().add(data1);  // afegim bloc de dades
    sd.getData().add(data2);  // afegim bloc de dades
    SigningAct sa1 = ... // creem l'acte signatura
    Signer signer1 = ... // establim les dades del signatari
    Signature sig1 = ... // creem el bloc de signatura
    // Afegim aquests objectes al document:
    sd.getSigningAct().add(sa1);
    sd.getSignature().add(sig1);
    sd.getSigner().add(signer1);
    sd = port.storeSignedDocument(sd); // desem el document
  • Fer introspecció de les signatures d'un contingut signat:
    // Creem un nou document a partir del contingut signat
    SignedDocument sd = new SignedDocument();
    sd.setTitle("Introspecció"); // títol del document
    sd.setDocTypeId("Document"); // codi del tipus de document
    sd.setSigDocFormatId("PADES"); // indiquem el format del document,
    // tot i que algunes implementacions podrien detectar-ho automàticament.
    sd.setContent(...);  // passem el contingut signat
    sd = port.storeSignedDocument(sd); // al desar el document
    // les signatures són detectades i es poden consultar a través de sd
    for (Signature signature : sd.getSignature())
    {
      Signer signer = SignUtils.getSigner(sd, "signerId", signature.getSignerId());
      System.out.println("Signer: " + signer.getSignerName());
      System.out.println("Format: " + signature.getFormat());
      System.out.println(...);
    }
  • Cercar els documents pendents de signar d'un signatari:
    SignedDocumentFilter filter = new SignedDocumentFilter();
    Signer signer = new Signer();
    // Si volem seleccionar els documents assignats a un signatari identificat per NIF:
    String NIF = "...";
    signer.setSignerIdentCode(NIF);
    // Si volem seleccionar els assignats a un determinat usuari o algun dels seus rols:
    signer.setSignerUserId("sanjosebj");
    // Si volem seleccionar els assignats a un determinat rol:
    signer.setSignerRoleId("ALCALDE");
    
    filter.setSigner(signer);
    filter.setSigDocState(REQUIRED); // indiquem l'estat dels documents que volem cercar
    List<SignedDocument> docs = port.findSignedDocuments(filter); // cerquem documents
  • Signar un document en modalitat 1:
    SignedDocument sd = port.loadSignedDocument(sigDocId, ALL, METADATA, false);
    DataHandler contentData = sd.getContent().getData();
    // Signem el contingut des de l'aplicació client
    DataHandler signedContentData = sign(contentData, ...);
    // Creem un nou objecte Content amb el contingut signat
    Content signedContent = new Content();
    signedContent.setData(signedContentData);
    // Desem el document amb aquest nou contingut
    sd.setContent(signedContent);
    sd = port.storeSignedDocument(sd); // al desar el document
    // el servei valida la signatura, la seva política i el flux.
  • Signar un document en modalitat 2:
    // Pas 1: obtenció del hash a signar
    SignedDocument sd = ... // recuperem el document a signar
    // informem el certificat del signatari
    Signer signer = SignUtils.getSigner(sd, "signerIdentCode", NIF);
    signer.setSignerCertificate(certificate.getEncoded());
    sd = port.storeSignedDocument(sd); // el servei valida el certificat i
    // calcula el hash a signar
    Signature signature = SignUtils.getSignature(sd, "signerIdentCode", NIF);
    byte[] hashToSign = signature.getSignedInfoHash();
    // Pas 2: signatura del hash
    byte[] signatureValue = sign(hashToSign, ...);
    // Pas 3: completat de la signatura
    signature.setSignatureValue(signatureValue);
    sd = port.storeSignedDocument(sd); // al desar el document
    // el servei valida la signatura, la seva política i el flux.
    // NOTA: aquesta modalitat de signatura també és coneguda amb el nom de
    // "signatura cega" perquè permet signar el document sense veure el seu contingut.
  • Signar un document en modalitat 3:
    SignedDocument sd = ... // recuperem el document.
    // Si l'acte de signatura actual és un acte automatitzat al desar-lo,
    la signatura d'aquest acte es produirà automàticament.
    sd = port.storeSignedDocument(sd);
  • Validar les signatures d'un document:
    // Recuperem el document amb el paràmetre validate a true.
    SignedDocument sd = port.loadSignedDocument(sigDocId, ID, ALL, true);
    for (Signature signature : sd.getSignature())
    {
      // Mostrem per pantalla el resultat de la validació:
      System.out.println("Acte: " + signature.getSigningActId());
      System.out.println("State: " + signature.getState());
      System.out.println("Validation:" + signature.getValidation());
    }
  • Modificar el flux de signatura d'un document:
    SignedDocument sd = ... // recuperem el document.
    SigningAct sa = ... // creem el nou acte de signatura.
    Signer signer = ... // configurem el signatari de l'acte.
    Signature signature = ... // configurem la signatura de l'acte.
    // Afegim aquests objectes al document:
    sd.getSigningAct().add(sa);
    sd.getSigner().add(signer);
    sd.getSignature().add(signature);
    sd = port.storeSignedDocument(sd);// desem la nova configuració del document.
    // Cal el rol SIGN_ADMIN per poder fer canvis en el flux de signatura del document
  • Crear una còpia autèntica d'un document:
    // Indiquem les opcions de la transformació
    ArrayList options = new ArrayList();
    Option option = new Option();
    // p.e. Opció per incloure la URL per validar el document
    option.setName("validationURL");
    option.getValue().add("http://www.santfeliu.cat/validacio");
    options.add(option);
    // Creem una còpia autèntica del document identificat per sigDocId en format PDF.
    DataHandler data = port.transformSignedDocument(sigDocId, "PADES", options);
    IOUtils.write(data, "c:/copia.pdf");
  • Actualitzar a format C (complet) les signatures d'un document:
    // Aquest procés d'actualització de signatures es programarà mitjançant 
    // una política de gestió documental (mòdul policy).
    SignedDocument sd = ... // recuperem el document.
    for (Signature signature : sd.getSignature())
    {
      signature.setState(C_UPDATED); // indiquem el nou estat
    }
    sd = port.storeSignedDocument(sd); // al desar el document, el servei intentarà
    // actualitzar les signatures a format C.

[Types] [Operations]

Types

Entity SignedDocument :: doc:Document
Name: SignedDocument
QName: sign:SignedDocument
Java class name: org.matrix.sign.SignedDocument
Super type: doc:Document
Description:
SignedDocument representa un document amb signatures electròniques.
tipus de signatura
Figura 2: exemple d'objecte SignedDocument
Properties:
name xml type occurs nillable read only references
sigDocId xs:string 0..1 false false
sigDocFormatId xs:string 0..1 false false sign:SignedDocumentFormat
sigDocState sign:SignedDocumentState 0..N false true
currentSigningAct xs:int 0..1 false true
signingAct sign:SigningAct 0..N false false
data sign:Data 0..N false false
signature sign:Signature 0..N false false
signer sign:Signer 0..N false false
  • sigDocId: Codi segur d'identificació i verificació del document signat. Amb aquest codi serà possible descarregar el document des del web i validar les seves signatures. Típicament tindrà el format d'un UUID (norma ISO/IEC 11578:1996).
  • sigDocFormatId: Format del document signat (PADES, ASIC, OOXML, ODF, MATRIXSD, etc.). La llista de formats suportats per una determinada implementació d'aquest servei s'indica mitjançant la propietat sigDocFormatSupport de SignatureManagerMetaData.
  • sigDocState: Estat global de les signatures del document.
  • currentSigningAct: Índex (basat en 0) de l'acte de signatura actual del document. No està informat si el document no té actes de signatura pendents.
  • signingAct: Llista ordenada d'actes de signatura que determina el flux de signatura del document.
  • data: Llista de blocs de dades del document.
  • signature: Llista de signatures del document.
  • signer: Llista de signataris del document.
Related operations:
Struct SigningAct
Name: SigningAct
QName: sign:SigningAct
Java class name: org.matrix.sign.SigningAct
Description:
El flux de signatura d'un document s'especifica mitjançant una seqüència ordenada d'actes de signatura (propietat SigningAct de SignedDocument) on cada acte té associada la següent informació:
  • La semàntica de la signatura (description i type).
  • La llista de signatures de l'acte. L'ordre en que es produiran no és rellevant dins d'un mateix acte. Cada signatura està relacionada amb un acte de signatura mitjançant la propietat signingActId i amb un signatari mitjançant la propietat signerId.
  • El nombre mínim de signataris (o signatures) que requereix l'acte (minimumSigners).
  • La política de signatura que s'aplicarà a les signatures d'aquest acte.
Un acte de signatura automatitzat és aquell on el signatari de l'acte té la propietat automatic a valor true.
Properties:
name xml type occurs nillable read only references
signingActId xs:string 0..1 false false
description xs:string 0..1 false false
type xs:string 0..1 false false
minimumSigners xs:int 0..1 false false
signaturePolicy sign:SignaturePolicy 0..1 false false
  • signingActId: Identificador de l'acte de signatura.
  • description: Descripció de la semàntica d'aquest acte de signatura.
  • type: Tipologia de l'acte de signatura. Només té valor informatiu. El valor de type podria ser un codi que referenciés una tipologia d'acte dins d'una determinada llibreria o catàleg d'actes de signatura.
  • minimumSigners: Nombre mínim de signataris de l'acte. Si minimumSigners no està informat, llavors totes les signatures proposades per aquest acte s'hauran de produir. Si minimumSigners és inferior al nombre de signatures proposades, llavors aquest serà un acte de firma solidària.
  • signaturePolicy: Política de signatura que s'aplicarà a les signatures d'aquest acte.
Struct Block
Name: Block
QName: sign:Block
Java class name: org.matrix.sign.Block
Description:
Part del document (seqüència de bits) que pot contenir dades i/o signatures.
Properties:
name xml type occurs nillable read only references
blockId xs:string 0..1 false false
containerBlockId xs:string 0..1 false false sign:Block
containerIndex xs:int 0..1 false false
data xs:base64Binary 0..1 false false
hash xs:base64Binary 0..1 false true
hashAlgorithm xs:string 0..1 false true
  • blockId: Identificador del bloc dins del document.
  • containerBlockId: Identificador del bloc contenidor d'aquest bloc. No tots els formats documentals admetran l'anidament de blocs.
  • containerIndex: Posició que ocupa aquest bloc dins del bloc contenidor. El primer bloc té índex 0.
  • data: Contingut binari d'aquest bloc.
  • hash: Resum criptogràfic del contingut d'aquest bloc.
  • hashAlgorithm: Algorisme utilitzat per generar el resum criptogràfic del contingut d'aquest bloc (SHA1, SHA256, etc.).
Struct Data :: sign:Block
Name: Data
QName: sign:Data
Java class name: org.matrix.sign.Data
Super type: sign:Block
Description:
Part del document que conté dades.
Properties:
name xml type occurs nillable read only references
label xs:string 0..1 false false
type xs:string 0..1 false false
mimeType xs:string 0..1 false false
  • label: Etiqueta descriptiva del contingut d'aquest bloc.
  • type: Tipus de dades del bloc. Depenent del format documental.
  • mimeType: Tipus MIME del bloc (per exemple, "application/pdf", "text/xml", etc.).
Struct Signature :: sign:Block
Name: Signature
QName: sign:Signature
Java class name: org.matrix.sign.Signature
Super type: sign:Block
Description:
Conté les metadades essencials d'una signatura del document. Cada signatura pot signar el contingut de:
  • Un o més blocs de dades referenciats per mitjà de la propietat referencedBlockId.
  • Un o més blocs de signatura referenciats per mitjà de la propietat referencedBlockId. Una signatura que signa una altra signatura rep el nom de "contrasignatura". Les contrasignatures s'utilitzen en aquells casos on es vol deixar constància que dues signatures s'han produït en un determinat ordre.
  • Un o més documents externs referenciats per mitjà de la propietat externalReference.
El resum criptogràfic del conjunt de blocs i continguts externs a signar, que es calcula d'acord amb les especificacions dels corresponents formats de signatura (CMS i XMLDig), es representa mitjançant la propietat signedInfoHash.
Properties:
name xml type occurs nillable read only references
format sign:SignatureFormat 1 false false
state sign:SignatureState 1 false false
referencedBlockId xs:string 0..N false false sign:Block
externalReference xs:string 0..N false false
signerId xs:string 0..1 false false sign:Signer
signingActId xs:string 0..1 false false sign:SigningAct
signedInfoHash xs:base64Binary 0..1 false false
signedInfoHashAlgorithm xs:string 0..1 false false
signatureAlgorithm xs:string 0..1 false false
signatureValue xs:base64Binary 0..1 false false
signaturePolicy sign:SignaturePolicy 0..1 false false
signingDateTime mx:dateTime 0..1 false true
rejectionDateTime mx:dateTime 0..1 false true
rejectionReason xs:string 0..1 false false
validation xs:string 0..1 false true
signingCallbackUrl xs:string 0..N false false
rejectionCallbackUrl xs:string 0..N false false
  • format: Format de la signatura electrònica. En la majoria dels casos aquesta propietat és només de lectura perquè el format de la signatura està condicionat pel format del document.
  • state: Estat actual de la signatura electrònica.
  • referencedBlockId: Llista d'identificadors de blocs que està signant aquesta signatura.
  • externalReference: Llista de referencies a continguts externs (URIs) que està signant aquesta signatura. No tots els formats documentals suportaran signatures amb referències externes.
  • signerId: Identificador del signatari d'aquesta signatura que referencia un objecte Signer de SignedDocument.
  • signingActId: Identificador de l'acte de signatura al que pertany aquesta signatura.
  • signedInfoHash: Resum criptogràfic del conjunt de blocs i continguts externs que està signant aquesta signatura. En la modalitat de signatura 2, aquest resum es calcularà en el moment d'informar el certificat del signatari (propietat signerCertificate de Signature) per mitjà de l'operació storeSignedDocument. En les altres modalitats es calcularà en el moment de generar la signatura (també a través de la operació storeSignedDocument).
  • signedInfoHashAlgorithm: Algorisme utilitzar per calcular el resum criptogràfic de tots els blocks i continguts externs que està signant aquesta signatura (SHA1, SHA256, etc).
  • signatureAlgorithm: Algorisme de signatura (DSA, RSA).
  • signatureValue: Valor de la signatura electrònica generat segons l'algorisme signedInfoAlgorithm sobre signedInfoHash.
  • signaturePolicy: Política de signatura que s'aplicarà a aquesta signatura.
  • signingDateTime: Data i hora de la signatura en format yyyyMMddHHmmss.
  • rejectionDateTime: Data i hora del rebuig de la signatura en format yyyyMMddHHmmss.
  • rejectionReason: Motiu del rebuig de la signatura.
  • validation: Resultat del procés de validació de la signatura.
  • signingCallbackUrl: Url que serà invocada un cop s'hagi produït la signatura.
  • rejectionCallbackUrl: Url que serà invocada si la signatura és rebutjada.
Struct Signer
Name: Signer
QName: sign:Signer
Java class name: org.matrix.sign.Signer
Description:
Signer conté les propietats que descriuen un signatari del document.
El signatari pot ser una persona física, una persona jurídica o un determinat òrgan i es pot especificar per mitjà d'algun d'aquests camps:
  • signerIdentCode: Codi d'identificació del signatari (per exemple, el NIF).
  • signerUserId: Codi d'usuari del signatari (veure mòdul security).
  • signerRoleId: Rol del signatari (veure mòdul security).
  • signerCertificate: Certificat X509 amb que es generà la signatura.
En les modalitats de signatura 2 i 3, la propietat signerCertificate haurà de ser informada per poder generar la signatura (consultar casos d'ús). En la modalitat 1 aquesta propietat es deduirà del contingut del document un cop signat.
A partir del moment en que es determini el valor de signerCertificate, es deduiran automàticament els valors dels camps signerName, signerCertificatId i signerCertificateIssuer de l'objecte Signer.
Properties:
name xml type occurs nillable read only references
signerId xs:string 0..1 false false
signerIdentCode xs:string 0..1 false false
signerUserId xs:string 0..1 false false security:User
signerRoleId xs:string 0..1 false false security:Role
signerCertificate xs:base64Binary 0..1 false false
automatic xs:boolean 0..1 false false
signerName xs:string 0..1 false true
signerCertificateId xs:string 0..1 false true
signerCertificateIssuer xs:string 0..1 false true
  • signerId: Identificador del signatari dins del document (assignat externalment, admet qualsevol format).
  • signerIdentCode: Codi identificatiu del signatari (per exemple, NIF, Passaport, etc.) que haurà de correspondre amb el del seu certificat digital.
  • signerUserId: Identificador d'usuari del signatari dins del sistema Matrix.
  • signerRoleId: Rol que ha de tenir el signatari per poder signar.
  • signerCertificate: Certificat digital X509 del signatari en base64.
  • automatic: Indica si aquest signatari produeix signatures de forma automàtica, sense la intervenció d'un humà. En aquest cas, la clau privada del certificat d'aquest signatari haurà d'estar instal·lada en el magatzem de claus d'aquest servei.
  • signerName: Nom complet del signatari (nom de persona física, jurídica o òrgan).
  • signerCertificateId: Identificador del certificat del signatari.
  • signerCertificateIssuer: Nom de l'emissor del certificat del signatari.
Struct SignaturePolicy
Name: SignaturePolicy
QName: sign:SignaturePolicy
Java class name: org.matrix.sign.SignaturePolicy
Description:
Defineix un determinada política de signatura.
Properties:
name xml type occurs nillable read only references
policyId xs:string 0..1 false false
description xs:string 0..1 false false
policyHash xs:base64Binary 0..1 false false
policyHashAlgorithm xs:string 0..1 false false
  • policyId: Identificador (OID) de la política de signatura.
  • description: Descripció de la política de signatura.
  • policyHash: Resum criptogràfic de la política de signatura.
  • policyHashAlgorithm: Algorisme utilitzat per generar el resum criptogràfic de la política de signatura (SHA1, SHA256, etc).
Struct SignedDocumentFilter :: doc:DocumentFilter
Name: SignedDocumentFilter
QName: sign:SignedDocumentFilter
Java class name: org.matrix.sign.SignedDocumentFilter
Super type: doc:DocumentFilter
Description:
Filtre per cercar documents través de l'operació findSignedDocuments.
El resultat de la cerca contindrà aquells documents que satisfan les condicions expressades a través de les propietats de DocumentFilter i alhora les expressades per mitjà de les propietats signer i sigDocState de SignedDocumentFilter.
Properties:
name xml type occurs nillable read only references
signer sign:Signer 0..1 false false
sigDocState sign:SignedDocumentState 0..1 false false
  • signer: El signatari del qual volem obtenir els documents.
  • sigDocState: Estat dels documents que volem cercar. En cas d'omissió no es filtrarà per l'estat del document.
Related operations:
Struct SignatureManagerMetaData :: mx:ManagerMetaData
Name: SignatureManagerMetaData
QName: sign:SignatureManagerMetaData
Java class name: org.matrix.sign.SignatureManagerMetaData
Super type: mx:ManagerMetaData
Description:
Conté les propietats que descriuen les característiques de la implementació d'aquest servei.
Properties:
name xml type occurs nillable read only references
certificateValidationService xs:string 0..1 false true
signatureValidationService xs:string 0..1 false true
timeStampService xs:string 0..1 false true
sigDocFormatSupport sign:SignedDocumentFormatSupport 0..N false true
  • certificateValidationService: Nom del servei de validació de certificats (per exemple, PSIS o @Firma)
  • signatureValidationService: Nom del servei de validació de signatures (per exemple, PSIS o @Firma)
  • timeStampService: Nom del servei de segellat de temps (per exemple, PSIS o @Firma)
  • sigDocFormatSupport: Llista de formats documentals suportats per la implementació del servei.
Related operations:
Struct SignedDocumentFormatSupport
Name: SignedDocumentFormatSupport
QName: sign:SignedDocumentFormatSupport
Java class name: org.matrix.sign.SignedDocumentFormatSupport
Description:
Descriu el suport d'un determinat format documental.
Properties:
name xml type occurs nillable read only references
sigDocFormatId xs:string 1 false false sign:SignedDocumentFormat
version xs:string 0..1 false false
description xs:string 0..1 false false
creationSupported xs:boolean 1 false false
toSigDocFormatId xs:string 0..N false false sign:SignedDocumentFormat
  • sigDocFormatId: Identificador del format documental: PADES, ASIC, MATRIXSD, OOXML, etc.
    També pot ser un format no recollit a l'enumeració SignedDocumentFormat.
  • version: Versió del format suportada (per exemple, "8.0").
  • description: Descripció del format (per exemple, "Portable Document Format")
  • creationSupported: Indica si la implementació del servei permet crear nous documents en aquest format o només la lectura esta suportada.
  • toSigDocFormatId: Llista de formats documentals als quals es pot transformar un document en aquest format amb aquesta implementació del servei.
Struct TransformOption
Name: TransformOption
QName: sign:TransformOption
Java class name: org.matrix.sign.TransformOption
Description:
Estableix una opció del procés de transformació d'un document.
Properties:
name xml type occurs nillable read only references
name xs:string 1 false false
value xs:string 0..N false false
  • name: Nom de l'opció de transformació. Es depenent del format documental i la implementació del servei.
  • value: Valors de l'opció de transformació.
Related operations:
Enumeration SignatureInfo
Name: SignatureInfo
QName: sign:SignatureInfo
Java class name: org.matrix.sign.SignatureInfo
Description:
Indica quina informació relativa a les signatures del document contindrà l'objecte SignedDocument retornat per l'operació loadSignedDocument.
Values:
namedescription
NONE
No es retornarà cap informació relativa a la signatura del document.
ID
Només es retornaran els camps identificatius dels objectes Data, Signature, Signer, SignaturePolicy i SigningAct.
METADATA
Totes les metadades dels objectes anteriors seran retornades excepte els continguts binaris dels blocs (data).
ALL
Tota la informació (metadades i contingut) dels objectes anteriors serà retornada.
Enumeration SignedDocumentFormat
Name: SignedDocumentFormat
QName: sign:SignedDocumentFormat
Java class name: org.matrix.sign.SignedDocumentFormat
Description:
Llista no exhaustiva de formats documentals que admeten signatures.
Values:
namedescription
PADES
PDF + AdES (Portable Document Format + Advanced Electronic signature)
ASIC
Associate Signature Container
MATRIXSD
Matrix Signed Document
OOXML
Office Open XML (Microsoft Office)
ODF
Open Document format (Open Office)
ENIDOC
Document de l'Esquema Nacional d'Interoperabilitat
FACTURAE
Factura electrònica
SMIME
Secure MIME (CAdES)
Enumeration SignedDocumentState
Name: SignedDocumentState
QName: sign:SignedDocumentState
Java class name: org.matrix.sign.SignedDocumentState
Description:
Indica l'estat global de les signatures d'un document.
Values:
namedescription
REQUIRED
El document té alguna signatura pendent i totes les que ja s'han produït són vàlides.
SIGNED
Totes les signatures del document han estat generades i són vàlides.
FAILED
Alguna de les signatures del document ha estat rebutjada pel signatari o no és vàlida.
Enumeration SignatureFormat
Name: SignatureFormat
QName: sign:SignatureFormat
Java class name: org.matrix.sign.SignatureFormat
Description:
Indica el format d'una signatura electrònica.
Values:
namedescription
CMS
Signatura CMS.
CADES
Signatura avançada CMS. La propietat state de Signature indica la variant del format (T, C, X, XL, A).
XMLDSIG
Signatura XMLDSig.
XADES
Signatura avançada XML. La propietat state de Signature indica la variant del format (T, C, X, XL, A).
Enumeration SignatureState
Name: SignatureState
QName: sign:SignatureState
Java class name: org.matrix.sign.SignatureState
Description:
Indica l'estat actual d'una signatura electrònica.
Més informació sobre els formats de signatura avançada a http://tools.ietf.org/html/rfc5126 i http://www.w3.org/TR/XAdES/.
Values:
namedescription
REQUIRED
Signatura requerida.
REJECTED
Signatura rebutjada pel signatari. El camp rejectionReason de Signature conté el motiu del rebuig.
CREATED
Signatura creada (la propietat SignatureValue de Signature conté un valor però encara no s'ha validat).
INVALIDATED
Signatura no vàlida. El camp validation de Signature conté els detalls de la validació.
VALIDATED
Signatura validada (sense validació completa del certificat). El camp validation de Signature conté els detalls de la validació.
COMPLETELY_VALIDATED
Signatura validada completament (amb validació completa del certificat). El camp validation de Signature conté els detalls de la validació.
T_UPDATED
Signatura actualitzada a format T (segell de temps).
C_UPDATED
Signatura actualitzada a format C (completa).
X_UPDATED
Signatura actualitzada a format X (extesa).
XL_UPDATED
Signatura actualitzada a format XL (extesa llarga).
A_UPDATED
Signatura actualitzada a format A (arxiu).
FINALIZED
Signatura finalitzada. El mateniment d'aquesta signatura es farà a través del foliat de l'expedient al que pertany el document.

Operations

Operation loadSignedDocument
Name: loadSignedDocument
Signature: loadSignedDocument (sigDocId {xs:string}, contentInfo {doc:ContentInfo}, signatureInfo {sign:SignatureInfo}, validate {xs:boolean}) => signedDocument {sign:SignedDocument}
Java signature: org.matrix.sign.SignedDocument loadSignedDocument(String sigDocId, org.matrix.doc.ContentInfo contentInfo, org.matrix.sign.SignatureInfo signatureInfo, boolean validate)
Description:
Recupera un document a partir del seu identificador.
Parameters:
name xml type occurs nillable read only references
sigDocId xs:string 1 false false
contentInfo doc:ContentInfo 1 false false
signatureInfo sign:SignatureInfo 1 false false
validate xs:boolean 0..1 false false
  • sigDocId: Identificador del document a recuperar.
  • contentInfo: Permet seleccionar la informació del contingut del document (objecte Content) que serà retornada:
    • ID: Només l'identificador del contingut (contentId) serà retornat.
    • METADATA: Es retornaran totes les metadades del contingut (size, contentType, language, captureDate, etc.) però no el contingut binari (data).
    • ALL: Tota la informació del contingut serà retornada (metadades i el propi contingut binari).
  • signatureInfo: Permet seleccionar la informació relativa a les signatures del contingut que es retornarà dins l'objecte SignedDocument.
  • validate: Quan validate es true, totes les signatures del document seran validades. El resultat d'aquesta validació quedarà recollit en les propietats validation i state de les signatures i en la propietat sigDocState del document retornat.
Response:
name xml type occurs nillable read only references
signedDocument sign:SignedDocument 1 false false
  • signedDocument: L'objecte SignedDocument que correspon a l'identificador sigDocId.
Errors:
name message
DOCUMENT_NOT_FOUND Document no trobat
VALIDATION_NOT_AVAILABLE Validació no disponible
  • DOCUMENT_NOT_FOUND: No s'ha trobat cap document que correspongui a aquest sigDocId.
  • VALIDATION_NOT_AVAILABLE: No s'ha pogut validar en document a causa d'un error en el servei de validació.
Sample input message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:loadSignedDocument xmlns:ns2="http://sign.matrix.org/">
      <sigDocId>{xs:string}</sigDocId>
      <contentInfo>{doc:ContentInfo}</contentInfo>
      <signatureInfo>{sign:SignatureInfo}</signatureInfo>
      <validate>{xs:boolean}</validate>
    </ns2:loadSignedDocument>
  </S:Body>
</S:Envelope>
Sample output message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:loadSignedDocumentResponse xmlns:ns2="http://sign.matrix.org/">
      <signedDocument>
        <docId>{xs:string}</docId>
        <version>{xs:int}</version>
        <title>{xs:string}</title>
        <docTypeId>{xs:string}</docTypeId>
        <state>{doc:State}</state>
        <language>{xs:string}</language>
        <authorId>{xs:string}</authorId>
        <captureDateTime>{mx:dateTime}</captureDateTime>
        <captureUserId>{xs:string}</captureUserId>
        <changeDateTime>{mx:dateTime}</changeDateTime>
        <changeUserId>{xs:string}</changeUserId>
        <creationDate>{mx:date}</creationDate>
        <classId>{xs:string}</classId>
        <caseId>{xs:string}</caseId>
        <summary>{xs:string}</summary>
        <content>
          <contentId>{xs:string}</contentId>
          <contentType>{xs:string}</contentType>
          <formatId>{xs:string}</formatId>
          <formatDescription>{xs:string}</formatDescription>
          <language>{xs:string}</language>
          <creationDate>{mx:date}</creationDate>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <size>{xs:long}</size>
          <data>{xs:base64Binary}</data>
          <url>{xs:string}</url>
        </content>
        <lockUserId>{xs:string}</lockUserId>
        <property>
          <name>{xs:string}</name>
          <value>{xs:string}</value>
        </property>
        <relatedDocument>
          <relationType>{doc:RelationType}</relationType>
          <name>{xs:string}</name>
          <docId>{xs:string}</docId>
          <version>{xs:int}</version>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <changeDateTime>{mx:dateTime}</changeDateTime>
          <changeUserId>{xs:string}</changeUserId>
        </relatedDocument>
        <accessControl>
          <action>{xs:string}</action>
          <roleId>{xs:string}</roleId>
        </accessControl>
        <sigDocId>{xs:string}</sigDocId>
        <sigDocFormatId>{xs:string}</sigDocFormatId>
        <sigDocState>{sign:SignedDocumentState}</sigDocState>
        <currentSigningAct>{xs:int}</currentSigningAct>
        <signingAct>
          <signingActId>{xs:string}</signingActId>
          <description>{xs:string}</description>
          <type>{xs:string}</type>
          <minimumSigners>{xs:int}</minimumSigners>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
        </signingAct>
        <data>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <label>{xs:string}</label>
          <type>{xs:string}</type>
          <mimeType>{xs:string}</mimeType>
        </data>
        <signature>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <format>{sign:SignatureFormat}</format>
          <state>{sign:SignatureState}</state>
          <referencedBlockId>{xs:string}</referencedBlockId>
          <externalReference>{xs:string}</externalReference>
          <signerId>{xs:string}</signerId>
          <signingActId>{xs:string}</signingActId>
          <signedInfoHash>{xs:base64Binary}</signedInfoHash>
          <signedInfoHashAlgorithm>{xs:string}</signedInfoHashAlgorithm>
          <signatureAlgorithm>{xs:string}</signatureAlgorithm>
          <signatureValue>{xs:base64Binary}</signatureValue>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
          <signingDateTime>{mx:dateTime}</signingDateTime>
          <rejectionDateTime>{mx:dateTime}</rejectionDateTime>
          <rejectionReason>{xs:string}</rejectionReason>
          <validation>{xs:string}</validation>
          <signingCallbackUrl>{xs:string}</signingCallbackUrl>
          <rejectionCallbackUrl>{xs:string}</rejectionCallbackUrl>
        </signature>
        <signer>
          <signerId>{xs:string}</signerId>
          <signerIdentCode>{xs:string}</signerIdentCode>
          <signerUserId>{xs:string}</signerUserId>
          <signerRoleId>{xs:string}</signerRoleId>
          <signerCertificate>{xs:base64Binary}</signerCertificate>
          <automatic>{xs:boolean}</automatic>
          <signerName>{xs:string}</signerName>
          <signerCertificateId>{xs:string}</signerCertificateId>
          <signerCertificateIssuer>{xs:string}</signerCertificateIssuer>
        </signer>
      </signedDocument>
    </ns2:loadSignedDocumentResponse>
  </S:Body>
</S:Envelope>
Operation storeSignedDocument
Name: storeSignedDocument
Signature: storeSignedDocument (signedDocument {sign:SignedDocument}) => storedSignedDocument {sign:SignedDocument}
Java signature: org.matrix.sign.SignedDocument storeSignedDocument(org.matrix.sign.SignedDocument signedDocument)
Description:
Modifica l'estructura, el contingut, l'estat o el flux de signatura d'un document.
En funció del valor de l'atribut incremental de l'objecte SignedDocument (heretat de Document), aquesta operació admet dos modes d'execució:
  • Mode absolut (incremental=false): Si el paràmetre signedDocument inclou tota la informació que ha de contenir el document un cop desat.
  • Mode incremental (incremental=true): Si el paràmetre signedDocument només conté el subconjunt d'informació del document que es vol desar. En aquest cas, només es crearan o modificaran els objectes Property (o propietats directes com title), Content, Signature, Signer, SigningAct, SignaturePolicy que contingui l'objecte SignedDocument, preservant tots els altres objectes desats en operacions anteriors.
Per mitjà d'aquesta operació, es pot establir i modificar el flux de signatura del document, amb les seves signatures i signataris (la modificació del flux de signatura d'un document requerirà el rol SIGN_ADMIN).
La signatura d'un document, en qualsevol de les 3 modalitats suportades per aquest servei, també es farà mitjançant aquesta operació (consultar els casos d'ús).
Cada cop que es crida aquesta operació aportant un nou contingut (objecte Content) dins de SignedDocument, el servei detectarà les seves signatures i llurs signataris i els representarà mitjançant objectes Signature i Signer respectivament. A més, aquestes signatures hauran respectar el flux de signatura que tingui definit el document, altrament aquesta operació retornarà l'error INVALID_FLOW.
Parameters:
name xml type occurs nillable read only references
signedDocument sign:SignedDocument 1 false false
  • signedDocument: Objecte SignedDocument que es vol desar.
Response:
name xml type occurs nillable read only references
storedSignedDocument sign:SignedDocument 1 false false
  • storedSignedDocument: Objecte SignedDocument que ha estat desat. Aquest contindrà els mateixos objectes interiors que tenia el paràmetre signedDocument amb totes les metadades informades a excepció de les de tipus xs:base64Binary.
Errors:
name message
INVALID_STRUCTURE Estructura no vàlida
INVALID_FLOW Flux de signatura no vàlid
INVALID_CERTIFICATE Certificat no vàlid
INVALID_OPERATION Operació no vàlida
  • INVALID_STRUCTURE: L'estructura del document no és vàlida (per exemple, signatures amb refèrencies incorrectes).
  • INVALID_FLOW: S'ha definit un flux de signatura no vàlid (per exemple, un flux amb actes repetits) o bé alguna de les signatures del document no respecta el flux establert.
  • INVALID_CERTIFICATE: El certificat del signatari no és vàlid (està caducat, revocat o suspès).
  • INVALID_OPERATION: S'ha intentat fer una modificació del document que no és vàlida.
Sample input message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:storeSignedDocument xmlns:ns2="http://sign.matrix.org/">
      <signedDocument>
        <docId>{xs:string}</docId>
        <version>{xs:int}</version>
        <title>{xs:string}</title>
        <docTypeId>{xs:string}</docTypeId>
        <state>{doc:State}</state>
        <language>{xs:string}</language>
        <authorId>{xs:string}</authorId>
        <captureDateTime>{mx:dateTime}</captureDateTime>
        <captureUserId>{xs:string}</captureUserId>
        <changeDateTime>{mx:dateTime}</changeDateTime>
        <changeUserId>{xs:string}</changeUserId>
        <creationDate>{mx:date}</creationDate>
        <classId>{xs:string}</classId>
        <caseId>{xs:string}</caseId>
        <summary>{xs:string}</summary>
        <content>
          <contentId>{xs:string}</contentId>
          <contentType>{xs:string}</contentType>
          <formatId>{xs:string}</formatId>
          <formatDescription>{xs:string}</formatDescription>
          <language>{xs:string}</language>
          <creationDate>{mx:date}</creationDate>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <size>{xs:long}</size>
          <data>{xs:base64Binary}</data>
          <url>{xs:string}</url>
        </content>
        <lockUserId>{xs:string}</lockUserId>
        <property>
          <name>{xs:string}</name>
          <value>{xs:string}</value>
        </property>
        <relatedDocument>
          <relationType>{doc:RelationType}</relationType>
          <name>{xs:string}</name>
          <docId>{xs:string}</docId>
          <version>{xs:int}</version>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <changeDateTime>{mx:dateTime}</changeDateTime>
          <changeUserId>{xs:string}</changeUserId>
        </relatedDocument>
        <accessControl>
          <action>{xs:string}</action>
          <roleId>{xs:string}</roleId>
        </accessControl>
        <sigDocId>{xs:string}</sigDocId>
        <sigDocFormatId>{xs:string}</sigDocFormatId>
        <sigDocState>{sign:SignedDocumentState}</sigDocState>
        <currentSigningAct>{xs:int}</currentSigningAct>
        <signingAct>
          <signingActId>{xs:string}</signingActId>
          <description>{xs:string}</description>
          <type>{xs:string}</type>
          <minimumSigners>{xs:int}</minimumSigners>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
        </signingAct>
        <data>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <label>{xs:string}</label>
          <type>{xs:string}</type>
          <mimeType>{xs:string}</mimeType>
        </data>
        <signature>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <format>{sign:SignatureFormat}</format>
          <state>{sign:SignatureState}</state>
          <referencedBlockId>{xs:string}</referencedBlockId>
          <externalReference>{xs:string}</externalReference>
          <signerId>{xs:string}</signerId>
          <signingActId>{xs:string}</signingActId>
          <signedInfoHash>{xs:base64Binary}</signedInfoHash>
          <signedInfoHashAlgorithm>{xs:string}</signedInfoHashAlgorithm>
          <signatureAlgorithm>{xs:string}</signatureAlgorithm>
          <signatureValue>{xs:base64Binary}</signatureValue>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
          <signingDateTime>{mx:dateTime}</signingDateTime>
          <rejectionDateTime>{mx:dateTime}</rejectionDateTime>
          <rejectionReason>{xs:string}</rejectionReason>
          <validation>{xs:string}</validation>
          <signingCallbackUrl>{xs:string}</signingCallbackUrl>
          <rejectionCallbackUrl>{xs:string}</rejectionCallbackUrl>
        </signature>
        <signer>
          <signerId>{xs:string}</signerId>
          <signerIdentCode>{xs:string}</signerIdentCode>
          <signerUserId>{xs:string}</signerUserId>
          <signerRoleId>{xs:string}</signerRoleId>
          <signerCertificate>{xs:base64Binary}</signerCertificate>
          <automatic>{xs:boolean}</automatic>
          <signerName>{xs:string}</signerName>
          <signerCertificateId>{xs:string}</signerCertificateId>
          <signerCertificateIssuer>{xs:string}</signerCertificateIssuer>
        </signer>
      </signedDocument>
    </ns2:storeSignedDocument>
  </S:Body>
</S:Envelope>
Sample output message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:storeSignedDocumentResponse xmlns:ns2="http://sign.matrix.org/">
      <storedSignedDocument>
        <docId>{xs:string}</docId>
        <version>{xs:int}</version>
        <title>{xs:string}</title>
        <docTypeId>{xs:string}</docTypeId>
        <state>{doc:State}</state>
        <language>{xs:string}</language>
        <authorId>{xs:string}</authorId>
        <captureDateTime>{mx:dateTime}</captureDateTime>
        <captureUserId>{xs:string}</captureUserId>
        <changeDateTime>{mx:dateTime}</changeDateTime>
        <changeUserId>{xs:string}</changeUserId>
        <creationDate>{mx:date}</creationDate>
        <classId>{xs:string}</classId>
        <caseId>{xs:string}</caseId>
        <summary>{xs:string}</summary>
        <content>
          <contentId>{xs:string}</contentId>
          <contentType>{xs:string}</contentType>
          <formatId>{xs:string}</formatId>
          <formatDescription>{xs:string}</formatDescription>
          <language>{xs:string}</language>
          <creationDate>{mx:date}</creationDate>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <size>{xs:long}</size>
          <data>{xs:base64Binary}</data>
          <url>{xs:string}</url>
        </content>
        <lockUserId>{xs:string}</lockUserId>
        <property>
          <name>{xs:string}</name>
          <value>{xs:string}</value>
        </property>
        <relatedDocument>
          <relationType>{doc:RelationType}</relationType>
          <name>{xs:string}</name>
          <docId>{xs:string}</docId>
          <version>{xs:int}</version>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <changeDateTime>{mx:dateTime}</changeDateTime>
          <changeUserId>{xs:string}</changeUserId>
        </relatedDocument>
        <accessControl>
          <action>{xs:string}</action>
          <roleId>{xs:string}</roleId>
        </accessControl>
        <sigDocId>{xs:string}</sigDocId>
        <sigDocFormatId>{xs:string}</sigDocFormatId>
        <sigDocState>{sign:SignedDocumentState}</sigDocState>
        <currentSigningAct>{xs:int}</currentSigningAct>
        <signingAct>
          <signingActId>{xs:string}</signingActId>
          <description>{xs:string}</description>
          <type>{xs:string}</type>
          <minimumSigners>{xs:int}</minimumSigners>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
        </signingAct>
        <data>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <label>{xs:string}</label>
          <type>{xs:string}</type>
          <mimeType>{xs:string}</mimeType>
        </data>
        <signature>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <format>{sign:SignatureFormat}</format>
          <state>{sign:SignatureState}</state>
          <referencedBlockId>{xs:string}</referencedBlockId>
          <externalReference>{xs:string}</externalReference>
          <signerId>{xs:string}</signerId>
          <signingActId>{xs:string}</signingActId>
          <signedInfoHash>{xs:base64Binary}</signedInfoHash>
          <signedInfoHashAlgorithm>{xs:string}</signedInfoHashAlgorithm>
          <signatureAlgorithm>{xs:string}</signatureAlgorithm>
          <signatureValue>{xs:base64Binary}</signatureValue>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
          <signingDateTime>{mx:dateTime}</signingDateTime>
          <rejectionDateTime>{mx:dateTime}</rejectionDateTime>
          <rejectionReason>{xs:string}</rejectionReason>
          <validation>{xs:string}</validation>
          <signingCallbackUrl>{xs:string}</signingCallbackUrl>
          <rejectionCallbackUrl>{xs:string}</rejectionCallbackUrl>
        </signature>
        <signer>
          <signerId>{xs:string}</signerId>
          <signerIdentCode>{xs:string}</signerIdentCode>
          <signerUserId>{xs:string}</signerUserId>
          <signerRoleId>{xs:string}</signerRoleId>
          <signerCertificate>{xs:base64Binary}</signerCertificate>
          <automatic>{xs:boolean}</automatic>
          <signerName>{xs:string}</signerName>
          <signerCertificateId>{xs:string}</signerCertificateId>
          <signerCertificateIssuer>{xs:string}</signerCertificateIssuer>
        </signer>
      </storedSignedDocument>
    </ns2:storeSignedDocumentResponse>
  </S:Body>
</S:Envelope>
Operation removeSignedDocument
Name: removeSignedDocument
Signature: removeSignedDocument (sigDocId {xs:string}) => removed {xs:boolean}
Java signature: boolean removeSignedDocument(String sigDocId)
Description:
Elimina un document signat a partir del seu identificador.
Serà necessari el rol SIGN_ADMIN per poder realitzar aquesta operació.
Parameters:
name xml type occurs nillable read only references
sigDocId xs:string 1 false false
  • sigDocId: Identificador del document a eliminar.
Response:
name xml type occurs nillable read only references
removed xs:boolean 1 false false
  • removed: Indica si el document ha estat eliminat.
Sample input message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:removeSignedDocument xmlns:ns2="http://sign.matrix.org/">
      <sigDocId>{xs:string}</sigDocId>
    </ns2:removeSignedDocument>
  </S:Body>
</S:Envelope>
Sample output message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:removeSignedDocumentResponse xmlns:ns2="http://sign.matrix.org/">
      <removed>{xs:boolean}</removed>
    </ns2:removeSignedDocumentResponse>
  </S:Body>
</S:Envelope>
Operation findSignedDocuments
Name: findSignedDocuments
Signature: findSignedDocuments (filter {sign:SignedDocumentFilter}) => signedDocument {sign:SignedDocument}*
Java signature: List<org.matrix.sign.SignedDocument> findSignedDocuments(org.matrix.sign.SignedDocumentFilter filter)
Description:
Cerca documents que satisfan unes determinades condicions expressades per mitjà d'un filtre SignedDocumentFilter.
Parameters:
name xml type occurs nillable read only references
filter sign:SignedDocumentFilter 1 false false
  • filter: Filtre que es vol aplicar a la cerca.
Response:
name xml type occurs nillable read only references
signedDocument sign:SignedDocument 0..N true false
  • signedDocument: Llista de documents que satisfan les condicions del filtre.
Sample input message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:findSignedDocuments xmlns:ns2="http://sign.matrix.org/">
      <filter>
        <docId>{xs:string}</docId>
        <docTypeId>{xs:string}</docTypeId>
        <version>{xs:int}</version>
        <language>{xs:string}</language>
        <title>{xs:string}</title>
        <dateComparator>{xs:string}</dateComparator>
        <startDate>{mx:date}</startDate>
        <endDate>{mx:date}</endDate>
        <contentSearchExpression>{xs:string}</contentSearchExpression>
        <metadataSearchExpression>{xs:string}</metadataSearchExpression>
        <summary>{xs:boolean}</summary>
        <contentId>{xs:string}</contentId>
        <property>
          <name>{xs:string}</name>
          <value>{xs:string}</value>
        </property>
        <outputProperty>{xs:string}</outputProperty>
        <orderByProperty>
          <name>{xs:string}</name>
          <descending>{xs:boolean}</descending>
        </orderByProperty>
        <firstResult>{xs:int}</firstResult>
        <maxResults>{xs:int}</maxResults>
        <includeContentMetadata>{xs:boolean}</includeContentMetadata>
        <states>{doc:State}</states>
        <rolesDisabled>{xs:boolean}</rolesDisabled>
        <classId>{xs:string}</classId>
        <signer>
          <signerId>{xs:string}</signerId>
          <signerIdentCode>{xs:string}</signerIdentCode>
          <signerUserId>{xs:string}</signerUserId>
          <signerRoleId>{xs:string}</signerRoleId>
          <signerCertificate>{xs:base64Binary}</signerCertificate>
          <automatic>{xs:boolean}</automatic>
          <signerName>{xs:string}</signerName>
          <signerCertificateId>{xs:string}</signerCertificateId>
          <signerCertificateIssuer>{xs:string}</signerCertificateIssuer>
        </signer>
        <sigDocState>{sign:SignedDocumentState}</sigDocState>
      </filter>
    </ns2:findSignedDocuments>
  </S:Body>
</S:Envelope>
Sample output message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:findSignedDocumentsResponse xmlns:ns2="http://sign.matrix.org/">
      <signedDocument>
        <docId>{xs:string}</docId>
        <version>{xs:int}</version>
        <title>{xs:string}</title>
        <docTypeId>{xs:string}</docTypeId>
        <state>{doc:State}</state>
        <language>{xs:string}</language>
        <authorId>{xs:string}</authorId>
        <captureDateTime>{mx:dateTime}</captureDateTime>
        <captureUserId>{xs:string}</captureUserId>
        <changeDateTime>{mx:dateTime}</changeDateTime>
        <changeUserId>{xs:string}</changeUserId>
        <creationDate>{mx:date}</creationDate>
        <classId>{xs:string}</classId>
        <caseId>{xs:string}</caseId>
        <summary>{xs:string}</summary>
        <content>
          <contentId>{xs:string}</contentId>
          <contentType>{xs:string}</contentType>
          <formatId>{xs:string}</formatId>
          <formatDescription>{xs:string}</formatDescription>
          <language>{xs:string}</language>
          <creationDate>{mx:date}</creationDate>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <size>{xs:long}</size>
          <data>{xs:base64Binary}</data>
          <url>{xs:string}</url>
        </content>
        <lockUserId>{xs:string}</lockUserId>
        <property>
          <name>{xs:string}</name>
          <value>{xs:string}</value>
        </property>
        <relatedDocument>
          <relationType>{doc:RelationType}</relationType>
          <name>{xs:string}</name>
          <docId>{xs:string}</docId>
          <version>{xs:int}</version>
          <captureDateTime>{mx:dateTime}</captureDateTime>
          <captureUserId>{xs:string}</captureUserId>
          <changeDateTime>{mx:dateTime}</changeDateTime>
          <changeUserId>{xs:string}</changeUserId>
        </relatedDocument>
        <accessControl>
          <action>{xs:string}</action>
          <roleId>{xs:string}</roleId>
        </accessControl>
        <sigDocId>{xs:string}</sigDocId>
        <sigDocFormatId>{xs:string}</sigDocFormatId>
        <sigDocState>{sign:SignedDocumentState}</sigDocState>
        <currentSigningAct>{xs:int}</currentSigningAct>
        <signingAct>
          <signingActId>{xs:string}</signingActId>
          <description>{xs:string}</description>
          <type>{xs:string}</type>
          <minimumSigners>{xs:int}</minimumSigners>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
        </signingAct>
        <data>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <label>{xs:string}</label>
          <type>{xs:string}</type>
          <mimeType>{xs:string}</mimeType>
        </data>
        <signature>
          <blockId>{xs:string}</blockId>
          <containerBlockId>{xs:string}</containerBlockId>
          <containerIndex>{xs:int}</containerIndex>
          <data>{xs:base64Binary}</data>
          <hash>{xs:base64Binary}</hash>
          <hashAlgorithm>{xs:string}</hashAlgorithm>
          <format>{sign:SignatureFormat}</format>
          <state>{sign:SignatureState}</state>
          <referencedBlockId>{xs:string}</referencedBlockId>
          <externalReference>{xs:string}</externalReference>
          <signerId>{xs:string}</signerId>
          <signingActId>{xs:string}</signingActId>
          <signedInfoHash>{xs:base64Binary}</signedInfoHash>
          <signedInfoHashAlgorithm>{xs:string}</signedInfoHashAlgorithm>
          <signatureAlgorithm>{xs:string}</signatureAlgorithm>
          <signatureValue>{xs:base64Binary}</signatureValue>
          <signaturePolicy>
            <policyId>{xs:string}</policyId>
            <description>{xs:string}</description>
            <policyHash>{xs:base64Binary}</policyHash>
            <policyHashAlgorithm>{xs:string}</policyHashAlgorithm>
          </signaturePolicy>
          <signingDateTime>{mx:dateTime}</signingDateTime>
          <rejectionDateTime>{mx:dateTime}</rejectionDateTime>
          <rejectionReason>{xs:string}</rejectionReason>
          <validation>{xs:string}</validation>
          <signingCallbackUrl>{xs:string}</signingCallbackUrl>
          <rejectionCallbackUrl>{xs:string}</rejectionCallbackUrl>
        </signature>
        <signer>
          <signerId>{xs:string}</signerId>
          <signerIdentCode>{xs:string}</signerIdentCode>
          <signerUserId>{xs:string}</signerUserId>
          <signerRoleId>{xs:string}</signerRoleId>
          <signerCertificate>{xs:base64Binary}</signerCertificate>
          <automatic>{xs:boolean}</automatic>
          <signerName>{xs:string}</signerName>
          <signerCertificateId>{xs:string}</signerCertificateId>
          <signerCertificateIssuer>{xs:string}</signerCertificateIssuer>
        </signer>
      </signedDocument>
    </ns2:findSignedDocumentsResponse>
  </S:Body>
</S:Envelope>
Operation transformSignedDocument
Name: transformSignedDocument
Signature: transformSignedDocument (sigDocId {xs:string}, toSigDocFormatId {xs:string}, option {sign:TransformOption}*) => result {xs:base64Binary}
Java signature: byte[] transformSignedDocument(String sigDocId, String toSigDocFormatId, List<org.matrix.sign.TransformOption> option)
Description:
Transforma un document a un altre format documental.
Parameters:
name xml type occurs nillable read only references
sigDocId xs:string 1 false false
toSigDocFormatId xs:string 1 false false sign:SignedDocument
option sign:TransformOption 0..N false false
  • sigDocId: Identificador del document a transformar.
  • toSigDocFormatId: Identificador del format documental del resultat de la transformació.
  • option: Llista d'opcions que permeten modificar certs aspectes del funcionament del procés de transformació. Aquestes opcions són depenents del format i la implementació.
Response:
name xml type occurs nillable read only references
result xs:base64Binary 0..1 false false
  • result: Retorna una còpia del document original representat en el format indicat mitjançant el paràmetre toSigDocFormatId.
Errors:
name message
UNSUPPORTED_TRANSFORMATION Transformació no suportada
  • UNSUPPORTED_TRANSFORMATION: La transformació sol·licitada no està suportada per aquesta implementació del servei.
Sample input message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:transformSignedDocument xmlns:ns2="http://sign.matrix.org/">
      <sigDocId>{xs:string}</sigDocId>
      <toSigDocFormatId>{xs:string}</toSigDocFormatId>
      <option>
        <name>{xs:string}</name>
        <value>{xs:string}</value>
      </option>
    </ns2:transformSignedDocument>
  </S:Body>
</S:Envelope>
Sample output message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:transformSignedDocumentResponse xmlns:ns2="http://sign.matrix.org/">
      <result>{xs:base64Binary}</result>
    </ns2:transformSignedDocumentResponse>
  </S:Body>
</S:Envelope>
Operation getManagerMetaData
Name: getManagerMetaData
Signature: getManagerMetaData () => managerMetaData {sign:SignatureManagerMetaData}
Java signature: org.matrix.sign.SignatureManagerMetaData getManagerMetaData()
Description:
Recupera les caracterítiques de la implementació del servei.
Parameters:
name xml type occurs nillable read only references
Response:
name xml type occurs nillable read only references
managerMetaData sign:SignatureManagerMetaData 1 false false
  • managerMetaData: Retorna un objecte signatureMetaData que conté les caracterítiques de la implementació del servei (proveïdor, versió, formats documentals suportats, etc.).
Sample input message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:getManagerMetaData xmlns:ns2="http://sign.matrix.org/">
    </ns2:getManagerMetaData>
  </S:Body>
</S:Envelope>
Sample output message:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:getManagerMetaDataResponse xmlns:ns2="http://sign.matrix.org/">
      <managerMetaData>
        {mx:ManagerMetaData}
        <certificateValidationService>{xs:string}</certificateValidationService>
        <signatureValidationService>{xs:string}</signatureValidationService>
        <timeStampService>{xs:string}</timeStampService>
        <sigDocFormatSupport>
          <sigDocFormatId>{xs:string}</sigDocFormatId>
          <version>{xs:string}</version>
          <description>{xs:string}</description>
          <creationSupported>{xs:boolean}</creationSupported>
          <toSigDocFormatId>{xs:string}</toSigDocFormatId>
        </sigDocFormatSupport>
      </managerMetaData>
    </ns2:getManagerMetaDataResponse>
  </S:Body>
</S:Envelope>


Ajuntament de Sant Feliu de Llobregat (C) 2025