A thinclient for the Katzenpost client daemon
Project description
katzenpost_thinclient
A thin client for sending and receiving messages via the Katzenpost mix network.
This PyPI package provides an async Python thin client library for interacting with a Katzenpost mixnet.
A mix network is a type of anonymous communications network. A
thin client library is code you may use as a dependency in your
application so that it can anonymously interact with services on
the mix network. The Katzenpost client daemon (kpclientd) is a
multiplexing client; many applications on the same device may use
their thin client libraries to connect to the daemon and interact
with mixnet services concurrently. All cryptographic operations,
including PQ Noise transport, Sphinx packet construction, and ARQ
retransmission, are performed by the daemon, not by this library.
Pigeonhole, in brief
Beyond simple request-response services, Katzenpost provides a storage layer called Pigeonhole. Applications communicate through encrypted, append-only streams composed of fixed-size, padded Boxes, sharded across storage replicas via consistent hashing. Access is governed by cryptographic capabilities: a write capability appends messages or places tombstones, whilst a separate read capability decrypts and verifies without conferring any ability to write. Streams are single-writer, multi-reader, and unlinkable to outside observers. Storage is ephemeral: Boxes are garbage-collected after roughly two weeks, so Pigeonhole is not intended for long-term archival storage. For a developer-oriented introduction, see Understanding Pigeonhole.
Documentation
- Thin Client How-to Guide, task-oriented examples in Go, Rust, and Python.
- Thin Client API Reference, the unified API reference for all three languages.
- Python API reference, pydoc-formatted reference for this package.
- Understanding Pigeonhole, conceptual background on Pigeonhole.
- Build from source, the canonical record of pinned versions for
kpclientdand the thin clients.
Installation
Install from PyPI:
pip install katzenpost_thinclient
Or, from a checkout of this repository:
pip install -e .
Compatibility
This package is intended to be used with the version of kpclientd
listed in Build from source.
That page is the canonical record of currently pinned tags for the
whole stack; please consult it before pinning a version of your own.
Running the tests
The tests/ directory contains the integration suite, which doubles
as a working reference for the API. The tests expect a running
Katzenpost mixnet; the most convenient way to obtain one is the
docker test mixnet shipped with the
Katzenpost monorepo.
Full instructions are in
Docker test network;
the short form is:
cd katzenpost/docker
make start wait run-ping
The mixnet runs kpclientd inside a container exposed on
127.0.0.1:64331, and writes a thin client configuration to
voting_mixnet/client/thinclient.toml. The test suite locates a
preconfigured fixture at testdata/thinclient.toml, which dials
the daemon on that port:
pytest
Applications using this library
Two larger programs that use this library:
- stats, a terminal application that prints the current mixnet status.
- worldmap, which renders an image of the mixnet transposed over a world map.
Contributions
This is a work in progress, and we welcome feedback from developers who try to use it. Pull requests are welcome at https://github.com/katzenpost/thin_client.
License
AGPLv3.
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 katzenpost_thinclient-0.0.18.tar.gz.
File metadata
- Download URL: katzenpost_thinclient-0.0.18.tar.gz
- Upload date:
- Size: 175.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9779ad569c3108b0ac9b18774055d10c93532bff33fb36460c76f5c1956253b
|
|
| MD5 |
6864adf0ebd4d69f43bdf4640b61ef88
|
|
| BLAKE2b-256 |
8bde3aa0b3a7608182a4127f42e87b0e47f0366776cd66c072c40c9848b7f2d5
|
Provenance
The following attestation bundles were made for katzenpost_thinclient-0.0.18.tar.gz:
Publisher:
publish-py.yml on katzenpost/thin_client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
katzenpost_thinclient-0.0.18.tar.gz -
Subject digest:
a9779ad569c3108b0ac9b18774055d10c93532bff33fb36460c76f5c1956253b - Sigstore transparency entry: 1801324031
- Sigstore integration time:
-
Permalink:
katzenpost/thin_client@bde289d6e4efad71da14fda6c90dd755c76e758c -
Branch / Tag:
refs/tags/py/v0.0.18 - Owner: https://github.com/katzenpost
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-py.yml@bde289d6e4efad71da14fda6c90dd755c76e758c -
Trigger Event:
push
-
Statement type:
File details
Details for the file katzenpost_thinclient-0.0.18-py3-none-any.whl.
File metadata
- Download URL: katzenpost_thinclient-0.0.18-py3-none-any.whl
- Upload date:
- Size: 75.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2a57f0fcd1ead2ed705c03f7d3a56b01dca232b5d27c0df6c22fbe376dd4b91
|
|
| MD5 |
ac77774cac7e7c3fa5e5c21b8e3d5935
|
|
| BLAKE2b-256 |
fe758965ebcba0b2af1716620d4f52202efc3bfa7db566fcd6dd79d39e35c734
|
Provenance
The following attestation bundles were made for katzenpost_thinclient-0.0.18-py3-none-any.whl:
Publisher:
publish-py.yml on katzenpost/thin_client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
katzenpost_thinclient-0.0.18-py3-none-any.whl -
Subject digest:
f2a57f0fcd1ead2ed705c03f7d3a56b01dca232b5d27c0df6c22fbe376dd4b91 - Sigstore transparency entry: 1801324131
- Sigstore integration time:
-
Permalink:
katzenpost/thin_client@bde289d6e4efad71da14fda6c90dd755c76e758c -
Branch / Tag:
refs/tags/py/v0.0.18 - Owner: https://github.com/katzenpost
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-py.yml@bde289d6e4efad71da14fda6c90dd755c76e758c -
Trigger Event:
push
-
Statement type: