Sample code for 30+ languages & platforms
Dart

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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // 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"
  // }

  final json = CkJsonObject();
  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');

  final pubkey = CkPublicKey();

  try {
    pubkey.loadFromString(json.emit());
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    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.
  final jwt = CkJwt();

  final jweProtHdr = CkJsonObject();
  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');

  final jwe = CkJwe();
  jwe.setProtectedHeader(jweProtHdr);
  jwe.setPublicKey(0, pubkey);

  final plainText = 'This is the text to be encrypted.';
  final String strJwe;
  try {
    strJwe = jwe.encrypt(plainText, 'utf-8');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print(strJwe);

  // Let's decrypt...
  final privkey = CkPrivateKey();

  try {
    privkey.loadJwk(json.emit());
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final jwe2 = CkJwe();
  try {
    jwe2.loadJwe(strJwe);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  jwe2.setPrivateKey(0, privkey);

  //  Decrypt.
  final String decryptedText;
  try {
    decryptedText = jwe2.decrypt(0, 'utf-8');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print(decryptedText);
}