Skip to main content

Age-style X25519 sealed-per-recipient MRE provider for Swarmauri

Project description

Swarmauri Logo

PyPI - Downloads Hits PyPI - Python Version PyPI - License PyPI - swarmauri_mre_crypto_age


Swarmauri MRE Crypto Age

Age-based multi-recipient encryption provider implementing the IMreCrypto contract.

  • Sealed-per-recipient X25519 stanzas (mode="sealed_per_recipient" and recipient_alg="X25519-SEAL")
  • ChaCha20-Poly1305 payload encryption for each recipient header
  • Deterministic recipient identifiers via SHA-256 public key fingerprints
  • Rewrapping support for adding or removing recipients when provided the original plaintext or an opening identity

Installation

Choose the installer that matches your project workflow:

# pip
pip install swarmauri_mre_crypto_age

# Poetry
poetry add swarmauri_mre_crypto_age

# uv
uv add swarmauri_mre_crypto_age

Usage

The provider exposes asynchronous helpers for encrypting data to many recipients and decrypting it for a specific private key. The example below walks through a complete round trip.

  1. Create the crypto provider.
  2. Generate key pairs for two recipients.
  3. Encrypt a payload for both recipients.
  4. Decrypt the payload for one recipient.
from swarmauri_mre_crypto_age import AgeMreCrypto
from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey

crypto = AgeMreCrypto()

# generate key pairs for each participant
sk1 = X25519PrivateKey.generate()
pk1 = sk1.public_key()
sk2 = X25519PrivateKey.generate()
pk2 = sk2.public_key()

recipients = [
    {"kind": "cryptography_obj", "obj": pk1},
    {"kind": "cryptography_obj", "obj": pk2},
]

env = await crypto.encrypt_for_many(recipients, b"secret")
pt = await crypto.open_for({"kind": "cryptography_obj", "obj": sk1}, env)
assert pt == b"secret"

The helper accepts multiple KeyRef formats, including dictionaries with kind="cryptography_obj" (for X25519PublicKey / X25519PrivateKey objects) and raw byte references such as kind="raw_x25519_pk" or kind="age_x25519_pk". When rewrapping an existing envelope to add recipients, pass the plaintext via opts["pt"] or provide an identity through opts["open_with"] so the payload can be resealed for the new recipients.

Entry point

The provider is registered under the swarmauri.mre_cryptos entry-point as AgeMreCrypto.

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_mre_crypto_age-0.3.0.dev42.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

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

swarmauri_mre_crypto_age-0.3.0.dev42-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file swarmauri_mre_crypto_age-0.3.0.dev42.tar.gz.

File metadata

  • Download URL: swarmauri_mre_crypto_age-0.3.0.dev42.tar.gz
  • Upload date:
  • Size: 9.1 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_mre_crypto_age-0.3.0.dev42.tar.gz
Algorithm Hash digest
SHA256 313a85e8201edc74185796704ffa6a2b86677e71e6e4d33491827e882b3bf096
MD5 1e09074aa817b7a1b59245abc1102d15
BLAKE2b-256 34628dea74c5d702662a8b715a1a57e350d0262ff94e5791f15cc3f92a6378af

See more details on using hashes here.

File details

Details for the file swarmauri_mre_crypto_age-0.3.0.dev42-py3-none-any.whl.

File metadata

  • Download URL: swarmauri_mre_crypto_age-0.3.0.dev42-py3-none-any.whl
  • Upload date:
  • Size: 10.3 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_mre_crypto_age-0.3.0.dev42-py3-none-any.whl
Algorithm Hash digest
SHA256 6e02518ccae1e2c91380b4f008244edcfdf32655130cb9570dd40125fa4fbb0f
MD5 a506448954ddf1e7c08c4182851df69a
BLAKE2b-256 acd959a8a4888e8b8e2087e33aee925c699e055d2e1e777048f439be97991742

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