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!'