Swift
Swift
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 Swift Downloads
func chilkatTest() {
var success: Bool = false
// 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.
let jpgBytes = CkoBinData()!
success = jpgBytes.loadFile(path: "qa_data/jpg/starfish.jpg")
// Make sure your app checks the success/failure of the call to LoadFile..
print("Original JPG size = \(jpgBytes.numBytes.intValue)")
let jwe = CkoJwe()!
let jweProtHdr = CkoJsonObject()!
jweProtHdr.appendString(name: "alg", value: "A128KW")
jweProtHdr.appendString(name: "enc", value: "A128CBC-HS256")
jwe.setProtectedHeader(json: jweProtHdr)
var aesWrappingKey: String? = "GawgguFyGrWKav7AX4VKUg"
jwe.setWrappingKey(index: 0, encodedKey: aesWrappingKey, encoding: "base64url")
// Encrypt and return the JWE in sbJwe:
let sbJwe = CkoStringBuilder()!
success = jwe.encryptBd(contentBd: jpgBytes, jweSb: sbJwe)
if success != true {
print("\(jwe.lastErrorText!)")
return
}
// Show the JWE:
print("\(sbJwe.getAsString()!)")
print("size of JWE: \(sbJwe.length.intValue)")
// ---------------------------------------------------------
// Decrypt to get the original JPG file..
let jwe2 = CkoJwe()!
success = jwe2.loadSb(sb: sbJwe)
if success != true {
print("\(jwe2.lastErrorText!)")
return
}
// Set the AES wrap key.
jwe2.setWrappingKey(index: 0, encodedKey: aesWrappingKey, encoding: "base64url")
// Decrypt.
let jpgOriginal = CkoBinData()!
success = jwe2.decryptBd(index: 0, bd: jpgOriginal)
if success != true {
print("\(jwe2.lastErrorText!)")
return
}
print("Decrypted JPG size = \(jpgOriginal.numBytes.intValue)")
// Save the decrypted JPG to a file.
success = jpgOriginal.writeFile(path: "qa_output/jwe_decrypted_starfish.jpg")
print("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
}