The following Java code example verifies a digital signature
that is located in a signed PDF document that is based on a PDF
file named LoanSigned.pdf. (See Verifying Digital Signatures.)
/**
* Ensure that you create Java proxy files that consume
* the Signature services WSDL. You can use JAX-WS to create
* the proxy Java files.
*
* If you are supplying a set of associated files, add the file name to the BLOB attribute.
* The create3DPDF service uses those file names to resolve references from the main assembly file.
*
* For information, see "Invoking LiveCycle using SwaRef" in Programming with LiveCycle
*/
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.ws.BindingProvider;
import com.adobe.idp.services.*;
public class VerifySignatureSWAref{
public static void main(String[] args) {
try
{
//Set LiveCycle connection values
String url = "http://hiro-xp:8080/soap/services/signatureservice?blob=swaRef";
String username = "administrator";
String password = "password";
// Create the service Client objects needed
SignatureServiceService signatureService = new SignatureServiceService();
SignatureService signatureClient = signatureService.getSignatureservice();
// Retrieve the Web services from the LiveCycle server.
((BindingProvider) signatureClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
((BindingProvider) signatureClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
((BindingProvider) signatureClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
//Specify a PDF document that contains a digital signature
String path1 = "C:\\Adobe\LoanSigned.pdf";
FileDataSource ds1 = new FileDataSource(path1);
DataHandler handler1 = new DataHandler(ds1);
BLOB inDoc = new BLOB();
inDoc.setSwaRef(handler1);
//Specify the name of the signature field
String fieldName = "SignatureField1";
//Create a PKIOptions object that contains PKI run-time options
PKIOptions pkiOptions = new PKIOptions();
pkiOptions.setVerificationTime(VerificationTime.CURRENT_TIME);
pkiOptions.setRevocationCheckStyle(RevocationCheckStyle.BEST_EFFORT);
//Verify the digital signature
PDFSignatureVerificationInfo signInfo = signatureClient.verify2(
inDoc,
fieldName,
pkiOptions,
null);
//Get the Signature Status
SignatureStatus sigStatus = signInfo.getStatus();
String myStatus="";
//Determine the status of the signature
if (sigStatus == SignatureStatus.DYNAMIC_FORM_SIGNATURE_UNKNOWN)
myStatus = "The signatures located in the dynamic PDF form are unknown";
else if (sigStatus == SignatureStatus.DOCUMENT_SIGNATURE_UNKNOWN)
myStatus = "The signatures located in the PDF document are unknown";
else if (sigStatus == SignatureStatus.CERTIFIED_DYNAMIC_FORM_SIGNATURE_TAMPER)
myStatus = "The signatures located in a certified PDF form are valid";
else if (sigStatus == SignatureStatus.SIGNED_DYNAMIC_FORM_SIGNATURE_TAMPER)
myStatus = "The signatures located in a signed dynamic PDF form are valid";
else if (sigStatus == SignatureStatus.CERTIFIED_DOCUMENT_SIGNATURE_TAMPER)
myStatus = "The signatures located in a certified PDF document are valid";
else if (sigStatus == SignatureStatus.SIGNED_DOCUMENT_SIGNATURE_TAMPER)
myStatus = "The signatures located in a signed PDF document are valid";
else if (sigStatus == SignatureStatus.SIGNATURE_FORMAT_ERROR)
myStatus = "The format of a signature in a signed document is invalid";
else if (sigStatus == SignatureStatus.DYNAMIC_FORM_SIG_NO_CHANGES)
myStatus = "No changes were made to the signed dynamic PDF form";
else if (sigStatus == SignatureStatus.DOCUMENT_SIG_NO_CHANGES)
myStatus = "No changes were made to the signed PDF document";
else if (sigStatus == SignatureStatus.DYNAMIC_FORM_CERTIFICATION_SIG_NO_CHANGES)
myStatus = "No changes were made to the certified dynamic PDF form";
else if (sigStatus == SignatureStatus.DOCUMENT_CERTIFICATION_SIG_NO_CHANGES)
myStatus = "No changes were made to the certified PDF document";
else if (sigStatus == SignatureStatus.DOC_SIG_WITH_CHANGES)
myStatus = "There were changes to a signed PDF document";
else if (sigStatus == SignatureStatus.CERTIFIED_DOC_SIG_WITH_CHANGES)
myStatus = "There were changes made to the PDF document.";
//Get the signature type
SignatureType sigType = signInfo.getSignatureType();
String myType = "";
if (sigType.getType() == PDFSignatureType.AUTHORSIG)
myType="Certification";
else if(sigType.getType() == PDFSignatureType.RECIPIENTSIG)
myType="Recipient";
//Get the identity of the signer
IdentityInformation signerId = signInfo.getSigner();
String signerMsg = "";
if (signerId.getStatus() == IdentityStatus.UNKNOWN)
signerMsg = "Identity Unknown";
else if (signerId.getStatus() == IdentityStatus.TRUSTED)
signerMsg = "Identity Trusted";
else if (signerId.getStatus() == IdentityStatus.NOTTRUSTED)
signerMsg = "Identity Not Trusted";
//Get the Signature properties returned by the Signature service
SignatureProperties sigProps = signInfo.getSignatureProps();
String signerName = sigProps.getSignerName();
System.out.println("The status of the signature is: "+myStatus +". The signer identity is "+signerMsg +". The signature type is "+myType +". The name of the signer is "+signerName+".");
}
catch (Exception ee)
{
ee.printStackTrace();
}
}
}
|
|
|