How do I use distributed signing without client-side browser module (I have a client desktop application)?
A number of classes have been extended with extra distributed signing-related methods. For example, considering PDFBlackbox, you should do the steps described below. Note -- the client here denotes a side which holds a document or other data to sign (usually it's a web server or application server). The server is the party which possesses the certificate with a private key and which signs the hash (usually it's a web browser or client's desktop application).
I. Preparation (client side)
1) Open the document and add a signature just as you do when signing the document in a usual (non-distributed) way.
2) Instead of calling Close(), call InitiateAsyncOperation() method. It will return a TElDCAsyncState object, which contains the information needed to perform signing.
3) Serialize state information to a stream with the use of its SaveToStream() method. Pass a TElDCXMLEncoding object to the Encoding parameter (it is the only encoding supported at the moment).
4) Send the serialized state to the signing party (server).
II. Signing (server side)
1) Create a TElDCStandardServer and TElDCX509SignOperationHandler objects. Set up the latter (by assigning a non-empty certificate storage to its CertStorage property) and pass it to the TElDCStandardServer.AddOperationHandler() method.
2) Pass the data received from client to the TElDCStandardServer.Process() method. This method will return you the signing result.
3) Send the obtained signing result back to client.
III. Finalization (client side)
1) Load the signing result obtained from server into a new TElDCAsyncResult instance.
2) Pass the TElDCAsyncResult object, along with the opened PDF document stream and a set up security handler object to the TElPDFDocument.CompleteAsyncOperation() method.
In a similar way distributed signing works with other SecureBlackbox components.