JSON Web Encryption

JSON Web Encryption (JWE) are used to encrypt a payload and represent it as a compact URL-safe string.

Supported Content Encryption Algorithms

The following algorithms are currently supported.

Encryption Value Encryption Algorithm, Mode, and Auth Tag
A128CBC_HS256 AES w/128 bit key in CBC mode w/SHA256 HMAC
A192CBC_HS384 AES w/128 bit key in CBC mode w/SHA256 HMAC
A256CBC_HS512 AES w/128 bit key in CBC mode w/SHA256 HMAC
A128GCM AES w/128 bit key in GCM mode and GCM auth tag
A192GCM AES w/192 bit key in GCM mode and GCM auth tag
A256GCM AES w/256 bit key in GCM mode and GCM auth tag

Supported Key Management Algorithms

The following algorithms are currently supported.

Algorithm Value Key Wrap Algorithm
DIR Direct (no key wrap)
RSA1_5 RSAES with PKCS1 v1.5
RSA_OAEP RSAES OAEP using default parameters
RSA_OAEP_256 RSAES OAEP using SHA-256 and MGF1 with SHA-256
A128KW AES Key Wrap with default IV using 128-bit key
A192KW m AES Key Wrap with default IV using 192-bit key
A256KW AES Key Wrap with default IV using 256-bit key

Examples

Encrypting Payloads

>>> from jose import jwe
>>> jwe.encrypt('Hello, World!', 'asecret128bitkey', algorithm='dir', encryption='A128GCM')
'eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4R0NNIn0..McILMB3dYsNJSuhcDzQshA.OfX9H_mcUpHDeRM4IA.CcnTWqaqxNsjT4eCaUABSg'

Decrypting Payloads

>>> from jose import jwe
>>> jwe.decrypt('eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4R0NNIn0..McILMB3dYsNJSuhcDzQshA.OfX9H_mcUpHDeRM4IA.CcnTWqaqxNsjT4eCaUABSg', 'asecret128bitkey')
'Hello, World!'