This release is a pre-release and may not be stable for production use.
Swarmauri Signing ECDSA
An asynchronous ECDSA-based signer that implements the ISigning interface for
detached signatures over raw bytes and canonicalized envelopes.
Features
- JSON canonicalization built in, with optional CBOR canonicalization via
cbor2 - Supports the
ECDSA-P256-SHA256,ECDSA-P384-SHA384, andECDSA-P521-SHA512curves provided bycryptography - Multi-signature aware verification with opt-in algorithm restrictions through
the
requiremapping - Detached signature generation for both raw byte payloads and Swarmauri envelopes
Installation
pip
pip install swarmauri_signing_ecdsa
# Optional CBOR support
pip install "swarmauri_signing_ecdsa[cbor]"
Poetry
poetry add swarmauri_signing_ecdsa
# Optional CBOR support
poetry add "swarmauri_signing_ecdsa[cbor]"
uv
# Install uv if it is not already available on your system
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install the signer package
uv pip install swarmauri_signing_ecdsa
# Optional CBOR support
uv pip install "swarmauri_signing_ecdsa[cbor]"
Usage
The signer operates asynchronously and expects private keys to be supplied via
the KeyRef mappings defined in swarmauri_core. When verifying, provide the
corresponding public keys through the opts={"pubkeys": [...]} option.
import asyncio
from cryptography.hazmat.primitives.asymmetric import ec
from swarmauri_signing_ecdsa import EcdsaEnvelopeSigner
async def main() -> None:
signer = EcdsaEnvelopeSigner()
# Provide the private key as a KeyRef understood by swarmauri_core
private_key = ec.generate_private_key(ec.SECP256R1())
key_ref = {"kind": "cryptography_obj", "obj": private_key}
envelope = {
"headers": {"kid": "example"},
"payload": {"message": "signed hello"},
}
signatures = await signer.sign_envelope(
key_ref,
envelope,
canon="json",
)
is_valid = await signer.verify_envelope(
envelope,
signatures,
canon="json",
opts={"pubkeys": [private_key.public_key()]},
)
print(f"Signature valid? {is_valid}")
if __name__ == "__main__":
asyncio.run(main())
Entry Point
The signer registers under the swarmauri.signings entry point as
EcdsaEnvelopeSigner.
Want to help?
If you want to contribute to swarmauri-sdk, read up on our guidelines for contributing that will help you get started.
Metadata
Release files for swarmauri_signing_ecdsa 0.11.0.dev1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| swarmauri_signing_ecdsa-0.11.0.dev1.tar.gz | 9.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| swarmauri_signing_ecdsa-0.11.0.dev1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.7 kB
Release files / swarmauri_signing_ecdsa-0.11.0.dev1.tar.gz
| Download URL | swarmauri_signing_ecdsa-0.11.0.dev1.tar.gz |
|---|---|
| Size | 9.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42739f4341dfb4477cb5f590d477a512be0731ae364eb5f4dae360fb2fe74b85
|
|
BLAKE2b-256 checksum How to use checksums |
be858bd458ff15e610126364eec637cc80d7cc8e62f7caaf8d5a8684e682be38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","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}
|
Release files / swarmauri_signing_ecdsa-0.11.0.dev1-py3-none-any.whl
| Download URL | swarmauri_signing_ecdsa-0.11.0.dev1-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26e760311117bb4233305877004c26e7ff3b9d6623c9550ea15a095faaf1d02a
|
|
BLAKE2b-256 checksum How to use checksums |
24ae103c3ab43c403154686cb6762259575ebf4eecc941faf752acbbdd4ad139
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","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}
|