Sample code for 30+ languages & platforms
Java

Sign String to create a CAdES-T Signature, using HTTP Proxy to Access Timestamp Server

This example will sign a string to create a CAdEST-T signature. It will use an HTTP proxy to access the timestamp server.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.Cert;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Crypt2;
import com.chilkatsoft.chilkat2.Http;
import com.chilkatsoft.chilkat2.JsonObject;

public class ChilkatExample {

    public static void main(String[] args) {
        Crypt2 crypt = new Crypt2();

        Cert cert = new Cert();
        cert.setSmartCardPin("123456");
        try {
            cert.loadFromSmartcard("");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        crypt.setSigningCert(cert);

        // Use SHA-256 rather than the default of SHA-1
        crypt.setHashAlgorithm("sha256");

        // Create JSON that tells Chilkat what signing attributes to include:
        JsonObject attrs = new JsonObject();
        attrs.updateBool("contentType", true);
        attrs.updateBool("signingTime", true);
        attrs.updateBool("messageDigest", true);
        attrs.updateBool("signingCertificateV2", true);

        // A CAdES-T signature is one that includes a timestampToken created by an online TSA (time stamping authority).
        // We must include the TSA's URL, as well as a few options to indicate what is desired.
        // Except for the TSA URL, the options shown here are typically what you would need.
        attrs.updateBool("timestampToken.enabled", true);
        attrs.updateString("timestampToken.tsaUrl", "https://freetsa.org/tsr");
        attrs.updateBool("timestampToken.addNonce", false);
        attrs.updateBool("timestampToken.requestTsaCert", true);
        attrs.updateString("timestampToken.hashAlg", "sha256");

        crypt.setSigningAttributes(attrs.emit());

        String strToSign = "Hello World!";

        BinData bd = new BinData();
        bd.appendString(strToSign, "utf-8");

        // -------------------------------------------------------------------------
        // The purpose of this example is to show how an HTTP object with custom
        // settings can be used to access the Internet when signing.
        // Access to the Internet is needed to communicate with the timestamp server.
        Http http = new Http();
        // This can be a domain name, hostname, or IP address.
        http.setProxyDomain("172.16.16.56");
        http.setProxyPort(808);
        http.setProxyLogin("myProxyLogin");
        http.setProxyPassword("myProxyPassword");
        crypt.setTsaHttpObj(http);
        // -------------------------------------------------------------------------

        // This creates the CAdES-T signature.  During the signature creation, it
        // communicates with the TSA to get a timestampToken.
        // The contents of bd are signed and replaced with the CAdES-T signature (which embeds the original content).
        try {
            crypt.opaqueSignBd(bd);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Get the signature in base64 format:
        System.out.println(bd.getEncoded("base64_mime"));

        System.out.println("Success.");
    }
}