Sample code for 30+ languages & platforms
Java

JWE using ECDH-ES+A256KW

See more JSON Web Encryption (JWE) Examples

Create a JWE with the following public/private key pair:
{
    "kty": "EC",
    "d": "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c",
    "use": "enc",
    "crv": "P-256",
    "kid": "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs",
    "x": "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM",
    "y": "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4",
    "alg": "ECDH-ES+A256KW"
}

Also shows how to decrypt.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.Jwe;
import com.chilkatsoft.chilkat2.Jwt;
import com.chilkatsoft.chilkat2.PrivateKey;
import com.chilkatsoft.chilkat2.PublicKey;

public class ChilkatExample {

    public static void main(String[] args) {
        // This requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // Create the following JSON:
        // {
        //     "kty": "EC",
        //     "d": "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c",
        //     "use": "enc",
        //     "crv": "P-256",
        //     "kid": "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs",
        //     "x": "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM",
        //     "y": "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4",
        //     "alg": "ECDH-ES+A256KW"
        // }

        JsonObject json = new JsonObject();
        json.updateString("kty", "EC");
        json.updateString("d", "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c");
        json.updateString("use", "enc");
        json.updateString("crv", "P-256");
        json.updateString("kid", "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs");
        json.updateString("x", "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM");
        json.updateString("y", "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4");
        json.updateString("alg", "ECDH-ES+A256KW");

        PublicKey pubkey = new PublicKey();

        try {
            pubkey.loadFromString(json.emit());
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Build our protected header:

        //     {
        //       "alg": "ECDH-ES+A256KW",
        //       "enc": "A256GCM",
        //       "exp": 1621957030,
        //       "cty": "NJWT",
        //       "epk": {
        //         "kty": "EC",
        //         "x": "QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w"
        //         "y": "AJh7pJ3zZKDJkm8rbeG69GBooTosXJgSsvNFH0i3Vxnu"
        //         "crv": "BP-256"
        //       }
        //     }

        // Use jwt only for getting the current date/time + 3600 seconds.
        Jwt jwt = new Jwt();

        JsonObject jweProtHdr = new JsonObject();
        jweProtHdr.updateString("alg", "ECDH-ES+A256KW");
        jweProtHdr.updateString("enc", "A256GCM");
        jweProtHdr.updateInt("exp", jwt.genNumericDate(3600));
        jweProtHdr.updateString("cty", "NJWT");
        jweProtHdr.updateString("epk.kty", "EC");
        jweProtHdr.updateString("epk.x", "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM");
        jweProtHdr.updateString("epk.y", "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4");
        jweProtHdr.updateString("epk.crv", "P-256");

        Jwe jwe = new Jwe();
        jwe.setProtectedHeader(jweProtHdr);
        jwe.setPublicKey(0, pubkey);

        String plainText = "This is the text to be encrypted.";
        String strJwe;
        try {
            strJwe = jwe.encrypt(plainText, "utf-8");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println(strJwe);

        // Let's decrypt...
        PrivateKey privkey = new PrivateKey();

        try {
            privkey.loadJwk(json.emit());
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        Jwe jwe2 = new Jwe();
        String decryptedText;
        try {
            jwe2.loadJwe(strJwe);

            jwe2.setPrivateKey(0, privkey);

            //  Decrypt.
            decryptedText = jwe2.decrypt(0, "utf-8");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println(decryptedText);
    }
}