Objective-C
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
#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