One outbound call, at install time
ImplementedThe only outbound network call in the codebase downloads model weights in scripts/download_models.py. A test asserts it. Pull the network during a demo and the product behaves identically.
Security & privacy
VoxShield analyses the most sensitive audio a person has — their phone calls. The architecture is built so that the honest answer to “where did my voice go?” is “nowhere”, and so that answer is verifiable rather than promised.
Architecture
One laptop, loopback bind, no runtime cloud dependency.
One in the whole codebase, at install time only.
The window is analysed and discarded. 0 bytes persisted.
AES-256-GCM, 192 floats, never returned by any API.
SHA-256; verification names the first broken entry.
Checked in a FastAPI dependency, before the handler runs.
Every tenant query takes the enterprise id first.
Privacy posture
Each row is a property of the implementation, not an intention.
| Claim | Detail |
|---|---|
| Raw audio persisted | Never — not to the database, not to a log, not to a temp file that survives the request. |
| Transcription | None. There is no ASR, so no new class of personal data is created. |
| Voiceprints | AES-256-GCM at rest, 192 floats, never returned by any API. |
| Erasure | Cryptographic destruction — ciphertext, nonce and tag overwritten in the same transaction. |
| Carrier numbers | Never stored in full. Last four digits only. |
| Uploads | Extension and magic bytes checked, 50 MB cap, deleted in a finally block. |
| Retention | Verdicts 30 days, calls 90 days. |
| SQL | No ORM and no f-string SQL — parameter binding only. |
| Forbidden in code | eval, unpickling untrusted data, shell interpolation of user input. |
A voice embedding that identifies a person is personal data. Under India's DPDP Act it is not “anonymised features”, and VoxShield never describes it that way. The DPDP rules were notified on 14 November 2025, and the maximum penalty for a failure of security safeguards is ₹250 crore — which is the clause the encryption requirement exists for.
Offline
The only outbound network call in the codebase downloads model weights in scripts/download_models.py. A test asserts it. Pull the network during a demo and the product behaves identically.
ECAPA is constructed directly rather than through from_hparams, because the published hyperparams.yaml resolves pretrainer paths against Hugging Face at load time. The downloaded file is left unmodified so its hash still matches upstream.
Authentication & roles
Sign-in, sessions, roles and tenancy scoping are built. A frontend that hides a button is a convenience; the check that matters resolves the session and the role before the handler body runs.
| Capability | Platform admin | Enterprise admin | Security | Bank | Agent |
|---|---|---|---|---|---|
| Manage enterprises | Yes | — | — | — | — |
| Manage employees & roles | Yes | Own | — | — | — |
| View calls & risk events | Yes | Yes | Yes | Yes | Own calls |
| Assign incidents | Yes | Yes | Yes | View only | — |
| Approve a mitigation | Yes | Yes | Yes | Bank actions | — |
| View the audit log | Yes | Yes | Yes | — | — |
| Read a voiceprint embedding | Nobody — no API returns one | ||||
scrypt hashing, secrets for token generation and hmac.compare_digest for comparison. The plaintext password, the OTP code and the session token are none of them stored.
Checked inside the principal resolver, so an authenticated mutating endpoint cannot skip it by construction rather than by review.
OTP expiry, attempt limits, rate limiting, replay, session revocation and the absolute cap, CSRF rejection, account enumeration and tenancy scope. More land as the remaining endpoints do.
Boundaries
VoxShield holds no ISO, SOC 2 or comparable certification, and no audit by a third party has taken place. The properties above are implementation facts, not accreditation.
The audit log is a SHA-256 hash chain in SQLite. It is tamper-evident, which is a different and smaller claim than tamper-proof, and it is never called a blockchain.
Nothing in VoxShield has ever blocked a real transaction or attached to a live carrier account. Where mitigation is demonstrated it is labelled as simulated.
Alerts are written to an outbox table and displayed in the Console. SMTP is off by default and would be the single runtime outbound socket if a deployment enabled it — the health endpoint reports which mode is live.
Verify it
The Console exposes audit verification in its Settings view, and the repository ships the tests that cover the corruption paths.