Sample code for 30+ languages & platforms
Java

DSA Signature Create and Verify

See more DSA Examples

Shows how to create a DSA (DSS) signature for the contents of a file. The first step is to create an SHA-1 hash of the file contents. The hash is signed using the Digital Signature Algorithm and the signature bytes are retrieved as a hex-encoded string.

The 2nd part of the example loads the signature and verifies it against the hash.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Crypt2;
import com.chilkatsoft.chilkat2.Dsa;

public class ChilkatExample {

    public static void main(String[] args) {
        boolean success = false;

        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        Crypt2 crypt = new Crypt2();

        crypt.setEncodingMode("hex");
        crypt.setHashAlgorithm("sha-1");

        // Return the SHA-1 hash of a file.  The file may be any size.
        // The Chilkat Crypt component will stream the file when
        // computing the hash, keeping the memory usage constant
        // and reasonable.
        // The 20-byte SHA-1 hash is returned as a hex-encoded string.
        String hashStr = crypt.hashFileENC("hamlet.xml");

        Dsa dsa = new Dsa();

        // Load a DSA private key from a PEM file.  Chilkat DSA
        // provides the ability to load and save DSA public and private
        // keys from encrypted or non-encrypted PEM or DER.
        // The LoadText method is for convenience only.  You may
        // use any means to load the contents of a PEM file into
        // a string.
        String pemPrivateKey = dsa.loadText("dsa_priv.pem");
        try {
            dsa.fromPem(pemPrivateKey);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // You may optionally verify the key to ensure that it is a valid
        // DSA key.
        success = dsa.verifyKey();
        if (!success) {
            System.out.println(dsa.getLastErrorText());
            return;
        }

        // Load the hash to be signed into the DSA object:
        try {
            dsa.setEncodedHash("hex", hashStr);

            // Now that the DSA object contains both the private key and hash,
            // it is ready to create the signature:
            dsa.signHash();
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // If SignHash is successful, the DSA object contains the
        // signature.  It may be accessed as a hex or base64 encoded
        // string.  (It is also possible to access directly in byte array form via
        // the "Signature" property.)
        String hexSig = dsa.getEncodedSignature("hex");
        System.out.println("Signature:");
        System.out.println(hexSig);

        // -----------------------------------------------------------
        // Step 2: Verify the DSA Signature
        // -----------------------------------------------------------

        Dsa dsa2 = new Dsa();

        // Load the DSA public key to be used for verification:
        String pemPublicKey = dsa2.loadText("dsa_pub.pem");
        try {
            dsa2.fromPublicPem(pemPublicKey);

            // Load the hash to be verified against the signature.
            dsa2.setEncodedHash("hex", hashStr);

            // Load the signature:
            dsa2.setEncodedSignature("hex", hexSig);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Verify:
        try {
            dsa2.verify();
            System.out.println("DSA Signature Verified!");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
        }
    }
}