Composite JWS signer/verifier for Swarmauri
Project description
Swarmauri Signing JWS
Composite JSON Web Signature (JWS) signer and verifier that orchestrates multiple Swarmauri signing providers behind a single asynchronous API.
Features
- Async helpers for both compact and general JSON JWS serialization
- Algorithm routing across HMAC (HS256/384/512), RSA (RS*/PS*), ECDSA
(ES256/384/512), Ed25519 (EdDSA), and optional secp256k1 (ES256K when the
secp256k1extra is installed) - Works with direct key material, Swarmauri signer objects, or a JWKS resolver
while returning the protected header and payload via
JwsResult
Installation
pip
pip install swarmauri_signing_jws
Poetry
poetry add swarmauri_signing_jws
uv
To add the dependency to a pyproject.toml managed by uv:
uv add swarmauri_signing_jws
Or install it into the active environment:
uv pip install swarmauri_signing_jws
Optional extras:
secp256k1enables ES256K support throughswarmauri_signing_secp256k1
Usage
import asyncio
from swarmauri_signing_jws import JwsSignerVerifier
async def main() -> None:
signer = JwsSignerVerifier()
key = {"kind": "raw", "key": "0" * 32}
compact = await signer.sign_compact(
payload={"msg": "hi"},
alg="HS256",
key=key,
)
result = await signer.verify_compact(
compact,
hmac_keys=[key],
)
print(result.payload.decode("utf-8"))
if __name__ == "__main__":
asyncio.run(main())
The public methods accept either raw strings or JWAAlg enum values for the
alg parameter. Compact verification returns a JwsResult dataclass containing
the parsed header and payload bytes so applications can safely forward or decode
the authenticated message.
API highlights
sign_compact(...)/verify_compact(...)wrap the standard compact serialization, including optional allowlists and JWKS resolvers.sign_general_json(...)/verify_general_json(...)operate on the general JSON serialization and support multi-signer verification withmin_signersthresholds.- Each algorithm family accepts dedicated key collections (
hmac_keys,rsa_pubkeys,ec_pubkeys,ed_pubkeys,k1_pubkeys) or ajwks_resolvercallback for dynamic key retrieval.
HMAC key requirements
All HMAC-based operations require a secret of at least 32 bytes (256 bits).
Shorter keys are rejected to avoid truncation mistakes and to keep forgery
probabilities negligible even after many verification attempts.
Rationale:
- Forgery success scales with tag length; a 256-bit tag keeps the chance negligible even after many tries (NIST SP 800‑107 Rev.1).
- RFC 7518 already mandates HS256 keys ≥ 256 bits; using the full HMAC-SHA-256 output avoids inadvertent strength reduction.
- A full 32-byte tag preserves ≈128-bit security even under generic quantum search speedups (NIST IR 8547).
- Fixed-length tags simplify constant-time verification and prevent configuration mismatches.
Entry Point
The signer registers under the swarmauri.signings entry point as
JwsSignerVerifier.
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_jws-0.3.0.dev47.tar.gz.
File metadata
- Download URL: swarmauri_signing_jws-0.3.0.dev47.tar.gz
- Upload date:
- Size: 15.2 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 |
53651c86b28fdea8acf10f1a483373488342d371fc6eb031c6ccecaf03505e6b
|
|
| MD5 |
d622999b403e4b70d4f7fbb0e6494cd3
|
|
| BLAKE2b-256 |
60e55df963f3d1f85286286908a75f6c99b98bce3ec60f6345e8353649dccfe1
|
File details
Details for the file swarmauri_signing_jws-0.3.0.dev47-py3-none-any.whl.
File metadata
- Download URL: swarmauri_signing_jws-0.3.0.dev47-py3-none-any.whl
- Upload date:
- Size: 14.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 |
d4266da7f2d22e0b00e3f4e09bcadbf455ae516dffd679991a60216f249ab7b0
|
|
| MD5 |
6bd784254bde7eae1af49d617c55322b
|
|
| BLAKE2b-256 |
ba9e1e53f2062468dd90bad38bc6c4f59c9b3c7143ac877a0e068098d3813fd4
|