SignPadesMultiFieldName
The SOAP request for create Cades Pades signature using signatures field:
Code Block |
---|
language | xml |
---|
title | signCadessignPadesMultiFieldName |
---|
|
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.nam/">
<soapenv:Header/>
<soapenv:Body>
<ser:signCAdES>signPAdES>
<credentials>
<password>YOUR-DEVICE-PASSWORD</password>
<username>YOUR-DEVICE-NAME</username>
<sessionKey>SESSION_KEY_RECEIVED_FROM_OPEN_SESSION</sessionKey>
< </credentials>
<buffer>VGhpcyBpcyB0aGUgZmlsZSB0byBiZSBzaWduZWQgZm9yIHRlc3Qu<<buffer>BASE64-TO-SIGN</buffer>
<PAdESPreferences>
<CAdESPreferences><level>B</level>
<level>B</level><signerImage>
</CAdESPreferences>
</ser:signCAdES>
</soapenv:Body>
</soapenv:Envelope> |
In this example the buffer to sign is "txt" files.
The SOAP response will be:
Code Block |
---|
language | xml |
---|
title | SOAP-response-signCades |
---|
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<fieldsNameList>SignatureField-1</fieldsNameList>
<ns2:signCAdESResponse xmlns:ns2="http://service.ws.nam/"> <fieldsNameList>SignatureField-2</fieldsNameList>
<return>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</return>
</ns2:signCAdESResponse>
</soap:Body>
</soap:Envelope> |
SignCades Detached
If you want make the Cades detached signature, SWS not require all files to sign, but only the hash. The tag "buffer" will be the hash of the file.
For example if we want the cades detached signature of this PDF the procedure is:
1) Calculate the hash of this file, for example with the openssl:
Code Block |
---|
|
openssl dgst -sha256 -binary FILE_TO_BE_SIGN | openssl enc -a |
And in output will obtain the hash to sign, will be:
Code Block |
---|
HASH TO SIGN = msj3f4hJCSELbMkWjkFwNrf0XhkebTnAKaKhx4686DY= |
2) Now can execute the method signCades, using the field "cadesPreferences.detached=true":
Code Block |
---|
|
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.nam/">
<soapenv:Header/>
<soapenv:Body>
<!-- THIS OPTION set to true allow to sign all signatures fields available -->
<ser:signCAdES>
<!-- <signAllFields>false</signAllFields> -->
<credentials>
<username>YOUR-DEVICE-USERNAME</username>
<password>YOUR-DEVICE-PASSWORD</password>
<signerName>NAME OF SIGNER</signerName>
</credentials>
<buffer>msj3f4hJCSELbMkWjkFwNrf0XhkebTnAKaKhx4686DY=</buffer>signerImage>
<CAdESPreferences>
<detached>true</detached><withSignatureField>true</withSignatureField>
</CAdESPreferences>PAdESPreferences>
</ser:signCAdES>signPAdES>
</soapenv:Body>
</soapenv:Envelope> |
At this link is possible to see the full example (with file to sign and logo image) of signature Pades with appereance.
NOTE: in this example the signatures fields: "SignatureField-1" and "SignatureField-2" already exist in a PDF
The response will be the complex object: "PadesWithMultiFieldName" or generate a WSException if don't sign at least one signature field.
Below the response ok, when all elements of "fieldsNameList" are signed (the file is fully signed)The SOAP response will be:
Code Block |
---|
title | SOAP-response-signPadesMultiFieldName-output-fully-signed | language | xml |
---|
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:signCAdESResponsesignPAdESMultiFieldNameResponse xmlns:ns2="http://service.ws.nam/">
<return>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</return>
</ns2:signCAdESResponse>
</soap:Body>
</soap:Envelope> |
In the tag "return" there is the cades detached signature, you MUST decode the content of this tag and will obtain this file: Cades_detached_PDF_SampleHelloWorld.p7s
3) Finally we have the cades detached signature and we ready to verify the signature at this link:
- field "signed file" → upload the detached signature
- field "original file" → upload the file "FILE_TO_BE_SIGN"
And the output will be:
Image Removed
<return>
<signedContent>BASE-64-OF-PDF-WITH-ELEMENTS-OF-LIST-FIELDSNAMELIST</signedContent>
</return>
</ns2:signPAdESMultiFieldNameResponse>
</soap:Body>
</soap:Envelope> |
While if the field are signed partially (for example the session key has expired) therefore the file is partially signed, the response will be:
Code Block |
---|
title | SOAP-response-signPadesMultiFieldName-output-partially-signed |
---|
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:signPAdESMultiFieldNameResponse xmlns:ns2="http://service.ws.nam/">
<return>
<signedContent>BASE-64-OF-PDF-WITH-ELEMENTS-OF-LIST-FIELDSNAMELIST</signedContent>
<serviceError>
<code>69</code>
<message>Session key scaduta</message>
</serviceError>
<remainingFieldNames>SignatureField-2</remainingFieldNames>
</return>
</ns2:signPAdESMultiFieldNameResponse>
</soap:Body>
</soap:Envelope> |
The tag:
- "signedContent" contains the partially signed file, because not all fields in a list have been signed
- "serviceError" contains the details about the cause because all signatures fields have been signed
- "remainingFieldNames" contains the list of field remaining to sign
In this case, the response will be the input of the new "signPadesMultiFieldName" request
While if you insert credentials.password, credentials.sessionKey, signature field not exist. In output will obtain a WSException like this:
Code Block |
---|
title | SOAP-response-signPadesMultiFieldName-output-partially-signed |
---|
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Richiesta non valida</faultstring>
<detail>
<ns2:WSException xmlns:ns2="http://service.ws.nam/">
<error>105</error>
<message>Richiesta non valida</message>
</ns2:WSException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope> |