Sample code for 30+ languages & platforms
Swift

JWE using A256GCMKW

See more JSON Web Encryption (JWE) Examples

This example demonstrates creating a JCE with AES GCM key wrap.

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.

    var plaintext: String? = "My text to enrypt"

    let jwe = CkoJwe()!

    // First build the JWE Protected Header: 

    //         {
    //             "alg": "A256GCMKW",
    //             "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
    //             "tag": "kfPduVQ3T3H6vnewt--ksw",
    //             "iv": "KkYT0GX_2jHlfqN_",
    //             "enc": "A128CBC-HS256"
    //         }

    let jweProtHdr = CkoJsonObject()!
    jweProtHdr.appendString(name: "alg", value: "A256GCMKW")
    // kid is optional
    jweProtHdr.appendString(name: "kid", value: "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d")
    // tag is optional
    jweProtHdr.appendString(name: "tag", value: "kfPduVQ3T3H6vnewt--ksw")
    jweProtHdr.appendString(name: "enc", value: "A256GCM")
    // the iv should be 16 random chars.
    let prng = CkoPrng()!
    jweProtHdr.appendString(name: "iv", value: prng.randomString(length: 16, bDigits: true, bLower: true, bUpper: true))
    jwe.setProtectedHeader(json: jweProtHdr)

    print("JWE Protected Header: \(jweProtHdr.emit()!)")
    print("--")

    // 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.
    var aesWrappingKey: String? = "2baf4f730f5e4542b428593ef9cceb0e"
    jwe.setWrappingKey(index: 0, encodedKey: aesWrappingKey, encoding: "ascii")

    // Encrypt and return the JWE:
    var strJwe: String? = jwe.encrypt(content: plaintext, charset: "utf-8")
    if jwe.lastMethodSuccess != true {
        print("\(jwe.lastErrorText!)")
        return
    }

    // Show the JWE we just created:
    print("\(strJwe!)")

    // Decrypt the JWE that was just produced.
    // 1) Load the JWE.
    // 2) Set the AES wrapping key.
    // 3) Decrypt.
    let jwe2 = CkoJwe()!
    success = jwe2.load(jwe: strJwe)
    if success != true {
        print("\(jwe2.lastErrorText!)")
        return
    }

    // Set the AES wrap key.  Important to use "ascii"
    jwe2.setWrappingKey(index: 0, encodedKey: aesWrappingKey, encoding: "ascii")

    // Decrypt.
    var originalPlaintext: String? = jwe2.decrypt(index: 0, charset: "utf-8")
    if jwe2.lastMethodSuccess != true {
        print("\(jwe2.lastErrorText!)")
        return
    }

    print("original text: ")
    print("\(originalPlaintext!)")

}