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.dev36.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.dev36-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.dev36.tar.gz.

File metadata

  • Download URL: swarmauri_mre_crypto_age-0.3.0.dev36.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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.dev36.tar.gz
Algorithm Hash digest
SHA256 ea30fda3ac3cd9c63953f8f935e5c55349dedc52c2799807367eee9ea808d6ff
MD5 bb50d5f78db43782321a8ab78c6afd1c
BLAKE2b-256 e2463274262807cddbc1354a4672e533a2951cf9dac705dc52ba0e5bfbf915b2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: swarmauri_mre_crypto_age-0.3.0.dev36-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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.dev36-py3-none-any.whl
Algorithm Hash digest
SHA256 1def6dcd11562a90bfdc61b8fda75fb67bf4780dcb2ee6c32dc7377b75f2afc7
MD5 7acd54d7ecde00782e42427d5e6d1e1a
BLAKE2b-256 a856c32d0c2f808b828288c78798f823c6388330600234b937fe207f82868ae1

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