Python bindings for the gamlastan SAML 2.0 library
Project description
pygamlastan
Python bindings for gamlastan 0.5.0, a pure-Rust SAML 2.0 library - types, XML, crypto, metadata, bindings, security, and profiles. Built with PyO3 0.29 + maturin (abi3, Python ≥ 3.10).
The binding mirrors gamlastan's modules as Python submodules:
pygamlastan.{core, xml, crypto, bindings, metadata, security, profiles, attribute_map, idp}. Parsing converts gamlastan's zero-copy *Ref views to owned
values at the FFI boundary, so no Rust lifetime escapes into Python.
Example - SP processes an IdP response
from pygamlastan import xml, profiles, security, crypto
# Verify the response signature with the trusted IdP certificate.
verifier = crypto.SamlVerifier.from_cert(idp_cert_pem)
verified = verifier.verify_enveloped(response_xml)
parsed = xml.parse_response(response_xml)
result = profiles.process_response(
parsed,
security.SecurityConfig(), # production defaults
sp_entity_id="https://sp.example.org/sp",
acs_url="https://sp.example.org/acs",
expected_idp_entity_id="https://idp.example.org",
expected_request_id="_req123",
verified_signed_ids=verified.signed_reference_ids(),
replay_cache=security.InMemoryReplayCache(),
)
print(result.name_id, result.attributes_dict())
HSM / PKCS#11 signing
from pygamlastan import crypto
prov = crypto.Pkcs11Provider("/usr/lib/softhsm/libsofthsm2.so")
session = prov.open_session("1234")
signer = crypto.SamlSigner.with_pkcs11(session.signer("saml-signing-key", "rsa-sha256"))
signed = signer.sign_enveloped(xml_with_signature_template)
Deploying with an HSM? Prefer building the wheel in - or against - your target environment instead of relying on the generic prebuilt wheel. The compiled extension links the host's C/crypto stack, and your PKCS#11 module (SoftHSM2, kryoptic, or a vendor driver) is
dlopen-ed at runtime from that same host. Building where your token tooling and system libraries live (e.g.maturin build --releaseon the target host or a container matching production) avoids glibc/loader and provider-ABI mismatches and lets you validate signing against the real module before shipping.
Development
uv venv
uv pip install --python .venv/bin/python maturin
VIRTUAL_ENV=$PWD/.venv .venv/bin/maturin develop --uv
.venv/bin/python -m pytest tests/
The PKCS#11 test self-skips unless SoftHSM2 (softhsm2-util + pkcs11-tool) is
installed; when present it provisions a throwaway token and signs for real.
Documentation
User documentation (Sphinx 9.1) lives in docs/: installation, a quickstart, task
guides (SP/IdP integration, signing & HSM, bindings, metadata, attributes,
validation), and a per-module API reference. Build it with the project venv so the
package is importable:
uv pip install --python .venv/bin/python --group docs
.venv/bin/python -m sphinx -b html docs docs/_build/html
# open docs/_build/html/index.html
Type stubs
The package ships PEP 561 type information: py.typed plus one .pyi per submodule,
living in python/pygamlastan/ (a maturin mixed Rust+Python layout where the compiled
extension is pygamlastan._native). The stubs are included in the wheel, so mypy /
pyright pick them up with no extra configuration.
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 pygamlastan-0.1.0.tar.gz.
File metadata
- Download URL: pygamlastan-0.1.0.tar.gz
- Upload date:
- Size: 114.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b33d3d6a20bd088b5ba514c830ec62a40b38a5cec8da6fa9bf9ed33d656a4d5a
|
|
| MD5 |
c08e155c5c7bfcedfb0fb2bf655d3814
|
|
| BLAKE2b-256 |
4a6a6cfb9d517426e5313a528cd82eec1c125d32c6986e2d87fb63245fe19f15
|
Provenance
The following attestation bundles were made for pygamlastan-0.1.0.tar.gz:
Publisher:
release.yml on kushaldas/pygamlastan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pygamlastan-0.1.0.tar.gz -
Subject digest:
b33d3d6a20bd088b5ba514c830ec62a40b38a5cec8da6fa9bf9ed33d656a4d5a - Sigstore transparency entry: 1952689676
- Sigstore integration time:
-
Permalink:
kushaldas/pygamlastan@14b5b12d0cf1e2ab99f5873872ce3bd85b059d3a -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/kushaldas
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@14b5b12d0cf1e2ab99f5873872ce3bd85b059d3a -
Trigger Event:
push
-
Statement type:
File details
Details for the file pygamlastan-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pygamlastan-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.10+, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd397686c5ef6e06ab2e75481a7c2366ac0da935347f7e3657dc7b53d4387c68
|
|
| MD5 |
9226d02d2e64139a543e66bd63d493aa
|
|
| BLAKE2b-256 |
10f43729064f4025f7b507a9be72f2e6c76262901ec60befba5f4a0ac93330ad
|
Provenance
The following attestation bundles were made for pygamlastan-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl:
Publisher:
release.yml on kushaldas/pygamlastan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pygamlastan-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl -
Subject digest:
fd397686c5ef6e06ab2e75481a7c2366ac0da935347f7e3657dc7b53d4387c68 - Sigstore transparency entry: 1952689951
- Sigstore integration time:
-
Permalink:
kushaldas/pygamlastan@14b5b12d0cf1e2ab99f5873872ce3bd85b059d3a -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/kushaldas
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@14b5b12d0cf1e2ab99f5873872ce3bd85b059d3a -
Trigger Event:
push
-
Statement type: