Skip to main content

AUN Protocol Core SDK — identity, authentication, key management, E2EE

Project description

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.

Project details


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.4.3.tar.gz (632.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastaun-0.4.3-py3-none-any.whl (740.7 kB view details)

Uploaded Python 3

File details

Details for the file fastaun-0.4.3.tar.gz.

File metadata

  • Download URL: fastaun-0.4.3.tar.gz
  • Upload date:
  • Size: 632.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fastaun-0.4.3.tar.gz
Algorithm Hash digest
SHA256 dc01154f6d5172d3d5602430b795ef21b57a7b4a8be407a5f9944c4a735eafb7
MD5 3b6a0d7d3c9b24a40117ac3edad16b5f
BLAKE2b-256 0f812d3f81cc49e649887893214e3a54cc6ddb96f6c0c6ea2ec55b8f9ba57456

See more details on using hashes here.

File details

Details for the file fastaun-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: fastaun-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 740.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fastaun-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 09ab1f1d3e60d5bc881344b7a0fb71bb4e9b48a8b89a37157bfd052bfd1725b8
MD5 cb7e99b916872adacd09706a787c42f3
BLAKE2b-256 50f7efd1118a8af0a1e1344ca9ee0d3e0b05e44af25bdd94b76d79f1c5c8e31d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page