<gh_stars>1-10

# Disable flake8 reporting
# flake8: noqa

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)                         <NAME>
# 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": "<EMAIL>",
#      "use": "sig",
#      "crv": "P-521",
#      "x": "<KEY>
#          <KEY>",
#      "y": "<KEY>
#          <KEY>"
#    }

ec_public_key = {
    "kty": "EC",
    "kid": "<EMAIL>",
    "use": "sig",
    "crv": "P-521",
    "x": "<KEY>",
    "y": "<KEY>"
}

#                  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": "<EMAIL>",
#      "use": "sig",
#      "crv": "P-521",
#      "x": "<KEY>
#          <KEY>",
#      "y": "<KEY>QHiraVy
#          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": "<EMAIL>.example",
#      "use": "sig",
#      "n": "<KEY>
#          -<KEY>
#          wGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-
#          oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde
#          3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuC
#          L<KEY>g
#          HdrNP5zw",
#      "e": "AQAB"
#    }

rsa_public_jwk = {
    "kty": "RSA",
    "kid": "<EMAIL>",
    "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": "<EMAIL>",
#      "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": "<KEY>
#          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": "<KEY>
#          AMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJK
#          bi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdK
#          T1cYF8",
#      "qi": "<KEY>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": "<KEY>",
#      "use": "sig",
#      "alg": "HS256",
#      "k": "<KEY>"
#    }

hmac_key = {
    "kty": "oct",
    "kid": "<KEY>",
    "use": "sig",
    "alg": "HS256",
    "k": "<KEY>"
}

#                    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": "<KEY>"
#    }

#               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": "<EMAIL>"
#    }

#                     Figure 9: JWS Protected Header JSON







# Miller                        Informational                    [Page 12]

# RFC 7520                      JOSE Cookbook                     May 2015


#    <KEY>
#    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).

#    <KEY>
#    hhbXBsZSJ9
#    .
#    SXTigJlzIG<KEY>IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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:

#    <KEY>
#    <KEY>
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdG<KEY>
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
#    .
#    MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK
#    ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J
#    IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w
#    W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP
#    xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f
#    cIe8u9ipH84ogoree7vjbU5y18kDquDg

#                    Figure 13: JWS Compact Serialization

class TestFourOneThree:

    token = "<KEY>iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg"

    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
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>
#              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": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>
#          ZiB0by4",
#      "protected": "<KEY>",
#      "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": "<EMAIL>"
#    }

#                    Figure 16: JWS Protected Header JSON

#    <KEY>
#    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).

#    <KEY>
#    <KEY>
#    .
#    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:

#    <KEY>
#    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": "<KEY>
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>              <KEY>",
#          "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": "SXTigJlzIG<KEY>IGJ1c2luZXNzLCBGcm9kbywg
#          <KEY>
#          <KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "<KEY>
#          <KEY>",
#      "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": "<EMAIL>"
#    }

#                    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).

#    <KEY>
#    <KEY>9
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    <KEY>
#    <KEY>

#                        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:

#    <KEY>
#    <KEY>
#    .
#    S<KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvb
#    u9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kv
#    AD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2

#                    Figure 27: JWS Compact Serialization


class TestFourThreeThree:

    token = "<KEY>"

    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": "S<KEY>
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>
#              <KEY>",
#          "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": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>
#          ZiB0by4",
#      "protected": "<KEY>",
#      "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).

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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:

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    S<KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                    Figure 34: JWS Compact Serialization


class TestFourFourThree:

    token = "<KEY>"

    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": "<KEY>
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>
#              <KEY>",
#          "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
#              0"
#        }
#      ]
#    }

#                  Figure 35: General JWS JSON Serialization

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

#    {
#      "payload": "<KEY>
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "<KEY>
#          <KEY>",
#      "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

#    <KEY>
#    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).

#    <KEY>
#    <KEY>
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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:

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    .
#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                  Figure 41: General JWS JSON Serialization

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

#    {
#      "signatures": [
#        {
#          "protected": "<KEY>
#              <KEY>",
#          "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": "<KEY>
#          <KEY>",
#      "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).

#    <KEY>
#    <KEY>

#                        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": "<KEY>
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IG<KEY>IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>",
#          "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": "S<KEY>
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "<KEY>",
#      "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": "<KEY>
#          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": "<EMAIL>"
#    }

#             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": "<KEY>",
#      "header": {
#        "kid": "<EMAIL>"
#      },
#      "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": "<EMAIL>"
#    }

#             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": "<EMAIL>"
#      },
#      "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

#    <KEY>
#    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).

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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": "<KEY>
#          <KEY>",
#      "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": "<EMAIL>"
#          },
#          "signature": "MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5Nvy
#              G53uoimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFc
#              ryNFiHkSw129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc
#              -1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdM
#              ma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBC
#              XbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK6
#              4jU6_TPtQHiJeQJxz9G3Tx-083B745_AfYOnlC9w"
#        },
#        {
#          "header": {
#            "alg": "ES512",
#            "kid": "<EMAIL>"
#          },
#          "signature": "ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhc
#              dCoFZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8Ob
#              LfTvNCrqcI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8b
#              AWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD"
#        },
#        {
#          "protected": "<KEY>
#              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": "<EMAIL>",
#      "use": "enc",
#      "n": "maxhbsmBtdQ3CNrKvprUE6n9lYcregDMLYNeTAWcLj8NnPU9XIYegT
#          HVHQjxKDSHP2l-F5jS7sppG1wgdAqZyhnWvXhYNvcM7RfgKxqNx_xAHx
#          6f3yy7s-M9PSNCwPC2lh6UAkR4I00EhV9lrypM9Pi4lBUop9t5fS9W5U
#          NwaAllhrd-osQGPjIeI1deHTwx-ZTHu3C60Pu_LJIl6hKn9wbwaUmA4c
#          R5Bd2pgbaY7ASgsjCUbtYJaNIHSoHXprUdJZKUMAzV0WOKPfA6OPI4oy
#          pBadjvMZ4ZAj3BnXaSYsEZhaueTXvZB4eZOAjIyh2e_VOIKVMsnDrJYA
#          VotGlvMQ",
#      "e": "AQAB",
#      "d": "<KEY>
#          bQ1PLAHmpIbNTztfrheoAniRV1NCIqXaW_qS461xiDTp4ntEPnqcKsyO
#          5jMAji7-CL8vhpYYowNFvIesgMoVaPRYMYT9TW63hNM0aWs7USZ_hLg6
#          O<KEY>
#          1GFULimrRdndm-P8q8kvN3KHlNAtEgrQAgTTgz80S-3VD0FgWfgnb1PN
#          miuPUxO8OpI9KDIfu_acc6fg14nsNaJqXe6RESvhGPH2afjHqSy_Fd2v
#          pzj85bQQ",
#      "p": "<KEY>
#          <KEY>
#          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": "<KEY>
#          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:

#    <KEY>
#    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": "<EMAIL>",
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 77: JWE Protected Header JSON

#    eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW5zQGhvYmJpdG9uLm
#    V4YW1wbG<KEY>

#             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:

#    eyJhbG<KEY>
#    V<KEY>
#    .
#    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": "<KEY>
#              TihJBuuzxg0V7yk1WClnQePFvG2K-pvSlWc9BRIazDrn50RcRai_
#              _3TDON395H3c62tIouJJ4XaRvYHFjZTZ2GXfz8YAImcc91Tfk0WX
#              C2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcGTSLUeeCt
#              36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8
#              VlzNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx
#              1BpyIfgvfjOhMBs9M8XL223Fg47xlGsMXdfuY-4jaqVw"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>
#          0",
#      "iv": "bbd5sTkYwhAIqfHsx8DayA",
#      "ciphertext": "<KEY>
#          JhJvGZ4_FNVSiGc_raa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wn
#          I<KEY>
#          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": "<KEY>
#          0",
#      "encrypted_key": "<KEY>          <KEY>
#          <KEY>
#          oZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8VlzNmoxaGMny3YnGir5W
#          f6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOhMBs9M8XL223F
#          g47xlGsMXdfuY-4jaqVw",
#      "iv": "bbd5sTkYwhAIqfHsx8DayA",
#      "ciphertext": "<KEY>
#          J<KEY>
#          I<KEY>8GLOpRc
#          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": "<EMAIL>",
#      "use": "enc",
#      "n": "wbdxI55VaanZXPY29Lg5hdmv2XhvqAhoxUkanfzf2-5zVUxa6prHRr
#          I4pP1AhoqJRlZfYtWWd5mmHRG2pAHIlh0ySJ9wi0BioZBl1XP2e-C-Fy
#          XJGcTy0HdKQWlrfhTm42EW7Vv04r4gfao6uxjLGwfpGrZLarohiWCPnk
#          N<KEY>mIy2tl_VWgGnL22GplyXj5YlBLdxXp3XeSt
#          sqo571utNfoUTU8E4qdzJ<KEY>sMwlmmnJiwA7sXRItBCivR4M
#          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": "<KEY>
#          <KEY>
#          J_ia5mxjxNjS6E2yD44USo2JmHvzeeNczq25elqbTPLhUpGo1IZuG72F
#          Z<KEY>i
#          X<KEY>wPvj6V9iDSgjj8SozSM0dLtxvu0LIeIQAeEgT_yXcrKGm
#          pKdSO08kLBx8VUjkbv_3Pn20Gyu2YEuwpFlM_H1NikuxJNKFGmnAq9Lc
#          nwwT0jvoQ",
#      "dq": "<KEY>
#          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:

#    <KEY>
#    <KEY>
#    <KEY>
#    -A<KEY>
#    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": "<EMAIL>",
#      "enc": "A256GCM"
#    }

#                    Figure 88: JWE Protected Header JSON

#    <KEY>
#    <KEY>

#             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:

#    <KEY>
#    <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
#    .
#    -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": "<KEY>              <KEY>
#              <KEY>
#              <KEY>
#              uo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8B
#              <KEY>
#              asnuHtVMt2pKIIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq
#              5pGqFmW2k8zpO878TRlZx7pZfPYDSXZyS0CfKKkMozT_qiCwZTSz
#              4duYnt8hS4Z9sGthXn9uDqd6wycMagnQfOTs_lycTWmY-aqWVDKh
#              jYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe38UjQb0lvXn
#              1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
#              06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8a
#              KaOnx6ASE5Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xD
#              EdHAVCGRzN3woEI2ozDRs"
#        }
#      ],
#      "protected": "<KEY>",
#      "iv": "-nBoKLH0YkLZPSI9",
#      "ciphertext": "<KEY>
#          U<KEY>x
#          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": "<KEY>",
#      "encrypted_key": "<KEY>          <KEY>
#          <KEY>
#          <KEY>
#          X<KEY>JE
#          Bz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pKIIfux5BC6huI
#          vmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7pZfPYD
#          <KEY>Q
#          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": "<KEY>"
#        }
#      ]
#    }

#                        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:

#    <KEY>

#                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

#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    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": "<KEY>              tFPWdgtURtmeDV1g"
#        }
#      ],
#      "protected": "<KEY>",
#      "iv": "VBiCzVHNoLiR3F4V82uoTQ",
#      "ciphertext": "<KEY>
#          <KEY>
#          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": "<KEY>
#          <KEY>
#          <KEY>",
#      "encrypted_key": "<KEY>",
#      "iv": "VBiCzVHNoLiR3F4V82uoTQ",
#      "ciphertext": "23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2
#          nsnGIX86vMXqIi6IRsfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpD
#          jEYCNA_XOmzg8yZR9oyjo6lTF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_
#          hkBsnuoqoM3dwejXBtIodN84PeqMb6asmas_dpSsz7H10fC5ni9xIz42
#          4givB1YLldF6exVmL93R3fOoOJbmk2GBQZL_SEGllv2cQsBgeprARsaQ
#          7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKdPQMTlVJKkqtV4Ru
#          5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrokAKYPqmXUe
#          RdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-zl5
#          tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdT
#          <KEY>",
#      "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": "<EMAIL>",
#      "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:

#    <KEY>

#                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": "<EMAIL>",
#      "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


#    <KEY>
#    <KEY>
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          B4b3dyZF9vWXpCbWF6LUdLRlp1NHhBRkZrYllpV2d1dEVLNml1RURzUT
#          Z3TmRO<KEY>
#          <KEY>
#          <KEY>",
#      "iv": "mH-G2zVqgztUtnW_",
#      "ciphertext": "<KEY>          <KEY>
#          <KEY>
#          jMwbKkTe2yK3mjF6SBAsgicQDVCkcY9BLluzx1RmC3ORXaM0JaHPB93Y
#          cdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w03XdLkjXIuEr2hWgeP-nkU
#          Z<KEY>
#          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": "<KEY>",
#      "encrypted_key": "<KEY>",
#      "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": "<EMAIL>",
#      "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": "<KEY>",
#      "y": "<KEY>",
#      "d": "<KEY>"
#    }

#              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": "<EMAIL>",
#      "epk": {
#        "kty": "EC",
#        "crv": "P-256",
#        "x": "<KEY>",
#        "y": "<KEY>"
#      },
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 124: JWE Protected Header JSON






# Miller                        Informational                    [Page 67]

# RFC 7520                      JOSE Cookbook                     May 2015


#    <KEY>
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    RHY0SXJzIn0sImVuYyI6IkExMjhDQ<KEY>
#    .
#    .
#    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": "<KEY>6Ik
#          ExMjhDQkMtSFMyNTYifQ",
#      "iv": "yc9N8v5sYyv3iGQT926IUg",
#      "ciphertext": "BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4O
#          PK<KEY>s
#          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": "<KEY>"
#    }

#                 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:

#    <KEY>
#    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": "<KEY>LT
#          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


#    <KEY>
#    <KEY>
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>",
#      "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": "<KEY>",
#      "encrypted_key": "<KEY>",
#      "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

#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    .
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>
#          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": "<KEY>
#          0",
#      "encrypted_key": "<KEY>",
#      "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:

#    <KEY>

#                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

#    <KEY>OC
#    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:

#    <KEY>
#    <KEY>
#    .
#    <KEY>
#    .
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>          <KEY>",
#      "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": "<KEY>
#          <KEY>
#          wiemlwIjoiREVGIn0",
#      "encrypted_key": "<KEY>",
#      "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", "<NAME>" ],
#        [ "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:

#    <KEY>

#                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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>YT<KEY>
#          0",
#      "iv": "veCx9ece2orS7c_N",
#      "aad": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>
#          I<KEY>",
#      "ciphertext": "<KEY>
#          Ui8p74SchQP8xygM1oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14
#          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
#          O<KEY>
#          L<KEY>
#          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": "<KEY>
#          <KEY>GFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
#          0",
#      "encrypted_key": "<KEY>",
#      "aad": "<KEY>",
#      "iv": "veCx9ece2orS7c_N",
#      "ciphertext": "<KEY>
#          <KEY>
#          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
#          O<KEY>
#          LNygon_JJWd_ek6LQn5NRehvApqf9Z<KEY>
#          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": "<KEY>",
#      "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": "<KEY>",
#      "unprotected": {
#        "alg": "A128KW",
#        "kid": "81b20965-8332-43d9-a468-82160ad91ac8"
#      },
#      "encrypted_key": "<KEY>",
#      "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:

#    <KEY>

#                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": "<KEY>"
#        }
#      ],
#      "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": "<KEY>",
#      "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:

#    <KEY>
#    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": "<EMAIL>"
#    }

#     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": "<KEY>
#          <KEY>
#          <KEY>
#          SiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S1laS11QVbuP78dQ7
#          Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYSrRicJK5xodvWgkpIdk
#          MHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-dbHcGlihqc_wG
#          gho9fLMK8JOArYLcMDNQ",
#      "header": {
#        "alg": "RSA1_5",
#        "kid": "<EMAIL>"
#      }
#    }

#                        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": "<EMAIL>",
#      "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": "<KEY>
#          _elY4gSSId_w",
#      "header": {
#        "alg": "ECDH-ES+A256KW",
#        "kid": "<EMAIL>",
#        "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": "<KEY>",
#      "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": "<KEY>
#              <KEY>-
#              vhW6me4bWrBf7cHwEQJ<KEY>aKMXMvFRMV6iDlRr076
#              DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S
#              1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbe
#              YSrRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n
#              5trGuExtp_-dbHcGlihqc_wGgho9fLMK8JOArYLcMDNQ",
#          "header": {
#            "alg": "RSA1_5",
#            "kid": "<EMAIL>"
#          }
#        },
#        {
#          "encrypted_key": "<KEY>",
#          "header": {
#            "alg": "ECDH-ES+A256KW",
#            "kid": "<EMAIL>",
#            "epk": {
#              "kty": "EC",
#              "crv": "P-384",
#              "x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhs
#                  E2xAn2DtMRb25Ma2CX",
#              "y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEj
#                  I1pOMbw91fzZ84pbfm"
#            }
#          }
#        },
#        {
#          "encrypted_key": "<KEY>",
#          "header": {
#            "alg": "A256GCMKW",
#            "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
#            "tag": "59Nqh1LlYtVIhfD3pgRGvw",
#            "iv": "AvpeoPZ9Ncn9mkBn"
#          }
#        }
#      ],
#      "unprotected": {
#        "cty": "text/plain"
#      },
#      "protected": "<KEY>",



# 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": "<KEY>mIkweMt4Mg-0-B
#          2iSYvMrs8horhonV7vxCQagcBAATGW-hAafUehWjxWSH-3KccRM8toL4
#          e0q7M-idRDOBXSoe7Z2-CV2x_ZCY3RP8qp642R13WgXqGDIM4MbUkZSj
#          cY9-c",
#      "q": "<KEY>
#          WMWpGxGFFnNL3w5CqPLeU76-5IVYQq0HwYVl0hVXQHr7sgaGu-483Ad3
#          ENcL23FrOnF45m7_2ooAstJDe49MeLTTQKrSIBl_SKvqpYvfSPTczPcZ
#          kh9Kk",
#      "dp": "<KEY>
#          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

#    <KEY>

#             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):

#    <KEY>
#    .
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    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

#    <KEY>

#             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:

#    <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
#    .
#    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": "<KEY>
#              <KEY>
#              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": "<KEY>",
#      "iv": "GbX1i9kXz0sxXPmA",
#      "ciphertext": "<KEY>
#          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": "<KEY>qRewImjlStn8m3CPxBV1ueYlVhjurC
#          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
#          <KEY>",
#      "iv": "GbX1i9kXz0sxXPmA",
#      "ciphertext": "<KEY>
#          gCe2OFMf66cSJ8k2QkxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAv
#          VL<KEY>
#          Q<KEY>
#          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]      <NAME>., "JSON Web Algorithms (JWA)", RFC 7518,
#               DOI 10.17487/RFC7518, May 2015,
#               <http://www.rfc-editor.org/info/rfc7518>.

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

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

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

#    [RFC4648]  <NAME>., "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]      <NAME>., <NAME>., and <NAME>, "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]  <NAME>., "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
#    <NAME>.

#    Thanks to <NAME>, <NAME>, <NAME>, and <NAME>
#    for their input and review of the text.  Thanks to <NAME> for
#    verifying the Compact Serialization examples.

# Author's Address

#    <NAME>
#    Cisco Systems, Inc.

#    EMail: <EMAIL>

















# Miller                        Informational                   [Page 120]


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

# Disable flake8 reporting
# flake8: noqa

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)                         <NAME>
# 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": "<EMAIL>",
#      "use": "sig",
#      "crv": "P-521",
#      "x": "<KEY>
#          <KEY>",
#      "y": "<KEY>
#          <KEY>"
#    }

ec_public_key = {
    "kty": "EC",
    "kid": "<EMAIL>",
    "use": "sig",
    "crv": "P-521",
    "x": "<KEY>",
    "y": "<KEY>"
}

#                  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": "<EMAIL>",
#      "use": "sig",
#      "crv": "P-521",
#      "x": "<KEY>
#          <KEY>",
#      "y": "<KEY>QHiraVy
#          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": "<EMAIL>.example",
#      "use": "sig",
#      "n": "<KEY>
#          -<KEY>
#          wGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-
#          oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde
#          3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuC
#          L<KEY>g
#          HdrNP5zw",
#      "e": "AQAB"
#    }

rsa_public_jwk = {
    "kty": "RSA",
    "kid": "<EMAIL>",
    "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": "<EMAIL>",
#      "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": "<KEY>
#          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": "<KEY>
#          AMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJK
#          bi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdK
#          T1cYF8",
#      "qi": "<KEY>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": "<KEY>",
#      "use": "sig",
#      "alg": "HS256",
#      "k": "<KEY>"
#    }

hmac_key = {
    "kty": "oct",
    "kid": "<KEY>",
    "use": "sig",
    "alg": "HS256",
    "k": "<KEY>"
}

#                    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": "<KEY>"
#    }

#               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": "<EMAIL>"
#    }

#                     Figure 9: JWS Protected Header JSON







# Miller                        Informational                    [Page 12]

# RFC 7520                      JOSE Cookbook                     May 2015


#    <KEY>
#    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).

#    <KEY>
#    hhbXBsZSJ9
#    .
#    SXTigJlzIG<KEY>IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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:

#    <KEY>
#    <KEY>
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdG<KEY>
#    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
#    .
#    MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK
#    ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J
#    IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w
#    W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP
#    xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f
#    cIe8u9ipH84ogoree7vjbU5y18kDquDg

#                    Figure 13: JWS Compact Serialization

class TestFourOneThree:

    token = "<KEY>iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg"

    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
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>
#              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": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>
#          ZiB0by4",
#      "protected": "<KEY>",
#      "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": "<EMAIL>"
#    }

#                    Figure 16: JWS Protected Header JSON

#    <KEY>
#    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).

#    <KEY>
#    <KEY>
#    .
#    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:

#    <KEY>
#    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": "<KEY>
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>              <KEY>",
#          "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": "SXTigJlzIG<KEY>IGJ1c2luZXNzLCBGcm9kbywg
#          <KEY>
#          <KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "<KEY>
#          <KEY>",
#      "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": "<EMAIL>"
#    }

#                    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).

#    <KEY>
#    <KEY>9
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    <KEY>
#    <KEY>

#                        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:

#    <KEY>
#    <KEY>
#    .
#    S<KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvb
#    u9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kv
#    AD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2

#                    Figure 27: JWS Compact Serialization


class TestFourThreeThree:

    token = "<KEY>"

    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": "S<KEY>
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>
#              <KEY>",
#          "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": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>
#          ZiB0by4",
#      "protected": "<KEY>",
#      "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).

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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:

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    S<KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                    Figure 34: JWS Compact Serialization


class TestFourFourThree:

    token = "<KEY>"

    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": "<KEY>
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>
#              <KEY>",
#          "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
#              0"
#        }
#      ]
#    }

#                  Figure 35: General JWS JSON Serialization

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

#    {
#      "payload": "<KEY>
#          Z<KEY>
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "<KEY>
#          <KEY>",
#      "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

#    <KEY>
#    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).

#    <KEY>
#    <KEY>
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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:

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    .
#    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0

#                  Figure 41: General JWS JSON Serialization

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

#    {
#      "signatures": [
#        {
#          "protected": "<KEY>
#              <KEY>",
#          "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": "<KEY>
#          <KEY>",
#      "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).

#    <KEY>
#    <KEY>

#                        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": "<KEY>
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IG<KEY>IG9m
#          ZiB0by4",
#      "signatures": [
#        {
#          "protected": "<KEY>",
#          "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": "S<KEY>
#          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
#          Z<KEY>
#          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
#          ZiB0by4",
#      "protected": "<KEY>",
#      "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": "<KEY>
#          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": "<EMAIL>"
#    }

#             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": "<KEY>",
#      "header": {
#        "kid": "<EMAIL>"
#      },
#      "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": "<EMAIL>"
#    }

#             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": "<EMAIL>"
#      },
#      "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

#    <KEY>
#    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).

#    <KEY>
#    VlZjMxNGJjNzAzNyJ9
#    .
#    S<KEY>
#    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
#    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
#    U<KEY>

#                        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": "<KEY>
#          <KEY>",
#      "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": "<EMAIL>"
#          },
#          "signature": "MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5Nvy
#              G53uoimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFc
#              ryNFiHkSw129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc
#              -1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdM
#              ma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBC
#              XbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK6
#              4jU6_TPtQHiJeQJxz9G3Tx-083B745_AfYOnlC9w"
#        },
#        {
#          "header": {
#            "alg": "ES512",
#            "kid": "<EMAIL>"
#          },
#          "signature": "ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhc
#              dCoFZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8Ob
#              LfTvNCrqcI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8b
#              AWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD"
#        },
#        {
#          "protected": "<KEY>
#              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": "<EMAIL>",
#      "use": "enc",
#      "n": "maxhbsmBtdQ3CNrKvprUE6n9lYcregDMLYNeTAWcLj8NnPU9XIYegT
#          HVHQjxKDSHP2l-F5jS7sppG1wgdAqZyhnWvXhYNvcM7RfgKxqNx_xAHx
#          6f3yy7s-M9PSNCwPC2lh6UAkR4I00EhV9lrypM9Pi4lBUop9t5fS9W5U
#          NwaAllhrd-osQGPjIeI1deHTwx-ZTHu3C60Pu_LJIl6hKn9wbwaUmA4c
#          R5Bd2pgbaY7ASgsjCUbtYJaNIHSoHXprUdJZKUMAzV0WOKPfA6OPI4oy
#          pBadjvMZ4ZAj3BnXaSYsEZhaueTXvZB4eZOAjIyh2e_VOIKVMsnDrJYA
#          VotGlvMQ",
#      "e": "AQAB",
#      "d": "<KEY>
#          bQ1PLAHmpIbNTztfrheoAniRV1NCIqXaW_qS461xiDTp4ntEPnqcKsyO
#          5jMAji7-CL8vhpYYowNFvIesgMoVaPRYMYT9TW63hNM0aWs7USZ_hLg6
#          O<KEY>
#          1GFULimrRdndm-P8q8kvN3KHlNAtEgrQAgTTgz80S-3VD0FgWfgnb1PN
#          miuPUxO8OpI9KDIfu_acc6fg14nsNaJqXe6RESvhGPH2afjHqSy_Fd2v
#          pzj85bQQ",
#      "p": "<KEY>
#          <KEY>
#          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": "<KEY>
#          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:

#    <KEY>
#    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": "<EMAIL>",
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 77: JWE Protected Header JSON

#    eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW5zQGhvYmJpdG9uLm
#    V4YW1wbG<KEY>

#             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:

#    eyJhbG<KEY>
#    V<KEY>
#    .
#    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": "<KEY>
#              TihJBuuzxg0V7yk1WClnQePFvG2K-pvSlWc9BRIazDrn50RcRai_
#              _3TDON395H3c62tIouJJ4XaRvYHFjZTZ2GXfz8YAImcc91Tfk0WX
#              C2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcGTSLUeeCt
#              36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8
#              VlzNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx
#              1BpyIfgvfjOhMBs9M8XL223Fg47xlGsMXdfuY-4jaqVw"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>
#          0",
#      "iv": "bbd5sTkYwhAIqfHsx8DayA",
#      "ciphertext": "<KEY>
#          JhJvGZ4_FNVSiGc_raa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wn
#          I<KEY>
#          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": "<KEY>
#          0",
#      "encrypted_key": "<KEY>          <KEY>
#          <KEY>
#          oZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8VlzNmoxaGMny3YnGir5W
#          f6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOhMBs9M8XL223F
#          g47xlGsMXdfuY-4jaqVw",
#      "iv": "bbd5sTkYwhAIqfHsx8DayA",
#      "ciphertext": "<KEY>
#          J<KEY>
#          I<KEY>8GLOpRc
#          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": "<EMAIL>",
#      "use": "enc",
#      "n": "wbdxI55VaanZXPY29Lg5hdmv2XhvqAhoxUkanfzf2-5zVUxa6prHRr
#          I4pP1AhoqJRlZfYtWWd5mmHRG2pAHIlh0ySJ9wi0BioZBl1XP2e-C-Fy
#          XJGcTy0HdKQWlrfhTm42EW7Vv04r4gfao6uxjLGwfpGrZLarohiWCPnk
#          N<KEY>mIy2tl_VWgGnL22GplyXj5YlBLdxXp3XeSt
#          sqo571utNfoUTU8E4qdzJ<KEY>sMwlmmnJiwA7sXRItBCivR4M
#          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": "<KEY>
#          <KEY>
#          J_ia5mxjxNjS6E2yD44USo2JmHvzeeNczq25elqbTPLhUpGo1IZuG72F
#          Z<KEY>i
#          X<KEY>wPvj6V9iDSgjj8SozSM0dLtxvu0LIeIQAeEgT_yXcrKGm
#          pKdSO08kLBx8VUjkbv_3Pn20Gyu2YEuwpFlM_H1NikuxJNKFGmnAq9Lc
#          nwwT0jvoQ",
#      "dq": "<KEY>
#          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:

#    <KEY>
#    <KEY>
#    <KEY>
#    -A<KEY>
#    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": "<EMAIL>",
#      "enc": "A256GCM"
#    }

#                    Figure 88: JWE Protected Header JSON

#    <KEY>
#    <KEY>

#             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:

#    <KEY>
#    <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
#    .
#    -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": "<KEY>              <KEY>
#              <KEY>
#              <KEY>
#              uo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8B
#              <KEY>
#              asnuHtVMt2pKIIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq
#              5pGqFmW2k8zpO878TRlZx7pZfPYDSXZyS0CfKKkMozT_qiCwZTSz
#              4duYnt8hS4Z9sGthXn9uDqd6wycMagnQfOTs_lycTWmY-aqWVDKh
#              jYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe38UjQb0lvXn
#              1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
#              06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8a
#              KaOnx6ASE5Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xD
#              EdHAVCGRzN3woEI2ozDRs"
#        }
#      ],
#      "protected": "<KEY>",
#      "iv": "-nBoKLH0YkLZPSI9",
#      "ciphertext": "<KEY>
#          U<KEY>x
#          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": "<KEY>",
#      "encrypted_key": "<KEY>          <KEY>
#          <KEY>
#          <KEY>
#          X<KEY>JE
#          Bz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pKIIfux5BC6huI
#          vmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7pZfPYD
#          <KEY>Q
#          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": "<KEY>"
#        }
#      ]
#    }

#                        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:

#    <KEY>

#                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

#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    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": "<KEY>              tFPWdgtURtmeDV1g"
#        }
#      ],
#      "protected": "<KEY>",
#      "iv": "VBiCzVHNoLiR3F4V82uoTQ",
#      "ciphertext": "<KEY>
#          <KEY>
#          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": "<KEY>
#          <KEY>
#          <KEY>",
#      "encrypted_key": "<KEY>",
#      "iv": "VBiCzVHNoLiR3F4V82uoTQ",
#      "ciphertext": "23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2
#          nsnGIX86vMXqIi6IRsfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpD
#          jEYCNA_XOmzg8yZR9oyjo6lTF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_
#          hkBsnuoqoM3dwejXBtIodN84PeqMb6asmas_dpSsz7H10fC5ni9xIz42
#          4givB1YLldF6exVmL93R3fOoOJbmk2GBQZL_SEGllv2cQsBgeprARsaQ
#          7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKdPQMTlVJKkqtV4Ru
#          5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrokAKYPqmXUe
#          RdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-zl5
#          tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdT
#          <KEY>",
#      "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": "<EMAIL>",
#      "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:

#    <KEY>

#                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": "<EMAIL>",
#      "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


#    <KEY>
#    <KEY>
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    .
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          B4b3dyZF9vWXpCbWF6LUdLRlp1NHhBRkZrYllpV2d1dEVLNml1RURzUT
#          Z3TmRO<KEY>
#          <KEY>
#          <KEY>",
#      "iv": "mH-G2zVqgztUtnW_",
#      "ciphertext": "<KEY>          <KEY>
#          <KEY>
#          jMwbKkTe2yK3mjF6SBAsgicQDVCkcY9BLluzx1RmC3ORXaM0JaHPB93Y
#          cdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w03XdLkjXIuEr2hWgeP-nkU
#          Z<KEY>
#          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": "<KEY>",
#      "encrypted_key": "<KEY>",
#      "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": "<EMAIL>",
#      "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": "<KEY>",
#      "y": "<KEY>",
#      "d": "<KEY>"
#    }

#              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": "<EMAIL>",
#      "epk": {
#        "kty": "EC",
#        "crv": "P-256",
#        "x": "<KEY>",
#        "y": "<KEY>"
#      },
#      "enc": "A128CBC-HS256"
#    }

#                    Figure 124: JWE Protected Header JSON






# Miller                        Informational                    [Page 67]

# RFC 7520                      JOSE Cookbook                     May 2015


#    <KEY>
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    RHY0SXJzIn0sImVuYyI6IkExMjhDQ<KEY>
#    .
#    .
#    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": "<KEY>6Ik
#          ExMjhDQkMtSFMyNTYifQ",
#      "iv": "yc9N8v5sYyv3iGQT926IUg",
#      "ciphertext": "BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4O
#          PK<KEY>s
#          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": "<KEY>"
#    }

#                 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:

#    <KEY>
#    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": "<KEY>LT
#          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


#    <KEY>
#    <KEY>
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>",
#      "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": "<KEY>",
#      "encrypted_key": "<KEY>",
#      "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

#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    .
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>
#          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": "<KEY>
#          0",
#      "encrypted_key": "<KEY>",
#      "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:

#    <KEY>

#                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

#    <KEY>OC
#    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:

#    <KEY>
#    <KEY>
#    .
#    <KEY>
#    .
#    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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>          <KEY>",
#      "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": "<KEY>
#          <KEY>
#          wiemlwIjoiREVGIn0",
#      "encrypted_key": "<KEY>",
#      "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", "<NAME>" ],
#        [ "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:

#    <KEY>

#                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": "<KEY>"
#        }
#      ],
#      "protected": "<KEY>
#          <KEY>YT<KEY>
#          0",
#      "iv": "veCx9ece2orS7c_N",
#      "aad": "<KEY>
#          <KEY>
#          <KEY>
#          <KEY>
#          I<KEY>",
#      "ciphertext": "<KEY>
#          Ui8p74SchQP8xygM1oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14
#          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
#          O<KEY>
#          L<KEY>
#          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": "<KEY>
#          <KEY>GFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
#          0",
#      "encrypted_key": "<KEY>",
#      "aad": "<KEY>",
#      "iv": "veCx9ece2orS7c_N",
#      "ciphertext": "<KEY>
#          <KEY>
#          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
#          O<KEY>
#          LNygon_JJWd_ek6LQn5NRehvApqf9Z<KEY>
#          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": "<KEY>",
#      "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": "<KEY>",
#      "unprotected": {
#        "alg": "A128KW",
#        "kid": "81b20965-8332-43d9-a468-82160ad91ac8"
#      },
#      "encrypted_key": "<KEY>",
#      "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:

#    <KEY>

#                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": "<KEY>"
#        }
#      ],
#      "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": "<KEY>",
#      "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:

#    <KEY>
#    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": "<EMAIL>"
#    }

#     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": "<KEY>
#          <KEY>
#          <KEY>
#          SiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S1laS11QVbuP78dQ7
#          Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYSrRicJK5xodvWgkpIdk
#          MHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-dbHcGlihqc_wG
#          gho9fLMK8JOArYLcMDNQ",
#      "header": {
#        "alg": "RSA1_5",
#        "kid": "<EMAIL>"
#      }
#    }

#                        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": "<EMAIL>",
#      "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": "<KEY>
#          _elY4gSSId_w",
#      "header": {
#        "alg": "ECDH-ES+A256KW",
#        "kid": "<EMAIL>",
#        "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": "<KEY>",
#      "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": "<KEY>
#              <KEY>-
#              vhW6me4bWrBf7cHwEQJ<KEY>aKMXMvFRMV6iDlRr076
#              DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S
#              1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbe
#              YSrRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n
#              5trGuExtp_-dbHcGlihqc_wGgho9fLMK8JOArYLcMDNQ",
#          "header": {
#            "alg": "RSA1_5",
#            "kid": "<EMAIL>"
#          }
#        },
#        {
#          "encrypted_key": "<KEY>",
#          "header": {
#            "alg": "ECDH-ES+A256KW",
#            "kid": "<EMAIL>",
#            "epk": {
#              "kty": "EC",
#              "crv": "P-384",
#              "x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhs
#                  E2xAn2DtMRb25Ma2CX",
#              "y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEj
#                  I1pOMbw91fzZ84pbfm"
#            }
#          }
#        },
#        {
#          "encrypted_key": "<KEY>",
#          "header": {
#            "alg": "A256GCMKW",
#            "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
#            "tag": "59Nqh1LlYtVIhfD3pgRGvw",
#            "iv": "AvpeoPZ9Ncn9mkBn"
#          }
#        }
#      ],
#      "unprotected": {
#        "cty": "text/plain"
#      },
#      "protected": "<KEY>",



# 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": "<KEY>mIkweMt4Mg-0-B
#          2iSYvMrs8horhonV7vxCQagcBAATGW-hAafUehWjxWSH-3KccRM8toL4
#          e0q7M-idRDOBXSoe7Z2-CV2x_ZCY3RP8qp642R13WgXqGDIM4MbUkZSj
#          cY9-c",
#      "q": "<KEY>
#          WMWpGxGFFnNL3w5CqPLeU76-5IVYQq0HwYVl0hVXQHr7sgaGu-483Ad3
#          ENcL23FrOnF45m7_2ooAstJDe49MeLTTQKrSIBl_SKvqpYvfSPTczPcZ
#          kh9Kk",
#      "dp": "<KEY>
#          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

#    <KEY>

#             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):

#    <KEY>
#    .
#    <KEY>
#    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:

#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    <KEY>
#    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

#    <KEY>

#             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:

#    <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
#    .
#    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": "<KEY>
#              <KEY>
#              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": "<KEY>",
#      "iv": "GbX1i9kXz0sxXPmA",
#      "ciphertext": "<KEY>
#          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": "<KEY>qRewImjlStn8m3CPxBV1ueYlVhjurC
#          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
#          <KEY>",
#      "iv": "GbX1i9kXz0sxXPmA",
#      "ciphertext": "<KEY>
#          gCe2OFMf66cSJ8k2QkxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAv
#          VL<KEY>
#          Q<KEY>
#          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]      <NAME>., "JSON Web Algorithms (JWA)", RFC 7518,
#               DOI 10.17487/RFC7518, May 2015,
#               <http://www.rfc-editor.org/info/rfc7518>.

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

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

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

#    [RFC4648]  <NAME>., "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]      <NAME>., <NAME>., and <NAME>, "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]  <NAME>., "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
#    <NAME>.

#    Thanks to <NAME>, <NAME>, <NAME>, and <NAME>
#    for their input and review of the text.  Thanks to <NAME> for
#    verifying the Compact Serialization examples.

# Author's Address

#    <NAME>
#    Cisco Systems, Inc.

#    EMail: <EMAIL>

















# Miller                        Informational                   [Page 120]


# Html markup produced by rfcmarkup 1.116, available from https://tools.ietf.org/tools/rfcmarkup/
# Disable flake8 reporting # flake8: noqa # [Docs] [txt|pdf] [draft-ietf-jose-c...] # Internet Engineering Task Force (IETF)                         <NAME> # 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": "<EMAIL>", #      "use": "sig", #      "crv": "P-521", #      "x": "<KEY> #          <KEY>", #      "y": "<KEY> #          <KEY>" #    } #                  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": "<EMAIL>", #      "use": "sig", #      "crv": "P-521", #      "x": "<KEY> #          <KEY>", #      "y": "<KEY>QHiraVy #          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": "<EMAIL>.example", #      "use": "sig", #      "n": "<KEY> #          -<KEY> #          wGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj- #          oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde #          3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuC #          L<KEY>g #          HdrNP5zw", #      "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": "<EMAIL>", #      "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": "<KEY> #          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": "<KEY> #          AMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJK #          bi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdK #          T1cYF8", #      "qi": "<KEY>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": "<KEY>", #      "use": "sig", #      "alg": "HS256", #      "k": "<KEY>" #    } #                    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": "<KEY>" #    } #               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": "<EMAIL>" #    } #                     Figure 9: JWS Protected Header JSON # Miller                        Informational                    [Page 12] # RFC 7520                      JOSE Cookbook                     May 2015 #    <KEY> #    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). #    <KEY> #    hhbXBsZSJ9 #    . #    SXTigJlzIG<KEY>IH #    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk #    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm #    U<KEY> #                        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: #    <KEY> #    <KEY> #    . #    S<KEY> #    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk #    b24ndCBrZWVwIHlvdXIgZmVldCwgdG<KEY> #    UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4 #    . #    MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK #    ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J #    IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w #    W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP #    xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f #    cIe8u9ipH84ogoree7vjbU5y18kDquDg #                    Figure 13: JWS Compact Serialization #    The resulting JWS object using the general JWS JSON Serialization: #    { #      "payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg #          Z<KEY> #          Z<KEY> #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m #          ZiB0by4", #      "signatures": [ #        { #          "protected": "<KEY> #              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": "<KEY> #          <KEY> #          <KEY> #          <KEY> #          ZiB0by4", #      "protected": "<KEY>", #      "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": "<EMAIL>" #    } #                    Figure 16: JWS Protected Header JSON #    <KEY> #    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). #    <KEY> #    <KEY> #    . #    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: #    <KEY> #    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": "<KEY> #          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h #          ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m #          ZiB0by4", #      "signatures": [ #        { #          "protected": "<KEY>              <KEY>", #          "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": "SXTigJlzIG<KEY>IGJ1c2luZXNzLCBGcm9kbywg #          <KEY> #          <KEY> #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m #          ZiB0by4", #      "protected": "<KEY> #          <KEY>", #      "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": "<EMAIL>" #    } #                    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). #    <KEY> #    <KEY>9 #    . #    S<KEY> #    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk #    <KEY> #    <KEY> #                        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: #    <KEY> #    <KEY> #    . #    S<KEY> #    <KEY> #    <KEY> #    <KEY> #    . #    AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvb #    u9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kv #    AD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2 #                    Figure 27: JWS Compact Serialization # Miller                        Informational                    [Page 20] # RFC 7520                      JOSE Cookbook                     May 2015 #    The resulting JWS object using the general JWS JSON Serialization: #    { #      "payload": "S<KEY> #          Z<KEY> #          Z<KEY> #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m #          ZiB0by4", #      "signatures": [ #        { #          "protected": "<KEY> #              <KEY>", #          "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": "<KEY> #          <KEY> #          <KEY> #          <KEY> #          ZiB0by4", #      "protected": "<KEY>", #      "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). #    <KEY> #    VlZjMxNGJjNzAzNyJ9 #    . #    SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH #    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk #    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm #    U<KEY> #                        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: #    <KEY> #    VlZjMxNGJjNzAzNyJ9 #    . #    S<KEY> #    <KEY> #    <KEY> #    <KEY> #    . #    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0 #                    Figure 34: JWS Compact Serialization # Miller                        Informational                    [Page 23] # RFC 7520                      JOSE Cookbook                     May 2015 #    The resulting JWS object using the general JWS JSON Serialization: #    { #      "payload": "<KEY> #          Z<KEY> #          Z<KEY> #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m #          ZiB0by4", #      "signatures": [ #        { #          "protected": "<KEY> #              <KEY>", #          "signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p #              0" #        } #      ] #    } #                  Figure 35: General JWS JSON Serialization #    The resulting JWS object using the flattened JWS JSON Serialization: #    { #      "payload": "<KEY> #          Z<KEY> #          Z<KEY> #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m #          ZiB0by4", #      "protected": "<KEY> #          <KEY>", #      "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 #    <KEY> #    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). #    <KEY> #    <KEY> #    . #    S<KEY> #    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk #    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm #    U<KEY> #                        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: #    <KEY> #    VlZjMxNGJjNzAzNyJ9 #    . #    . #    s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0 #                  Figure 41: General JWS JSON Serialization #    The resulting JWS object using the general JWS JSON Serialization: #    { #      "signatures": [ #        { #          "protected": "<KEY> #              <KEY>", #          "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": "<KEY> #          <KEY>", #      "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). #    <KEY> #    <KEY> #                        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": "<KEY> #          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h #          Z<KEY> #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IG<KEY>IG9m #          ZiB0by4", #      "signatures": [ #        { #          "protected": "<KEY>", #          "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": "S<KEY> #          Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h #          Z<KEY> #          gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m #          ZiB0by4", #      "protected": "<KEY>", #      "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": "<KEY> #          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": "<EMAIL>" #    } #             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": "<KEY>", #      "header": { #        "kid": "<EMAIL>" #      }, #      "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": "<EMAIL>" #    } #             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": "<EMAIL>" #      }, #      "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 #    <KEY> #    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). #    <KEY> #    VlZjMxNGJjNzAzNyJ9 #    . #    S<KEY> #    lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk #    b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm #    U<KEY> #                        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": "<KEY> #          <KEY>", #      "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": "<EMAIL>" #          }, #          "signature": "MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5Nvy #              G53uoimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFc #              ryNFiHkSw129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc #              -1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdM #              ma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBC #              XbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK6 #              4jU6_TPtQHiJeQJxz9G3Tx-083B745_AfYOnlC9w" #        }, #        { #          "header": { #            "alg": "ES512", #            "kid": "<EMAIL>" #          }, #          "signature": "ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhc #              dCoFZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8Ob #              LfTvNCrqcI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8b #              AWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD" #        }, #        { #          "protected": "<KEY> #              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": "<EMAIL>", #      "use": "enc", #      "n": "maxhbsmBtdQ3CNrKvprUE6n9lYcregDMLYNeTAWcLj8NnPU9XIYegT #          HVHQjxKDSHP2l-F5jS7sppG1wgdAqZyhnWvXhYNvcM7RfgKxqNx_xAHx #          6f3yy7s-M9PSNCwPC2lh6UAkR4I00EhV9lrypM9Pi4lBUop9t5fS9W5U #          NwaAllhrd-osQGPjIeI1deHTwx-ZTHu3C60Pu_LJIl6hKn9wbwaUmA4c #          R5Bd2pgbaY7ASgsjCUbtYJaNIHSoHXprUdJZKUMAzV0WOKPfA6OPI4oy #          pBadjvMZ4ZAj3BnXaSYsEZhaueTXvZB4eZOAjIyh2e_VOIKVMsnDrJYA #          VotGlvMQ", #      "e": "AQAB", #      "d": "<KEY> #          bQ1PLAHmpIbNTztfrheoAniRV1NCIqXaW_qS461xiDTp4ntEPnqcKsyO #          5jMAji7-CL8vhpYYowNFvIesgMoVaPRYMYT9TW63hNM0aWs7USZ_hLg6 #          O<KEY> #          1GFULimrRdndm-P8q8kvN3KHlNAtEgrQAgTTgz80S-3VD0FgWfgnb1PN #          miuPUxO8OpI9KDIfu_acc6fg14nsNaJqXe6RESvhGPH2afjHqSy_Fd2v #          pzj85bQQ", #      "p": "<KEY> #          <KEY> #          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": "<KEY> #          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: #    <KEY> #    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": "<EMAIL>", #      "enc": "A128CBC-HS256" #    } #                    Figure 77: JWE Protected Header JSON #    eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW5zQGhvYmJpdG9uLm #    V4YW1wbG<KEY> #             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: #    eyJhbG<KEY> #    V<KEY> #    . #    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": "<KEY> #              TihJBuuzxg0V7yk1WClnQePFvG2K-pvSlWc9BRIazDrn50RcRai_ #              _3TDON395H3c62tIouJJ4XaRvYHFjZTZ2GXfz8YAImcc91Tfk0WX #              C2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcGTSLUeeCt #              36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8 #              VlzNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx #              1BpyIfgvfjOhMBs9M8XL223Fg47xlGsMXdfuY-4jaqVw" #        } #      ], #      "protected": "<KEY> #          <KEY> #          0", #      "iv": "bbd5sTkYwhAIqfHsx8DayA", #      "ciphertext": "<KEY> #          JhJvGZ4_FNVSiGc_raa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wn #          I<KEY> #          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": "<KEY> #          0", #      "encrypted_key": "<KEY>          <KEY> #          <KEY> #          oZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8VlzNmoxaGMny3YnGir5W #          f6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOhMBs9M8XL223F #          g47xlGsMXdfuY-4jaqVw", #      "iv": "bbd5sTkYwhAIqfHsx8DayA", #      "ciphertext": "<KEY> #          J<KEY> #          I<KEY>8GLOpRc #          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": "<EMAIL>", #      "use": "enc", #      "n": "wbdxI55VaanZXPY29Lg5hdmv2XhvqAhoxUkanfzf2-5zVUxa6prHRr #          I4pP1AhoqJRlZfYtWWd5mmHRG2pAHIlh0ySJ9wi0BioZBl1XP2e-C-Fy #          XJGcTy0HdKQWlrfhTm42EW7Vv04r4gfao6uxjLGwfpGrZLarohiWCPnk #          N<KEY>mIy2tl_VWgGnL22GplyXj5YlBLdxXp3XeSt #          sqo571utNfoUTU8E4qdzJ<KEY>sMwlmmnJiwA7sXRItBCivR4M #          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": "<KEY> #          <KEY> #          J_ia5mxjxNjS6E2yD44USo2JmHvzeeNczq25elqbTPLhUpGo1IZuG72F #          Z<KEY>i #          X<KEY>wPvj6V9iDSgjj8SozSM0dLtxvu0LIeIQAeEgT_yXcrKGm #          pKdSO08kLBx8VUjkbv_3Pn20Gyu2YEuwpFlM_H1NikuxJNKFGmnAq9Lc #          nwwT0jvoQ", #      "dq": "<KEY> #          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: #    <KEY> #    <KEY> #    <KEY> #    -A<KEY> #    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": "<EMAIL>", #      "enc": "A256GCM" #    } #                    Figure 88: JWE Protected Header JSON #    <KEY> #    <KEY> #             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: #    <KEY> #    <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 #    . #    -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": "<KEY>              <KEY> #              <KEY> #              <KEY> #              uo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8B #              <KEY> #              asnuHtVMt2pKIIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq #              5pGqFmW2k8zpO878TRlZx7pZfPYDSXZyS0CfKKkMozT_qiCwZTSz #              4duYnt8hS4Z9sGthXn9uDqd6wycMagnQfOTs_lycTWmY-aqWVDKh #              jYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe38UjQb0lvXn #              1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU #              06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8a #              KaOnx6ASE5Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xD #              EdHAVCGRzN3woEI2ozDRs" #        } #      ], #      "protected": "<KEY>", #      "iv": "-nBoKLH0YkLZPSI9", #      "ciphertext": "<KEY> #          U<KEY>x #          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": "<KEY>", #      "encrypted_key": "<KEY>          <KEY> #          <KEY> #          <KEY> #          X<KEY>JE #          Bz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pKIIfux5BC6huI #          vmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7pZfPYD #          <KEY>Q #          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": "<KEY>" #        } #      ] #    } #                        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: #    <KEY> #                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 #    <KEY> #    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: #    <KEY> #    <KEY> #    <KEY> #    . #    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": "<KEY>              tFPWdgtURtmeDV1g" #        } #      ], #      "protected": "<KEY>", #      "iv": "VBiCzVHNoLiR3F4V82uoTQ", #      "ciphertext": "<KEY> #          <KEY> #          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": "<KEY> #          <KEY> #          <KEY>", #      "encrypted_key": "<KEY>", #      "iv": "VBiCzVHNoLiR3F4V82uoTQ", #      "ciphertext": "23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2 #          nsnGIX86vMXqIi6IRsfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpD #          jEYCNA_XOmzg8yZR9oyjo6lTF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_ #          hkBsnuoqoM3dwejXBtIodN84PeqMb6asmas_dpSsz7H10fC5ni9xIz42 #          4givB1YLldF6exVmL93R3fOoOJbmk2GBQZL_SEGllv2cQsBgeprARsaQ #          7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKdPQMTlVJKkqtV4Ru #          5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrokAKYPqmXUe #          RdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-zl5 #          tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdT #          <KEY>", #      "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": "<EMAIL>", #      "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: #    <KEY> #                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": "<EMAIL>", #      "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 #    <KEY> #    <KEY> #    <KEY> #    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: #    <KEY> #    <KEY> #    <KEY> #    <KEY> #    . #    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": "<KEY>" #        } #      ], #      "protected": "<KEY> #          B4b3dyZF9vWXpCbWF6LUdLRlp1NHhBRkZrYllpV2d1dEVLNml1RURzUT #          Z3TmRO<KEY> #          <KEY> #          <KEY>", #      "iv": "mH-G2zVqgztUtnW_", #      "ciphertext": "<KEY>          <KEY> #          <KEY> #          jMwbKkTe2yK3mjF6SBAsgicQDVCkcY9BLluzx1RmC3ORXaM0JaHPB93Y #          cdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w03XdLkjXIuEr2hWgeP-nkU #          Z<KEY> #          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": "<KEY>", #      "encrypted_key": "<KEY>", #      "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": "<EMAIL>", #      "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": "<KEY>", #      "y": "<KEY>", #      "d": "<KEY>" #    } #              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": "<EMAIL>", #      "epk": { #        "kty": "EC", #        "crv": "P-256", #        "x": "<KEY>", #        "y": "<KEY>" #      }, #      "enc": "A128CBC-HS256" #    } #                    Figure 124: JWE Protected Header JSON # Miller                        Informational                    [Page 67] # RFC 7520                      JOSE Cookbook                     May 2015 #    <KEY> #    <KEY> #    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: #    <KEY> #    <KEY> #    <KEY> #    <KEY> #    RHY0SXJzIn0sImVuYyI6IkExMjhDQ<KEY> #    . #    . #    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": "<KEY>6Ik #          ExMjhDQkMtSFMyNTYifQ", #      "iv": "yc9N8v5sYyv3iGQT926IUg", #      "ciphertext": "BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4O #          PK<KEY>s #          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": "<KEY>" #    } #                 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: #    <KEY> #    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": "<KEY>LT #          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 #    <KEY> #    <KEY> #    <KEY> #    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: #    <KEY> #    <KEY> #    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": "<KEY>" #        } #      ], #      "protected": "<KEY> #          <KEY> #          <KEY> #          <KEY>", #      "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": "<KEY>", #      "encrypted_key": "<KEY>", #      "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 #    <KEY> #    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: #    <KEY> #    <KEY> #    . #    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": "<KEY>" #        } #      ], #      "protected": "<KEY> #          <KEY> #          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": "<KEY> #          0", #      "encrypted_key": "<KEY>", #      "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: #    <KEY> #                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 #    <KEY>OC #    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: #    <KEY> #    <KEY> #    . #    <KEY> #    . #    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": "<KEY>" #        } #      ], #      "protected": "<KEY>          <KEY>", #      "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": "<KEY> #          <KEY> #          wiemlwIjoiREVGIn0", #      "encrypted_key": "<KEY>", #      "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", "<NAME>" ], #        [ "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: #    <KEY> #                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": "<KEY>" #        } #      ], #      "protected": "<KEY> #          <KEY>YT<KEY> #          0", #      "iv": "veCx9ece2orS7c_N", #      "aad": "<KEY> #          <KEY> #          <KEY> #          <KEY> #          I<KEY>", #      "ciphertext": "<KEY> #          Ui8p74SchQP8xygM1oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14 #          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz #          O<KEY> #          L<KEY> #          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": "<KEY> #          <KEY>GFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn #          0", #      "encrypted_key": "<KEY>", #      "aad": "<KEY>", #      "iv": "veCx9ece2orS7c_N", #      "ciphertext": "<KEY> #          <KEY> #          T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz #          O<KEY> #          LNygon_JJWd_ek6LQn5NRehvApqf9Z<KEY> #          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": "<KEY>", #      "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": "<KEY>", #      "unprotected": { #        "alg": "A128KW", #        "kid": "81b20965-8332-43d9-a468-82160ad91ac8" #      }, #      "encrypted_key": "<KEY>", #      "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: #    <KEY> #                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": "<KEY>" #        } #      ], #      "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": "<KEY>", #      "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: #    <KEY> #    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": "<EMAIL>" #    } #     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": "<KEY> #          <KEY> #          <KEY> #          SiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S1laS11QVbuP78dQ7 #          Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYSrRicJK5xodvWgkpIdk #          MHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-dbHcGlihqc_wG #          gho9fLMK8JOArYLcMDNQ", #      "header": { #        "alg": "RSA1_5", #        "kid": "<EMAIL>" #      } #    } #                        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": "<EMAIL>", #      "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": "<KEY> #          _elY4gSSId_w", #      "header": { #        "alg": "ECDH-ES+A256KW", #        "kid": "<EMAIL>", #        "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": "<KEY>", #      "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": "<KEY> #              <KEY>- #              vhW6me4bWrBf7cHwEQJ<KEY>aKMXMvFRMV6iDlRr076 #              DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S #              1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbe #              YSrRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n #              5trGuExtp_-dbHcGlihqc_wGgho9fLMK8JOArYLcMDNQ", #          "header": { #            "alg": "RSA1_5", #            "kid": "<EMAIL>" #          } #        }, #        { #          "encrypted_key": "<KEY>", #          "header": { #            "alg": "ECDH-ES+A256KW", #            "kid": "<EMAIL>", #            "epk": { #              "kty": "EC", #              "crv": "P-384", #              "x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhs #                  E2xAn2DtMRb25Ma2CX", #              "y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEj #                  I1pOMbw91fzZ84pbfm" #            } #          } #        }, #        { #          "encrypted_key": "<KEY>", #          "header": { #            "alg": "A256GCMKW", #            "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d", #            "tag": "59Nqh1LlYtVIhfD3pgRGvw", #            "iv": "AvpeoPZ9Ncn9mkBn" #          } #        } #      ], #      "unprotected": { #        "cty": "text/plain" #      }, #      "protected": "<KEY>", # 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": "<KEY>mIkweMt4Mg-0-B #          2iSYvMrs8horhonV7vxCQagcBAATGW-hAafUehWjxWSH-3KccRM8toL4 #          e0q7M-idRDOBXSoe7Z2-CV2x_ZCY3RP8qp642R13WgXqGDIM4MbUkZSj #          cY9-c", #      "q": "<KEY> #          WMWpGxGFFnNL3w5CqPLeU76-5IVYQq0HwYVl0hVXQHr7sgaGu-483Ad3 #          ENcL23FrOnF45m7_2ooAstJDe49MeLTTQKrSIBl_SKvqpYvfSPTczPcZ #          kh9Kk", #      "dp": "<KEY> #          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 #    <KEY> #             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): #    <KEY> #    . #    <KEY> #    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: #    <KEY> #    <KEY> #    <KEY> #    <KEY> #    <KEY> #    <KEY> #    <KEY> #    <KEY> #    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 #    <KEY> #             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: #    <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 #    . #    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": "<KEY> #              <KEY> #              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": "<KEY>", #      "iv": "GbX1i9kXz0sxXPmA", #      "ciphertext": "<KEY> #          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": "<KEY>qRewImjlStn8m3CPxBV1ueYlVhjurC #          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 #          <KEY>", #      "iv": "GbX1i9kXz0sxXPmA", #      "ciphertext": "<KEY> #          gCe2OFMf66cSJ8k2QkxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAv #          VL<KEY> #          Q<KEY> #          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]      <NAME>., "JSON Web Algorithms (JWA)", RFC 7518, #               DOI 10.17487/RFC7518, May 2015, #               <http://www.rfc-editor.org/info/rfc7518>. #    [JWE]      <NAME>. and <NAME>, "JSON Web Encryption (JWE)", #               RFC 7516, DOI 10.17487/RFC7516, May 2015, #               <http://www.rfc-editor.org/info/rfc7516>. #    [JWK]      J<NAME>., "JSON Web Key (JWK)", RFC 7517, #               DOI 10.17487/RFC7517, May 2015, #               <http://www.rfc-editor.org/info/rfc7517>. #    [JWS]      <NAME>., <NAME>., and <NAME>, "JSON Web #               Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May #               2015, <http://www.rfc-editor.org/info/rfc7515>. #    [RFC4648]  <NAME>., "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]      <NAME>., <NAME>., and <NAME>, "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]  <NAME>., "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 #    <NAME>. #    Thanks to <NAME>, <NAME>, <NAME>, and <NAME> #    for their input and review of the text.  Thanks to <NAME> for #    verifying the Compact Serialization examples. # Author's Address #    <NAME> #    Cisco Systems, Inc. #    EMail: <EMAIL> # Miller                        Informational                   [Page 120] # Html markup produced by rfcmarkup 1.116, available from https://tools.ietf.org/tools/rfcmarkup/