X.509 certificate verification service for Swarmauri
Project description
Swarmauri Certs X509 Verify
An asynchronous X.509 certificate verification and parsing service
implementing CertServiceBase for the Swarmauri ecosystem. The
X509VerifyService works with PEM or DER encoded certificates to surface
metadata and perform lightweight trust checks suitable for development
and integration testing.
Features
- Async-first interface exposing
verify_certandparse_certcoroutines. - Accepts PEM or DER encoded certificates without additional tooling.
parse_certextracts the serial number, issuer, subject, validity window, signature algorithm, Subject Alternative Names (SAN) and Extended Key Usage (EKU) values.verify_certperforms a timestamp check and one-hop signature validation against provided trust roots or intermediates.- Designed for basic validation flows – revocation checking and complex
path building are intentionally out of scope and reported as
revocation_checked=Falsein the response.
Installation
Install the package with your preferred Python packaging tool:
pip install swarmauri_certs_x509verify
poetry add swarmauri_certs_x509verify
uv pip install swarmauri_certs_x509verify
Quick start
The example below issues an in-memory self-signed certificate, parses its
metadata and verifies the certificate against itself as a trust root.
Both coroutines are executed with asyncio.run for convenience in
scripts and documentation. The resulting dictionary mirrors the values
returned by the service at runtime.
# README example: verify and parse a development certificate
import asyncio
from datetime import datetime, timedelta, timezone
from typing import Any
from cryptography import x509
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.x509.oid import ExtendedKeyUsageOID, NameOID
from swarmauri_certs_x509verify import X509VerifyService
def issue_dev_certificate() -> bytes:
private_key = ec.generate_private_key(ec.SECP256R1())
subject = issuer = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "example.test")])
now = datetime.now(timezone.utc)
certificate = (
x509.CertificateBuilder()
.subject_name(subject)
.issuer_name(issuer)
.public_key(private_key.public_key())
.serial_number(x509.random_serial_number())
.not_valid_before(now - timedelta(minutes=1))
.not_valid_after(now + timedelta(days=1))
.add_extension(
x509.SubjectAlternativeName([x509.DNSName("example.test")]),
critical=False,
)
.add_extension(
x509.ExtendedKeyUsage([ExtendedKeyUsageOID.SERVER_AUTH]),
critical=False,
)
.sign(private_key=private_key, algorithm=hashes.SHA256())
)
return certificate.public_bytes(serialization.Encoding.PEM)
async def main() -> dict[str, dict[str, Any]]:
certificate_pem = issue_dev_certificate()
service = X509VerifyService()
parsed = await service.parse_cert(certificate_pem)
verification = await service.verify_cert(certificate_pem, trust_roots=[certificate_pem])
return {"parsed": parsed, "verification": verification}
example_result = asyncio.run(main())
print(example_result["parsed"]["subject"])
print(example_result["verification"]["valid"])
example_result["verification"]["valid"] resolves to True when the
certificate is valid for the supplied timestamp. If the time window fails
or no matching trust root is provided, the service returns
valid=False and the reason field is set to "invalid_chain_or_time".
Entry Point
The service registers under the swarmauri.certs entry point as
X509VerifyService and under peagen.plugins.certs as x509verify.
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_certs_x509verify-0.3.0.dev43.tar.gz.
File metadata
- Download URL: swarmauri_certs_x509verify-0.3.0.dev43.tar.gz
- Upload date:
- Size: 8.9 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 |
70312d668a4d70d9495bf3345b83d603127eba02ce362914ac5bdac5272adcb2
|
|
| MD5 |
a2b7851754e709325f01fbbbcf5cb230
|
|
| BLAKE2b-256 |
bc93195f95575a4029da96475308b9030b94d99f8bf1381295e9cac2a9b855f3
|
File details
Details for the file swarmauri_certs_x509verify-0.3.0.dev43-py3-none-any.whl.
File metadata
- Download URL: swarmauri_certs_x509verify-0.3.0.dev43-py3-none-any.whl
- Upload date:
- Size: 10.2 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 |
46a34d86cdcdcb3db30dba3da1737d4df76c970c19d701e2a1a44a81b2d9437e
|
|
| MD5 |
10bd6125d27aacd485315af3907e13b6
|
|
| BLAKE2b-256 |
47852ffa686b95f31ba0e30743e050173e7d6873f899b2ba6b64475abb5b1bc1
|