Sample code for 30+ languages & platforms
React Native

JWE using A256GCMKW

See more JSON Web Encryption (JWE) Examples

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

Chilkat React Native Downloads

React Native
import { JsonObject, Jwe, Prng } from '@chilkat/react-native'

function chilkatExample() {
  // This requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  const plaintext = 'My text to enrypt';

  const jwe = new Jwe();

  // First build the JWE Protected Header: 

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

  const jweProtHdr = new JsonObject();
  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.
  const prng = new Prng();
  jweProtHdr.appendString('iv', prng.randomString(16, true, true, true));
  jwe.setProtectedHeader(jweProtHdr);

  console.log(`JWE Protected Header: ${jweProtHdr.emit()}`);
  console.log('--');

  // 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.
  const aesWrappingKey = '2baf4f730f5e4542b428593ef9cceb0e';
  jwe.setWrappingKey(0, aesWrappingKey, 'ascii');

  // Encrypt and return the JWE:
  let strJwe: string;
  try {
    strJwe = jwe.encrypt(plaintext, 'utf-8');
  } catch {
    console.log(jwe.lastErrorText);
    return;
  }

  // Show the JWE we just created:
  console.log(strJwe);

  // Decrypt the JWE that was just produced.
  // 1) Load the JWE.
  // 2) Set the AES wrapping key.
  // 3) Decrypt.
  const jwe2 = new Jwe();
  try {
    jwe2.loadJwe(strJwe);
  } catch {
    console.log(jwe2.lastErrorText);
    return;
  }

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

  // Decrypt.
  let originalPlaintext: string;
  try {
    originalPlaintext = jwe2.decrypt(0, 'utf-8');
  } catch {
    console.log(jwe2.lastErrorText);
    return;
  }

  console.log('original text: ');
  console.log(originalPlaintext);
}