Skip to main content

RFC 7516/7518 compliant JWE crypto provider for Swarmauri

Project description

Swarmauri Logo

PyPI - Downloads Hits PyPI - Python Version PyPI - License PyPI - swarmauri_crypto_jwe


Swarmauri Crypto JWE

JSON Web Encryption (JWE) provider implementing RFC 7516 and RFC 7518 compliant encryption and decryption helpers.

Features

  • Asynchronous API for compact JWE serialization returning strings.
  • Accepts JWAAlg enums from swarmauri_core.crypto.types for algorithms.
  • Supports dir, RSA-OAEP, RSA-OAEP-256, and ECDH-ES key management algorithms.
  • Supports A128GCM, A192GCM, and A256GCM content encryption.
  • Optional compression (zip = DEF) and Additional Authenticated Data (AAD).
  • Returns structured decrypt results that include both the protected header and plaintext.
  • Registers with the Swarmauri PluginManager via the swarmauri.cryptos entry point.

Installation

pip install swarmauri_crypto_jwe
# or
poetry add swarmauri_crypto_jwe
# or, with uv
uv add swarmauri_crypto_jwe

[!TIP] uv can be installed with pip install uv or by following the instructions at astral.sh/uv. Once installed, run uv add swarmauri_crypto_jwe from your project directory to add the dependency.

Usage

The helpers are asynchronous and return compact JWE strings that can be decrypted back into their original plaintext. A typical flow is:

  1. Generate or load the key material for the chosen algorithm.
  2. Instantiate JweCrypto.
  3. Call encrypt_compact with the payload, algorithm, and key details.
  4. Call decrypt_compact with the resulting JWE and the corresponding private key.
import asyncio
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from swarmauri_core.crypto.types import JWAAlg
from swarmauri_crypto_jwe import JweCrypto


async def main() -> None:
    crypto = JweCrypto()

    sk = rsa.generate_private_key(public_exponent=65537, key_size=2048)
    pk_pem = sk.public_key().public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo,
    )

    jwe = await crypto.encrypt_compact(
        payload=b"secret",
        alg=JWAAlg.RSA_OAEP_256,
        enc=JWAAlg.A256GCM,
        key={"pub": pk_pem},
    )

    result = await crypto.decrypt_compact(
        jwe,
        rsa_private_pem=sk.private_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PrivateFormat.PKCS8,
            encryption_algorithm=serialization.NoEncryption(),
        ),
    )
    assert result.plaintext == b"secret"


asyncio.run(main())

Loading via PluginManager

from swarmauri.plugin import PluginManager

pm = PluginManager()
crypto = pm.load("swarmauri.cryptos", "JweCrypto")

Parameters

  • algJWAAlg member describing the key management algorithm (JWAAlg.RSA_OAEP_256, JWAAlg.DIR, etc.).
  • encJWAAlg member describing the content encryption algorithm (JWAAlg.A256GCM, JWAAlg.A128GCM, etc.).
  • key – mapping containing the key material used for encryption:
    • {"k": bytes} for direct symmetric keys (dir).
    • {"pub": rsa_public_key} for RSA OAEP, where the public key may be PEM bytes or an RSAPublicKey instance.
    • {"pub": ec_public_key} for ECDH-ES with PEM, JWK, or key objects.
  • Optional header_extra values are merged into the protected header (use zip="DEF" to enable compression).
  • Decryption requires the matching private key via dir_key, rsa_private_pem/rsa_private_password, or ecdh_private_key.
  • expected_algs and expected_encs constrain acceptable algorithms during decryption, and aad must match the authenticated data provided at encryption time.

Entry point

The provider is registered under the swarmauri.cryptos entry point as JweCrypto.

Want to help?

If you want to contribute to swarmauri-sdk, read up on our guidelines for contributing that will help you get started.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swarmauri_crypto_jwe-0.3.0.dev3.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swarmauri_crypto_jwe-0.3.0.dev3-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file swarmauri_crypto_jwe-0.3.0.dev3.tar.gz.

File metadata

  • Download URL: swarmauri_crypto_jwe-0.3.0.dev3.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_crypto_jwe-0.3.0.dev3.tar.gz
Algorithm Hash digest
SHA256 8821d8ca8dc566762b144e08ab092235c6df78a43d24bb3b867b5ce6e3e253d1
MD5 266189f3c661d55c41b948d0efb4e7cb
BLAKE2b-256 bad55993c3f91270b6b67eb1954b2d1e63e16e7e1e21e990dc046d9965012782

See more details on using hashes here.

File details

Details for the file swarmauri_crypto_jwe-0.3.0.dev3-py3-none-any.whl.

File metadata

  • Download URL: swarmauri_crypto_jwe-0.3.0.dev3-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_crypto_jwe-0.3.0.dev3-py3-none-any.whl
Algorithm Hash digest
SHA256 ab9bb87a1cf0f7fb33a899a3de7832d77372a13200c7c48f9dcc496ba6325d85
MD5 55bdc79973f09a40224fc5eece13c9fe
BLAKE2b-256 8cb0368463476e7e223675595eea0c23b6ace1d5db5399a92d2bf70524341925

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page