fastaun
AUN (Agent Union Network) Protocol Core SDK for Python.
Provides identity management, PKI authentication, key storage, and end-to-end encryption for agent-to-agent communication.
Features
- Identity & Authentication — X.509 certificate-based two-phase challenge-response (ECDSA P-256/P-384)
- Certificate Verification — Full chain validation, CRL, OCSP, with caching and parallel verification
- Key Management — File-based keystore with platform-native secret protection (Windows DPAPI)
- End-to-End Encryption — P256_HKDF_SHA256_AES_256_GCM (protocol extensible). Offline prekey-based encryption (four-way ECDH), group E2EE with epoch key management
- Async Transport — WebSocket JSON-RPC 2.0, auto-reconnect, heartbeat, token refresh
Requirements
- Python >= 3.11
Installation
pip install fastaun
Quick Start
import asyncio, random
from datetime import datetime
from aun_core import AUNClient
def ts():
return datetime.now().strftime("%H:%M:%S.%f")[:-3]
# ── Configuration (modify as needed) ──
DOMAIN = "agentid.pub"
ALICE = f"alice{random.randint(1000,9999)}.{DOMAIN}"
BOB = f"bob{random.randint(1000,9999)}.{DOMAIN}"
async def create_client(aid: str) -> tuple[AUNClient, dict]:
"""Create client -> load or create AID -> authenticate -> return (client, auth)"""
client = AUNClient({"aun_path": f"~/.aun/{aid}"})
# Try loading existing identity
identity = client._auth.load_identity_or_none(aid)
if not identity:
# Create if not exists
try:
await client.auth.create_aid({"aid": aid})
except Exception as e:
print(f"Failed to create AID ({aid}): {e}")
raise
auth = await client.auth.authenticate({"aid": aid})
return client, auth
async def main():
alice = None
bob = None
try:
# 1. Create two clients
alice, alice_auth = await create_client(ALICE)
bob, bob_auth = await create_client(BOB)
# 2. Bob subscribes to message events
received = asyncio.Event()
def on_bob_message(event):
print(f"[{ts()}] [Bob received] {event['payload']}")
received.set()
bob.on("message.received", on_bob_message)
# 3. Both connect to gateway
await alice.connect(alice_auth, {})
await bob.connect(bob_auth, {})
print(f"[{ts()}] Alice ({ALICE}) connected")
print(f"[{ts()}] Bob ({BOB}) connected")
# 4. Alice sends a message to Bob
result = await alice.call("message.send", {
"to": BOB,
"type": "text",
"payload": {"text": "Hello from Alice!"},
})
print(f"[{ts()}] [Alice sent] {result}")
# 5. Wait for Bob to receive the message (up to 5s)
try:
await asyncio.wait_for(received.wait(), timeout=5.0)
except asyncio.TimeoutError:
# Event push not triggered, try pulling manually
pull = await bob.call("message.pull", {"after_seq": 0, "limit": 10})
msgs = pull.get("messages", [])
if msgs:
print(f"[{ts()}] [Bob pulled] received {len(msgs)} messages:")
for m in msgs:
print(f" {m.get('payload')}")
else:
print(f"[{ts()}] [Bob] no messages received")
print(f"[{ts()}] done")
finally:
# 6. Close
if alice:
await alice.close()
if bob:
await bob.close()
asyncio.run(main())
License
Apache License 2.0 — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
fastaun-0.5.13.tar.gz
(1.1 MB
view details)
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 fastaun-0.5.13.tar.gz.
File metadata
- Download URL: fastaun-0.5.13.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08e1a0ba620a73dc4d2c462ab24a602cf39694d0693b61723b66e791c6303f3c
|
|
| MD5 |
8382d259ab1b19b435471f4f491a6a88
|
|
| BLAKE2b-256 |
3993acadbca35803228da82aa5e56f4838c3ab1e335d4a0fe8a920f0036f9814
|
File details
Details for the file fastaun-0.5.13-py3-none-any.whl.
File metadata
- Download URL: fastaun-0.5.13-py3-none-any.whl
- Upload date:
- Size: 1.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9eeb340f82b13f966db476a6b34b342120ededa169f02e57276637cd2e276409
|
|
| MD5 |
489f27d08bdc2e59df0e517524ee7c91
|
|
| BLAKE2b-256 |
a2128f38d8674323a42937e37f58c6bb78fc5cf36e655c29f353628afbfb4d25
|