# Disable flake8 reporting
# flake8: noqa

import pytest

from jose.backends import RSAKey
from jose.jws import verify

expected_payload = b"It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to."


# [Docs] [txt|pdf] [draft-ietf-jose-c...]


# Internet Engineering Task Force (IETF)                         M. Miller
# Request for Comments: 7520                           Cisco Systems, Inc.
# Category: Informational                                         May 2015
# ISSN: 2070-1721


#                   Examples of Protecting Content Using
#                JSON Object Signing and Encryption (JOSE)

# Abstract

#    This document contains a set of examples using JSON Object Signing
#    and Encryption (JOSE) technology to protect data.  These examples
#    present a representative sampling of JSON Web Key (JWK) objects as
#    well as various JSON Web Signature (JWS) and JSON Web Encryption
#    (JWE) results given similar inputs.

# Status of This Memo

#    This document is not an Internet Standards Track specification; it is
#    published for informational purposes.

#    This document is a product of the Internet Engineering Task Force
#    (IETF).  It represents the consensus of the IETF community.  It has
#    received public review and has been approved for publication by the
#    Internet Engineering Steering Group (IESG).  Not all documents
#    approved by the IESG are a candidate for any level of Internet
#    Standard; see Section 2 of RFC 5741.

#    Information about the current status of this document, any errata,
#    and how to provide feedback on it may be obtained at
#    http://www.rfc-editor.org/info/rfc7520.

# Copyright Notice

#    Copyright (c) 2015 IETF Trust and the persons identified as the
#    document authors.  All rights reserved.

#    This document is subject to BCP 78 and the IETF Trust's Legal
#    Provisions Relating to IETF Documents
#    (http://trustee.ietf.org/license-info) in effect on the date of
#    publication of this document.  Please review these documents
#    carefully, as they describe your rights and restrictions with respect
#    to this document.  Code Components extracted from this document must
#    include Simplified BSD License text as described in Section 4.e of
#    the Trust Legal Provisions and are provided without warranty as
#    described in the Simplified BSD License.


# Miller                        Informational                     [Page 1]

# RFC 7520                      JOSE Cookbook                     May 2015


# Table of Contents

#    1. Introduction ....................................................5
#       1.1. Conventions Used in This Document ..........................5
#    2. Terminology .....................................................6
#    3. JSON Web Key Examples ...........................................6
#       3.1. EC Public Key ..............................................6
#       3.2. EC Private Key .............................................7
#       3.3. RSA Public Key .............................................8
#       3.4. RSA Private Key ............................................8
#       3.5. Symmetric Key (MAC Computation) ...........................10
#       3.6. Symmetric Key (Encryption) ................................11
#    4. JSON Web Signature Examples ....................................11
#       4.1. RSA v1.5 Signature ........................................12
#            4.1.1. Input Factors ......................................12
#            4.1.2. Signing Operation ..................................12
#            4.1.3. Output Results .....................................13
#       4.2. RSA-PSS Signature .........................................15
#            4.2.1. Input Factors ......................................15
#            4.2.2. Signing Operation ..................................16
#            4.2.3. Output Results .....................................17
#       4.3. ECDSA Signature ...........................................19
#            4.3.1. Input Factors ......................................19
#            4.3.2. Signing Operation ..................................19
#            4.3.3. Output Results .....................................20
#       4.4. HMAC-SHA2 Integrity Protection ............................21
#            4.4.1. Input Factors ......................................22
#            4.4.2. Signing Operation ..................................22
#            4.4.3. Output Results .....................................23
#       4.5. Signature with Detached Content ...........................24
#            4.5.1. Input Factors ......................................25
#            4.5.2. Signing Operation ..................................25
#            4.5.3. Output Results .....................................26
#       4.6. Protecting Specific Header Fields .........................27
#            4.6.1. Input Factors ......................................27
#            4.6.2. Signing Operation ..................................27
#            4.6.3. Output Results .....................................28
#       4.7. Protecting Content Only ...................................29
#            4.7.1. Input Factors ......................................30
#            4.7.2. Signing Operation ..................................30
#            4.7.3. Output Results .....................................31
#       4.8. Multiple Signatures .......................................32
#            4.8.1. Input Factors ......................................32
#            4.8.2. First Signing Operation ............................33
#            4.8.3. Second Signing Operation ...........................34
#            4.8.4. Third Signing Operation ............................36
#            4.8.5. Output Results .....................................37
#    5. JSON Web Encryption Examples ...................................39


# Miller                        Informational                     [Page 2]

# RFC 7520                      JOSE Cookbook                     May 2015


#       5.1. Key Encryption Using RSA v1.5 and AES-HMAC-SHA2 ...........39
#            5.1.1. Input Factors ......................................39
#            5.1.2. Generated Factors ..................................41
#            5.1.3. Encrypting the Key .................................41
#            5.1.4. Encrypting the Content .............................42
#            5.1.5. Output Results .....................................43
#       5.2. Key Encryption Using RSA-OAEP with AES-GCM ................45
#            5.2.1. Input Factors ......................................46
#            5.2.2. Generated Factors ..................................47
#            5.2.3. Encrypting the Key .................................48
#            5.2.4. Encrypting the Content .............................48
#            5.2.5. Output Results .....................................49
#       5.3. Key Wrap Using PBES2-AES-KeyWrap with AES-CBC-HMAC-SHA2 ...52
#            5.3.1. Input Factors ......................................53
#            5.3.2. Generated Factors ..................................54
#            5.3.3. Encrypting the Key .................................54
#            5.3.4. Encrypting the Content .............................55
#            5.3.5. Output Results .....................................56
#       5.4. Key Agreement with Key Wrapping Using ECDH-ES and
#            AES-KeyWrap with AES-GCM ..................................59
#            5.4.1. Input Factors ......................................59
#            5.4.2. Generated Factors ..................................60
#            5.4.3. Encrypting the Key .................................60
#            5.4.4. Encrypting the Content .............................61
#            5.4.5. Output Results .....................................63
#       5.5. Key Agreement Using ECDH-ES with AES-CBC-HMAC-SHA2 ........65
#            5.5.1. Input Factors ......................................66
#            5.5.2. Generated Factors ..................................66
#            5.5.3. Key Agreement ......................................67
#            5.5.4. Encrypting the Content .............................67
#            5.5.5. Output Results .....................................68
#       5.6. Direct Encryption Using AES-GCM ...........................70
#            5.6.1. Input Factors ......................................70
#            5.6.2. Generated Factors ..................................70
#            5.6.3. Encrypting the Content .............................71
#            5.6.4. Output Results .....................................72
#       5.7. Key Wrap Using AES-GCM KeyWrap with AES-CBC-HMAC-SHA2 .....73
#            5.7.1. Input Factors ......................................73
#            5.7.2. Generated Factors ..................................74
#            5.7.3. Encrypting the Key .................................74
#            5.7.4. Encrypting the Content .............................75
#            5.7.5. Output Results .....................................77
#       5.8. Key Wrap Using AES-KeyWrap with AES-GCM ...................79
#            5.8.1. Input Factors ......................................79
#            5.8.2. Generated Factors ..................................80
#            5.8.3. Encrypting the Key .................................80
#            5.8.4. Encrypting the Content .............................80
#            5.8.5. Output Results .....................................82


# Miller                        Informational                     [Page 3]

# RFC 7520                      JOSE Cookbook                     May 2015


#       5.9. Compressed Content ........................................84
#            5.9.1. Input Factors ......................................84
#            5.9.2. Generated Factors ..................................84
#            5.9.3. Encrypting the Key .................................85
#            5.9.4. Encrypting the Content .............................85
#            5.9.5. Output Results .....................................86
#       5.10. Including Additional Authenticated Data ..................88
#            5.10.1. Input Factors .....................................88
#            5.10.2. Generated Factors .................................89
#            5.10.3. Encrypting the Key ................................90
#            5.10.4. Encrypting the Content ............................90
#            5.10.5. Output Results ....................................91
#       5.11. Protecting Specific Header Fields ........................93
#            5.11.1. Input Factors .....................................93
#            5.11.2. Generated Factors .................................94
#            5.11.3. Encrypting the Key ................................94
#            5.11.4. Encrypting the Content ............................94
#            5.11.5. Output Results ....................................95
#       5.12. Protecting Content Only ..................................97
#            5.12.1. Input Factors .....................................97
#            5.12.2. Generated Factors .................................98
#            5.12.3. Encrypting the Key ................................98
#            5.12.4. Encrypting the Content ............................98
#            5.12.5. Output Results ....................................99
#       5.13. Encrypting to Multiple Recipients .......................101
#            5.13.1. Input Factors ....................................101
#            5.13.2. Generated Factors ................................101
#            5.13.3. Encrypting the Key to the First Recipient ........102
#            5.13.4. Encrypting the Key to the Second Recipient .......103
#            5.13.5. Encrypting the Key to the Third Recipient ........105
#            5.13.6. Encrypting the Content ...........................106
#            5.13.7. Output Results ...................................108
#    6. Nesting Signatures and Encryption .............................110
#       6.1. Signing Input Factors ....................................110
#       6.2. Signing Operation ........................................112
#       6.3. Signing Output ...........................................112
#       6.4. Encryption Input Factors .................................113
#       6.5. Encryption Generated Factors .............................113
#       6.6. Encrypting the Key .......................................114
#       6.7. Encrypting the Content ...................................114
#       6.8. Encryption Output ........................................115
#    7. Security Considerations .......................................119
#    8. References ....................................................119
#       8.1. Normative References .....................................119
#       8.2. Informative References ...................................120
#    Acknowledgements .................................................120
#    Author's Address .................................................120


# Miller                        Informational                     [Page 4]

# RFC 7520                      JOSE Cookbook                     May 2015


# 1.  Introduction

#    The JSON Object Signing and Encryption (JOSE) technologies -- JSON
#    Web Signature [JWS], JSON Web Encryption [JWE], JSON Web Key [JWK],
#    and JSON Web Algorithms [JWA] -- can be used collectively to encrypt
#    and/or sign content using a variety of algorithms.  While the full
#    set of permutations is extremely large, and might be daunting to
#    some, it is expected that most applications will only use a small set
#    of algorithms to meet their needs.

#    This document provides a number of examples of signing or encrypting
#    content using JOSE.  While not exhaustive, it does compile a
#    representative sampling of JOSE features.  As much as possible, the
#    same signature payload or encryption plaintext content is used to
#    illustrate differences in various signing and encryption results.

#    This document also provides a number of example JWK objects.  These
#    examples illustrate the distinguishing properties of various key
#    types and emphasize important characteristics.  Most of the JWK
#    examples are then used in the signature or encryption examples that
#    follow.

#    All of the examples contained herein are available in a machine-
#    readable format at <https://github.com/ietf-jose/cookbook>.

# 1.1.  Conventions Used in This Document

#    This document separates data that are expected to be input to an
#    implementation of JOSE from data that are expected to be generated by
#    an implementation of JOSE.  Each example, wherever possible, provides
#    enough information both to replicate the results of this document and
#    to validate the results by running its inverse operation (e.g.,
#    signature results can be validated by performing the JWS verify).
#    However, some algorithms inherently use random data; therefore,
#    computations employing them cannot be exactly replicated.  Such cases
#    are explicitly stated in the relevant sections.

#    All instances of binary octet strings are represented using base64url
#    [RFC4648] encoding.

#    Wherever possible and unless otherwise noted, the examples include
#    the JWS or JWE Compact Serialization, general JWS or JWE JSON
#    Serialization, and flattened JWS or JWE JSON Serialization.

#    All of the examples in this document have whitespace added to improve
#    formatting and readability.  Except for JWE Plaintext or JWS Payload
#    content, whitespace is not part of the cryptographic operations nor
#    the exchange results.


# Miller                        Informational                     [Page 5]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Unless otherwise noted, the JWE Plaintext or JWS Payload content does
#    include " " (U+0020 SPACE) characters.  Line breaks (U+000A LINE
#    FEED) replace some " " (U+0020 SPACE) characters to improve
#    readability but are not present in the JWE Plaintext or JWS Payload.

# 2.  Terminology

#    This document inherits terminology regarding JSON Web Signature (JWS)
#    technology from [JWS], terminology regarding JSON Web Encryption
#    (JWE) technology from [JWE], terminology regarding JSON Web Key (JWK)
#    technology from [JWK], and terminology regarding algorithms from
#    [JWA].

# 3.  JSON Web Key Examples

#    The following sections demonstrate how to represent various JWK and
#    JWK Set objects.

# 3.1.  EC Public Key

#    This example illustrates an Elliptic Curve (EC) public key.  This
#    example is the public key corresponding to the private key in
#    Figure 2.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

#    {
#      "kty": "EC",
#      "kid": "bilbo.baggins@hobbiton.example",
#      "use": "sig",
#      "crv": "P-521",
#      "x": "AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9
#          A5RkTKqjqvjyekWF-7ytDyRXYgCF5cj0Kt",
#      "y": "AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVy
#          SsUdaQkAgDPrwQrJmbnX9cwlGfP-HqHZR1"
#    }

ec_public_key = {
    "kty": "EC",
    "kid": "bilbo.baggins@hobbiton.example",
    "use": "sig",
    "crv": "P-521",
    "x": "AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9A5RkTKqjqvjyekWF-7ytDyRXYgCF5cj0Kt",
    "y": "AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVySsUdaQkAgDPrwQrJmbnX9cwlGfP-HqHZR1",
}

#                  Figure 1: Elliptic Curve P-521 Public Key

#    The field "kty" value of "EC" identifies this as an Elliptic Curve
#    key.  The field "crv" identifies the curve, which is curve P-521 for
#    this example.  The values of the fields "x" and "y" are the
#    base64url-encoded X and Y coordinates (respectively).


# Miller                        Informational                     [Page 6]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The values of the fields "x" and "y" decoded are the octets necessary
#    to represent each full coordinate to the order of the curve.  For a
#    key over curve P-521, the values of the fields "x" and "y" are
#    exactly 66 octets in length when decoded, padded with leading zero
#    (0x00) octets to reach the expected length.

# 3.2.  EC Private Key

#    This example illustrates an Elliptic Curve private key.  This example
#    is the private key corresponding to the public key in Figure 1.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

#    {
#      "kty": "EC",
#      "kid": "bilbo.baggins@hobbiton.example",
#      "use": "sig",
#      "crv": "P-521",
#      "x": "AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9
#          A5RkTKqjqvjyekWF-7ytDyRXYgCF5cj0Kt",
#      "y": "AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVy
#          SsUdaQkAgDPrwQrJmbnX9cwlGfP-HqHZR1",
#      "d": "AAhRON2r9cqXX1hg-RoI6R1tX5p2rUAYdmpHZoC1XNM56KtscrX6zb
#          KipQrCW9CGZH3T4ubpnoTKLDYJ_fF3_rJt"
#    }

#                 Figure 2: Elliptic Curve P-521 Private Key

#    The field "kty" value of "EC" identifies this as an Elliptic Curve
#    key.  The field "crv" identifies the curve, which is curve P-521
#    (also known as SECG curve secp521r1) for this example.  The values of
#    the fields "x" and "y" are the base64url-encoded X and Y coordinates
#    (respectively).  The field "d" value is the base64url-encoded private
#    key.

#    The values of the fields "d", "x", and "y" decoded are the octets
#    necessary to represent the private key or each full coordinate
#    (respectively) to the order of the curve.  For a key over curve
#    P-521, the values of the "d", "x", and "y" fields are each exactly 66
#    octets in length when decoded, padded with leading zero (0x00) octets
#    to reach the expected length.


# Miller                        Informational                     [Page 7]

# RFC 7520                      JOSE Cookbook                     May 2015


# 3.3.  RSA Public Key

#    This example illustrates an RSA public key.  This example is the
#    public key corresponding to the private key in Figure 4.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

#    {
#      "kty": "RSA",
#      "kid": "bilbo.baggins@hobbiton.example",
#      "use": "sig",
#      "n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT
#          -O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqV
#          wGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-
#          oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde
#          3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuC
#          LqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5g
#          HdrNP5zw",
#      "e": "AQAB"
#    }

rsa_public_jwk = {
    "kty": "RSA",
    "kid": "bilbo.baggins@hobbiton.example",
    "use": "sig",
    "n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw",
    "e": "AQAB",
}

#                      Figure 3: RSA 2048-Bit Public Key

#    The field "kty" value of "RSA" identifies this as an RSA key.  The
#    fields "n" and "e" values are the modulus and (public) exponent
#    (respectively) using the minimum octets necessary.

#    For a 2048-bit key, the field "n" value is 256 octets in length when
#    decoded.

# 3.4.  RSA Private Key

#    This example illustrates an RSA private key.  This example is the
#    private key corresponding to the public key in Figure 3.

#    Note that whitespace is added for readability as described in
#    Section 1.1.


# Miller                        Informational                     [Page 8]

# RFC 7520                      JOSE Cookbook                     May 2015


#    {
#      "kty": "RSA",
#      "kid": "bilbo.baggins@hobbiton.example",
#      "use": "sig",
#      "n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT
#          -O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqV
#          wGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-
#          oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde
#          3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuC
#          LqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5g
#          HdrNP5zw",
#      "e": "AQAB",
#      "d": "bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78e
#          iZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRld
#          Y7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-b
#          MwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU
#          6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDj
#          d18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOc
#          OpBrQzwQ",
#      "p": "3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nR
#          aO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmG
#          peNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8
#          bUq0k",
#      "q": "uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT
#          8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7an
#          V5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0
#          s7pFc",
#      "dp": "B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q
#          1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn
#          -RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX
#          59ehik",
#      "dq": "CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pEr
#          AMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJK
#          bi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdK
#          T1cYF8",
#      "qi": "3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-N
#          ZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDh
#          jJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpP
#          z8aaI4"
#    }

#                     Figure 4: RSA 2048-Bit Private Key


# Miller                        Informational                     [Page 9]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The field "kty" value of "RSA" identifies this as an RSA key.  The
#    fields "n" and "e" values are the base64url-encoded modulus and
#    (public) exponent (respectively) using the minimum number of octets
#    necessary.  The field "d" value is the base64url-encoded private
#    exponent using the minimum number of octets necessary.  The fields
#    "p", "q", "dp", "dq", and "qi" are the base64url-encoded additional
#    private information using the minimum number of octets necessary.

#    For a 2048-bit key, the field "n" is 256 octets in length when
#    decoded, and the field "d" is not longer than 256 octets in length
#    when decoded.

# 3.5.  Symmetric Key (MAC Computation)

#    This example illustrates a symmetric key used for computing Message
#    Authentication Codes (MACs).

#    Note that whitespace is added for readability as described in
#    Section 1.1.

#    {
#      "kty": "oct",
#      "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037",
#      "use": "sig",
#      "alg": "HS256",
#      "k": "hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg"
#    }

hmac_key = {
    "kty": "oct",
    "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037",
    "use": "sig",
    "alg": "HS256",
    "k": "hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg",
}

#                    Figure 5: HMAC SHA-256 Symmetric Key

#    The field "kty" value of "oct" identifies this as a symmetric key.
#    The field "k" value is the symmetric key.

#    When used for the signing algorithm "HS256" (HMAC-SHA256), the field
#    "k" value is 32 octets (or more) in length when decoded, padded with
#    leading zero (0x00) octets to reach the minimum expected length.


# Miller                        Informational                    [Page 10]

# RFC 7520                      JOSE Cookbook                     May 2015


# 3.6.  Symmetric Key (Encryption)

#    This example illustrates a symmetric key used for encryption.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

#    {
#      "kty": "oct",
#      "kid": "1e571774-2e08-40da-8308-e8d68773842d",
#      "use": "enc",
#      "alg": "A256GCM",
#      "k": "AAPapAv4LbFbiVawEjagUBluYqN5rhna-8nuldDvOx8"
#    }

#               Figure 6: AES 256-Bit Symmetric Encryption Key

#    The field "kty" value of "oct" identifies this as a symmetric key.
#    The field "k" value is the symmetric key.

#    For the content encryption algorithm "A256GCM", the field "k" value
#    is exactly 32 octets in length when decoded, padded with leading zero
#    (0x00) octets to reach the expected length.

# 4.  JSON Web Signature Examples

#    The following sections demonstrate how to generate various JWS
#    objects.

#    All of the signature examples use the following payload content (an
#    abridged quote from "The Fellowship of the Ring" [LOTR-FELLOWSHIP]),
#    serialized as UTF-8.  The payload is presented here as a series of
#    quoted strings that are concatenated to produce the JWS Payload.  The
#    sequence "\xe2\x80\x99" is substituted for (U+2019 RIGHT SINGLE
#    QUOTATION MARK), and quotation marks (U+0022 QUOTATION MARK) are
#    added for readability but are not present in the JWS Payload.

#    "It\xe2\x80\x99s a dangerous business, Frodo, going out your "
#    "door. You step onto the road, and if you don't keep your feet, "
#    "there\xe2\x80\x99s no knowing where you might be swept off "
#    "to."

#                     Figure 7: Payload Content Plaintext


# Miller                        Informational                    [Page 11]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The payload -- with the sequence "\xe2\x80\x99" replaced with (U+2019
#    RIGHT SINGLE QUOTATION MARK) and quotations marks (U+0022 QUOTATION
#    MARK) are removed -- is encoded as UTF-8 and then as base64url
#    [RFC4648]:

#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                Figure 8: Payload Content, base64url-encoded

# 4.1.  RSA v1.5 Signature

#    This example illustrates signing content using the "RS256" (RSASSA-
#    PKCS1-v1_5 with SHA-256) algorithm.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 4.1.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  RSA private key; this example uses the key from Figure 4.

#    o  "alg" parameter of "RS256".

# 4.1.2.  Signing Operation

#    The following is generated to complete the signing operation:

#    o  JWS Protected Header; this example uses the header from Figure 9,
#       encoded using base64url [RFC4648] to produce Figure 10.

#    {
#      "alg": "RS256",
#      "kid": "bilbo.baggins@hobbiton.example"
#    }

#                     Figure 9: JWS Protected Header JSON


# Miller                        Informational                    [Page 12]

# RFC 7520                      JOSE Cookbook                     May 2015


#    eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9

#             Figure 10: JWS Protected Header, base64url-encoded

#    The JWS Protected Header (Figure 10) and JWS Payload (Figure 8) are
#    combined as described in Section 5.1 of [JWS] to produce the JWS
#    Signing Input (Figure 11).

#    eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 11: JWS Signing Input

#    Performing the signature operation over the JWS Signing Input
#    (Figure 11) produces the JWS Signature (Figure 12).

#    MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK
#    ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J
#    IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w
#    W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP
#    xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f
#    cIe8u9ipH84ogoree7vjbU5y18kDquDg

#                 Figure 12: JWS Signature, base64url-encoded

# 4.1.3.  Output Results

#    The following compose the resulting JWS object:

#    o  JWS Protected Header (Figure 9)

#    o  Payload content (Figure 8)

#    o  Signature (Figure 12)


# Miller                        Informational                    [Page 13]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the JWS Compact Serialization:

#    eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
#    .
#    MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK
#    ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J
#    IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w
#    W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP
#    xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f
#    cIe8u9ipH84ogoree7vjbU5y18kDquDg

#                    Figure 13: JWS Compact Serialization


class TestFourOneThree:

    token = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4.MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg"

    @pytest.mark.skipif(RSAKey is None, reason="RSA is not available")
    def test_signature(self):

        payload = verify(self.token, rsa_public_jwk, "RS256")
        assert payload == expected_payload


#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2
#              dpbnNAaG9iYml0b24uZXhhbXBsZSJ9",
#          "signature": "MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHo
#              xnW2e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII
#              7PNDi84wnB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0Rnlt
#              uYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPo
#              cSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxU
#              Ahb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJush
#              Z41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg"
#        }
#      ]
#    }

#                  Figure 14: General JWS JSON Serialization


# Miller                        Informational                    [Page 14]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the flattened JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbn
#          NAaG9iYml0b24uZXhhbXBsZSJ9",
#      "signature": "MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2
#          e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84w
#          nB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0RnltuYv746iYTh_q
#          HRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9U
#          zpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0
#          KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogore
#          e7vjbU5y18kDquDg"
#    }

#                 Figure 15: Flattened JWS JSON Serialization

# 4.2.  RSA-PSS Signature

#    This example illustrates signing content using the "PS384" (RSASSA-
#    PSS with SHA-384) algorithm.

#    Note that RSASSA-PSS uses random data to generate the signature; it
#    might not be possible to exactly replicate the results in this
#    section.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 4.2.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  RSA private key; this example uses the key from Figure 4.

#    o  "alg" parameter of "PS384".


# Miller                        Informational                    [Page 15]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.2.2.  Signing Operation

#    The following is generated to complete the signing operation:

#    o  JWS Protected Header; this example uses the header from Figure 16,
#       encoded using base64url [RFC4648] to produce Figure 17.

#    {
#      "alg": "PS384",
#      "kid": "bilbo.baggins@hobbiton.example"
#    }

#                    Figure 16: JWS Protected Header JSON

#    eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9

#             Figure 17: JWS Protected Header, base64url-encoded

#    The JWS Protected Header (Figure 17) and JWS Payload (Figure 8) are
#    combined as described in [JWS] to produce the JWS Signing Input
#    (Figure 18).

#    eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 18: JWS Signing Input

#    Performing the signature operation over the JWS Signing Input
#    (Figure 18) produces the JWS Signature (Figure 19).

#    cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42miAh2qyBzk1xEsnk2I
#    pN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllVo6_1OLPpcbUrhiUSMxbbXU
#    vdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRX
#    e8P_ijQ7p8Vdz0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT
#    0qI0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a
#    6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw

#                 Figure 19: JWS Signature, base64url-encoded


# Miller                        Informational                    [Page 16]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.2.3.  Output Results

#    The following compose the resulting JWS object:

#    o  JWS Protected Header (Figure 17)

#    o  Payload content (Figure 8)

#    o  Signature (Figure 19)

#    The resulting JWS object using the JWS Compact Serialization:

#    eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
#    .
#    cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42miAh2qyBzk1xEsnk2I
#    pN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllVo6_1OLPpcbUrhiUSMxbbXU
#    vdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRX
#    e8P_ijQ7p8Vdz0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT
#    0qI0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a
#    6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw

#                    Figure 20: JWS Compact Serialization


# Miller                        Informational                    [Page 17]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2
#              dpbnNAaG9iYml0b24uZXhhbXBsZSJ9",
#          "signature": "cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy
#              42miAh2qyBzk1xEsnk2IpN6-tPid6VrklHkqsGqDqHCdP6O8TTB5
#              dDDItllVo6_1OLPpcbUrhiUSMxbbXUvdvWXzg-UD8biiReQFlfz2
#              8zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRXe8P_ijQ7p8Vd
#              z0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT0q
#              I0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uT
#              OcbH510a6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw"
#        }
#      ]
#    }

#                  Figure 21: General JWS JSON Serialization

#    The resulting JWS object using the flattened JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbn
#          NAaG9iYml0b24uZXhhbXBsZSJ9",
#      "signature": "cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42mi
#          Ah2qyBzk1xEsnk2IpN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllV
#          o6_1OLPpcbUrhiUSMxbbXUvdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf
#          8ZnyPEgVFn442ZdNqiVJRmBqrYRXe8P_ijQ7p8Vdz0TTrxUeT3lm8d9s
#          hnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT0qI0n6uiP1aCN_2_jLAeQT
#          lqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a6GYmJUAfmWjwZ6oD
#          4ifKo8DYM-X72Eaw"
#    }

#                 Figure 22: Flattened JWS JSON Serialization


# Miller                        Informational                    [Page 18]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.3.  ECDSA Signature

#    This example illustrates signing content using the "ES512" (Elliptic
#    Curve Digital Signature Algorithm (ECDSA) with curve P-521 and SHA-
#    512) algorithm.

#    Note that ECDSA uses random data to generate the signature; it might
#    not be possible to exactly replicate the results in this section.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 4.3.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  EC private key on the curve P-521; this example uses the key from
#       Figure 2.

#    o  "alg" parameter of "ES512".

# 4.3.2.  Signing Operation

#    The following is generated before beginning the signature process:

#    o  JWS Protected Header; this example uses the header from Figure 23,
#       encoded using base64url [RFC4648] to produce Figure 24.

#    {
#      "alg": "ES512",
#      "kid": "bilbo.baggins@hobbiton.example"
#    }

#                    Figure 23: JWS Protected Header JSON

#    eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9

#             Figure 24: JWS Protected Header, base64url-encoded


# Miller                        Informational                    [Page 19]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The JWS Protected Header (Figure 24) and JWS Payload (Figure 8) are
#    combined as described in [JWS] to produce the JWS Signing Input
#    (Figure 25).

#    eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 25: JWS Signing Input

#    Performing the signature operation over the JWS Signing Input
#    (Figure 25) produces the JWS Signature (Figure 26).

#    AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvb
#    u9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kv
#    AD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2

#                 Figure 26: JWS Signature, base64url-encoded

# 4.3.3.  Output Results

#    The following compose the resulting JWS object:

#    o  JWS Protected Header (Figure 24)

#    o  Payload content (Figure 8)

#    o  Signature (Figure 26)

#    The resulting JWS object using the JWS Compact Serialization:

#    eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
#    hhbXBsZSJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
#    .
#    AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvb
#    u9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kv
#    AD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2

#                    Figure 27: JWS Compact Serialization


class TestFourThreeThree:

    token = "eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4.AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2"

    def test_signature(self):

        payload = verify(self.token, ec_public_key, "ES512")
        assert payload == expected_payload


# Miller                        Informational                    [Page 20]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2
#              dpbnNAaG9iYml0b24uZXhhbXBsZSJ9",
#          "signature": "AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNl
#              aAjP2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mt
#              PBu_u_sDDyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBp
#              HABlsbEPX6sFY8OcGDqoRuBomu9xQ2"
#        }
#      ]
#    }

#                  Figure 28: General JWS JSON Serialization

#    The resulting JWS object using the flattened JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbn
#          NAaG9iYml0b24uZXhhbXBsZSJ9",
#      "signature": "AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP
#          2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sD
#          DyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBpHABlsbEPX6sF
#          Y8OcGDqoRuBomu9xQ2"
#    }

#                 Figure 29: Flattened JWS JSON Serialization

# 4.4.  HMAC-SHA2 Integrity Protection

#    This example illustrates integrity protecting content using the
#    "HS256" (HMAC-SHA-256) algorithm.

#    Note that whitespace is added for readability as described in
#    Section 1.1.


# Miller                        Informational                    [Page 21]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.4.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  HMAC symmetric key; this example uses the key from Figure 5.

#    o  "alg" parameter of "HS256".

# 4.4.2.  Signing Operation

#    The following is generated before completing the signing operation:

#    o  JWS Protected Header; this example uses the header from Figure 30,
#       encoded using base64url [RFC4648] to produce Figure 31.

#    {
#      "alg": "HS256",
#      "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#    }

#                    Figure 30: JWS Protected Header JSON

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9

#             Figure 31: JWS Protected Header, base64url-encoded

#    The JWS Protected Header (Figure 31) and JWS Payload (Figure 8) are
#    combined as described in [JWS] to produce the JWS Signing Input
#    (Figure 32).

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 32: JWS Signing Input


# Miller                        Informational                    [Page 22]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the signature operation over the JWS Signing Input
#    (Figure 32) produces the JWS Signature (Figure 33).

#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                 Figure 33: JWS Signature, base64url-encoded

# 4.4.3.  Output Results

#    The following compose the resulting JWS object:

#    o  JWS Protected Header (Figure 31)

#    o  Payload content (Figure 8)

#    o  Signature (Figure 33)

#    The resulting JWS object using the JWS Compact Serialization:

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
#    .
#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                    Figure 34: JWS Compact Serialization


class TestFourFourThree:

    token = "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4.s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"

    def test_signature(self):

        payload = verify(self.token, hmac_key, "HS256")
        assert payload == expected_payload


# Miller                        Informational                    [Page 23]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LT
#              RkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
#          "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
#              0"
#        }
#      ]
#    }

#                  Figure 35: General JWS JSON Serialization

#    The resulting JWS object using the flattened JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOW
#          ItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
#      "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"
#    }

#                 Figure 36: Flattened JWS JSON Serialization

# 4.5.  Signature with Detached Content

#    This example illustrates a signature with detached content.  This
#    example is identical to other examples in Section 4, except the
#    resulting JWS objects do not include the JWS Payload field.  Instead,
#    the application is expected to locate it elsewhere.  For example, the
#    signature might be in a metadata section, with the payload being the
#    content.

#    Note that whitespace is added for readability as described in
#    Section 1.1.


# Miller                        Informational                    [Page 24]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.5.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  Signing key; this example uses the AES symmetric key from
#       Figure 5.

#    o  Signing algorithm; this example uses "HS256".

# 4.5.2.  Signing Operation

#    The following is generated before completing the signing operation:

#    o  JWS Protected Header; this example uses the header from Figure 37,
#       encoded using base64url [RFC4648] to produce Figure 38.

#    {
#      "alg": "HS256",
#      "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#    }

#                    Figure 37: JWS Protected Header JSON

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9

#             Figure 38: JWS Protected Header, base64url-encoded

#    The JWS Protected Header (Figure 38) and JWS Payload (Figure 8) are
#    combined as described in [JWS] to produce the JWS Signing Input
#    (Figure 39).

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 39: JWS Signing Input


# Miller                        Informational                    [Page 25]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the signature operation over the JWS Signing Input
#    (Figure 39) produces the JWS Signature (Figure 40).

#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                 Figure 40: JWS Signature, base64url-encoded

# 4.5.3.  Output Results

#    The following compose the resulting JWS object:

#    o  JWS Protected Header (Figure 38)

#    o  Signature (Figure 40)

#    The resulting JWS object using the JWS Compact Serialization:

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9
#    .
#    .
#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                  Figure 41: General JWS JSON Serialization

#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "signatures": [
#        {
#          "protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LT
#              RkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
#          "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
#              0"
#        }
#      ]
#    }

#                  Figure 42: General JWS JSON Serialization


# Miller                        Informational                    [Page 26]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the flattened JWS JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOW
#          ItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
#      "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"
#    }

#                 Figure 43: Flattened JWS JSON Serialization

# 4.6.  Protecting Specific Header Fields

#    This example illustrates a signature where only certain Header
#    Parameters are protected.  Since this example contains both
#    unprotected and protected Header Parameters, only the general JWS
#    JSON Serialization and flattened JWS JSON Serialization are possible.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 4.6.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  Signing key; this example uses the AES symmetric key from
#       Figure 5.

#    o  Signing algorithm; this example uses "HS256".

# 4.6.2.  Signing Operation

#    The following are generated before completing the signing operation:

#    o  JWS Protected Header; this example uses the header from Figure 44,
#       encoded using base64url [RFC4648] to produce Figure 45.

#    o  JWS Unprotected Header; this example uses the header from
#       Figure 46.

#    {
#      "alg": "HS256"
#    }

#                    Figure 44: JWS Protected Header JSON


# Miller                        Informational                    [Page 27]

# RFC 7520                      JOSE Cookbook                     May 2015


#    eyJhbGciOiJIUzI1NiJ9

#             Figure 45: JWS Protected Header, base64url-encoded

#    {
#      "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#    }

#                   Figure 46: JWS Unprotected Header JSON

#    The JWS Protected Header (Figure 45) and JWS Payload (Figure 8) are
#    combined as described in [JWS] to produce the JWS Signing Input
#    (Figure 47).

#    eyJhbGciOiJIUzI1NiJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 47: JWS Signing Input

#    Performing the signature operation over the JWS Signing Input
#    (Figure 47) produces the JWS Signature (Figure 48).

#    bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr20

#                 Figure 48: JWS Signature, base64url-encoded

# 4.6.3.  Output Results

#    The following compose the resulting JWS object:

#    o  JWS Protected Header (Figure 45)

#    o  JWS Unprotected Header (Figure 46)

#    o  Payload content (Figure 8)

#    o  Signature (Figure 48)

#    The JWS Compact Serialization is not presented because it does not
#    support this use case.


# Miller                        Informational                    [Page 28]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "eyJhbGciOiJIUzI1NiJ9",
#          "header": {
#            "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#          },
#          "signature": "bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr2
#              0"
#        }
#      ]
#    }

#                  Figure 49: General JWS JSON Serialization

#    The resulting JWS object using the flattened JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "eyJhbGciOiJIUzI1NiJ9",
#      "header": {
#        "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#      },
#      "signature": "bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr20"
#    }

#                 Figure 50: Flattened JWS JSON Serialization

# 4.7.  Protecting Content Only

#    This example illustrates a signature where none of the Header
#    Parameters are protected.  Since this example contains only
#    unprotected Header Parameters, only the general JWS JSON
#    Serialization and flattened JWS JSON Serialization are possible.

#    Note that whitespace is added for readability as described in
#    Section 1.1.


# Miller                        Informational                    [Page 29]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.7.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  Signing key; this example uses the AES symmetric key from
#       Figure 5.

#    o  Signing algorithm; this example uses "HS256".

# 4.7.2.  Signing Operation

#    The following is generated before completing the signing operation:

#    o  JWS Unprotected Header; this example uses the header from
#       Figure 51.

#    {
#      "alg": "HS256",
#      "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#    }

#                   Figure 51: JWS Unprotected Header JSON

#    The empty string (as there is no JWS Protected Header) and JWS
#    Payload (Figure 8) are combined as described in [JWS] to produce the
#    JWS Signing Input (Figure 52).

#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 52: JWS Signing Input

#    Performing the signature operation over the JWS Signing Input
#    (Figure 52) produces the JWS Signature (Figure 53).

#    xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZuk

#                 Figure 53: JWS Signature, base64url-encoded


# Miller                        Informational                    [Page 30]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.7.3.  Output Results

#    The following compose the resulting JWS object:

#    o  JWS Unprotected Header (Figure 51)

#    o  Payload content (Figure 8)

#    o  Signature (Figure 53)

#    The JWS Compact Serialization is not presented because it does not
#    support this use case.

#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "header": {
#            "alg": "HS256",
#            "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#          },
#          "signature": "xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZu
#              k"
#        }
#      ]
#    }

#                  Figure 54: General JWS JSON Serialization


# Miller                        Informational                    [Page 31]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the flattened JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "header": {
#        "alg": "HS256",
#        "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#      },
#      "signature": "xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZuk"
#    }

#                 Figure 55: Flattened JWS JSON Serialization

# 4.8.  Multiple Signatures

#    This example illustrates multiple signatures applied to the same
#    payload.  Since this example contains more than one signature, only
#    the JSON General Serialization is possible.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 4.8.1.  Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the content from Figure 7,
#       encoded using base64url [RFC4648] to produce Figure 8.

#    o  Signing keys; this example uses the following:

#       *  RSA private key from Figure 4 for the first signature

#       *  EC private key from Figure 2 for the second signature

#       *  AES symmetric key from Figure 5 for the third signature

#    o  Signing algorithms; this example uses the following:

#       *  "RS256" for the first signature

#       *  "ES512" for the second signature

#       *  "HS256" for the third signature


# Miller                        Informational                    [Page 32]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.8.2.  First Signing Operation

#    The following are generated before completing the first signing
#    operation:

#    o  JWS Protected Header; this example uses the header from Figure 56,
#       encoded using base64url [RFC4648] to produce Figure 57.

#    o  JWS Unprotected Header; this example uses the header from
#       Figure 58.

#    {
#      "alg": "RS256"
#    }

#              Figure 56: Signature #1 JWS Protected Header JSON

#    eyJhbGciOiJSUzI1NiJ9

#       Figure 57: Signature #1 JWS Protected Header, base64url-encoded

#    {
#      "kid": "bilbo.baggins@hobbiton.example"
#    }

#             Figure 58: Signature #1 JWS Unprotected Header JSON

#    The JWS Protected Header (Figure 57) and JWS Payload (Figure 8) are
#    combined as described in [JWS] to produce the JWS Signing Input
#    (Figure 59).

#    eyJhbGciOiJSUzI1NiJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 59: JWS Signing Input


# Miller                        Informational                    [Page 33]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the signature operation over the JWS Signing Input
#    (Figure 59) produces the JWS Signature (Figure 60).

#    MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5NvyG53uoimic1tcMdSg-qpt
#    rzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFcryNFiHkSw129EghGpwkpxaTn_THJTC
#    glNbADko1MZBCdwzJxwqZc-1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjy
#    tKSeAMbhMBdMma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqB
#    BCXbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK64jU6_TPt
#    QHiJeQJxz9G3Tx-083B745_AfYOnlC9w

#               Figure 60: JWS Signature #1, base64url-encoded

#    The following is the assembled first signature serialized as JSON:

#    {
#      "protected": "eyJhbGciOiJSUzI1NiJ9",
#      "header": {
#        "kid": "bilbo.baggins@hobbiton.example"
#      },
#      "signature": "MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5NvyG53u
#          oimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFcryNFiHkS
#          w129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc-1RlpO2HibUY
#          yXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdMma622_BG5t4sdbuC
#          HtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBCXbYoQJwt7mxPftHmNlGo
#          OSMxR_3thmXTCm4US-xiNOyhbm8afKK64jU6_TPtQHiJeQJxz9G3Tx-0
#          83B745_AfYOnlC9w"
#    }

#                        Figure 61: Signature #1 JSON

# 4.8.3.  Second Signing Operation

#    The following is generated before completing the second signing
#    operation:

#    o  JWS Unprotected Header; this example uses the header from
#       Figure 62.

#    {
#      "alg": "ES512",
#      "kid": "bilbo.baggins@hobbiton.example"
#    }

#             Figure 62: Signature #2 JWS Unprotected Header JSON


# Miller                        Informational                    [Page 34]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The empty string (as there is no JWS Protected Header) and JWS
#    Payload (Figure 8) are combined as described in [JWS] to produce the
#    JWS Signing Input (Figure 63).

#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 63: JWS Signing Input

#    Performing the signature operation over the JWS Signing Input
#    (Figure 63) produces the JWS Signature (Figure 64).

#    ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhcdCoFZFFjfISu0Cdkn9Yb
#    dlmi54ho0x924DUz8sK7ZXkhc7AFM8ObLfTvNCrqcI3Jkl2U5IX3utNhODH6v7
#    xgy1Qahsn0fyb4zSAkje8bAWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD

#               Figure 64: JWS Signature #2, base64url-encoded

#    The following is the assembled second signature serialized as JSON:

#    {
#      "header": {
#        "alg": "ES512",
#        "kid": "bilbo.baggins@hobbiton.example"
#      },
#      "signature": "ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhcdCoF
#          ZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8ObLfTvNCrq
#          cI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8bAWz4vIfj5pCM
#          Yxxm4fgV3q7ZYhm5eD"
#    }

#                        Figure 65: Signature #2 JSON


# Miller                        Informational                    [Page 35]

# RFC 7520                      JOSE Cookbook                     May 2015


# 4.8.4.  Third Signing Operation

#    The following is generated before completing the third signing
#    operation:

#    o  JWS Protected Header; this example uses the header from Figure 66,
#       encoded using base64url [RFC4648] to produce Figure 67.

#    {
#      "alg": "HS256",
#      "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
#    }

#              Figure 66: Signature #3 JWS Protected Header JSON

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9

#       Figure 67: Signature #3 JWS Protected Header, base64url-encoded

#    The JWS Protected Header (Figure 67) and JWS Payload (Figure 8) are
#    combined as described in [JWS] to produce the JWS Signing Input
#    (Figure 68).

#    eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
#    VlZjMxNGJjNzAzNyJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4

#                        Figure 68: JWS Signing Input

#    Performing the signature operation over the JWS Signing Input
#    (Figure 68) produces the JWS Signature (Figure 69).

#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#               Figure 69: JWS Signature #3, base64url-encoded


# Miller                        Informational                    [Page 36]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The following is the assembled third signature serialized as JSON:

#    {
#      "protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOW
#          ItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
#      "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"
#    }

#                        Figure 70: Signature #3 JSON

# 4.8.5.  Output Results

#    The following compose the resulting JWS object:

#    o  Payload content (Figure 8)

#    o  Signature #1 JSON (Figure 61)

#    o  Signature #2 JSON (Figure 65)

#    o  Signature #3 JSON (Figure 70)

#    The JWS Compact Serialization is not presented because it does not
#    support this use case; the flattened JWS JSON Serialization is not
#    presented because there is more than one signature.


# Miller                        Informational                    [Page 37]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the general JWS JSON Serialization:

#    {
#      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "eyJhbGciOiJSUzI1NiJ9",
#          "header": {
#            "kid": "bilbo.baggins@hobbiton.example"
#          },
#          "signature": "MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5Nvy
#              G53uoimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFc
#              ryNFiHkSw129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc
#              -1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdM
#              ma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBC
#              XbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK6
#              4jU6_TPtQHiJeQJxz9G3Tx-083B745_AfYOnlC9w"
#        },
#        {
#          "header": {
#            "alg": "ES512",
#            "kid": "bilbo.baggins@hobbiton.example"
#          },
#          "signature": "ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhc
#              dCoFZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8Ob
#              LfTvNCrqcI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8b
#              AWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD"
#        },
#        {
#          "protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LT
#              RkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
#          "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
#              0"
#        }
#      ]
#    }

#                  Figure 71: General JWS JSON Serialization


# Miller                        Informational                    [Page 38]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.  JSON Web Encryption Examples

#    The following sections demonstrate how to generate various JWE
#    objects.

#    All of the encryption examples (unless otherwise noted) use the
#    following Plaintext content (an abridged quote from "The Fellowship
#    of the Ring" [LOTR-FELLOWSHIP]), serialized as UTF-8.  The Plaintext
#    is presented here as a series of quoted strings that are concatenated
#    to produce the JWE Plaintext.  The sequence "\xe2\x80\x93" is
#    substituted for (U+2013 EN DASH), and quotation marks (U+0022
#    QUOTATION MARK) are added for readability but are not present in the
#    JWE Plaintext.

#    "You can trust us to stick with you through thick and "
#    "thin\xe2\x80\x93to the bitter end. And you can trust us to "
#    "keep any secret of yours\xe2\x80\x93closer than you keep it "
#    "yourself. But you cannot trust us to let you face trouble "
#    "alone, and go off without a word. We are your friends, Frodo."

#                        Figure 72: Plaintext Content

# 5.1.  Key Encryption Using RSA v1.5 and AES-HMAC-SHA2

#    This example illustrates encrypting content using the "RSA1_5"
#    (RSAES-PKCS1-v1_5) key encryption algorithm and the "A128CBC-HS256"
#    (AES-128-CBC-HMAC-SHA-256) content encryption algorithm.

#    Note that RSAES-PKCS1-v1_5 uses random data to generate the
#    ciphertext; it might not be possible to exactly replicate the results
#    in this section.

#    Note that only the RSA public key is necessary to perform the
#    encryption.  However, the example includes the RSA private key to
#    allow readers to validate the output.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.1.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  RSA public key; this example uses the key from Figure 73.


# Miller                        Informational                    [Page 39]

# RFC 7520                      JOSE Cookbook                     May 2015


#    o  "alg" parameter of "RSA1_5".

#    o  "enc" parameter of "A128CBC-HS256".

#    {
#      "kty": "RSA",
#      "kid": "frodo.baggins@hobbiton.example",
#      "use": "enc",
#      "n": "maxhbsmBtdQ3CNrKvprUE6n9lYcregDMLYNeTAWcLj8NnPU9XIYegT
#          HVHQjxKDSHP2l-F5jS7sppG1wgdAqZyhnWvXhYNvcM7RfgKxqNx_xAHx
#          6f3yy7s-M9PSNCwPC2lh6UAkR4I00EhV9lrypM9Pi4lBUop9t5fS9W5U
#          NwaAllhrd-osQGPjIeI1deHTwx-ZTHu3C60Pu_LJIl6hKn9wbwaUmA4c
#          R5Bd2pgbaY7ASgsjCUbtYJaNIHSoHXprUdJZKUMAzV0WOKPfA6OPI4oy
#          pBadjvMZ4ZAj3BnXaSYsEZhaueTXvZB4eZOAjIyh2e_VOIKVMsnDrJYA
#          VotGlvMQ",
#      "e": "AQAB",
#      "d": "Kn9tgoHfiTVi8uPu5b9TnwyHwG5dK6RE0uFdlpCGnJN7ZEi963R7wy
#          bQ1PLAHmpIbNTztfrheoAniRV1NCIqXaW_qS461xiDTp4ntEPnqcKsyO
#          5jMAji7-CL8vhpYYowNFvIesgMoVaPRYMYT9TW63hNM0aWs7USZ_hLg6
#          Oe1mY0vHTI3FucjSM86Nff4oIENt43r2fspgEPGRrdE6fpLc9Oaq-qeP
#          1GFULimrRdndm-P8q8kvN3KHlNAtEgrQAgTTgz80S-3VD0FgWfgnb1PN
#          miuPUxO8OpI9KDIfu_acc6fg14nsNaJqXe6RESvhGPH2afjHqSy_Fd2v
#          pzj85bQQ",
#      "p": "2DwQmZ43FoTnQ8IkUj3BmKRf5Eh2mizZA5xEJ2MinUE3sdTYKSLtaE
#          oekX9vbBZuWxHdVhM6UnKCJ_2iNk8Z0ayLYHL0_G21aXf9-unynEpUsH
#          7HHTklLpYAzOOx1ZgVljoxAdWNn3hiEFrjZLZGS7lOH-a3QQlDDQoJOJ
#          2VFmU",
#      "q": "te8LY4-W7IyaqH1ExujjMqkTAlTeRbv0VLQnfLY2xINnrWdwiQ93_V
#          F099aP1ESeLja2nw-6iKIe-qT7mtCPozKfVtUYfz5HrJ_XY2kfexJINb
#          9lhZHMv5p1skZpeIS-GPHCC6gRlKo1q-idn_qxyusfWv7WAxlSVfQfk8
#          d6Et0",
#      "dp": "UfYKcL_or492vVc0PzwLSplbg4L3-Z5wL48mwiswbpzOyIgd2xHTH
#          QmjJpFAIZ8q-zf9RmgJXkDrFs9rkdxPtAsL1WYdeCT5c125Fkdg317JV
#          RDo1inX7x2Kdh8ERCreW8_4zXItuTl_KiXZNU5lvMQjWbIw2eTx1lpsf
#          lo0rYU",
#      "dq": "iEgcO-QfpepdH8FWd7mUFyrXdnOkXJBCogChY6YKuIHGc_p8Le9Mb
#          pFKESzEaLlN1Ehf3B6oGBl5Iz_ayUlZj2IoQZ82znoUrpa9fVYNot87A
#          CfzIG7q9Mv7RiPAderZi03tkVXAdaBau_9vs5rS-7HMtxkVrxSUvJY14
#          TkXlHE",
#      "qi": "kC-lzZOqoFaZCr5l0tOVtREKoVqaAYhQiqIRGL-MzS4sCmRkxm5vZ
#          lXYx6RtE1n_AagjqajlkjieGlxTTThHD8Iga6foGBMaAr5uR1hGQpSc7
#          Gl7CF1DZkBJMTQN6EshYzZfxW08mIO8M6Rzuh0beL6fG9mkDcIyPrBXx
#          2bQ_mM"
#    }

#                 Figure 73: RSA 2048-Bit Key, in JWK Format


# Miller                        Informational                    [Page 40]

# RFC 7520                      JOSE Cookbook                     May 2015


#    (NOTE: While the key includes the private parameters, only the public
#    parameters "e" and "n" are necessary for the encryption operation.)

# 5.1.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 74.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 75.

#    3qyTVhIWt5juqZUCpfRqpvauwB956MEJL2Rt-8qXKSo

#            Figure 74: Content Encryption Key, base64url-encoded

#    bbd5sTkYwhAIqfHsx8DayA

#             Figure 75: Initialization Vector, base64url-encoded

# 5.1.3.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 74) with
#    the RSA key (Figure 73) results in the following Encrypted Key:

#    laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzfTihJBuuzxg0V7yk1WClnQePF
#    vG2K-pvSlWc9BRIazDrn50RcRai__3TDON395H3c62tIouJJ4XaRvYHFjZTZ2G
#    Xfz8YAImcc91Tfk0WXC2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcG
#    TSLUeeCt36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8Vl
#    zNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOh
#    MBs9M8XL223Fg47xlGsMXdfuY-4jaqVw

#                 Figure 76: Encrypted Key, base64url-encoded


# Miller                        Informational                    [Page 41]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.1.4.  Encrypting the Content

#    The following is generated before encrypting the Plaintext:

#    o  JWE Protected Header; this example uses the header from Figure 77,
#       encoded using base64url [RFC4648] to produce Figure 78.

#    {
#      "alg": "RSA1_5",
#      "kid": "frodo.baggins@hobbiton.example",
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 77: JWE Protected Header JSON

#    eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW5zQGhvYmJpdG9uLm
#    V4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0

#             Figure 78: JWE Protected Header, base64url-encoded

#    Performing the content encryption operation on the Plaintext
#    (Figure 72) using the following:

#    o  CEK (Figure 74);

#    o  Initialization Vector (Figure 75); and

#    o  JWE Protected Header (Figure 77) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 79.

#    o  Authentication Tag from Figure 80.

#    0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62JhJvGZ4_FNVSiGc_r
#    aa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wnI3Jvo0mkpEEnlDmZvDu_k8O
#    WzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc2VbVbK4dQKPdNTjPPEmRqcaGeTWZV
#    yeSUvf5k59yJZxRuSvWFf6KrNtmRdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0
#    zT5CbL5Qlw3sRc7u_hg0yKVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2
#    O6_7uInMGhFeX4ctHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VW
#    i7lzA6BP430m

#                  Figure 79: Ciphertext, base64url-encoded

#    kvKuFBXHe5mQr4lqgobAUg

#              Figure 80: Authentication Tag, base64url-encoded


# Miller                        Informational                    [Page 42]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.1.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 78)

#    o  Encrypted Key (Figure 76)

#    o  Initialization Vector (Figure 75)

#    o  Ciphertext (Figure 79)

#    o  Authentication Tag (Figure 80)

#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW5zQGhvYmJpdG9uLm
#    V4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0
#    .
#    laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzfTihJBuuzxg0V7yk1WClnQePF
#    vG2K-pvSlWc9BRIazDrn50RcRai__3TDON395H3c62tIouJJ4XaRvYHFjZTZ2G
#    Xfz8YAImcc91Tfk0WXC2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcG
#    TSLUeeCt36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8Vl
#    zNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOh
#    MBs9M8XL223Fg47xlGsMXdfuY-4jaqVw
#    .
#    bbd5sTkYwhAIqfHsx8DayA
#    .
#    0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62JhJvGZ4_FNVSiGc_r
#    aa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wnI3Jvo0mkpEEnlDmZvDu_k8O
#    WzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc2VbVbK4dQKPdNTjPPEmRqcaGeTWZV
#    yeSUvf5k59yJZxRuSvWFf6KrNtmRdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0
#    zT5CbL5Qlw3sRc7u_hg0yKVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2
#    O6_7uInMGhFeX4ctHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VW
#    i7lzA6BP430m
#    .
#    kvKuFBXHe5mQr4lqgobAUg

#                    Figure 81: JWE Compact Serialization


# Miller                        Informational                    [Page 43]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzf
#              TihJBuuzxg0V7yk1WClnQePFvG2K-pvSlWc9BRIazDrn50RcRai_
#              _3TDON395H3c62tIouJJ4XaRvYHFjZTZ2GXfz8YAImcc91Tfk0WX
#              C2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcGTSLUeeCt
#              36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8
#              VlzNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx
#              1BpyIfgvfjOhMBs9M8XL223Fg47xlGsMXdfuY-4jaqVw"
#        }
#      ],
#      "protected": "eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW
#          5zQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In
#          0",
#      "iv": "bbd5sTkYwhAIqfHsx8DayA",
#      "ciphertext": "0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62
#          JhJvGZ4_FNVSiGc_raa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wn
#          I3Jvo0mkpEEnlDmZvDu_k8OWzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc
#          2VbVbK4dQKPdNTjPPEmRqcaGeTWZVyeSUvf5k59yJZxRuSvWFf6KrNtm
#          RdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0zT5CbL5Qlw3sRc7u_hg0y
#          KVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2O6_7uInMGhFeX4c
#          tHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VWi7lzA6BP4
#          30m",
#      "tag": "kvKuFBXHe5mQr4lqgobAUg"
#    }

#                  Figure 82: General JWE JSON Serialization


# Miller                        Informational                    [Page 44]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW
#          5zQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In
#          0",
#      "encrypted_key": "laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzfTihJ
#          Buuzxg0V7yk1WClnQePFvG2K-pvSlWc9BRIazDrn50RcRai__3TDON39
#          5H3c62tIouJJ4XaRvYHFjZTZ2GXfz8YAImcc91Tfk0WXC2F5Xbb71ClQ
#          1DDH151tlpH77f2ff7xiSxh9oSewYrcGTSLUeeCt36r1Kt3OSj7EyBQX
#          oZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8VlzNmoxaGMny3YnGir5W
#          f6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOhMBs9M8XL223F
#          g47xlGsMXdfuY-4jaqVw",
#      "iv": "bbd5sTkYwhAIqfHsx8DayA",
#      "ciphertext": "0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62
#          JhJvGZ4_FNVSiGc_raa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wn
#          I3Jvo0mkpEEnlDmZvDu_k8OWzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc
#          2VbVbK4dQKPdNTjPPEmRqcaGeTWZVyeSUvf5k59yJZxRuSvWFf6KrNtm
#          RdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0zT5CbL5Qlw3sRc7u_hg0y
#          KVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2O6_7uInMGhFeX4c
#          tHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VWi7lzA6BP4
#          30m",
#      "tag": "kvKuFBXHe5mQr4lqgobAUg"
#    }

#                 Figure 83: Flattened JWE JSON Serialization

# 5.2.  Key Encryption Using RSA-OAEP with AES-GCM

#    This example illustrates encrypting content using the "RSA-OAEP"
#    (RSAES-OAEP) key encryption algorithm and the "A256GCM" (AES-GCM)
#    content encryption algorithm.

#    Note that RSAES-OAEP uses random data to generate the ciphertext; it
#    might not be possible to exactly replicate the results in this
#    section.

#    Note that only the RSA public key is necessary to perform the
#    encryption.  However, the example includes the RSA private key to
#    allow readers to validate the output.

#    Note that whitespace is added for readability as described in
#    Section 1.1.


# Miller                        Informational                    [Page 45]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.2.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the Plaintext from Figure 72.

#    o  RSA public key; this example uses the key from Figure 84.

#    o  "alg" parameter of "RSA-OAEP".

#    o  "enc" parameter of "A256GCM".

#    {
#      "kty": "RSA",
#      "kid": "samwise.gamgee@hobbiton.example",
#      "use": "enc",
#      "n": "wbdxI55VaanZXPY29Lg5hdmv2XhvqAhoxUkanfzf2-5zVUxa6prHRr
#          I4pP1AhoqJRlZfYtWWd5mmHRG2pAHIlh0ySJ9wi0BioZBl1XP2e-C-Fy
#          XJGcTy0HdKQWlrfhTm42EW7Vv04r4gfao6uxjLGwfpGrZLarohiWCPnk
#          Nrg71S2CuNZSQBIPGjXfkmIy2tl_VWgGnL22GplyXj5YlBLdxXp3XeSt
#          sqo571utNfoUTU8E4qdzJ3U1DItoVkPGsMwlmmnJiwA7sXRItBCivR4M
#          5qnZtdw-7v4WuR4779ubDuJ5nalMv2S66-RPcnFAzWSKxtBDnFJJDGIU
#          e7Tzizjg1nms0Xq_yPub_UOlWn0ec85FCft1hACpWG8schrOBeNqHBOD
#          FskYpUc2LC5JA2TaPF2dA67dg1TTsC_FupfQ2kNGcE1LgprxKHcVWYQb
#          86B-HozjHZcqtauBzFNV5tbTuB-TpkcvJfNcFLlH3b8mb-H_ox35FjqB
#          SAjLKyoeqfKTpVjvXhd09knwgJf6VKq6UC418_TOljMVfFTWXUxlnfhO
#          OnzW6HSSzD1c9WrCuVzsUMv54szidQ9wf1cYWf3g5qFDxDQKis99gcDa
#          iCAwM3yEBIzuNeeCa5dartHDb1xEB_HcHSeYbghbMjGfasvKn0aZRsnT
#          yC0xhWBlsolZE",
#      "e": "AQAB",
#      "alg": "RSA-OAEP",
#      "d": "n7fzJc3_WG59VEOBTkayzuSMM780OJQuZjN_KbH8lOZG25ZoA7T4Bx
#          cc0xQn5oZE5uSCIwg91oCt0JvxPcpmqzaJZg1nirjcWZ-oBtVk7gCAWq
#          -B3qhfF3izlbkosrzjHajIcY33HBhsy4_WerrXg4MDNE4HYojy68TcxT
#          2LYQRxUOCf5TtJXvM8olexlSGtVnQnDRutxEUCwiewfmmrfveEogLx9E
#          A-KMgAjTiISXxqIXQhWUQX1G7v_mV_Hr2YuImYcNcHkRvp9E7ook0876
#          DhkO8v4UOZLwA1OlUX98mkoqwc58A_Y2lBYbVx1_s5lpPsEqbbH-nqIj
#          h1fL0gdNfihLxnclWtW7pCztLnImZAyeCWAG7ZIfv-Rn9fLIv9jZ6r7r
#          -MSH9sqbuziHN2grGjD_jfRluMHa0l84fFKl6bcqN1JWxPVhzNZo01yD
#          F-1LiQnqUYSepPf6X3a2SOdkqBRiquE6EvLuSYIDpJq3jDIsgoL8Mo1L
#          oomgiJxUwL_GWEOGu28gplyzm-9Q0U0nyhEf1uhSR8aJAQWAiFImWH5W
#          _IQT9I7-yrindr_2fWQ_i1UgMsGzA7aOGzZfPljRy6z-tY_KuBG00-28
#          S_aWvjyUc-Alp8AUyKjBZ-7CWH32fGWK48j1t-zomrwjL_mnhsPbGs0c
#          9WsWgRzI-K8gE",
#      "p": "7_2v3OQZzlPFcHyYfLABQ3XP85Es4hCdwCkbDeltaUXgVy9l9etKgh
#          vM4hRkOvbb01kYVuLFmxIkCDtpi-zLCYAdXKrAK3PtSbtzld_XZ9nlsY
#          a_QZWpXB_IrtFjVfdKUdMz94pHUhFGFj7nr6NNxfpiHSHWFE1zD_AC3m
#          Y46J961Y2LRnreVwAGNw53p07Db8yD_92pDa97vqcZOdgtybH9q6uma-


# Miller                        Informational                    [Page 46]

# RFC 7520                      JOSE Cookbook                     May 2015


#          RFNhO1AoiJhYZj69hjmMRXx-x56HO9cnXNbmzNSCFCKnQmn4GQLmRj9s
#          fbZRqL94bbtE4_e0Zrpo8RNo8vxRLqQNwIy85fc6BRgBJomt8QdQvIgP
#          gWCv5HoQ",
#      "q": "zqOHk1P6WN_rHuM7ZF1cXH0x6RuOHq67WuHiSknqQeefGBA9PWs6Zy
#          KQCO-O6mKXtcgE8_Q_hA2kMRcKOcvHil1hqMCNSXlflM7WPRPZu2qCDc
#          qssd_uMbP-DqYthH_EzwL9KnYoH7JQFxxmcv5An8oXUtTwk4knKjkIYG
#          RuUwfQTus0w1NfjFAyxOOiAQ37ussIcE6C6ZSsM3n41UlbJ7TCqewzVJ
#          aPJN5cxjySPZPD3Vp01a9YgAD6a3IIaKJdIxJS1ImnfPevSJQBE79-EX
#          e2kSwVgOzvt-gsmM29QQ8veHy4uAqca5dZzMs7hkkHtw1z0jHV90epQJ
#          JlXXnH8Q",
#      "dp": "19oDkBh1AXelMIxQFm2zZTqUhAzCIr4xNIGEPNoDt1jK83_FJA-xn
#          x5kA7-1erdHdms_Ef67HsONNv5A60JaR7w8LHnDiBGnjdaUmmuO8XAxQ
#          J_ia5mxjxNjS6E2yD44USo2JmHvzeeNczq25elqbTPLhUpGo1IZuG72F
#          ZQ5gTjXoTXC2-xtCDEUZfaUNh4IeAipfLugbpe0JAFlFfrTDAMUFpC3i
#          XjxqzbEanflwPvj6V9iDSgjj8SozSM0dLtxvu0LIeIQAeEgT_yXcrKGm
#          pKdSO08kLBx8VUjkbv_3Pn20Gyu2YEuwpFlM_H1NikuxJNKFGmnAq9Lc
#          nwwT0jvoQ",
#      "dq": "S6p59KrlmzGzaQYQM3o0XfHCGvfqHLYjCO557HYQf72O9kLMCfd_1
#          VBEqeD-1jjwELKDjck8kOBl5UvohK1oDfSP1DleAy-cnmL29DqWmhgwM
#          1ip0CCNmkmsmDSlqkUXDi6sAaZuntyukyflI-qSQ3C_BafPyFaKrt1fg
#          dyEwYa08pESKwwWisy7KnmoUvaJ3SaHmohFS78TJ25cfc10wZ9hQNOrI
#          ChZlkiOdFCtxDqdmCqNacnhgE3bZQjGp3n83ODSz9zwJcSUvODlXBPc2
#          AycH6Ci5yjbxt4Ppox_5pjm6xnQkiPgj01GpsUssMmBN7iHVsrE7N2iz
#          nBNCeOUIQ",
#      "qi": "FZhClBMywVVjnuUud-05qd5CYU0dK79akAgy9oX6RX6I3IIIPckCc
#          iRrokxglZn-omAY5CnCe4KdrnjFOT5YUZE7G_Pg44XgCXaarLQf4hl80
#          oPEf6-jJ5Iy6wPRx7G2e8qLxnh9cOdf-kRqgOS3F48Ucvw3ma5V6KGMw
#          QqWFeV31XtZ8l5cVI-I3NzBS7qltpUVgz2Ju021eyc7IlqgzR98qKONl
#          27DuEES0aK0WE97jnsyO27Yp88Wa2RiBrEocM89QZI1seJiGDizHRUP4
#          UZxw9zsXww46wy0P6f9grnYp7t8LkyDDk8eoI4KX6SNMNVcyVS9IWjlq
#          8EzqZEKIA"
#    }

#                         Figure 84: RSA 4096-Bit Key

#    (NOTE: While the key includes the private parameters, only the public
#    parameters "e" and "n" are necessary for the encryption operation.)

# 5.2.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 85.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 86.


# Miller                        Informational                    [Page 47]

# RFC 7520                      JOSE Cookbook                     May 2015


#    mYMfsggkTAm0TbvtlFh2hyoXnbEzJQjMxmgLN3d8xXA

#            Figure 85: Content Encryption Key, base64url-encoded

#    -nBoKLH0YkLZPSI9

#             Figure 86: Initialization Vector, base64url-encoded

# 5.2.3.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 85) with
#    the RSA key (Figure 84) produces the following Encrypted Key:

#    rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNuh7lCiud48LxeolRdtFF4nzQi
#    beYOl5S_PJsAXZwSXtDePz9hk-BbtsTBqC2UsPOdwjC9NhNupNNu9uHIVftDyu
#    cvI6hvALeZ6OGnhNV4v1zx2k7O1D89mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58
#    -Aad3FzMuo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8Bpx
#    KdUV9ScfJQTcYm6eJEBz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pK
#    IIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7
#    pZfPYDSXZyS0CfKKkMozT_qiCwZTSz4duYnt8hS4Z9sGthXn9uDqd6wycMagnQ
#    fOTs_lycTWmY-aqWVDKhjYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe3
#    8UjQb0lvXn1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
#    06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8aKaOnx6ASE5
#    Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xDEdHAVCGRzN3woEI2ozDR
#    s

#                 Figure 87: Encrypted Key, base64url-encoded

# 5.2.4.  Encrypting the Content

#    The following is generated before encrypting the Plaintext:

#    o  JWE Protected Header; this example uses the header from Figure 88,
#       encoded using base64url [RFC4648] to produce Figure 89.

#    {
#      "alg": "RSA-OAEP",
#      "kid": "samwise.gamgee@hobbiton.example",
#      "enc": "A256GCM"
#    }

#                    Figure 88: JWE Protected Header JSON

#    eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2FtZ2VlQGhvYmJpdG
#    9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0

#             Figure 89: JWE Protected Header, base64url-encoded


# Miller                        Informational                    [Page 48]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the content encryption operation over the Plaintext
#    (Figure 72) with the following:

#    o  CEK (Figure 85);

#    o  Initialization Vector (Figure 86); and

#    o  JWE Protected Header (Figure 89) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 90.

#    o  Authentication Tag from Figure 91.

#    o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6UJuJowOHC5ytjqYgR
#    L-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYxrXfVzIIaRdhYtEMRBvBWbEw
#    P7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lhhNcizPersuhw5f-pGYzseva-TUaL8
#    iWnctc-sSwy7SQmRkfhDjwbz0fz6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML
#    7Cc2GxgvI7zqWo0YIEc7aCflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSV
#    maPpOslY2n525DxDfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw

#                  Figure 90: Ciphertext, base64url-encoded

#    UCGiqJxhBI3IFVdPalHHvA

#              Figure 91: Authentication Tag, base64url-encoded

# 5.2.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 89)

#    o  Encrypted Key (Figure 87)

#    o  Initialization Vector (Figure 86)

#    o  Ciphertext (Figure 90)

#    o  Authentication Tag (Figure 91)


# Miller                        Informational                    [Page 49]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2FtZ2VlQGhvYmJpdG
#    9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0
#    .
#    rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNuh7lCiud48LxeolRdtFF4nzQi
#    beYOl5S_PJsAXZwSXtDePz9hk-BbtsTBqC2UsPOdwjC9NhNupNNu9uHIVftDyu
#    cvI6hvALeZ6OGnhNV4v1zx2k7O1D89mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58
#    -Aad3FzMuo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8Bpx
#    KdUV9ScfJQTcYm6eJEBz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pK
#    IIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7
#    pZfPYDSXZyS0CfKKkMozT_qiCwZTSz4duYnt8hS4Z9sGthXn9uDqd6wycMagnQ
#    fOTs_lycTWmY-aqWVDKhjYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe3
#    8UjQb0lvXn1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
#    06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8aKaOnx6ASE5
#    Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xDEdHAVCGRzN3woEI2ozDR
#    s
#    .
#    -nBoKLH0YkLZPSI9
#    .
#    o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6UJuJowOHC5ytjqYgR
#    L-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYxrXfVzIIaRdhYtEMRBvBWbEw
#    P7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lhhNcizPersuhw5f-pGYzseva-TUaL8
#    iWnctc-sSwy7SQmRkfhDjwbz0fz6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML
#    7Cc2GxgvI7zqWo0YIEc7aCflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSV
#    maPpOslY2n525DxDfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw
#    .
#    UCGiqJxhBI3IFVdPalHHvA

#                    Figure 92: JWE Compact Serialization


# Miller                        Informational                    [Page 50]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNu
#              h7lCiud48LxeolRdtFF4nzQibeYOl5S_PJsAXZwSXtDePz9hk-Bb
#              tsTBqC2UsPOdwjC9NhNupNNu9uHIVftDyucvI6hvALeZ6OGnhNV4
#              v1zx2k7O1D89mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58-Aad3FzM
#              uo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8B
#              pxKdUV9ScfJQTcYm6eJEBz3aSwIaK4T3-dwWpuBOhROQXBosJzS1
#              asnuHtVMt2pKIIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq
#              5pGqFmW2k8zpO878TRlZx7pZfPYDSXZyS0CfKKkMozT_qiCwZTSz
#              4duYnt8hS4Z9sGthXn9uDqd6wycMagnQfOTs_lycTWmY-aqWVDKh
#              jYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe38UjQb0lvXn
#              1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
#              06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8a
#              KaOnx6ASE5Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xD
#              EdHAVCGRzN3woEI2ozDRs"
#        }
#      ],
#      "protected": "eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2
#          FtZ2VlQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0",
#      "iv": "-nBoKLH0YkLZPSI9",
#      "ciphertext": "o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6
#          UJuJowOHC5ytjqYgRL-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYx
#          rXfVzIIaRdhYtEMRBvBWbEwP7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lh
#          hNcizPersuhw5f-pGYzseva-TUaL8iWnctc-sSwy7SQmRkfhDjwbz0fz
#          6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML7Cc2GxgvI7zqWo0YIEc7a
#          CflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSVmaPpOslY2n525Dx
#          DfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw",
#      "tag": "UCGiqJxhBI3IFVdPalHHvA"
#    }

#                  Figure 93: General JWE JSON Serialization


# Miller                        Informational                    [Page 51]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2
#          FtZ2VlQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0",
#      "encrypted_key": "rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNuh7lC
#          iud48LxeolRdtFF4nzQibeYOl5S_PJsAXZwSXtDePz9hk-BbtsTBqC2U
#          sPOdwjC9NhNupNNu9uHIVftDyucvI6hvALeZ6OGnhNV4v1zx2k7O1D89
#          mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58-Aad3FzMuo3Fn9buEP2yXakL
#          XYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8BpxKdUV9ScfJQTcYm6eJE
#          Bz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pKIIfux5BC6huI
#          vmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7pZfPYD
#          SXZyS0CfKKkMozT_qiCwZTSz4duYnt8hS4Z9sGthXn9uDqd6wycMagnQ
#          fOTs_lycTWmY-aqWVDKhjYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO
#          2AWBe38UjQb0lvXn1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G
#          7S2rscw5lQQU06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDP
#          Tr6Cbo8aKaOnx6ASE5Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ
#          69xDEdHAVCGRzN3woEI2ozDRs",
#      "iv": "-nBoKLH0YkLZPSI9",
#      "ciphertext": "o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6
#          UJuJowOHC5ytjqYgRL-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYx
#          rXfVzIIaRdhYtEMRBvBWbEwP7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lh
#          hNcizPersuhw5f-pGYzseva-TUaL8iWnctc-sSwy7SQmRkfhDjwbz0fz
#          6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML7Cc2GxgvI7zqWo0YIEc7a
#          CflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSVmaPpOslY2n525Dx
#          DfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw",
#      "tag": "UCGiqJxhBI3IFVdPalHHvA"
#    }

#                 Figure 94: Flattened JWE JSON Serialization

# 5.3.  Key Wrap Using PBES2-AES-KeyWrap with AES-CBC-HMAC-SHA2

#    The example illustrates encrypting content using the
#    "PBES2-HS512+A256KW" (PBES2 Password-based Encryption using HMAC-
#    SHA-512 and AES-256-KeyWrap) key encryption algorithm with the
#    "A128CBC-HS256" (AES-128-CBC-HMAC-SHA-256) content encryption
#    algorithm.

#    A common use of password-based encryption is the import/export of
#    keys.  Therefore, this example uses a JWK Set for the Plaintext
#    content instead of the Plaintext from Figure 72.


# Miller                        Informational                    [Page 52]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Note that if password-based encryption is used for multiple
#    recipients, it is expected that each recipient use different values
#    for the PBES2 parameters "p2s" and "p2c".

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.3.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the Plaintext from Figure 95
#       (NOTE: All whitespace was added for readability).

#    o  Password; this example uses the password from Figure 96 -- with
#       the sequence "\xe2\x80\x93" replaced with (U+2013 EN DASH).

#    o  "alg" parameter of "PBES2-HS512+A256KW".

#    o  "enc" parameter of "A128CBC-HS256".

#    {
#      "keys": [
#        {
#          "kty": "oct",
#          "kid": "77c7e2b8-6e13-45cf-8672-617b5b45243a",
#          "use": "enc",
#          "alg": "A128GCM",
#          "k": "XctOhJAkA-pD9Lh7ZgW_2A"
#        },
#        {
#          "kty": "oct",
#          "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#          "use": "enc",
#          "alg": "A128KW",
#          "k": "GZy6sIZ6wl9NJOKB-jnmVQ"
#        },
#        {
#          "kty": "oct",
#          "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
#          "use": "enc",
#          "alg": "A256GCMKW",
#          "k": "qC57l_uxcm7Nm3K-ct4GFjx8tM1U8CZ0NLBvdQstiS8"
#        }
#      ]
#    }

#                        Figure 95: Plaintext Content


# Miller                        Informational                    [Page 53]

# RFC 7520                      JOSE Cookbook                     May 2015


#    entrap_o\xe2\x80\x93peter_long\xe2\x80\x93credit_tun

#                             Figure 96: Password

# 5.3.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 97.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 98.

#    uwsjJXaBK407Qaf0_zpcpmr1Cs0CC50hIUEyGNEt3m0

#            Figure 97: Content Encryption Key, base64url-encoded

#    VBiCzVHNoLiR3F4V82uoTQ

#             Figure 98: Initialization Vector, base64url-encoded

# 5.3.3.  Encrypting the Key

#    The following are generated before encrypting the CEK:

#    o  Salt input; this example uses the salt input from Figure 99.

#    o  Iteration count; this example uses the iteration count 8192.

#    8Q1SzinasR3xchYz6ZZcHA

#                  Figure 99: Salt Input, base64url-encoded

#    Performing the key encryption operation over the CEK (Figure 97) with
#    the following:

#    o  Password (Figure 96);

#    o  Salt input (Figure 99), encoded as an octet string; and

#    o  Iteration count (8192)

#    produces the following Encrypted Key:

#    d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlUtFPWdgtURtmeDV1g

#                Figure 100: Encrypted Key, base64url-encoded


# Miller                        Informational                    [Page 54]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.3.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 101, encoded using base64url [RFC4648] to produce
#       Figure 102.

#    {
#      "alg": "PBES2-HS512+A256KW",
#      "p2s": "8Q1SzinasR3xchYz6ZZcHA",
#      "p2c": 8192,
#      "cty": "jwk-set+json",
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 101: JWE Protected Header JSON

#    eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOiI4UTFTemluYXNSM3
#    hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOiJqd2stc2V0K2pzb24iLCJl
#    bmMiOiJBMTI4Q0JDLUhTMjU2In0

#             Figure 102: JWE Protected Header, base64url-encoded

#    Performing the content encryption operation over the Plaintext
#    (Figure 95) with the following:

#    o  CEK (Figure 97);

#    o  Initialization Vector (Figure 98); and

#    o  JWE Protected Header (Figure 102) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 103.

#    o  Authentication Tag from Figure 104.


# Miller                        Informational                    [Page 55]

# RFC 7520                      JOSE Cookbook                     May 2015


#    23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2nsnGIX86vMXqIi6IR
#    sfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpDjEYCNA_XOmzg8yZR9oyjo6l
#    TF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_hkBsnuoqoM3dwejXBtIodN84PeqMb
#    6asmas_dpSsz7H10fC5ni9xIz424givB1YLldF6exVmL93R3fOoOJbmk2GBQZL
#    _SEGllv2cQsBgeprARsaQ7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKd
#    PQMTlVJKkqtV4Ru5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrok
#    AKYPqmXUeRdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-
#    zl5tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdTw8V
#    3kobXZ77ulMwDs4p

#                  Figure 103: Ciphertext, base64url-encoded

#    0HlwodAhOCILG5SQ2LQ9dg

#              Figure 104: Authentication Tag, base64url-encoded

# 5.3.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 102)

#    o  Encrypted Key (Figure 100)

#    o  Initialization Vector (Figure 98)

#    o  Ciphertext (Figure 103)

#    o  Authentication Tag (Figure 104)


# Miller                        Informational                    [Page 56]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOiI4UTFTemluYXNSM3
#    hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOiJqd2stc2V0K2pzb24iLCJl
#    bmMiOiJBMTI4Q0JDLUhTMjU2In0
#    .
#    d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlUtFPWdgtURtmeDV1g
#    .
#    VBiCzVHNoLiR3F4V82uoTQ
#    .
#    23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2nsnGIX86vMXqIi6IR
#    sfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpDjEYCNA_XOmzg8yZR9oyjo6l
#    TF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_hkBsnuoqoM3dwejXBtIodN84PeqMb
#    6asmas_dpSsz7H10fC5ni9xIz424givB1YLldF6exVmL93R3fOoOJbmk2GBQZL
#    _SEGllv2cQsBgeprARsaQ7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKd
#    PQMTlVJKkqtV4Ru5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrok
#    AKYPqmXUeRdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-
#    zl5tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdTw8V
#    3kobXZ77ulMwDs4p
#    .
#    0HlwodAhOCILG5SQ2LQ9dg

#                    Figure 105: JWE Compact Serialization


# Miller                        Informational                    [Page 57]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlU
#              tFPWdgtURtmeDV1g"
#        }
#      ],
#      "protected": "eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOi
#          I4UTFTemluYXNSM3hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOi
#          Jqd2stc2V0K2pzb24iLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0",
#      "iv": "VBiCzVHNoLiR3F4V82uoTQ",
#      "ciphertext": "23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2
#          nsnGIX86vMXqIi6IRsfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpD
#          jEYCNA_XOmzg8yZR9oyjo6lTF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_
#          hkBsnuoqoM3dwejXBtIodN84PeqMb6asmas_dpSsz7H10fC5ni9xIz42
#          4givB1YLldF6exVmL93R3fOoOJbmk2GBQZL_SEGllv2cQsBgeprARsaQ
#          7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKdPQMTlVJKkqtV4Ru
#          5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrokAKYPqmXUe
#          RdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-zl5
#          tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdT
#          w8V3kobXZ77ulMwDs4p",
#      "tag": "0HlwodAhOCILG5SQ2LQ9dg"
#    }

#                 Figure 106: General JWE JSON Serialization


# Miller                        Informational                    [Page 58]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOi
#          I4UTFTemluYXNSM3hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOi
#          Jqd2stc2V0K2pzb24iLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0",
#      "encrypted_key": "d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlUtFPW
#          dgtURtmeDV1g",
#      "iv": "VBiCzVHNoLiR3F4V82uoTQ",
#      "ciphertext": "23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2
#          nsnGIX86vMXqIi6IRsfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpD
#          jEYCNA_XOmzg8yZR9oyjo6lTF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_
#          hkBsnuoqoM3dwejXBtIodN84PeqMb6asmas_dpSsz7H10fC5ni9xIz42
#          4givB1YLldF6exVmL93R3fOoOJbmk2GBQZL_SEGllv2cQsBgeprARsaQ
#          7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKdPQMTlVJKkqtV4Ru
#          5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrokAKYPqmXUe
#          RdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-zl5
#          tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdT
#          w8V3kobXZ77ulMwDs4p",
#      "tag": "0HlwodAhOCILG5SQ2LQ9dg"
#    }

#                Figure 107: Flattened JWE JSON Serialization

# 5.4.  Key Agreement with Key Wrapping Using ECDH-ES and AES-KeyWrap with
#       AES-GCM

#    This example illustrates encrypting content using the "ECDH-
#    ES+A128KW" (Elliptic Curve Diffie-Hellman Ephemeral-Static with AES-
#    128-KeyWrap) key encryption algorithm and the "A128GCM" (AES-GCM)
#    content encryption algorithm.

#    Note that only the EC public key is necessary to perform the key
#    agreement.  However, the example includes the EC private key to allow
#    readers to validate the output.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.4.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  EC public key; this example uses the public key from Figure 108.


# Miller                        Informational                    [Page 59]

# RFC 7520                      JOSE Cookbook                     May 2015


#    o  "alg" parameter of "ECDH-ES+A128KW".

#    o  "enc" parameter of "A128GCM".

#    {
#      "kty": "EC",
#      "kid": "peregrin.took@tuckborough.example",
#      "use": "enc",
#      "crv": "P-384",
#      "x": "YU4rRUzdmVqmRtWOs2OpDE_T5fsNIodcG8G5FWPrTPMyxpzsSOGaQL
#          pe2FpxBmu2",
#      "y": "A8-yxCHxkfBz3hKZfI1jUYMjUhsEveZ9THuwFjH2sCNdtksRJU7D5-
#          SkgaFL1ETP",
#      "d": "iTx2pk7wW-GqJkHcEkFQb2EFyYcO7RugmaW3mRrQVAOUiPommT0Idn
#          YK2xDlZh-j"
#    }

#             Figure 108: Elliptic Curve P-384 Key, in JWK Format

#    (NOTE: While the key includes the private parameters, only the public
#    parameters "crv", "x", and "y" are necessary for the encryption
#    operation.)

# 5.4.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 109.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 110.

#    Nou2ueKlP70ZXDbq9UrRwg

#            Figure 109: Content Encryption Key, base64url-encoded

#    mH-G2zVqgztUtnW_

#            Figure 110: Initialization Vector, base64url-encoded

# 5.4.3.  Encrypting the Key

#    To encrypt the Content Encryption Key, the following is generated:

#    o  Ephemeral EC private key on the same curve as the EC public key;
#       this example uses the private key from Figure 111.


# Miller                        Informational                    [Page 60]

# RFC 7520                      JOSE Cookbook                     May 2015


#    {
#      "kty": "EC",
#      "crv": "P-384",
#      "x": "uBo4kHPw6kbjx5l0xowrd_oYzBmaz-GKFZu4xAFFkbYiWgutEK6iuE
#          DsQ6wNdNg3",
#      "y": "sp3p5SGhZVC2faXumI-e9JU2Mo8KpoYrFDr5yPNVtW4PgEwZOyQTA-
#          JdaY8tb7E0",
#      "d": "D5H4Y_5PSKZvhfVFbcCYJOtcGZygRgfZkpsBr59Icmmhe9sW6nkZ8W
#          fwhinUfWJg"
#    }

#        Figure 111: Ephemeral Elliptic Curve P-384 Key, in JWK Format

#    Performing the key encryption operation over the CEK (Figure 109)
#    with the following:

#    o  The static Elliptic Curve public key (Figure 108); and

#    o  The ephemeral Elliptic Curve private key (Figure 111)

#    produces the following JWE Encrypted Key:

#    0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2

#                Figure 112: Encrypted Key, base64url-encoded

# 5.4.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 113, encoded to base64url [RFC4648] as Figure 114.

#    {
#      "alg": "ECDH-ES+A128KW",
#      "kid": "peregrin.took@tuckborough.example",
#      "epk": {
#        "kty": "EC",
#        "crv": "P-384",
#        "x": "uBo4kHPw6kbjx5l0xowrd_oYzBmaz-GKFZu4xAFFkbYiWgutEK6i
#            uEDsQ6wNdNg3",
#        "y": "sp3p5SGhZVC2faXumI-e9JU2Mo8KpoYrFDr5yPNVtW4PgEwZOyQT
#            A-JdaY8tb7E0"
#      },
#      "enc": "A128GCM"
#    }

#                    Figure 113: JWE Protected Header JSON


# Miller                        Informational                    [Page 61]

# RFC 7520                      JOSE Cookbook                     May 2015


#    eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcmVncmluLnRvb2tAdH
#    Vja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdHkiOiJFQyIsImNydiI6IlAt
#    Mzg0IiwieCI6InVCbzRrSFB3Nmtiang1bDB4b3dyZF9vWXpCbWF6LUdLRlp1NH
#    hBRkZrYllpV2d1dEVLNml1RURzUTZ3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMy
#    ZmFYdW1JLWU5SlUyTW84S3BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWT
#    h0YjdFMCJ9LCJlbmMiOiJBMTI4R0NNIn0

#             Figure 114: JWE Protected Header, base64url-encoded

#    Performing the content encryption operation on the Plaintext
#    (Figure 72) using the following:

#    o  CEK (Figure 109);

#    o  Initialization Vector (Figure 110); and

#    o  JWE Protected Header (Figure 114) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 115.

#    o  Authentication Tag from Figure 116.

#    tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz5NJ76oID7lpnAi_cP
#    WJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzsXaEwDdXta9Mn5B7cCBoJKB0
#    IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05jMwbKkTe2yK3mjF6SBAsgicQDVCkc
#    Y9BLluzx1RmC3ORXaM0JaHPB93YcdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w0
#    3XdLkjXIuEr2hWgeP-nkUZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu
#    07WNhjzJEPc4jVntRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ

#                  Figure 115: Ciphertext, base64url-encoded

#    WuGzxmcreYjpHGJoa17EBg

#              Figure 116: Authentication Tag, base64url-encoded


# Miller                        Informational                    [Page 62]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.4.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 114)

#    o  Encrypted Key (Figure 112)

#    o  Initialization Vector (Figure 110)

#    o  Ciphertext (Figure 115)

#    o  Authentication Tag (Figure 116)

#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcmVncmluLnRvb2tAdH
#    Vja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdHkiOiJFQyIsImNydiI6IlAt
#    Mzg0IiwieCI6InVCbzRrSFB3Nmtiang1bDB4b3dyZF9vWXpCbWF6LUdLRlp1NH
#    hBRkZrYllpV2d1dEVLNml1RURzUTZ3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMy
#    ZmFYdW1JLWU5SlUyTW84S3BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWT
#    h0YjdFMCJ9LCJlbmMiOiJBMTI4R0NNIn0
#    .
#    0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2
#    .
#    mH-G2zVqgztUtnW_
#    .
#    tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz5NJ76oID7lpnAi_cP
#    WJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzsXaEwDdXta9Mn5B7cCBoJKB0
#    IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05jMwbKkTe2yK3mjF6SBAsgicQDVCkc
#    Y9BLluzx1RmC3ORXaM0JaHPB93YcdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w0
#    3XdLkjXIuEr2hWgeP-nkUZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu
#    07WNhjzJEPc4jVntRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ
#    .
#    WuGzxmcreYjpHGJoa17EBg

#                    Figure 117: JWE Compact Serialization


# Miller                        Informational                    [Page 63]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2"
#        }
#      ],
#      "protected": "eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcm
#          VncmluLnRvb2tAdHVja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdH
#          kiOiJFQyIsImNydiI6IlAtMzg0IiwieCI6InVCbzRrSFB3Nmtiang1bD
#          B4b3dyZF9vWXpCbWF6LUdLRlp1NHhBRkZrYllpV2d1dEVLNml1RURzUT
#          Z3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMyZmFYdW1JLWU5SlUyTW84S3
#          BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWTh0YjdFMCJ9LCJlbm
#          MiOiJBMTI4R0NNIn0",
#      "iv": "mH-G2zVqgztUtnW_",
#      "ciphertext": "tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz
#          5NJ76oID7lpnAi_cPWJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzs
#          XaEwDdXta9Mn5B7cCBoJKB0IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05
#          jMwbKkTe2yK3mjF6SBAsgicQDVCkcY9BLluzx1RmC3ORXaM0JaHPB93Y
#          cdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w03XdLkjXIuEr2hWgeP-nkU
#          ZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu07WNhjzJEPc4jVn
#          tRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ",
#      "tag": "WuGzxmcreYjpHGJoa17EBg"
#    }

#                 Figure 118: General JWE JSON Serialization


# Miller                        Informational                    [Page 64]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcm
#          VncmluLnRvb2tAdHVja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdH
#          kiOiJFQyIsImNydiI6IlAtMzg0IiwieCI6InVCbzRrSFB3Nmtiang1bD
#          B4b3dyZF9vWXpCbWF6LUdLRlp1NHhBRkZrYllpV2d1dEVLNml1RURzUT
#          Z3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMyZmFYdW1JLWU5SlUyTW84S3
#          BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWTh0YjdFMCJ9LCJlbm
#          MiOiJBMTI4R0NNIn0",
#      "encrypted_key": "0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2",
#      "iv": "mH-G2zVqgztUtnW_",
#      "ciphertext": "tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz
#          5NJ76oID7lpnAi_cPWJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzs
#          XaEwDdXta9Mn5B7cCBoJKB0IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05
#          jMwbKkTe2yK3mjF6SBAsgicQDVCkcY9BLluzx1RmC3ORXaM0JaHPB93Y
#          cdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w03XdLkjXIuEr2hWgeP-nkU
#          ZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu07WNhjzJEPc4jVn
#          tRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ",
#      "tag": "WuGzxmcreYjpHGJoa17EBg"
#    }

#                Figure 119: Flattened JWE JSON Serialization

# 5.5.  Key Agreement Using ECDH-ES with AES-CBC-HMAC-SHA2

#    This example illustrates encrypting content using the "ECDH-ES"
#    (Elliptic Curve Diffie-Hellman Ephemeral-Static) key agreement
#    algorithm and the "A128CBC-HS256" (AES-128-CBC-HMAC-SHA-256) content
#    encryption algorithm.

#    Note that only the EC public key is necessary to perform the key
#    agreement.  However, the example includes the EC private key to allow
#    readers to validate the output.

#    Note that whitespace is added for readability as described in
#    Section 1.1.


# Miller                        Informational                    [Page 65]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.5.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  EC public key; this example uses the public key from Figure 120.

#    o  "alg" parameter of "ECDH-ES".

#    o  "enc" parameter of "A128CBC-HS256".

#    {
#      "kty": "EC",
#      "kid": "meriadoc.brandybuck@buckland.example",
#      "use": "enc",
#      "crv": "P-256",
#      "x": "Ze2loSV3wrroKUN_4zhwGhCqo3Xhu1td4QjeQ5wIVR0",
#      "y": "HlLtdXARY_f55A3fnzQbPcm6hgr34Mp8p-nuzQCE0Zw",
#      "d": "r_kHyZ-a06rmxM3yESK84r1otSg-aQcVStkRhA-iCM8"
#    }

#                    Figure 120: Elliptic Curve P-256 Key

#    (NOTE: While the key includes the private parameters, only the public
#    parameters "crv", "x", and "y" are necessary for the encryption
#    operation.)

# 5.5.2.  Generated Factors

#    The following is generated before encrypting:

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 121.

#    yc9N8v5sYyv3iGQT926IUg

#            Figure 121: Initialization Vector, base64url-encoded

#    NOTE: The Content Encryption Key (CEK) is not randomly generated;
#    instead, it is determined using ECDH-ES key agreement.


# Miller                        Informational                    [Page 66]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.5.3.  Key Agreement

#    The following is generated to agree on a CEK:

#    o  Ephemeral private key; this example uses the private key from
#       Figure 122.

#    {
#      "kty": "EC",
#      "crv": "P-256",
#      "x": "mPUKT_bAWGHIhg0TpjjqVsP1rXWQu_vwVOHHtNkdYoA",
#      "y": "8BQAsImGeAS46fyWw5MhYfGTT0IjBpFw2SS34Dv4Irs",
#      "d": "AtH35vJsQ9SGjYfOsjUxYXQKrPH3FjZHmEtSKoSN8cM"
#    }

#              Figure 122: Ephemeral Private Key, in JWK Format

#    Performing the ECDH operation using the static EC public key
#    (Figure 120) over the ephemeral private key (Figure 122) produces the
#    following CEK:

#    hzHdlfQIAEehb8Hrd_mFRhKsKLEzPfshfXs9l6areCc

#       Figure 123: Agreed-to Content Encryption Key, base64url-encoded

# 5.5.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 124, encoded to base64url [RFC4648] as Figure 125.

#    {
#      "alg": "ECDH-ES",
#      "kid": "meriadoc.brandybuck@buckland.example",
#      "epk": {
#        "kty": "EC",
#        "crv": "P-256",
#        "x": "mPUKT_bAWGHIhg0TpjjqVsP1rXWQu_vwVOHHtNkdYoA",
#        "y": "8BQAsImGeAS46fyWw5MhYfGTT0IjBpFw2SS34Dv4Irs"
#      },
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 124: JWE Protected Header JSON


# Miller                        Informational                    [Page 67]

# RFC 7520                      JOSE Cookbook                     May 2015


#    eyJhbGciOiJFQ0RILUVTIiwia2lkIjoibWVyaWFkb2MuYnJhbmR5YnVja0BidW
#    NrbGFuZC5leGFtcGxlIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYi
#    LCJ4IjoibVBVS1RfYkFXR0hJaGcwVHBqanFWc1AxclhXUXVfdndWT0hIdE5rZF
#    lvQSIsInkiOiI4QlFBc0ltR2VBUzQ2ZnlXdzVNaFlmR1RUMElqQnBGdzJTUzM0
#    RHY0SXJzIn0sImVuYyI6IkExMjhDQkMtSFMyNTYifQ

#             Figure 125: JWE Protected Header, base64url-encoded

#    Performing the content encryption operation on the Plaintext
#    (Figure 72) using the following:

#    o  CEK (Figure 123);

#    o  Initialization Vector (Figure 121); and

#    o  JWE Protected Header (Figure 125) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 126.

#    o  Authentication Tag from Figure 127.

#    BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4OPKbWE1zSTEFjDfhU9
#    IPIOSA9Bml4m7iDFwA-1ZXvHteLDtw4R1XRGMEsDIqAYtskTTmzmzNa-_q4F_e
#    vAPUmwlO-ZG45Mnq4uhM1fm_D9rBtWolqZSF3xGNNkpOMQKF1Cl8i8wjzRli7-
#    IXgyirlKQsbhhqRzkv8IcY6aHl24j03C-AR2le1r7URUhArM79BY8soZU0lzwI
#    -sD5PZ3l4NDCCei9XkoIAfsXJWmySPoeRb2Ni5UZL4mYpvKDiwmyzGd65KqVw7
#    MsFfI_K767G9C9Azp73gKZD0DyUn1mn0WW5LmyX_yJ-3AROq8p1WZBfG-ZyJ61
#    95_JGG2m9Csg

#                  Figure 126: Ciphertext, base64url-encoded

#    WCCkNa-x4BeB9hIDIfFuhg

#              Figure 127: Authentication Tag, base64url-encoded

# 5.5.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 114)

#    o  Initialization Vector (Figure 110)

#    o  Ciphertext (Figure 115)

#    o  Authentication Tag (Figure 116)


# Miller                        Informational                    [Page 68]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Only the general JWE JSON Serialization is presented because the
#    flattened JWE JSON Serialization is identical.

#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJFQ0RILUVTIiwia2lkIjoibWVyaWFkb2MuYnJhbmR5YnVja0BidW
#    NrbGFuZC5leGFtcGxlIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYi
#    LCJ4IjoibVBVS1RfYkFXR0hJaGcwVHBqanFWc1AxclhXUXVfdndWT0hIdE5rZF
#    lvQSIsInkiOiI4QlFBc0ltR2VBUzQ2ZnlXdzVNaFlmR1RUMElqQnBGdzJTUzM0
#    RHY0SXJzIn0sImVuYyI6IkExMjhDQkMtSFMyNTYifQ
#    .
#    .
#    yc9N8v5sYyv3iGQT926IUg
#    .
#    BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4OPKbWE1zSTEFjDfhU9
#    IPIOSA9Bml4m7iDFwA-1ZXvHteLDtw4R1XRGMEsDIqAYtskTTmzmzNa-_q4F_e
#    vAPUmwlO-ZG45Mnq4uhM1fm_D9rBtWolqZSF3xGNNkpOMQKF1Cl8i8wjzRli7-
#    IXgyirlKQsbhhqRzkv8IcY6aHl24j03C-AR2le1r7URUhArM79BY8soZU0lzwI
#    -sD5PZ3l4NDCCei9XkoIAfsXJWmySPoeRb2Ni5UZL4mYpvKDiwmyzGd65KqVw7
#    MsFfI_K767G9C9Azp73gKZD0DyUn1mn0WW5LmyX_yJ-3AROq8p1WZBfG-ZyJ61
#    95_JGG2m9Csg
#    .
#    WCCkNa-x4BeB9hIDIfFuhg

#                    Figure 128: JWE Compact Serialization

#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJFQ0RILUVTIiwia2lkIjoibWVyaWFkb2MuYn
#          JhbmR5YnVja0BidWNrbGFuZC5leGFtcGxlIiwiZXBrIjp7Imt0eSI6Ik
#          VDIiwiY3J2IjoiUC0yNTYiLCJ4IjoibVBVS1RfYkFXR0hJaGcwVHBqan
#          FWc1AxclhXUXVfdndWT0hIdE5rZFlvQSIsInkiOiI4QlFBc0ltR2VBUz
#          Q2ZnlXdzVNaFlmR1RUMElqQnBGdzJTUzM0RHY0SXJzIn0sImVuYyI6Ik
#          ExMjhDQkMtSFMyNTYifQ",
#      "iv": "yc9N8v5sYyv3iGQT926IUg",
#      "ciphertext": "BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4O
#          PKbWE1zSTEFjDfhU9IPIOSA9Bml4m7iDFwA-1ZXvHteLDtw4R1XRGMEs
#          DIqAYtskTTmzmzNa-_q4F_evAPUmwlO-ZG45Mnq4uhM1fm_D9rBtWolq
#          ZSF3xGNNkpOMQKF1Cl8i8wjzRli7-IXgyirlKQsbhhqRzkv8IcY6aHl2
#          4j03C-AR2le1r7URUhArM79BY8soZU0lzwI-sD5PZ3l4NDCCei9XkoIA
#          fsXJWmySPoeRb2Ni5UZL4mYpvKDiwmyzGd65KqVw7MsFfI_K767G9C9A
#          zp73gKZD0DyUn1mn0WW5LmyX_yJ-3AROq8p1WZBfG-ZyJ6195_JGG2m9
#          Csg",
#      "tag": "WCCkNa-x4BeB9hIDIfFuhg"
#    }

#                 Figure 129: General JWE JSON Serialization


# Miller                        Informational                    [Page 69]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.6.  Direct Encryption Using AES-GCM

#    This example illustrates encrypting content using a previously
#    exchanged key directly and the "A128GCM" (AES-GCM) content encryption
#    algorithm.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.6.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 130.

#    o  "alg" parameter of "dir".

#    o  "enc" parameter of "A128GCM".

#    {
#      "kty": "oct",
#      "kid": "77c7e2b8-6e13-45cf-8672-617b5b45243a",
#      "use": "enc",
#      "alg": "A128GCM",
#      "k": "XctOhJAkA-pD9Lh7ZgW_2A"
#    }

#                 Figure 130: AES 128-Bit Key, in JWK Format

# 5.6.2.  Generated Factors

#    The following is generated before encrypting:

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 131.

#    refa467QzzKx6QAB

#            Figure 131: Initialization Vector, base64url-encoded


# Miller                        Informational                    [Page 70]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.6.3.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 132, encoded as base64url [RFC4648] to produce Figure 133.

#    {
#      "alg": "dir",
#      "kid": "77c7e2b8-6e13-45cf-8672-617b5b45243a",
#      "enc": "A128GCM"
#    }

#                    Figure 132: JWE Protected Header JSON

#    eyJhbGciOiJkaXIiLCJraWQiOiI3N2M3ZTJiOC02ZTEzLTQ1Y2YtODY3Mi02MT
#    diNWI0NTI0M2EiLCJlbmMiOiJBMTI4R0NNIn0

#             Figure 133: JWE Protected Header, base64url-encoded

#    Performing the encryption operation on the Plaintext (Figure 72)
#    using the following:

#    o  CEK (Figure 130);

#    o  Initialization Vector (Figure 131); and

#    o  JWE Protected Header (Figure 133) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 134.

#    o  Authentication Tag from Figure 135.

#    JW_i_f52hww_ELQPGaYyeAB6HYGcR559l9TYnSovc23XJoBcW29rHP8yZOZG7Y
#    hLpT1bjFuvZPjQS-m0IFtVcXkZXdH_lr_FrdYt9HRUYkshtrMmIUAyGmUnd9zM
#    DB2n0cRDIHAzFVeJUDxkUwVAE7_YGRPdcqMyiBoCO-FBdE-Nceb4h3-FtBP-c_
#    BIwCPTjb9o0SbdcdREEMJMyZBH8ySWMVi1gPD9yxi-aQpGbSv_F9N4IZAxscj5
#    g-NJsUPbjk29-s7LJAGb15wEBtXphVCgyy53CoIKLHHeJHXex45Uz9aKZSRSIn
#    ZI-wjsY0yu3cT4_aQ3i1o-tiE-F8Ios61EKgyIQ4CWao8PFMj8TTnp

#                  Figure 134: Ciphertext, base64url-encoded

#    vbb32Xvllea2OtmHAdccRQ

#              Figure 135: Authentication Tag, base64url-encoded


# Miller                        Informational                    [Page 71]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.6.4.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 133)

#    o  Initialization Vector (Figure 131)

#    o  Ciphertext (Figure 134)

#    o  Authentication Tag (Figure 135)

#    Only the general JWE JSON Serialization is presented because the
#    flattened JWE JSON Serialization is identical.

#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJkaXIiLCJraWQiOiI3N2M3ZTJiOC02ZTEzLTQ1Y2YtODY3Mi02MT
#    diNWI0NTI0M2EiLCJlbmMiOiJBMTI4R0NNIn0
#    .
#    .
#    refa467QzzKx6QAB
#    .
#    JW_i_f52hww_ELQPGaYyeAB6HYGcR559l9TYnSovc23XJoBcW29rHP8yZOZG7Y
#    hLpT1bjFuvZPjQS-m0IFtVcXkZXdH_lr_FrdYt9HRUYkshtrMmIUAyGmUnd9zM
#    DB2n0cRDIHAzFVeJUDxkUwVAE7_YGRPdcqMyiBoCO-FBdE-Nceb4h3-FtBP-c_
#    BIwCPTjb9o0SbdcdREEMJMyZBH8ySWMVi1gPD9yxi-aQpGbSv_F9N4IZAxscj5
#    g-NJsUPbjk29-s7LJAGb15wEBtXphVCgyy53CoIKLHHeJHXex45Uz9aKZSRSIn
#    ZI-wjsY0yu3cT4_aQ3i1o-tiE-F8Ios61EKgyIQ4CWao8PFMj8TTnp
#    .
#    vbb32Xvllea2OtmHAdccRQ

#                    Figure 136: JWE Compact Serialization


# Miller                        Informational                    [Page 72]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJkaXIiLCJraWQiOiI3N2M3ZTJiOC02ZTEzLT
#          Q1Y2YtODY3Mi02MTdiNWI0NTI0M2EiLCJlbmMiOiJBMTI4R0NNIn0",
#      "iv": "refa467QzzKx6QAB",
#      "ciphertext": "JW_i_f52hww_ELQPGaYyeAB6HYGcR559l9TYnSovc23XJ
#          oBcW29rHP8yZOZG7YhLpT1bjFuvZPjQS-m0IFtVcXkZXdH_lr_FrdYt9
#          HRUYkshtrMmIUAyGmUnd9zMDB2n0cRDIHAzFVeJUDxkUwVAE7_YGRPdc
#          qMyiBoCO-FBdE-Nceb4h3-FtBP-c_BIwCPTjb9o0SbdcdREEMJMyZBH8
#          ySWMVi1gPD9yxi-aQpGbSv_F9N4IZAxscj5g-NJsUPbjk29-s7LJAGb1
#          5wEBtXphVCgyy53CoIKLHHeJHXex45Uz9aKZSRSInZI-wjsY0yu3cT4_
#          aQ3i1o-tiE-F8Ios61EKgyIQ4CWao8PFMj8TTnp",
#      "tag": "vbb32Xvllea2OtmHAdccRQ"
#    }

#                 Figure 137: General JWE JSON Serialization

# 5.7.  Key Wrap Using AES-GCM KeyWrap with AES-CBC-HMAC-SHA2

#    This example illustrates encrypting content using the "A256GCMKW"
#    (AES-256-GCM-KeyWrap) key encryption algorithm with the "A128CBC-
#    HS256" (AES-128-CBC-HMAC-SHA-256) content encryption algorithm.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.7.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  AES symmetric key; this example uses the key from Figure 138.

#    o  "alg" parameter of "A256GCMKW".

#    o  "enc" parameter of "A128CBC-HS256".


# Miller                        Informational                    [Page 73]

# RFC 7520                      JOSE Cookbook                     May 2015


#    {
#      "kty": "oct",
#      "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
#      "use": "enc",
#      "alg": "A256GCMKW",
#      "k": "qC57l_uxcm7Nm3K-ct4GFjx8tM1U8CZ0NLBvdQstiS8"
#    }

#                         Figure 138: AES 256-Bit Key

# 5.7.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 139.

#    o  Initialization Vector for content encryption; this example uses
#       the Initialization Vector from Figure 140.

#    UWxARpat23nL9ReIj4WG3D1ee9I4r-Mv5QLuFXdy_rE

#            Figure 139: Content Encryption Key, base64url-encoded

#    gz6NjyEFNm_vm8Gj6FwoFQ

#            Figure 140: Initialization Vector, base64url-encoded

# 5.7.3.  Encrypting the Key

#    The following is generated before encrypting the CEK:

#    o  Initialization Vector for key wrapping; this example uses the
#       Initialization Vector from Figure 141.

#    KkYT0GX_2jHlfqN_

#    Figure 141: Initialization Vector for Key Wrapping, base64url-encoded


# Miller                        Informational                    [Page 74]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the key encryption operation over the CEK (Figure 139)
#    with the following:

#    o  AES symmetric key (Figure 138);

#    o  Initialization Vector (Figure 141); and

#    o  The empty string as authenticated data

#    produces the following:

#    o  Encrypted Key from Figure 142.

#    o  Authentication Tag from Figure 143.

#    lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElLvYNok

#                Figure 142: Encrypted Key, base64url-encoded

#    kfPduVQ3T3H6vnewt--ksw

#     Figure 143: Authentication Tag from Key Wrapping, base64url-encoded

# 5.7.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 144, encoded to base64url [RFC4648] as Figure 145.

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

#                    Figure 144: JWE Protected Header JSON


# Miller                        Informational                    [Page 75]

# RFC 7520                      JOSE Cookbook                     May 2015


#    eyJhbGciOiJBMjU2R0NNS1ciLCJraWQiOiIxOGVjMDhlMS1iZmE5LTRkOTUtYj
#    IwNS0yYjRkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdVZRM1QzSDZ2bmV3dC0ta3N3
#    IiwiaXYiOiJLa1lUMEdYXzJqSGxmcU5fIiwiZW5jIjoiQTEyOENCQy1IUzI1Ni
#    J9

#             Figure 145: JWE Protected Header, base64url-encoded

#    Performing the content encryption operation over the Plaintext
#    (Figure 72) with the following:

#    o  CEK (Figure 139);

#    o  Initialization Vector (Figure 140); and

#    o  JWE Protected Header (Figure 145) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 146.

#    o  Authentication Tag from Figure 147.

#    Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8EqoDZHyFKFBupS8iaE
#    eVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyWtZKX0gxKdy6HgLvqoGNbZCz
#    LjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQHLcqAHxy51449xkjZ7ewzZaGV3eFq
#    hpco8o4DijXaG5_7kp3h2cajRfDgymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hde
#    b6yhdTynCRmu-kqtO5Dec4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0Jtj
#    xAj4UPI61oONK7zzFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR
#    1B-gxpNk3xWU

#                  Figure 146: Ciphertext, base64url-encoded

#    DKW7jrb4WaRSNfbXVPlT5g

#              Figure 147: Authentication Tag, base64url-encoded


# Miller                        Informational                    [Page 76]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.7.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 145)

#    o  Encrypted Key (Figure 142)

#    o  Initialization Vector (Figure 140)

#    o  Ciphertext (Figure 146)

#    o  Authentication Tag (Figure 147)

#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJBMjU2R0NNS1ciLCJraWQiOiIxOGVjMDhlMS1iZmE5LTRkOTUtYj
#    IwNS0yYjRkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdVZRM1QzSDZ2bmV3dC0ta3N3
#    IiwiaXYiOiJLa1lUMEdYXzJqSGxmcU5fIiwiZW5jIjoiQTEyOENCQy1IUzI1Ni
#    J9
#    .
#    lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElLvYNok
#    .
#    gz6NjyEFNm_vm8Gj6FwoFQ
#    .
#    Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8EqoDZHyFKFBupS8iaE
#    eVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyWtZKX0gxKdy6HgLvqoGNbZCz
#    LjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQHLcqAHxy51449xkjZ7ewzZaGV3eFq
#    hpco8o4DijXaG5_7kp3h2cajRfDgymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hde
#    b6yhdTynCRmu-kqtO5Dec4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0Jtj
#    xAj4UPI61oONK7zzFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR
#    1B-gxpNk3xWU
#    .
#    DKW7jrb4WaRSNfbXVPlT5g

#                    Figure 148: JWE Compact Serialization


# Miller                        Informational                    [Page 77]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElL
#              vYNok"
#        }
#      ],
#      "protected": "eyJhbGciOiJBMjU2R0NNS1ciLCJraWQiOiIxOGVjMDhlMS
#          1iZmE5LTRkOTUtYjIwNS0yYjRkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdV
#          ZRM1QzSDZ2bmV3dC0ta3N3IiwiaXYiOiJLa1lUMEdYXzJqSGxmcU5fIi
#          wiZW5jIjoiQTEyOENCQy1IUzI1NiJ9",
#      "iv": "gz6NjyEFNm_vm8Gj6FwoFQ",
#      "ciphertext": "Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8E
#          qoDZHyFKFBupS8iaEeVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyW
#          tZKX0gxKdy6HgLvqoGNbZCzLjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQ
#          HLcqAHxy51449xkjZ7ewzZaGV3eFqhpco8o4DijXaG5_7kp3h2cajRfD
#          gymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hdeb6yhdTynCRmu-kqtO5Dec
#          4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0JtjxAj4UPI61oONK7z
#          zFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR1B-gxpNk3
#          xWU",
#      "tag": "DKW7jrb4WaRSNfbXVPlT5g"
#    }

#                 Figure 149: General JWE JSON Serialization


# Miller                        Informational                    [Page 78]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJBMjU2R0NNS1ciLCJpdiI6IktrWVQwR1hfMm
#          pIbGZxTl8iLCJraWQiOiIxOGVjMDhlMS1iZmE5LTRkOTUtYjIwNS0yYj
#          RkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdVZRM1QzSDZ2bmV3dC0ta3N3Ii
#          wiZW5jIjoiQTEyOENCQy1IUzI1NiJ9",
#      "encrypted_key": "lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElLvYNo
#          k",
#      "iv": "gz6NjyEFNm_vm8Gj6FwoFQ",
#      "ciphertext": "Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8E
#          qoDZHyFKFBupS8iaEeVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyW
#          tZKX0gxKdy6HgLvqoGNbZCzLjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQ
#          HLcqAHxy51449xkjZ7ewzZaGV3eFqhpco8o4DijXaG5_7kp3h2cajRfD
#          gymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hdeb6yhdTynCRmu-kqtO5Dec
#          4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0JtjxAj4UPI61oONK7z
#          zFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR1B-gxpNk3
#          xWU",
#      "tag": "NvBveHr_vonkvflfnUrmBQ"
#    }

#                Figure 150: Flattened JWE JSON Serialization

# 5.8.  Key Wrap Using AES-KeyWrap with AES-GCM

#    The following example illustrates content encryption using the
#    "A128KW" (AES-128-KeyWrap) key encryption algorithm and the "A128GCM"
#    (AES-128-GCM) content encryption algorithm.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.8.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  AES symmetric key; this example uses the key from Figure 151.

#    o  "alg" parameter of "A128KW".

#    o  "enc" parameter of "A128GCM".


# Miller                        Informational                    [Page 79]

# RFC 7520                      JOSE Cookbook                     May 2015


#    {
#      "kty": "oct",
#      "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#      "use": "enc",
#      "alg": "A128KW",
#      "k": "GZy6sIZ6wl9NJOKB-jnmVQ"
#    }

#                         Figure 151: AES 128-Bit Key

# 5.8.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key; this example uses
#       the key from Figure 152.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 153.

#    aY5_Ghmk9KxWPBLu_glx1w

#            Figure 152: Content Encryption Key, base64url-encoded

#    Qx0pmsDa8KnJc9Jo

#            Figure 153: Initialization Vector, base64url-encoded

# 5.8.3.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 152)
#    with the AES symmetric key (Figure 151) produces the following
#    Encrypted Key:

#    CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx

#                Figure 154: Encrypted Key, base64url-encoded

# 5.8.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 155, encoded to base64url [RFC4648] as Figure 156.


# Miller                        Informational                    [Page 80]

# RFC 7520                      JOSE Cookbook                     May 2015


#    {
#      "alg": "A128KW",
#      "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#      "enc": "A128GCM"
#    }

#                    Figure 155: JWE Protected Header JSON

#    eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
#    04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn0

#             Figure 156: JWE Protected Header, base64url-encoded

#    Performing the content encryption over the Plaintext (Figure 72) with
#    the following:

#    o  CEK (Figure 152);

#    o  Initialization Vector (Figure 153); and

#    o  JWE Protected Header (Figure 156) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 157.

#    o  Authentication Tag from Figure 158.

#    AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1bTdhtFJgJxeVmJkLD6
#    1A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGkd3EkU0vjHi9gTlb90qSYFfe
#    F0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiYSoYJVSpf7ej6zaYcMv3WwdxDFl8RE
#    wOhNImk2Xld2JXq6BR53TSFkyT7PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-p
#    uQsmthc9Zg0ojmJfqqFvETUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRa
#    a8Z7MOZ7UGxGIMvEmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF

#                  Figure 157: Ciphertext, base64url-encoded

#    ER7MWJZ1FBI_NKvn7Zb1Lw

#              Figure 158: Authentication Tag, base64url-encoded


# Miller                        Informational                    [Page 81]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.8.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 156)

#    o  Encrypted Key (Figure 154)

#    o  Initialization Vector (Figure 153)

#    o  Ciphertext (Figure 157)

#    o  Authentication Tag (Figure 158)

#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
#    04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn0
#    .
#    CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx
#    .
#    Qx0pmsDa8KnJc9Jo
#    .
#    AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1bTdhtFJgJxeVmJkLD6
#    1A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGkd3EkU0vjHi9gTlb90qSYFfe
#    F0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiYSoYJVSpf7ej6zaYcMv3WwdxDFl8RE
#    wOhNImk2Xld2JXq6BR53TSFkyT7PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-p
#    uQsmthc9Zg0ojmJfqqFvETUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRa
#    a8Z7MOZ7UGxGIMvEmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF
#    .
#    ER7MWJZ1FBI_NKvn7Zb1Lw

#                    Figure 159: JWE Compact Serialization


# Miller                        Informational                    [Page 82]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx"
#        }
#      ],
#      "protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
#          MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
#          0",
#      "iv": "Qx0pmsDa8KnJc9Jo",
#      "ciphertext": "AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1b
#          TdhtFJgJxeVmJkLD61A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGk
#          d3EkU0vjHi9gTlb90qSYFfeF0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiY
#          SoYJVSpf7ej6zaYcMv3WwdxDFl8REwOhNImk2Xld2JXq6BR53TSFkyT7
#          PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-puQsmthc9Zg0ojmJfqqFvE
#          TUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRaa8Z7MOZ7UGxGIMv
#          EmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF",
#      "tag": "ER7MWJZ1FBI_NKvn7Zb1Lw"
#    }

#                 Figure 160: General JWE JSON Serialization

#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
#          MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
#          0",
#      "encrypted_key": "CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx",
#      "iv": "Qx0pmsDa8KnJc9Jo",
#      "ciphertext": "AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1b
#          TdhtFJgJxeVmJkLD61A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGk
#          d3EkU0vjHi9gTlb90qSYFfeF0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiY
#          SoYJVSpf7ej6zaYcMv3WwdxDFl8REwOhNImk2Xld2JXq6BR53TSFkyT7
#          PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-puQsmthc9Zg0ojmJfqqFvE
#          TUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRaa8Z7MOZ7UGxGIMv
#          EmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF",
#      "tag": "ER7MWJZ1FBI_NKvn7Zb1Lw"
#    }

#                Figure 161: Flattened JWE JSON Serialization


# Miller                        Informational                    [Page 83]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.9.  Compressed Content

#    This example illustrates encrypting content that is first compressed.
#    It reuses the AES symmetric key, key encryption algorithm, and
#    content encryption algorithm from Section 5.8.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.9.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  Recipient encryption key; this example uses the key from
#       Figure 151.

#    o  Key encryption algorithm; this example uses "A128KW".

#    o  Content encryption algorithm; this example uses "A128GCM".

#    o  "zip" parameter of "DEF".

# 5.9.2.  Generated Factors

#    The following are generated before encrypting:

#    o  Compressed Plaintext from the original Plaintext content;
#       compressing Figure 72 using the DEFLATE [RFC1951] algorithm
#       produces the compressed Plaintext from Figure 162.

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 163.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 164.

#    bY_BDcIwDEVX-QNU3QEOrIA4pqlDokYxchxVvbEDGzIJbioOSJwc-f___HPjBu
#    8KVFpVtAplVE1-wZo0YjNZo3C7R5v72pV5f5X382VWjYQpqZKAyjziZOr2B7kQ
#    PSy6oZIXUnDYbVKN4jNXi2u0yB7t1qSHTjmMODf9QgvrDzfTIQXnyQRuUya4zI
#    WG3vTOdir0v7BRHFYWq3k1k1A_gSDJqtcBF-GZxw8

#             Figure 162: Compressed Plaintext, base64url-encoded


# Miller                        Informational                    [Page 84]

# RFC 7520                      JOSE Cookbook                     May 2015


#    hC-MpLZSuwWv8sexS6ydfw

#            Figure 163: Content Encryption Key, base64url-encoded

#    p9pUq6XHY0jfEZIl

#            Figure 164: Initialization Vector, base64url-encoded

# 5.9.3.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 163)
#    with the AES symmetric key (Figure 151) produces the following
#    Encrypted Key:

#    5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi

#                Figure 165: Encrypted Key, base64url-encoded

# 5.9.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 166, encoded to base64url [RFC4648] as Figure 167.

#    {
#      "alg": "A128KW",
#      "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#      "enc": "A128GCM",
#      "zip": "DEF"
#    }

#                    Figure 166: JWE Protected Header JSON

#    eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
#    04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIiwiemlwIjoiREVGIn0

#             Figure 167: JWE Protected Header, base64url-encoded


# Miller                        Informational                    [Page 85]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the content encryption operation over the compressed
#    Plaintext (Figure 162, encoded as an octet string) with the
#    following:

#    o  CEK (Figure 163);

#    o  Initialization Vector (Figure 164); and

#    o  JWE Protected Header (Figure 167) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 168.

#    o  Authentication Tag from Figure 169.

#    HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6VB8hry57tDZ61jXyez
#    SPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWGml8blyiMQmOn9J--XhhlYg0
#    m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDHj0aBMG6152PsM-w5E_o2B3jDbrYBK
#    hpYA7qi3AyijnCJ7BP9rr3U8kxExCpG3mK420TjOw

#                  Figure 168: Ciphertext, base64url-encoded

#    VILuUwuIxaLVmh5X-T7kmA

#              Figure 169: Authentication Tag, base64url-encoded

# 5.9.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 167)

#    o  Encrypted Key (Figure 165)

#    o  Initialization Vector (Figure 164)

#    o  Ciphertext (Figure 168)

#    o  Authentication Tag (Figure 169)


# Miller                        Informational                    [Page 86]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
#    04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIiwiemlwIjoiREVGIn0
#    .
#    5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi
#    .
#    p9pUq6XHY0jfEZIl
#    .
#    HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6VB8hry57tDZ61jXyez
#    SPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWGml8blyiMQmOn9J--XhhlYg0
#    m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDHj0aBMG6152PsM-w5E_o2B3jDbrYBK
#    hpYA7qi3AyijnCJ7BP9rr3U8kxExCpG3mK420TjOw
#    .
#    VILuUwuIxaLVmh5X-T7kmA

#                    Figure 170: JWE Compact Serialization

#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi"
#        }
#      ],
#      "protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
#          MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIi
#          wiemlwIjoiREVGIn0",
#      "iv": "p9pUq6XHY0jfEZIl",
#      "ciphertext": "HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6V
#          B8hry57tDZ61jXyezSPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWG
#          ml8blyiMQmOn9J--XhhlYg0m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDH
#          j0aBMG6152PsM-w5E_o2B3jDbrYBKhpYA7qi3AyijnCJ7BP9rr3U8kxE
#          xCpG3mK420TjOw",
#      "tag": "VILuUwuIxaLVmh5X-T7kmA"
#    }

#                 Figure 171: General JWE JSON Serialization


# Miller                        Informational                    [Page 87]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
#          MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIi
#          wiemlwIjoiREVGIn0",
#      "encrypted_key": "5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi",
#      "iv": "p9pUq6XHY0jfEZIl",
#      "ciphertext": "HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6V
#          B8hry57tDZ61jXyezSPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWG
#          ml8blyiMQmOn9J--XhhlYg0m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDH
#          j0aBMG6152PsM-w5E_o2B3jDbrYBKhpYA7qi3AyijnCJ7BP9rr3U8kxE
#          xCpG3mK420TjOw",
#      "tag": "VILuUwuIxaLVmh5X-T7kmA"
#    }

#                Figure 172: Flattened JWE JSON Serialization

# 5.10.  Including Additional Authenticated Data

#    This example illustrates encrypting content that includes additional
#    authenticated data.  As this example includes an additional top-level
#    property not present in the JWE Compact Serialization, only the
#    flattened JWE JSON Serialization and general JWE JSON Serialization
#    are possible.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.10.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  Recipient encryption key; this example uses the key from
#       Figure 151.

#    o  Key encryption algorithm; this example uses "A128KW".

#    o  Content encryption algorithm; this example uses "A128GCM".

#    o  Additional Authenticated Data; this example uses a vCard [RFC7095]
#       from Figure 173, serialized to UTF-8.


# Miller                        Informational                    [Page 88]

# RFC 7520                      JOSE Cookbook                     May 2015


#    [
#      "vcard",
#      [
#        [ "version", {}, "text", "4.0" ],
#        [ "fn", {}, "text", "Meriadoc Brandybuck" ],
#        [ "n", {},
#          "text", [
#            "Brandybuck", "Meriadoc", "Mr.", ""
#          ]
#        ],
#        [ "bday", {}, "text", "TA 2982" ],
#        [ "gender", {}, "text", "M" ]
#      ]
#    ]

#          Figure 173: Additional Authenticated Data, in JSON Format

#    NOTE: Whitespace between JSON values was added for readability.

# 5.10.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 174.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 175.

#    o  Encoded Additional Authenticated Data (AAD); this example uses the
#       Additional Authenticated Data from Figure 173, encoded to
#       base64url [RFC4648] as Figure 176.

#    75m1ALsYv10pZTKPWrsqdg

#            Figure 174: Content Encryption Key, base64url-encoded

#    veCx9ece2orS7c_N

#            Figure 175: Initialization Vector, base64url-encoded

#    WyJ2Y2FyZCIsW1sidmVyc2lvbiIse30sInRleHQiLCI0LjAiXSxbImZuIix7fS
#    widGV4dCIsIk1lcmlhZG9jIEJyYW5keWJ1Y2siXSxbIm4iLHt9LCJ0ZXh0Iixb
#    IkJyYW5keWJ1Y2siLCJNZXJpYWRvYyIsIk1yLiIsIiJdXSxbImJkYXkiLHt9LC
#    J0ZXh0IiwiVEEgMjk4MiJdLFsiZ2VuZGVyIix7fSwidGV4dCIsIk0iXV1d

#        Figure 176: Additional Authenticated Data, base64url-encoded


# Miller                        Informational                    [Page 89]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.10.3.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 174)
#    with the AES symmetric key (Figure 151) produces the following
#    Encrypted Key:

#    4YiiQ_ZzH76TaIkJmYfRFgOV9MIpnx4X

#                Figure 177: Encrypted Key, base64url-encoded

# 5.10.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 178, encoded to base64url [RFC4648] as Figure 179.

#    {
#      "alg": "A128KW",
#      "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#      "enc": "A128GCM"
#    }

#                    Figure 178: JWE Protected Header JSON

#    eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
#    04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn0

#             Figure 179: JWE Protected Header, base64url-encoded

#    Performing the content encryption operation over the Plaintext with
#    the following:

#    o  CEK (Figure 174);

#    o  Initialization Vector (Figure 175); and

#    o  Concatenation of the JWE Protected Header (Figure 179), ".", and
#       the base64url [RFC4648] encoding of Figure 173 as authenticated
#       data

#    produces the following:

#    o  Ciphertext from Figure 180.

#    o  Authentication Tag from Figure 181.


# Miller                        Informational                    [Page 90]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Z_3cbr0k3bVM6N3oSNmHz7Lyf3iPppGf3Pj17wNZqteJ0Ui8p74SchQP8xygM1
#    oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14T_4NFqF-p2Mx8zkbKxI7oPK
#    8KNarFbyxIDvICNqBLba-v3uzXBdB89fzOI-Lv4PjOFAQGHrgv1rjXAmKbgkft
#    9cB4WeyZw8MldbBhc-V_KWZslrsLNygon_JJWd_ek6LQn5NRehvApqf9ZrxB4a
#    q3FXBxOxCys35PhCdaggy2kfUfl2OkwKnWUbgXVD1C6HxLIlqHhCwXDG59weHr
#    RDQeHyMRoBljoV3X_bUTJDnKBFOod7nLz-cj48JMx3SnCZTpbQAkFV

#                  Figure 180: Ciphertext, base64url-encoded

#    vOaH_Rajnpy_3hOtqvZHRA

#              Figure 181: Authentication Tag, base64url-encoded

# 5.10.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 179)

#    o  Encrypted Key (Figure 177)

#    o  Initialization Vector (Figure 175)

#    o  Additional Authenticated Data (Figure 176)

#    o  Ciphertext (Figure 180)

#    o  Authentication Tag (Figure 181)

#    The JWE Compact Serialization is not presented because it does not
#    support this use case.


# Miller                        Informational                    [Page 91]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "4YiiQ_ZzH76TaIkJmYfRFgOV9MIpnx4X"
#        }
#      ],
#      "protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
#          MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
#          0",
#      "iv": "veCx9ece2orS7c_N",
#      "aad": "WyJ2Y2FyZCIsW1sidmVyc2lvbiIse30sInRleHQiLCI0LjAiXSxb
#          ImZuIix7fSwidGV4dCIsIk1lcmlhZG9jIEJyYW5keWJ1Y2siXSxbIm4i
#          LHt9LCJ0ZXh0IixbIkJyYW5keWJ1Y2siLCJNZXJpYWRvYyIsIk1yLiIs
#          IiJdXSxbImJkYXkiLHt9LCJ0ZXh0IiwiVEEgMjk4MiJdLFsiZ2VuZGVy
#          Iix7fSwidGV4dCIsIk0iXV1d",
#      "ciphertext": "Z_3cbr0k3bVM6N3oSNmHz7Lyf3iPppGf3Pj17wNZqteJ0
#          Ui8p74SchQP8xygM1oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14
#          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
#          OI-Lv4PjOFAQGHrgv1rjXAmKbgkft9cB4WeyZw8MldbBhc-V_KWZslrs
#          LNygon_JJWd_ek6LQn5NRehvApqf9ZrxB4aq3FXBxOxCys35PhCdaggy
#          2kfUfl2OkwKnWUbgXVD1C6HxLIlqHhCwXDG59weHrRDQeHyMRoBljoV3
#          X_bUTJDnKBFOod7nLz-cj48JMx3SnCZTpbQAkFV",
#      "tag": "vOaH_Rajnpy_3hOtqvZHRA"
#    }

#                 Figure 182: General JWE JSON Serialization


# Miller                        Informational                    [Page 92]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
#          MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
#          0",
#      "encrypted_key": "4YiiQ_ZzH76TaIkJmYfRFgOV9MIpnx4X",
#      "aad": "WyJ2Y2FyZCIsW1sidmVyc2lvbiIse30sInRleHQiLCI0LjAiXSxb
#          ImZuIix7fSwidGV4dCIsIk1lcmlhZG9jIEJyYW5keWJ1Y2siXSxbIm4i
#          LHt9LCJ0ZXh0IixbIkJyYW5keWJ1Y2siLCJNZXJpYWRvYyIsIk1yLiIs
#          IiJdXSxbImJkYXkiLHt9LCJ0ZXh0IiwiVEEgMjk4MiJdLFsiZ2VuZGVy
#          Iix7fSwidGV4dCIsIk0iXV1d",
#      "iv": "veCx9ece2orS7c_N",
#      "ciphertext": "Z_3cbr0k3bVM6N3oSNmHz7Lyf3iPppGf3Pj17wNZqteJ0
#          Ui8p74SchQP8xygM1oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14
#          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
#          OI-Lv4PjOFAQGHrgv1rjXAmKbgkft9cB4WeyZw8MldbBhc-V_KWZslrs
#          LNygon_JJWd_ek6LQn5NRehvApqf9ZrxB4aq3FXBxOxCys35PhCdaggy
#          2kfUfl2OkwKnWUbgXVD1C6HxLIlqHhCwXDG59weHrRDQeHyMRoBljoV3
#          X_bUTJDnKBFOod7nLz-cj48JMx3SnCZTpbQAkFV",
#      "tag": "vOaH_Rajnpy_3hOtqvZHRA"
#    }

#                Figure 183: Flattened JWE JSON Serialization

# 5.11.  Protecting Specific Header Fields

#    This example illustrates encrypting content where only certain JOSE
#    Header Parameters are protected.  As this example includes parameters
#    in the JWE Shared Unprotected Header, only the general JWE JSON
#    Serialization and flattened JWE JSON Serialization are possible.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.11.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  Recipient encryption key; this example uses the key from
#       Figure 151.

#    o  Key encryption algorithm; this example uses "A128KW".

#    o  Content encryption algorithm; this example uses "A128GCM".


# Miller                        Informational                    [Page 93]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.11.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 184.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 185.

#    WDgEptBmQs9ouUvArz6x6g

#            Figure 184: Content Encryption Key, base64url-encoded

#    WgEJsDS9bkoXQ3nR

#            Figure 185: Initialization Vector, base64url-encoded

# 5.11.3.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 184)
#    with the AES symmetric key (Figure 151) produces the following
#    Encrypted Key:

#    jJIcM9J-hbx3wnqhf5FlkEYos0sHsF0H

#                Figure 186: Encrypted Key, base64url-encoded

# 5.11.4.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 187, encoded to base64url [RFC4648] as Figure 188.

#    {
#      "enc": "A128GCM"
#    }

#                    Figure 187: JWE Protected Header JSON

#    eyJlbmMiOiJBMTI4R0NNIn0

#             Figure 188: JWE Protected Header, base64url-encoded


# Miller                        Informational                    [Page 94]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the content encryption operation over the Plaintext with
#    the following:

#    o  CEK (Figure 184);

#    o  Initialization Vector (Figure 185); and

#    o  JWE Protected Header (Figure 188) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 189.

#    o  Authentication Tag from Figure 190.

#    lIbCyRmRJxnB2yLQOTqjCDKV3H30ossOw3uD9DPsqLL2DM3swKkjOwQyZtWsFL
#    YMj5YeLht_StAn21tHmQJuuNt64T8D4t6C7kC9OCCJ1IHAolUv4MyOt80MoPb8
#    fZYbNKqplzYJgIL58g8N2v46OgyG637d6uuKPwhAnTGm_zWhqc_srOvgiLkzyF
#    XPq1hBAURbc3-8BqeRb48iR1-_5g5UjWVD3lgiLCN_P7AW8mIiFvUNXBPJK3nO
#    WL4teUPS8yHLbWeL83olU4UAgL48x-8dDkH23JykibVSQju-f7e-1xreHWXzWL
#    Hs1NqBbre0dEwK3HX_xM0LjUz77Krppgegoutpf5qaKg3l-_xMINmf

#                  Figure 189: Ciphertext, base64url-encoded

#    fNYLqpUe84KD45lvDiaBAQ

#              Figure 190: Authentication Tag, base64url-encoded

# 5.11.5.  Output Results

#    The following compose the resulting JWE object:

#    o  JWE Shared Unprotected Header (Figure 191)

#    o  JWE Protected Header (Figure 188)

#    o  Encrypted Key (Figure 186)

#    o  Initialization Vector (Figure 185)

#    o  Ciphertext (Figure 189)

#    o  Authentication Tag (Figure 190)

#    The JWE Compact Serialization is not presented because it does not
#    support this use case.


# Miller                        Informational                    [Page 95]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The following JWE Shared Unprotected Header is generated before
#    assembling the output results:

#    {
#      "alg": "A128KW",
#      "kid": "81b20965-8332-43d9-a468-82160ad91ac8"
#    }

#               Figure 191: JWE Shared Unprotected Header JSON

#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "jJIcM9J-hbx3wnqhf5FlkEYos0sHsF0H"
#        }
#      ],
#      "unprotected": {
#        "alg": "A128KW",
#        "kid": "81b20965-8332-43d9-a468-82160ad91ac8"
#      },
#      "protected": "eyJlbmMiOiJBMTI4R0NNIn0",
#      "iv": "WgEJsDS9bkoXQ3nR",
#      "ciphertext": "lIbCyRmRJxnB2yLQOTqjCDKV3H30ossOw3uD9DPsqLL2D
#          M3swKkjOwQyZtWsFLYMj5YeLht_StAn21tHmQJuuNt64T8D4t6C7kC9O
#          CCJ1IHAolUv4MyOt80MoPb8fZYbNKqplzYJgIL58g8N2v46OgyG637d6
#          uuKPwhAnTGm_zWhqc_srOvgiLkzyFXPq1hBAURbc3-8BqeRb48iR1-_5
#          g5UjWVD3lgiLCN_P7AW8mIiFvUNXBPJK3nOWL4teUPS8yHLbWeL83olU
#          4UAgL48x-8dDkH23JykibVSQju-f7e-1xreHWXzWLHs1NqBbre0dEwK3
#          HX_xM0LjUz77Krppgegoutpf5qaKg3l-_xMINmf",
#      "tag": "fNYLqpUe84KD45lvDiaBAQ"
#    }

#                 Figure 192: General JWE JSON Serialization


# Miller                        Informational                    [Page 96]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "protected": "eyJlbmMiOiJBMTI4R0NNIn0",
#      "unprotected": {
#        "alg": "A128KW",
#        "kid": "81b20965-8332-43d9-a468-82160ad91ac8"
#      },
#      "encrypted_key": "jJIcM9J-hbx3wnqhf5FlkEYos0sHsF0H",
#      "iv": "WgEJsDS9bkoXQ3nR",
#      "ciphertext": "lIbCyRmRJxnB2yLQOTqjCDKV3H30ossOw3uD9DPsqLL2D
#          M3swKkjOwQyZtWsFLYMj5YeLht_StAn21tHmQJuuNt64T8D4t6C7kC9O
#          CCJ1IHAolUv4MyOt80MoPb8fZYbNKqplzYJgIL58g8N2v46OgyG637d6
#          uuKPwhAnTGm_zWhqc_srOvgiLkzyFXPq1hBAURbc3-8BqeRb48iR1-_5
#          g5UjWVD3lgiLCN_P7AW8mIiFvUNXBPJK3nOWL4teUPS8yHLbWeL83olU
#          4UAgL48x-8dDkH23JykibVSQju-f7e-1xreHWXzWLHs1NqBbre0dEwK3
#          HX_xM0LjUz77Krppgegoutpf5qaKg3l-_xMINmf",
#      "tag": "fNYLqpUe84KD45lvDiaBAQ"
#    }

#                Figure 193: Flattened JWE JSON Serialization

# 5.12.  Protecting Content Only

#    This example illustrates encrypting content where none of the JOSE
#    header parameters are protected.  As this example includes parameters
#    only in the JWE Shared Unprotected Header, only the flattened JWE
#    JSON Serialization and general JWE JSON Serialization are possible.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.12.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 72.

#    o  Recipient encryption key; this example uses the key from
#       Figure 151.

#    o  Key encryption algorithm; this example uses "A128KW".

#    o  Content encryption algorithm; this example uses "A128GCM".


# Miller                        Informational                    [Page 97]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.12.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key; this example the
#       key from Figure 194.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 195.

#    KBooAFl30QPV3vkcZlXnzQ

#            Figure 194: Content Encryption Key, base64url-encoded

#    YihBoVOGsR1l7jCD

#            Figure 195: Initialization Vector, base64url-encoded

# 5.12.3.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 194)
#    with the AES symmetric key (Figure 151) produces the following
#    Encrypted Key:

#    244YHfO_W7RMpQW81UjQrZcq5LSyqiPv

#                Figure 196: Encrypted Key, base64url-encoded

# 5.12.4.  Encrypting the Content

#    Performing the content encryption operation over the Plaintext
#    (Figure 72) using the following:

#    o  CEK (Figure 194);

#    o  Initialization Vector (Figure 195); and

#    o  Empty string as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 197.

#    o  Authentication Tag from Figure 198.


# Miller                        Informational                    [Page 98]

# RFC 7520                      JOSE Cookbook                     May 2015


#    qtPIMMaOBRgASL10dNQhOa7Gqrk7Eal1vwht7R4TT1uq-arsVCPaIeFwQfzrSS
#    6oEUWbBtxEasE0vC6r7sphyVziMCVJEuRJyoAHFSP3eqQPb4Ic1SDSqyXjw_L3
#    svybhHYUGyQuTmUQEDjgjJfBOifwHIsDsRPeBz1NomqeifVPq5GTCWFo5k_MNI
#    QURR2Wj0AHC2k7JZfu2iWjUHLF8ExFZLZ4nlmsvJu_mvifMYiikfNfsZAudISO
#    a6O73yPZtL04k_1FI7WDfrb2w7OqKLWDXzlpcxohPVOLQwpA3mFNRKdY-bQz4Z
#    4KX9lfz1cne31N4-8BKmojpw-OdQjKdLOGkC445Fb_K1tlDQXw2sBF

#                  Figure 197: Ciphertext, base64url-encoded

#    e2m0Vm7JvjK2VpCKXS-kyg

#              Figure 198: Authentication Tag, base64url-encoded

# 5.12.5.  Output Results

#    The JWE Compact Serialization is not presented because it does not
#    support this use case.

#    The following JWE Shared Unprotected Header is generated before
#    assembling the output results:

#    {
#      "alg": "A128KW",
#      "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#      "enc": "A128GCM"
#    }

#               Figure 199: JWE Shared Unprotected Header JSON

#    The following compose the resulting JWE object:

#    o  JWE Shared Unprotected Header (Figure 199)

#    o  Encrypted Key (Figure 196)

#    o  Initialization Vector (Figure 195)

#    o  Ciphertext (Figure 197)

#    o  Authentication Tag (Figure 198)


# Miller                        Informational                    [Page 99]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "244YHfO_W7RMpQW81UjQrZcq5LSyqiPv"
#        }
#      ],
#      "unprotected": {
#        "alg": "A128KW",
#        "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#        "enc": "A128GCM"
#      },
#      "iv": "YihBoVOGsR1l7jCD",
#      "ciphertext": "qtPIMMaOBRgASL10dNQhOa7Gqrk7Eal1vwht7R4TT1uq-
#          arsVCPaIeFwQfzrSS6oEUWbBtxEasE0vC6r7sphyVziMCVJEuRJyoAHF
#          SP3eqQPb4Ic1SDSqyXjw_L3svybhHYUGyQuTmUQEDjgjJfBOifwHIsDs
#          RPeBz1NomqeifVPq5GTCWFo5k_MNIQURR2Wj0AHC2k7JZfu2iWjUHLF8
#          ExFZLZ4nlmsvJu_mvifMYiikfNfsZAudISOa6O73yPZtL04k_1FI7WDf
#          rb2w7OqKLWDXzlpcxohPVOLQwpA3mFNRKdY-bQz4Z4KX9lfz1cne31N4
#          -8BKmojpw-OdQjKdLOGkC445Fb_K1tlDQXw2sBF",
#      "tag": "e2m0Vm7JvjK2VpCKXS-kyg"
#    }

#                 Figure 200: General JWE JSON Serialization

#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "unprotected": {
#        "alg": "A128KW",
#        "kid": "81b20965-8332-43d9-a468-82160ad91ac8",
#        "enc": "A128GCM"
#      },
#      "encrypted_key": "244YHfO_W7RMpQW81UjQrZcq5LSyqiPv",
#      "iv": "YihBoVOGsR1l7jCD",
#      "ciphertext": "qtPIMMaOBRgASL10dNQhOa7Gqrk7Eal1vwht7R4TT1uq-
#          arsVCPaIeFwQfzrSS6oEUWbBtxEasE0vC6r7sphyVziMCVJEuRJyoAHF
#          SP3eqQPb4Ic1SDSqyXjw_L3svybhHYUGyQuTmUQEDjgjJfBOifwHIsDs
#          RPeBz1NomqeifVPq5GTCWFo5k_MNIQURR2Wj0AHC2k7JZfu2iWjUHLF8
#          ExFZLZ4nlmsvJu_mvifMYiikfNfsZAudISOa6O73yPZtL04k_1FI7WDf
#          rb2w7OqKLWDXzlpcxohPVOLQwpA3mFNRKdY-bQz4Z4KX9lfz1cne31N4
#          -8BKmojpw-OdQjKdLOGkC445Fb_K1tlDQXw2sBF",
#      "tag": "e2m0Vm7JvjK2VpCKXS-kyg"
#    }

#                Figure 201: Flattened JWE JSON Serialization


# Miller                        Informational                   [Page 100]

# RFC 7520                      JOSE Cookbook                     May 2015


# 5.13.  Encrypting to Multiple Recipients

#    This example illustrates encryption content for multiple recipients.
#    As this example has multiple recipients, only the general JWE JSON
#    Serialization is possible.

#    Note that RSAES-PKCS1-v1_5 uses random data to generate the
#    ciphertext; it might not be possible to exactly replicate the results
#    in this section.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 5.13.1.  Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the Plaintext from Figure 72.

#    o  Recipient keys; this example uses the following:

#       *  The RSA public key from Figure 73 for the first recipient.

#       *  The EC public key from Figure 108 for the second recipient.

#       *  The AES symmetric key from Figure 138 for the third recipient.

#    o  Key encryption algorithms; this example uses the following:

#       *  "RSA1_5" for the first recipient.

#       *  "ECDH-ES+A256KW" for the second recipient.

#       *  "A256GCMKW" for the third recipient.

#    o  Content encryption algorithm; this example uses "A128CBC-HS256".

# 5.13.2.  Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 202.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 203.


# Miller                        Informational                   [Page 101]

# RFC 7520                      JOSE Cookbook                     May 2015


#    zXayeJ4gvm8NJr3IUInyokTUO-LbQNKEhe_zWlYbdpQ

#            Figure 202: Content Encryption Key, base64url-encoded

#    VgEIHY20EnzUtZFl2RpB1g

#            Figure 203: Initialization Vector, base64url-encoded

# 5.13.3.  Encrypting the Key to the First Recipient

#    Performing the "RSA1_5" key encryption operation over the CEK
#    (Figure 202) with the first recipient's RSA key (Figure 73) produces
#    the following Encrypted Key:

#    dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zjwj4w6Y5G4XJQsNNIBiqyvUUA
#    OcpL7S7-cFe7Pio7gV_Q06WmCSa-vhW6me4bWrBf7cHwEQJdXihidAYWVajJIa
#    KMXMvFRMV6iDlRr076DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-w
#    qjw0-b-S1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYS
#    rRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-d
#    bHcGlihqc_wGgho9fLMK8JOArYLcMDNQ

#          Figure 204: Recipient #1 Encrypted Key, base64url-encoded

#    The following is generated after encrypting the CEK for the first
#    recipient:

#    o  Recipient JWE Unprotected Header from Figure 205.

#    {
#      "alg": "RSA1_5",
#      "kid": "frodo.baggins@hobbiton.example"
#    }

#     Figure 205: Recipient #1 JWE Per-Recipient Unprotected Header JSON


# Miller                        Informational                   [Page 102]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The following is the assembled first recipient JSON:

#    {
#      "encrypted_key": "dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zjwj4w
#          6Y5G4XJQsNNIBiqyvUUAOcpL7S7-cFe7Pio7gV_Q06WmCSa-vhW6me4b
#          WrBf7cHwEQJdXihidAYWVajJIaKMXMvFRMV6iDlRr076DFthg2_AV0_t
#          SiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S1laS11QVbuP78dQ7
#          Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYSrRicJK5xodvWgkpIdk
#          MHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-dbHcGlihqc_wG
#          gho9fLMK8JOArYLcMDNQ",
#      "header": {
#        "alg": "RSA1_5",
#        "kid": "frodo.baggins@hobbiton.example"
#      }
#    }

#                        Figure 206: Recipient #1 JSON

# 5.13.4.  Encrypting the Key to the Second Recipient

#    The following is generated before encrypting the CEK for the second
#    recipient:

#    o  Ephemeral EC private key on the same curve as the EC public key;
#       this example uses the private key from Figure 207.

#    {
#      "kty": "EC",
#      "crv": "P-384",
#      "x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xAn2Dt
#          MRb25Ma2CX",
#      "y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pOMbw9
#          1fzZ84pbfm",
#      "d": "1DKHfTv-PiifVw2VBHM_ZiVcwOMxkOyANS_lQHJcrDxVY3jhVCvZPw
#          MxJKIE793C"
#    }

#      Figure 207: Ephemeral Private Key for Recipient #2, in JWK Format


# Miller                        Informational                   [Page 103]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the "ECDH-ES+A256KW" key encryption operation over the CEK
#    (Figure 202) with the following:

#    o  Static Elliptic Curve public key (Figure 108).

#    o  Ephemeral Elliptic Curve private key (Figure 207).

#    produces the following Encrypted Key:

#    ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHixJuw_elY4gSSId_w

#          Figure 208: Recipient #2 Encrypted Key, base64url-encoded

#    The following is generated after encrypting the CEK for the second
#    recipient:

#    o  Recipient JWE Unprotected Header from Figure 209.

#    {
#      "alg": "ECDH-ES+A256KW",
#      "kid": "peregrin.took@tuckborough.example",
#      "epk": {
#        "kty": "EC",
#        "crv": "P-384",
#        "x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xAn2
#            DtMRb25Ma2CX",
#        "y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pOMb
#            w91fzZ84pbfm"
#      }
#    }

#     Figure 209: Recipient #2 JWE Per-Recipient Unprotected Header JSON


# Miller                        Informational                   [Page 104]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The following is the assembled second recipient JSON:

#    {
#      "encrypted_key": "ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHixJuw
#          _elY4gSSId_w",
#      "header": {
#        "alg": "ECDH-ES+A256KW",
#        "kid": "peregrin.took@tuckborough.example",
#        "epk": {
#          "kty": "EC",
#          "crv": "P-384",
#          "x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xA
#              n2DtMRb25Ma2CX",
#          "y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pO
#              Mbw91fzZ84pbfm"
#        }
#      }
#    }

#                        Figure 210: Recipient #2 JSON

# 5.13.5.  Encrypting the Key to the Third Recipient

#    The following is generated before encrypting the CEK for the third
#    recipient:

#    o  Initialization Vector for key wrapping; this example uses the
#       Initialization Vector from Figure 211.

#    AvpeoPZ9Ncn9mkBn

#      Figure 211: Recipient #2 Initialization Vector for Key Wrapping,
#                              base64url-encoded

#    Performing the "A256GCMKW" key encryption operation over the CEK
#    (Figure 202) with the following:

#    o  AES symmetric key (Figure 138); and

#    o  Initialization Vector (Figure 211)

#    produces the following:

#    o  Encrypted Key from Figure 212.

#    o  Authentication Tag from Figure 213.


# Miller                        Informational                   [Page 105]

# RFC 7520                      JOSE Cookbook                     May 2015


#    a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-WyTpS1E

#          Figure 212: Recipient #3 Encrypted Key, base64url-encoded

#    59Nqh1LlYtVIhfD3pgRGvw

#       Figure 213: Recipient #3 Authentication Tag from Key Wrapping,
#                              base64url-encoded

#    The following is generated after encrypting the CEK for the third
#    recipient:

#    o  Recipient JWE Unprotected Header; this example uses the header
#       from Figure 214.

#    {
#      "alg": "A256GCMKW",
#      "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
#      "tag": "59Nqh1LlYtVIhfD3pgRGvw",
#      "iv": "AvpeoPZ9Ncn9mkBn"
#    }

#     Figure 214: Recipient #3 JWE Per-Recipient Unprotected Header JSON

#    The following is the assembled third recipient JSON:

#    {
#      "encrypted_key": "a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-WyTpS1
#          E",
#      "header": {
#        "alg": "A256GCMKW",
#        "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
#        "tag": "59Nqh1LlYtVIhfD3pgRGvw",
#        "iv": "AvpeoPZ9Ncn9mkBn"
#      }
#    }

#                        Figure 215: Recipient #3 JSON

# 5.13.6.  Encrypting the Content

#    The following is generated before encrypting the content:

#    o  JWE Protected Header; this example uses the header from
#       Figure 216, encoded to base64url [RFC4648] as Figure 217.


# Miller                        Informational                   [Page 106]

# RFC 7520                      JOSE Cookbook                     May 2015


#    {
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 216: JWE Protected Header JSON

#    eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0

#             Figure 217: JWE Protected Header, base64url-encoded

#    Performing the content encryption operation over the Plaintext
#    (Figure 72) with the following:

#    o  CEK (Figure 202),

#    o  Initialization Vector (Figure 203), and

#    o  JWE Protected Header (Figure 217) as the authenticated data

#    produces the following:

#    o  Ciphertext from Figure 218.

#    o  Authentication Tag from Figure 219.

#    ajm2Q-OpPXCr7-MHXicknb1lsxLdXxK_yLds0KuhJzfWK04SjdxQeSw2L9mu3a
#    _k1C55kCQ_3xlkcVKC5yr__Is48VOoK0k63_QRM9tBURMFqLByJ8vOYQX0oJW4
#    VUHJLmGhF-tVQWB7Kz8mr8zeE7txF0MSaP6ga7-siYxStR7_G07Thd1jh-zGT0
#    wxM5g-VRORtq0K6AXpLlwEqRp7pkt2zRM0ZAXqSpe1O6FJ7FHLDyEFnD-zDIZu
#    kLpCbzhzMDLLw2-8I14FQrgi-iEuzHgIJFIJn2wh9Tj0cg_kOZy9BqMRZbmYXM
#    Y9YQjorZ_P_JYG3ARAIF3OjDNqpdYe-K_5Q5crGJSDNyij_ygEiItR5jssQVH2
#    ofDQdLChtazE

#                  Figure 218: Ciphertext, base64url-encoded

#    BESYyFN7T09KY7i8zKs5_g

#              Figure 219: Authentication Tag, base64url-encoded


# Miller                        Informational                   [Page 107]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The following is generated after encrypting the Plaintext:

#    o  JWE Shared Unprotected Header parameters; this example uses the
#       header from Figure 220.

#    {
#      "cty": "text/plain"
#    }

#               Figure 220: JWE Shared Unprotected Header JSON

# 5.13.7.  Output Results

#    The following compose the resulting JWE object:

#    o  Recipient #1 JSON (Figure 206)

#    o  Recipient #2 JSON (Figure 210)

#    o  Recipient #3 JSON (Figure 215)

#    o  Initialization Vector (Figure 203)

#    o  Ciphertext (Figure 218)

#    o  Authentication Tag (Figure 219)

#    The JWE Compact Serialization is not presented because it does not
#    support this use case; the flattened JWE JSON Serialization is not
#    presented because there is more than one recipient.


# Miller                        Informational                   [Page 108]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zj
#              wj4w6Y5G4XJQsNNIBiqyvUUAOcpL7S7-cFe7Pio7gV_Q06WmCSa-
#              vhW6me4bWrBf7cHwEQJdXihidAYWVajJIaKMXMvFRMV6iDlRr076
#              DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S
#              1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbe
#              YSrRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n
#              5trGuExtp_-dbHcGlihqc_wGgho9fLMK8JOArYLcMDNQ",
#          "header": {
#            "alg": "RSA1_5",
#            "kid": "frodo.baggins@hobbiton.example"
#          }
#        },
#        {
#          "encrypted_key": "ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHi
#              xJuw_elY4gSSId_w",
#          "header": {
#            "alg": "ECDH-ES+A256KW",
#            "kid": "peregrin.took@tuckborough.example",
#            "epk": {
#              "kty": "EC",
#              "crv": "P-384",
#              "x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhs
#                  E2xAn2DtMRb25Ma2CX",
#              "y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEj
#                  I1pOMbw91fzZ84pbfm"
#            }
#          }
#        },
#        {
#          "encrypted_key": "a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-Wy
#              TpS1E",
#          "header": {
#            "alg": "A256GCMKW",
#            "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
#            "tag": "59Nqh1LlYtVIhfD3pgRGvw",
#            "iv": "AvpeoPZ9Ncn9mkBn"
#          }
#        }
#      ],
#      "unprotected": {
#        "cty": "text/plain"
#      },
#      "protected": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0",


# Miller                        Informational                   [Page 109]

# RFC 7520                      JOSE Cookbook                     May 2015


#      "iv": "VgEIHY20EnzUtZFl2RpB1g",
#      "ciphertext": "ajm2Q-OpPXCr7-MHXicknb1lsxLdXxK_yLds0KuhJzfWK
#          04SjdxQeSw2L9mu3a_k1C55kCQ_3xlkcVKC5yr__Is48VOoK0k63_QRM
#          9tBURMFqLByJ8vOYQX0oJW4VUHJLmGhF-tVQWB7Kz8mr8zeE7txF0MSa
#          P6ga7-siYxStR7_G07Thd1jh-zGT0wxM5g-VRORtq0K6AXpLlwEqRp7p
#          kt2zRM0ZAXqSpe1O6FJ7FHLDyEFnD-zDIZukLpCbzhzMDLLw2-8I14FQ
#          rgi-iEuzHgIJFIJn2wh9Tj0cg_kOZy9BqMRZbmYXMY9YQjorZ_P_JYG3
#          ARAIF3OjDNqpdYe-K_5Q5crGJSDNyij_ygEiItR5jssQVH2ofDQdLCht
#          azE",
#      "tag": "BESYyFN7T09KY7i8zKs5_g"
#    }

#                 Figure 221: General JWE JSON Serialization

# 6.  Nesting Signatures and Encryption

#    This example illustrates nesting a JSON Web Signature (JWS) structure
#    within a JSON Web Encryption (JWE) structure.  The signature uses the
#    "PS256" (RSASSA-PSS) algorithm; the encryption uses the "RSA-OAEP"
#    (RSAES-OAEP) key encryption algorithm and the "A128GCM" (AES-GCM)
#    content encryption algorithm.

#    Note that RSASSA-PSS uses random data to generate the signature, and
#    RSAES-OAEP uses random data to generate the ciphertext; it might not
#    be possible to exactly replicate the results in this section.

#    Note that whitespace is added for readability as described in
#    Section 1.1.

# 6.1.  Signing Input Factors

#    The following are supplied before beginning the signing operation:

#    o  Payload content; this example uses the JSON Web Token [JWT]
#       content from Figure 222, encoded as base64url [RFC4648] to produce
#       Figure 223.

#    o  RSA private key; this example uses the key from Figure 224.

#    o  "alg" parameter of "PS256".

#    {
#      "iss": "hobbiton.example",
#      "exp": 1300819380,
#      "http://example.com/is_root": true
#    }

#                 Figure 222: Payload Content, in JSON Format


# Miller                        Informational                   [Page 110]

# RFC 7520                      JOSE Cookbook                     May 2015


#    eyJpc3MiOiJob2JiaXRvbi5leGFtcGxlIiwiZXhwIjoxMzAwODE5MzgwLCJodH
#    RwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZX0

#               Figure 223: Payload Content, base64url-encoded

#    {
#      "kty": "RSA",
#      "kid": "hobbiton.example",
#      "use": "sig",
#      "n": "kNrPIBDXMU6fcyv5i-QHQAQ-K8gsC3HJb7FYhYaw8hXbNJa-t8q0lD
#          KwLZgQXYV-ffWxXJv5GGrlZE4GU52lfMEegTDzYTrRQ3tepgKFjMGg6I
#          y6fkl1ZNsx2gEonsnlShfzA9GJwRTmtKPbk1s-hwx1IU5AT-AIelNqBg
#          cF2vE5W25_SGGBoaROVdUYxqETDggM1z5cKV4ZjDZ8-lh4oVB07bkac6
#          LQdHpJUUySH_Er20DXx30Kyi97PciXKTS-QKXnmm8ivyRCmux22ZoPUi
#          nd2BKC5OiG4MwALhaL2Z2k8CsRdfy-7dg7z41Rp6D0ZeEvtaUp4bX4aK
#          raL4rTfw",
#      "e": "AQAB",
#      "d": "ZLe_TIxpE9-W_n2VBa-HWvuYPtjvxwVXClJFOpJsdea8g9RMx34qEO
#          EtnoYc2un3CZ3LtJi-mju5RAT8YSc76YJds3ZVw0UiO8mMBeG6-iOnvg
#          obobNx7K57-xjTJZU72EjOr9kB7z6ZKwDDq7HFyCDhUEcYcHFVc7iL_6
#          TibVhAhOFONWlqlJgEgwVYd0rybNGKifdnpEbwyHoMwY6HM1qvnEFgP7
#          iZ0YzHUT535x6jj4VKcdA7ZduFkhUauysySEW7mxZM6fj1vdjJIy9LD1
#          fIz30Xv4ckoqhKF5GONU6tNmMmNgAD6gIViyEle1PrIxl1tBhCI14bRW
#          -zrpHgAQ",
#      "p": "yKWYoNIAqwMRQlgIBOdT1NIcbDNUUs2Rh-pBaxD_mIkweMt4Mg-0-B
#          2iSYvMrs8horhonV7vxCQagcBAATGW-hAafUehWjxWSH-3KccRM8toL4
#          e0q7M-idRDOBXSoe7Z2-CV2x_ZCY3RP8qp642R13WgXqGDIM4MbUkZSj
#          cY9-c",
#      "q": "uND4o15V30KDzf8vFJw589p1vlQVQ3NEilrinRUPHkkxaAzDzccGgr
#          WMWpGxGFFnNL3w5CqPLeU76-5IVYQq0HwYVl0hVXQHr7sgaGu-483Ad3
#          ENcL23FrOnF45m7_2ooAstJDe49MeLTTQKrSIBl_SKvqpYvfSPTczPcZ
#          kh9Kk",
#      "dp": "jmTnEoq2qqa8ouaymjhJSCnsveUXnMQC2gAneQJRQkFqQu-zV2PKP
#          KNbPvKVyiF5b2-L3tM3OW2d2iNDyRUWXlT7V5l0KwPTABSTOnTqAmYCh
#          Gi8kXXdlhcrtSvXldBakC6saxwI_TzGGY2MVXzc2ZnCvCXHV4qjSxOrf
#          P3pHFU",
#      "dq": "R9FUvU88OVzEkTkXl3-5-WusE4DjHmndeZIlu3rifBdfLpq_P-iWP
#          BbGaq9wzQ1c-J7SzCdJqkEJDv5yd2C7rnZ6kpzwBh_nmL8zscAk1qsun
#          nt9CJGAYz7-sGWy1JGShFazfP52ThB4rlCJ0YuEaQMrIzpY77_oLAhpm
#          DA0hLk",
#      "qi": "S8tC7ZknW6hPITkjcwttQOPLVmRfwirRlFAViuDb8NW9CrV_7F2Oq
#          UZCqmzHTYAumwGFHI1WVRep7anleWaJjxC_1b3fq_al4qH3Pe-EKiHg6
#          IMazuRtZLUROcThrExDbF5dYbsciDnfRUWLErZ4N1Be0bnxYuPqxwKd9
#          QZwMo0"
#    }

#             Figure 224: RSA 2048-Bit Private Key, in JWK Format


# Miller                        Informational                   [Page 111]

# RFC 7520                      JOSE Cookbook                     May 2015


# 6.2.  Signing Operation

#    The following is generated to complete the signing operation:

#    o  JWS Protected Header; this example uses the header from
#       Figure 225, encoded using base64url [RFC4648] to produce
#       Figure 226.

#    {
#      "alg": "PS256",
#      "typ": "JWT"
#    }

#                    Figure 225: JWS Protected Header JSON

#    eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9

#             Figure 226: JWS Protected Header, base64url-encoded

#    Performing the signature operation over the combined JWS Protected
#    Header (Figure 226) and payload content (Figure 222) produces the
#    following signature:

#    dPpMqwRZxFYi1UfcDAaf8M99o7kwUWtiXZ-ByvVuJih4MhJ_aZqciprz0OWaIA
#    kIvn1qskChirjKvY9ESZNUCP4JjvfyPS-nqjJxYoA5ztWOyFk2cZNIPXjcJXSQ
#    wXPO9tEe-v4VSqgD0aKHqPxYog4N6Cz1lKph1U1sYDSI67_bLL7elg_vkjfMp5
#    _W5l5LuUYGMeh6hxQIaIUXf9EwV2JmvTMuZ-vBOWy0Sniy1EFo72CRTvmtrIf5
#    AROo5MNliY3KtUxeP-SOmD-LEYwW9SlkohYzMVAZDDOrVbv7KVRHpeYNaK75KE
#    QqdCEEkS_rskZS-Qtt_nlegTWh1mEYaA

#                Figure 227: JWS Signature, base64url-encoded

# 6.3.  Signing Output

#    The following compose the resulting JWS object:

#    o  JWS Protected Header (Figure 226)

#    o  Payload content (Figure 223)

#    o  Signature (Figure 227)


# Miller                        Informational                   [Page 112]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWS object using the JWS Compact Serialization (which
#    is the plaintext input to the following encryption operation):

#    eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9
#    .
#    eyJpc3MiOiJob2JiaXRvbi5leGFtcGxlIiwiZXhwIjoxMzAwODE5MzgwLCJodH
#    RwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZX0
#    .
#    dPpMqwRZxFYi1UfcDAaf8M99o7kwUWtiXZ-ByvVuJih4MhJ_aZqciprz0OWaIA
#    kIvn1qskChirjKvY9ESZNUCP4JjvfyPS-nqjJxYoA5ztWOyFk2cZNIPXjcJXSQ
#    wXPO9tEe-v4VSqgD0aKHqPxYog4N6Cz1lKph1U1sYDSI67_bLL7elg_vkjfMp5
#    _W5l5LuUYGMeh6hxQIaIUXf9EwV2JmvTMuZ-vBOWy0Sniy1EFo72CRTvmtrIf5
#    AROo5MNliY3KtUxeP-SOmD-LEYwW9SlkohYzMVAZDDOrVbv7KVRHpeYNaK75KE
#    QqdCEEkS_rskZS-Qtt_nlegTWh1mEYaA

#                    Figure 228: JWS Compact Serialization

# 6.4.  Encryption Input Factors

#    The following are supplied before beginning the encryption process:

#    o  Plaintext content; this example uses the content from Figure 228.

#    o  RSA public key; this example uses the key from Figure 84.

#    o  "alg" parameter of "RSA-OAEP".

#    o  "enc" parameter of "A128GCM".

# 6.5.  Encryption Generated Factors

#    The following are generated before encrypting:

#    o  AES symmetric key as the Content Encryption Key (CEK); this
#       example uses the key from Figure 229.

#    o  Initialization Vector; this example uses the Initialization Vector
#       from Figure 230.

#    0RHSNYwN-6-2QBGsYTZLSQ

#            Figure 229: Content Encryption Key, base64url-encoded

#    GbX1i9kXz0sxXPmA

#            Figure 230: Initialization Vector, base64url-encoded


# Miller                        Informational                   [Page 113]

# RFC 7520                      JOSE Cookbook                     May 2015


# 6.6.  Encrypting the Key

#    Performing the key encryption operation over the CEK (Figure 229)
#    with the RSA key (Figure 84) produces the following Encrypted Key:

#    a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVhjurCyrBg3I7YhCRYjphDOOS4
#    E7rXbr2Fn6NyQq-A-gqT0FXqNjVOGrG-bi13mwy7RoYhjTkBEC6P7sMYMXXx4g
#    zMedpiJHQVeyI-zkZV7A9matpgevAJWrXzOUysYGTtwoSN6gtUVtlLaivjvb21
#    O0ul4YxSHV-ByK1kyeetRp_fuYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e5I
#    R7nany-25_UmC2urosNkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5o6yV64x6yzDU
#    F_5JCIdl-Qv6H5dMVIY7q1eKpXcV1lWO_2FefEBqXxXvIjLeZivjNkzogCq3-I
#    apSjVFnMjBxjpYLT8muaawo1yy1XXMuinIpNcOY3n4KKrXLrCcteX85m4IIHMZ
#    a38s1Hpr56fPPseMA-Jltmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3kJusAa
#    mBKOYwfk7JhLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15qJIEXNJtqnblp
#    ymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TXuPC8yDDhi1smxS_X_x
#    pkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX2Fo_GnVrNwlK7Lgxw6FSQvDO
#    0

#                Figure 231: Encrypted Key, base64url-encoded

# 6.7.  Encrypting the Content

#    The following is generated before encrypting the Plaintext:

#    o  JWE Protected Header; this example uses the header from
#       Figure 232, encoded using base64url [RFC4648] to produce
#       Figure 233.

#    {
#      "alg": "RSA-OAEP",
#      "cty": "JWT",
#      "enc": "A128GCM"
#    }

#                    Figure 232: JWE Protected Header JSON

#    eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYyI6IkExMjhHQ00ifQ

#             Figure 233: JWE Protected Header, base64url-encoded


# Miller                        Informational                   [Page 114]

# RFC 7520                      JOSE Cookbook                     May 2015


#    Performing the content encryption operation over the Plaintext
#    (Figure 228) with the following:

#    o  CEK (Figure 229);

#    o  Initialization Vector (Figure 230); and

#    o  JWE Protected Header (Figure 233) as authenticated data

#    produces the following:

#    o  Ciphertext from Figure 234.

#    o  Authentication Tag from Figure 235.

#    SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBNgCe2OFMf66cSJ8k2Q
#    kxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAvVLsAXB0_UTCBGyBg3C2bWLX
#    qZlfJAAoJRUPRk-BimYZY81zVBuIhc7HsQePCpu33SzMsFHjn4lP_idrJz_glZ
#    TNgKDt8zdnUPauKTKDNOH1DD4fuzvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9C
#    hMPqW1QNhzuX_Zul3bvrJwr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEa
#    ulV18l4Fg9tLejdkAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2
#    zI3Q_1sYjKUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUr
#    lx4gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gYjLf
#    hn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5XmnwZMyNc
#    9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMxtlMizR88NKU1WkB
#    siXMCjy1Noue7MD-ShDp5dmM

#                  Figure 234: Ciphertext, base64url-encoded

#    KnIKEhN8U-3C9s4gtSpjSw

#              Figure 235: Authentication Tag, base64url-encoded

# 6.8.  Encryption Output

#    The following compose the resulting JWE object:

#    o  JWE Protected Header (Figure 233)

#    o  Encrypted Key (Figure 231)

#    o  Initialization Vector (Figure 230)

#    o  Ciphertext (Figure 234)

#    o  Authentication Tag (Figure 235)


# Miller                        Informational                   [Page 115]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the JWE Compact Serialization:

#    eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYyI6IkExMjhHQ00ifQ
#    .
#    a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVhjurCyrBg3I7YhCRYjphDOOS4
#    E7rXbr2Fn6NyQq-A-gqT0FXqNjVOGrG-bi13mwy7RoYhjTkBEC6P7sMYMXXx4g
#    zMedpiJHQVeyI-zkZV7A9matpgevAJWrXzOUysYGTtwoSN6gtUVtlLaivjvb21
#    O0ul4YxSHV-ByK1kyeetRp_fuYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e5I
#    R7nany-25_UmC2urosNkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5o6yV64x6yzDU
#    F_5JCIdl-Qv6H5dMVIY7q1eKpXcV1lWO_2FefEBqXxXvIjLeZivjNkzogCq3-I
#    apSjVFnMjBxjpYLT8muaawo1yy1XXMuinIpNcOY3n4KKrXLrCcteX85m4IIHMZ
#    a38s1Hpr56fPPseMA-Jltmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3kJusAa
#    mBKOYwfk7JhLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15qJIEXNJtqnblp
#    ymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TXuPC8yDDhi1smxS_X_x
#    pkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX2Fo_GnVrNwlK7Lgxw6FSQvDO
#    0
#    .
#    GbX1i9kXz0sxXPmA
#    .
#    SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBNgCe2OFMf66cSJ8k2Q
#    kxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAvVLsAXB0_UTCBGyBg3C2bWLX
#    qZlfJAAoJRUPRk-BimYZY81zVBuIhc7HsQePCpu33SzMsFHjn4lP_idrJz_glZ
#    TNgKDt8zdnUPauKTKDNOH1DD4fuzvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9C
#    hMPqW1QNhzuX_Zul3bvrJwr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEa
#    ulV18l4Fg9tLejdkAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2
#    zI3Q_1sYjKUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUr
#    lx4gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gYjLf
#    hn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5XmnwZMyNc
#    9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMxtlMizR88NKU1WkB
#    siXMCjy1Noue7MD-ShDp5dmM
#    .
#    KnIKEhN8U-3C9s4gtSpjSw

#                    Figure 236: JWE Compact Serialization


# Miller                        Informational                   [Page 116]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the general JWE JSON Serialization:

#    {
#      "recipients": [
#        {
#          "encrypted_key": "a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVh
#              jurCyrBg3I7YhCRYjphDOOS4E7rXbr2Fn6NyQq-A-gqT0FXqNjVO
#              GrG-bi13mwy7RoYhjTkBEC6P7sMYMXXx4gzMedpiJHQVeyI-zkZV
#              7A9matpgevAJWrXzOUysYGTtwoSN6gtUVtlLaivjvb21O0ul4YxS
#              HV-ByK1kyeetRp_fuYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e
#              5IR7nany-25_UmC2urosNkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5
#              o6yV64x6yzDUF_5JCIdl-Qv6H5dMVIY7q1eKpXcV1lWO_2FefEBq
#              XxXvIjLeZivjNkzogCq3-IapSjVFnMjBxjpYLT8muaawo1yy1XXM
#              uinIpNcOY3n4KKrXLrCcteX85m4IIHMZa38s1Hpr56fPPseMA-Jl
#              tmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3kJusAamBKOYwfk7J
#              hLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15qJIEXNJtqnblp
#              ymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TXuPC8yDDh
#              i1smxS_X_xpkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX2Fo_
#              GnVrNwlK7Lgxw6FSQvDO0"
#        }
#      ],
#      "protected": "eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYy
#          I6IkExMjhHQ00ifQ",
#      "iv": "GbX1i9kXz0sxXPmA",
#      "ciphertext": "SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBN
#          gCe2OFMf66cSJ8k2QkxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAv
#          VLsAXB0_UTCBGyBg3C2bWLXqZlfJAAoJRUPRk-BimYZY81zVBuIhc7Hs
#          QePCpu33SzMsFHjn4lP_idrJz_glZTNgKDt8zdnUPauKTKDNOH1DD4fu
#          zvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9ChMPqW1QNhzuX_Zul3bvrJ
#          wr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEaulV18l4Fg9tLejd
#          kAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2zI3Q_1sYj
#          KUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUrlx4
#          gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gY
#          jLfhn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5
#          XmnwZMyNc9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMx
#          tlMizR88NKU1WkBsiXMCjy1Noue7MD-ShDp5dmM",
#      "tag": "KnIKEhN8U-3C9s4gtSpjSw"
#    }

#                 Figure 237: General JWE JSON Serialization


# Miller                        Informational                   [Page 117]

# RFC 7520                      JOSE Cookbook                     May 2015


#    The resulting JWE object using the flattened JWE JSON Serialization:

#    {
#      "encrypted_key": "a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVhjurC
#          yrBg3I7YhCRYjphDOOS4E7rXbr2Fn6NyQq-A-gqT0FXqNjVOGrG-bi13
#          mwy7RoYhjTkBEC6P7sMYMXXx4gzMedpiJHQVeyI-zkZV7A9matpgevAJ
#          WrXzOUysYGTtwoSN6gtUVtlLaivjvb21O0ul4YxSHV-ByK1kyeetRp_f
#          uYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e5IR7nany-25_UmC2uros
#          NkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5o6yV64x6yzDUF_5JCIdl-Qv6
#          H5dMVIY7q1eKpXcV1lWO_2FefEBqXxXvIjLeZivjNkzogCq3-IapSjVF
#          nMjBxjpYLT8muaawo1yy1XXMuinIpNcOY3n4KKrXLrCcteX85m4IIHMZ
#          a38s1Hpr56fPPseMA-Jltmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3
#          kJusAamBKOYwfk7JhLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15q
#          JIEXNJtqnblpymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TX
#          uPC8yDDhi1smxS_X_xpkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX
#          2Fo_GnVrNwlK7Lgxw6FSQvDO0",
#      "protected": "eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYy
#          I6IkExMjhHQ00ifQ",
#      "iv": "GbX1i9kXz0sxXPmA",
#      "ciphertext": "SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBN
#          gCe2OFMf66cSJ8k2QkxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAv
#          VLsAXB0_UTCBGyBg3C2bWLXqZlfJAAoJRUPRk-BimYZY81zVBuIhc7Hs
#          QePCpu33SzMsFHjn4lP_idrJz_glZTNgKDt8zdnUPauKTKDNOH1DD4fu
#          zvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9ChMPqW1QNhzuX_Zul3bvrJ
#          wr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEaulV18l4Fg9tLejd
#          kAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2zI3Q_1sYj
#          KUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUrlx4
#          gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gY
#          jLfhn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5
#          XmnwZMyNc9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMx
#          tlMizR88NKU1WkBsiXMCjy1Noue7MD-ShDp5dmM",
#      "tag": "KnIKEhN8U-3C9s4gtSpjSw"
#    }

#                Figure 238: Flattened JWE JSON Serialization


# Miller                        Informational                   [Page 118]

# RFC 7520                      JOSE Cookbook                     May 2015


# 7.  Security Considerations

#    This document is designed to provide examples for developers to use
#    in checking their implementations.  As such, it does not follow some
#    of the security considerations and recommendations in the core
#    documents (i.e., [JWS], [JWE], [JWK], and [JWA]).  For instance:

#    o  it does not always generate a new CEK value for every encrypted
#       example;

#    o  it does not always generate a new Initialization Vector (IV) value
#       for every encrypted example; and

#    o  it does not always generate a new ephemeral key for every
#       ephemeral key example.

#    For each example, data that is expected to be generated for each
#    signing or encryption operation is isolated to sections titled
#    "Generated Factors".

# 8.  References

# 8.1.  Normative References

#    [JWA]      Jones, M., "JSON Web Algorithms (JWA)", RFC 7518,
#               DOI 10.17487/RFC7518, May 2015,
#               <http://www.rfc-editor.org/info/rfc7518>.

#    [JWE]      Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)",
#               RFC 7516, DOI 10.17487/RFC7516, May 2015,
#               <http://www.rfc-editor.org/info/rfc7516>.

#    [JWK]      Jones, M., "JSON Web Key (JWK)", RFC 7517,
#               DOI 10.17487/RFC7517, May 2015,
#               <http://www.rfc-editor.org/info/rfc7517>.

#    [JWS]      Jones, M., Bradley, J., and N. Sakimura, "JSON Web
#               Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May
#               2015, <http://www.rfc-editor.org/info/rfc7515>.

#    [RFC4648]  Josefsson, S., "The Base16, Base32, and Base64 Data
#               Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
#               <http://www.rfc-editor.org/info/rfc4648>.


# Miller                        Informational                   [Page 119]

# RFC 7520                      JOSE Cookbook                     May 2015


# 8.2.  Informative References

#    [JWT]      Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
#               (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015,
#               <http://www.rfc-editor.org/info/rfc7519>.

#    [LOTR-FELLOWSHIP]
#               Tolkien, J., "The Fellowship of the Ring", HarperCollins
#               Publishers, ePub Edition, ISBN 9780061952838, March 2009.

#    [RFC1951]  Deutsch, P., "DEFLATE Compressed Data Format Specification
#               version 1.3", RFC 1951, DOI 10.17487/RFC1951, May 1996,
#               <http://www.rfc-editor.org/info/rfc1951>.

#    [RFC7095]  Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095,
#               DOI 10.17487/RFC7095, January 2014,
#               <http://www.rfc-editor.org/info/rfc7095>.

# Acknowledgements

#    Most of the examples herein use quotes and character names found in
#    the novel "The Fellowship of the Ring" [LOTR-FELLOWSHIP], written by
#    J. R. R. Tolkien.

#    Thanks to Richard Barnes, Brian Campbell, Mike Jones, and Jim Schaad
#    for their input and review of the text.  Thanks to Brian Campbell for
#    verifying the Compact Serialization examples.

# Author's Address

#    Matthew Miller
#    Cisco Systems, Inc.

#    EMail: mamille2@cisco.com


# Miller                        Informational                   [Page 120]


# Html markup produced by rfcmarkup 1.116, available from https://tools.ietf.org/tools/rfcmarkup/
