secp256k1-based signer for Swarmauri
Project description
Swarmauri Signing Secp256k1
An opinionated secp256k1 ECDSA signer that implements the Swarmauri
ISigning interface for detached signatures over raw bytes and
canonicalized envelopes.
Features
- Asynchronous API –
sign_bytes,verify_bytes,sign_envelope, andverify_envelopeoperate withasyncioand return canonical Swarmauri signature payloads. - Multiple canonicalizations – JSON canonicalization is always
available, while CBOR canonicalization can be enabled with the optional
cbor2dependency. - Flexible key loading – accepts PEM strings/paths, JWK dictionaries, or
native
cryptographykey objects via theKeyRefprotocol. - Deterministic verification requirements – verification expects one or
more secp256k1 public keys provided through
opts["pubkeys"]. - Signature format control – DER encoding is returned by default; supply
opts={"format": "RAW"}when signing or verifying to work with JOSE-styler || sconcatenated signatures.
Installation
The package requires cryptography and, optionally, cbor2 when CBOR
canonicalization is needed.
pip install swarmauri_signing_secp256k1
# install with CBOR canonicalization support
pip install "swarmauri_signing_secp256k1[cbor]"
poetry add swarmauri_signing_secp256k1
uv add swarmauri_signing_secp256k1
# with the optional CBOR extra
uv add "swarmauri_signing_secp256k1[cbor]"
Usage
Sign and verify raw bytes
The signer derives a key identifier (kid) from the provided private key and
requires the corresponding public key when verifying signatures.
import asyncio
from cryptography.hazmat.primitives.asymmetric import ec
from swarmauri_signing_secp256k1 import Secp256k1EnvelopeSigner
async def main() -> bool:
signer = Secp256k1EnvelopeSigner()
private_key = ec.generate_private_key(ec.SECP256K1())
key_ref = {"kind": "cryptography_obj", "obj": private_key}
payload = b"hello from secp256k1"
signatures = await signer.sign_bytes(key_ref, payload)
public_key_ref = {
"kind": "cryptography_obj",
"obj": private_key.public_key(),
}
is_valid = await signer.verify_bytes(
payload,
signatures,
opts={"pubkeys": [public_key_ref]},
)
print(f"Signature valid? {is_valid}")
assert is_valid
return is_valid
if __name__ == "__main__":
asyncio.run(main())
Canonicalized envelopes
To sign envelopes, pass JSON-serializable dictionaries (and optionally
canon="cbor"). Canonicalization reuses the same raw signing logic shown
above:
envelope = {"payload": {"msg": "hello"}}
signatures = await signer.sign_envelope(key_ref, envelope, canon="json")
is_valid = await signer.verify_envelope(
envelope,
signatures,
opts={"pubkeys": [public_key_ref]},
)
Entry Point
The signer registers under the swarmauri.signings entry point as
Secp256k1EnvelopeSigner.
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
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_secp256k1-0.3.0.dev48.tar.gz.
File metadata
- Download URL: swarmauri_signing_secp256k1-0.3.0.dev48.tar.gz
- Upload date:
- Size: 13.0 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 |
ef4d8e9232de762a13414c8348f645c655516e778c9e94cf692d43d932901366
|
|
| MD5 |
f9936c2543e4b9071e7b533ada8d3db0
|
|
| BLAKE2b-256 |
221da40ddf9c3dc2ac2718349a8c7c19586f0e6f0e065da100c1873a71742678
|
File details
Details for the file swarmauri_signing_secp256k1-0.3.0.dev48-py3-none-any.whl.
File metadata
- Download URL: swarmauri_signing_secp256k1-0.3.0.dev48-py3-none-any.whl
- Upload date:
- Size: 12.9 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 |
448b4146498e267dd0f21b10ab48fcd099f4822e3e60d1cf08a31dc0ff7ded38
|
|
| MD5 |
32afc78044b1bb108c660802c82d5291
|
|
| BLAKE2b-256 |
da1efd8c59efaecd096cf7d768df86e01bbf3d321195e6ac9e6f7998a7bf4d49
|