OpenPGP envelope signer for Swarmauri
Project description
Swarmauri Signing PGP
The swarmauri_signing_pgp package provides an OpenPGP signer for the Swarmauri
SDK. It creates and verifies detached signatures over raw byte payloads or
structured envelopes that are canonicalized to JSON or, optionally, CBOR.
Features
- Detached OpenPGP signatures for bytes and envelopes
- JSON canonicalization with optional CBOR support via
cbor2 - Multi-signer verification with configurable minimum signer requirements
- Private key loading from in-memory
pgpyobjects or ASCII-armored blobs - Passphrase handling for locked private keys
Installation
Install the package with your preferred Python packaging tool:
pip install swarmauri_signing_pgp
poetry add swarmauri_signing_pgp
uv pip install swarmauri_signing_pgp
Optional CBOR support
Enable canonicalization to CBOR by installing the optional dependency group:
pip install "swarmauri_signing_pgp[cbor]"
poetry add swarmauri_signing_pgp -E cbor
uv pip install "swarmauri_signing_pgp[cbor]"
Usage
The signer exposes asynchronous methods from the Swarmauri signing base class.
Key references are dictionaries describing how to load private keys. For pgpy
objects, the signer expects a mapping such as {"kind": "pgpy_key", "priv": pgpy_key}. Verification requires the corresponding public keys supplied in the
opts={"pubkeys": [...]} argument.
Sign and verify raw bytes
import asyncio
from pgpy import PGPKey, PGPUID
from pgpy.constants import (
CompressionAlgorithm,
HashAlgorithm,
KeyFlags,
PubKeyAlgorithm,
SymmetricKeyAlgorithm,
)
from swarmauri_signing_pgp import PgpEnvelopeSigner
def make_demo_key() -> PGPKey:
key = PGPKey.new(PubKeyAlgorithm.RSAEncryptOrSign, 2048)
uid = PGPUID.new("Example User", email="user@example.com")
key.add_uid(
uid,
usage={KeyFlags.Sign},
hashes=[HashAlgorithm.SHA256],
ciphers=[SymmetricKeyAlgorithm.AES256],
compression=[CompressionAlgorithm.ZLIB],
)
return key
async def main() -> None:
signer = PgpEnvelopeSigner()
key = make_demo_key()
key_ref = {"kind": "pgpy_key", "priv": key}
payload = b"openpgp demo"
signatures = await signer.sign_bytes(key_ref, payload)
verified = await signer.verify_bytes(
payload,
signatures,
opts={"pubkeys": [key.pubkey]},
)
print("Verified:", verified)
asyncio.run(main())
The signer returns detached signatures that include both binary and ASCII-armored
representations. Passphrases for locked private keys can be supplied through
opts={"passphrase": "secret"}.
Sign envelopes
Envelopes are canonicalized before signing. JSON canonicalization is always available and CBOR becomes available when the optional dependency group is installed:
envelope = {"subject": "demo", "body": "hello"}
signatures = await signer.sign_envelope(key_ref, envelope, canon="json")
await signer.verify_envelope(
envelope,
signatures,
canon="json",
opts={"pubkeys": [key.pubkey]},
)
Use canon="cbor" to opt into CBOR canonicalization. The supports() helper
exposes the available algorithms, canonicalization formats, and feature flags at
runtime.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file swarmauri_signing_pgp-0.3.0.dev47.tar.gz.
File metadata
- Download URL: swarmauri_signing_pgp-0.3.0.dev47.tar.gz
- Upload date:
- Size: 10.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ff552a7afdc3dca42fe547599c472fe797a9df9d5e18cf4513b2c13e7d6f75b
|
|
| MD5 |
7172a4d9a29ce6c3a78e7044434b5d41
|
|
| BLAKE2b-256 |
f75317520747ec8f55711dbc73189f88dcc8b043412d24595df8d8fbd3a87e39
|
File details
Details for the file swarmauri_signing_pgp-0.3.0.dev47-py3-none-any.whl.
File metadata
- Download URL: swarmauri_signing_pgp-0.3.0.dev47-py3-none-any.whl
- Upload date:
- Size: 11.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10e47dc535884b31bf54649486137bed35c271998f1d59b848e394050f98f2f7
|
|
| MD5 |
9e5c05f66dc58b237f5c96dc07a0af8f
|
|
| BLAKE2b-256 |
35771768722293bc1cbd2e9c86380868a6fcafa8a66ce9d991edc51324ce4057
|