AUN Protocol Core SDK — identity, authentication, key management, E2EE
Project description
aun-core
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 aun-core
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.
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
aun_core-0.2.9.tar.gz
(199.9 kB
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
aun_core-0.2.9-py3-none-any.whl
(239.8 kB
view details)
File details
Details for the file aun_core-0.2.9.tar.gz.
File metadata
- Download URL: aun_core-0.2.9.tar.gz
- Upload date:
- Size: 199.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e676f83af212833289fd5f145bd35cbd178e1453d9cc8f9bc828b1214af7209
|
|
| MD5 |
a1dcbedbe5472d63fa98bdd9456d1430
|
|
| BLAKE2b-256 |
480a2d39fd80ac93dc68503c2262c938ee9f915fb8c9daf55d39e1ee38f976b1
|
File details
Details for the file aun_core-0.2.9-py3-none-any.whl.
File metadata
- Download URL: aun_core-0.2.9-py3-none-any.whl
- Upload date:
- Size: 239.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca6719fa03012b0918634ea984105bd8c5a69f9506806c528ef0cfeaf265b0fe
|
|
| MD5 |
53a4a2cdb6830da1b8c28fb349ee4b8c
|
|
| BLAKE2b-256 |
6b07b4c34271d84a66a16fb436ba8c2b8a83282cee1738b04c36f9ac8f2da5e0
|