Skip to main content

Give any Python agent a real, routable Whisper IPv6 identity and safe egress.

Project description

whisper-id

A real, routable IPv6 identity and safe egress for any Python agent — in two calls.

pip install whisper-id            # add [socks] for requests+SOCKS: pip install "whisper-id[socks]"
from whisper_id import register, egress
import requests

agent = register("my-bot")                       # a routable Whisper /128 identity
with egress():                                   # route this block through your /128
    requests.get("https://api64.ipify.org").text # ← leaves from your Whisper IPv6

That's it. Inside the with block the standard proxy env vars point at your local Whisper proxy, so requests, httpx, urllib, and most libraries "just work"; on exit they're restored.

API

Call Does
register(name, *, new_key=False) Create a named agent — a routable /128. new_key=True mints a new agent and its own API key. → Agent(address, id, name)
egress(agent=None, *, tier="socks5", set_env=True) Context manager: bring up egress bound to your /128. Yields Egress (.port, .proxy_url, .socks_url, .proxies). tier="wireguard" for a routed /128.
verify(address) Keyless — is address a real Whisper agent? (DANE + DNSSEC + reverse-DNS + JWS) → bool
verify_details(address) Keyless — the full verdict (is_whisper_agent, fqdn, operator, tenant, dane_ok, jws_ok, …) or None
rdap(address) Keyless — the public RDAP record for a /128, or None
egress_ip() Keyless — the IP this process leaves from (a /128 when routed, else the platform's) → str
ip() Your current egress IP via the CLI, proving it's your /128. → str

Pass the proxy explicitly instead of via env if you prefer:

with egress(set_env=False) as e:
    requests.get(url, proxies=e.proxies)

Keyless / serverless (no CLI)

verify, verify_details, rdap, and egress_ip are keyless — pure HTTPS, no whisper CLI and no key — so they run anywhere, including serverless/edge functions:

from whisper_id import verify, rdap
if verify(addr):                       # one HTTPS call; works in AWS Lambda, Cloudflare, etc.
    print(rdap(addr)["name"])

register, egress, and ip need the CLI (egress needs the local proxy; register needs your key).

Requirements

For register / egress / ip, the whisper CLI on your PATH (this package is a thin, dependency-free wrapper over it). The keyless calls above need nothing.

curl get.whisper.online | sh

For authenticated calls (register, egress, ip), set WHISPER_API_KEY in the environment or run whisper login. verify is keyless. ($WHISPER_BIN overrides the CLI path.)

Links

MIT licensed.

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

whisper_id-0.2.0.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

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

whisper_id-0.2.0-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file whisper_id-0.2.0.tar.gz.

File metadata

  • Download URL: whisper_id-0.2.0.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for whisper_id-0.2.0.tar.gz
Algorithm Hash digest
SHA256 136e8bc05cad4df12a2b91832f62be214a2120a8b4bce262e07200d2602b9950
MD5 b3fe43a354e366f8f176f47e977d8f3b
BLAKE2b-256 b9935a525408f1ad806c5b972d9db03f9b1cdf4a4cecaa8ff02c83dcd3f3822b

See more details on using hashes here.

Provenance

The following attestation bundles were made for whisper_id-0.2.0.tar.gz:

Publisher: publish.yml on whisper-sec/whisper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file whisper_id-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: whisper_id-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for whisper_id-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1821fee1a4f159cecc501829eae0a838584adbc155d53870402d2eadfadcb58e
MD5 278c8066aa99cee72b199b8574a6a611
BLAKE2b-256 4c4137f7630728047d199e19c0dd8bea829fc4c475d9ba3dac50b4800c7688b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for whisper_id-0.2.0-py3-none-any.whl:

Publisher: publish.yml on whisper-sec/whisper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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