Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Objective-C) JWE using A256GCMKWThis example demonstrates creating a JCE with AES GCM key wrap.
#import <NSString.h> #import <CkoJwe.h> #import <CkoJsonObject.h> #import <CkoPrng.h> // This requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. BOOL success; NSString *plaintext = @"My text to enrypt"; CkoJwe *jwe = [[CkoJwe alloc] init]; // First build the JWE Protected Header: // { // "alg": "A256GCMKW", // "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d", // "tag": "kfPduVQ3T3H6vnewt--ksw", // "iv": "KkYT0GX_2jHlfqN_", // "enc": "A128CBC-HS256" // } CkoJsonObject *jweProtHdr = [[CkoJsonObject alloc] init]; [jweProtHdr AppendString: @"alg" value: @"A256GCMKW"]; // kid is optional [jweProtHdr AppendString: @"kid" value: @"18ec08e1-bfa9-4d95-b205-2b4dd1d4321d"]; // tag is optional [jweProtHdr AppendString: @"tag" value: @"kfPduVQ3T3H6vnewt--ksw"]; [jweProtHdr AppendString: @"enc" value: @"A256GCM"]; // the iv should be 16 random chars. CkoPrng *prng = [[CkoPrng alloc] init]; [jweProtHdr AppendString: @"iv" value: [prng RandomString: [NSNumber numberWithInt: 16] bDigits: YES bLower: YES bUpper: YES]]; [jwe SetProtectedHeader: jweProtHdr]; NSLog(@"%@%@",@"JWE Protected Header: ",[jweProtHdr Emit]); NSLog(@"%@",@"--"); // 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. NSString *aesWrappingKey = @"2baf4f730f5e4542b428593ef9cceb0e"; [jwe SetWrappingKey: [NSNumber numberWithInt: 0] encodedKey: aesWrappingKey encoding: @"ascii"]; // Encrypt and return the JWE: NSString *strJwe = [jwe Encrypt: plaintext charset: @"utf-8"]; if (jwe.LastMethodSuccess != YES) { NSLog(@"%@",jwe.LastErrorText); return; } // Show the JWE we just created: NSLog(@"%@",strJwe); // Decrypt the JWE that was just produced. // 1) Load the JWE. // 2) Set the AES wrapping key. // 3) Decrypt. CkoJwe *jwe2 = [[CkoJwe alloc] init]; success = [jwe2 LoadJwe: strJwe]; if (success != YES) { NSLog(@"%@",jwe2.LastErrorText); return; } // Set the AES wrap key. Important to use "ascii" [jwe2 SetWrappingKey: [NSNumber numberWithInt: 0] encodedKey: aesWrappingKey encoding: @"ascii"]; // Decrypt. NSString *originalPlaintext = [jwe2 Decrypt: [NSNumber numberWithInt: 0] charset: @"utf-8"]; if (jwe2.LastMethodSuccess != YES) { NSLog(@"%@",jwe2.LastErrorText); return; } NSLog(@"%@",@"original text: "); NSLog(@"%@",originalPlaintext); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.