Sample code for 30+ languages & platforms
Dart

JWE using A256GCMKW

See more JSON Web Encryption (JWE) Examples

This example demonstrates creating a JCE with AES GCM key wrap.

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.

  final plaintext = 'My text to enrypt';

  final jwe = CkJwe();

  // First build the JWE Protected Header: 

  //         {
  //             "alg": "A256GCMKW",
  //             "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
  //             "tag": "kfPduVQ3T3H6vnewt--ksw",
  //             "iv": "KkYT0GX_2jHlfqN_",
  //             "enc": "A128CBC-HS256"
  //         }

  final jweProtHdr = CkJsonObject();
  jweProtHdr.appendString('alg', 'A256GCMKW');
  // kid is optional
  jweProtHdr.appendString('kid', '18ec08e1-bfa9-4d95-b205-2b4dd1d4321d');
  // tag is optional
  jweProtHdr.appendString('tag', 'kfPduVQ3T3H6vnewt--ksw');
  jweProtHdr.appendString('enc', 'A256GCM');
  // the iv should be 16 random chars.
  final prng = CkPrng();
  jweProtHdr.appendString('iv', prng.randomString(16, true, true, true));
  jwe.setProtectedHeader(jweProtHdr);

  print('JWE Protected Header: ${jweProtHdr.emit()}');
  print('--');

  // Given that we have 256-bit AES, our key should be 32 bytes.
  // The ascii string here is 32 bytes, therefore the 2nd arg is "ascii" to use these
  // ascii chars directly as the key.
  final aesWrappingKey = '2baf4f730f5e4542b428593ef9cceb0e';
  jwe.setWrappingKey(0, aesWrappingKey, 'ascii');

  // Encrypt and return the JWE:
  final String strJwe;
  try {
    strJwe = jwe.encrypt(plaintext, 'utf-8');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Show the JWE we just created:
  print(strJwe);

  // Decrypt the JWE that was just produced.
  // 1) Load the JWE.
  // 2) Set the AES wrapping key.
  // 3) Decrypt.
  final jwe2 = CkJwe();
  try {
    jwe2.loadJwe(strJwe);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Set the AES wrap key.  Important to use "ascii"
  jwe2.setWrappingKey(0, aesWrappingKey, 'ascii');

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

  print('original text: ');
  print(originalPlaintext);
}