Sample code for 30+ languages & platforms
DataFlex

Set a Per-Recipient JWE Header

See more JSON Web Encryption (JWE) Examples

Demonstrates Jwe.SetRecipientHeader, which sets the per-recipient unprotected header for a recipient index.

Background. Per-recipient headers carry recipient-specific values such as a key id (kid), and are used with the JSON serialization forms that support multiple recipients.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoJwe
    Variant vHeader
    Handle hoHeader
    String sBase64Key
    Variant vRecipHeader
    Handle hoRecipHeader
    Variant vSbContent
    Handle hoSbContent
    Variant vSbJwe
    Handle hoSbJwe
    String sTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatJwe)) To hoJwe
    If (Not(IsComObjectCreated(hoJwe))) Begin
        Send CreateComObject of hoJwe
    End

    //  Protected header: AES key-wrap with AES-256-GCM content encryption.
    Get Create (RefClass(cComChilkatJsonObject)) To hoHeader
    If (Not(IsComObjectCreated(hoHeader))) Begin
        Send CreateComObject of hoHeader
    End
    Get ComUpdateString Of hoHeader "alg" "A256KW" To iSuccess
    Get ComUpdateString Of hoHeader "enc" "A256GCM" To iSuccess
    Get pvComObject of hoHeader to vHeader
    Get ComSetProtectedHeader Of hoJwe vHeader To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJwe To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  The 256-bit key-wrapping key (base64) for recipient index 0.  In production, obtain the key from a
    //  secure source rather than hard-coding it.
    Move "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU=" To sBase64Key
    Get ComSetWrappingKey Of hoJwe 0 sBase64Key "base64" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJwe To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Set the per-recipient unprotected header for recipient 0, for example a key id used to identify
    //  which key a recipient should use.
    Get Create (RefClass(cComChilkatJsonObject)) To hoRecipHeader
    If (Not(IsComObjectCreated(hoRecipHeader))) Begin
        Send CreateComObject of hoRecipHeader
    End
    Get ComUpdateString Of hoRecipHeader "kid" "recipient-key-1" To iSuccess
    Get pvComObject of hoRecipHeader to vRecipHeader
    Get ComSetRecipientHeader Of hoJwe 0 vRecipHeader To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJwe To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbContent
    If (Not(IsComObjectCreated(hoSbContent))) Begin
        Send CreateComObject of hoSbContent
    End
    Get ComAppend Of hoSbContent "This is the secret content." To iSuccess
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJwe
    If (Not(IsComObjectCreated(hoSbJwe))) Begin
        Send CreateComObject of hoSbJwe
    End
    Get pvComObject of hoSbContent to vSbContent
    Get pvComObject of hoSbJwe to vSbJwe
    Get ComEncryptSb Of hoJwe vSbContent "utf-8" vSbJwe To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJwe To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComGetAsString Of hoSbJwe To sTemp1
    Showln sTemp1


End_Procedure