Sample code for 30+ languages & platforms
Objective-C

JWE with Binary Data

See more JSON Web Encryption (JWE) Examples

Demonstrates how to create a JWE that contains a binary payload (such as a JPG image).

Note: This example requires Chilkat v9.5.0.66 or greater.

Chilkat Objective-C Downloads

Objective-C
#import <CkoBinData.h>
#import <CkoJwe.h>
#import <CkoJsonObject.h>
#import <NSString.h>
#import <CkoStringBuilder.h>

BOOL success = NO;

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

//  Note: This example requires Chilkat v9.5.0.66 or greater.

//  Load a JPG file that will be the JWE payload.
CkoBinData *jpgBytes = [[CkoBinData alloc] init];
success = [jpgBytes LoadFile: @"qa_data/jpg/starfish.jpg"];
//  Make sure your app checks the success/failure of the call to LoadFile..
NSLog(@"%@%d",@"Original JPG size = ",[jpgBytes.NumBytes intValue]);

CkoJwe *jwe = [[CkoJwe alloc] init];

CkoJsonObject *jweProtHdr = [[CkoJsonObject alloc] init];
[jweProtHdr AppendString: @"alg" value: @"A128KW"];
[jweProtHdr AppendString: @"enc" value: @"A128CBC-HS256"];
[jwe SetProtectedHeader: jweProtHdr];

NSString *aesWrappingKey = @"GawgguFyGrWKav7AX4VKUg";
[jwe SetWrappingKey: [NSNumber numberWithInt: 0] encodedKey: aesWrappingKey encoding: @"base64url"];

//  Encrypt and return the JWE in sbJwe:
CkoStringBuilder *sbJwe = [[CkoStringBuilder alloc] init];
success = [jwe EncryptBd: jpgBytes jweSb: sbJwe];
if (success != YES) {
    NSLog(@"%@",jwe.LastErrorText);
    return;
}

//  Show the JWE:
NSLog(@"%@",[sbJwe GetAsString]);
NSLog(@"%@%d",@"size of JWE: ",[sbJwe.Length intValue]);

//  ---------------------------------------------------------
//  Decrypt to get the original JPG file..

CkoJwe *jwe2 = [[CkoJwe alloc] init];
success = [jwe2 LoadJweSb: sbJwe];
if (success != YES) {
    NSLog(@"%@",jwe2.LastErrorText);
    return;
}

//  Set the AES wrap key.
[jwe2 SetWrappingKey: [NSNumber numberWithInt: 0] encodedKey: aesWrappingKey encoding: @"base64url"];

//  Decrypt.
CkoBinData *jpgOriginal = [[CkoBinData alloc] init];
success = [jwe2 DecryptBd: [NSNumber numberWithInt: 0] bd: jpgOriginal];
if (success != YES) {
    NSLog(@"%@",jwe2.LastErrorText);
    return;
}

NSLog(@"%@%d",@"Decrypted JPG size = ",[jpgOriginal.NumBytes intValue]);

//  Save the decrypted JPG to a file.
success = [jpgOriginal WriteFile: @"qa_output/jwe_decrypted_starfish.jpg"];

NSLog(@"%@%d",@"success = ",success);

//  The output of this program, when tested, was:
//  Original JPG size = 6229
//  eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.9YFz_wteV ... 7Et3hKhpxnKEXw
//  size of JWE: 8473
//  Decrypted JPG size = 6229
//  success = True