Sample code for 30+ languages & platforms
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

Swift

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

}