← Work
Case No. 04SecurityCommunicationsMaintained

The client invented the crypto. We built everything around it.

Quantum Bridge builds quantum-safe key distribution. Black Phone is where it ships: post-quantum encrypted chat and calls, plus the portal, the kiosk, and the backend - every one of them Dart.

iOSAndroidWebLinux
key exchanges fused into every secret - one of them post-quantum3
apps in one Dart workspace - phone, portal, kiosk, server4
the version line, three years after the first commitv4.x
the full stack deploys on customer hardwareon-site
ClientQuantum Bridge Technologies
Engagementshipped 2023, rehired 2025 - ongoing
Team3 engineers · QA · Design
Tech stackFlutter · Dart · C over FFI
PlatformsiOS · Android · Web · Linux
the product

The product.

Black Phone admin portal: users table and a user detail panel listing Security Hubs with live status and reauthenticate, delete and block actions
Black Phone chats list on a dark starfield background, with search and conversation rows
Distribution Tower kiosk: a QR code that pairs the operator's phone with the tower, above a Connect button

chats · fleet admin · distribution tower - one dark system

how the scope grew

Shipped in 2023. Rehired in 2025.

Black Phone shipped in 2023 and did its job. Two years later Quantum Bridge returned with a bigger brief - and v1 grew into a product family.

  1. 01Encrypted messenger

    The 2023 brief: put DSKE, the client's quantum-safe key exchange, inside a working chat app.

  2. 02Encrypted calls

    WebRTC voice joins, encrypted frame by frame with the same key material as the messages.

  3. 03The return

    v1 holds up. Two years later the client came back to turn it into a product.

  4. 04Groups + monorepo

    The data model remodeled around group messaging; the codebase rebuilt as a Melos workspace.

  5. 05Admin + backend

    A Flutter web portal for fleet management, and a Dart relay server that deploys on premises.

  6. 06Distribution Tower

    A Linux kiosk app - also Flutter - provisioning security hubs in the field.

  7. now
    07Post-quantum

    ML-KEM-768 joins ECDH and DSKE: three key exchanges fused into one secret.

the system

Four apps. One language. Backend included.

phoneFlutter
  • Black Phoneencrypted chat and calls - iOS, Android
  • Native bridgesCallKit, VoIP push - ffigen and jnigen, no plugins
surfacesFlutter
  • Admin portaluser and fleet management - Flutter web, utopia_cms
  • Distribution TowerLinux kiosk provisioning security hubs on site
backendDart
  • Message serviceWebSocket relay in Dart Shelf - compiled to one binary
  • Self-hosted stackSupabase, Caddy, TURN - one compose stack, on premises
cryptoC / FFI
  • DSKE SDKthe client's proprietary key distribution, bound over FFI once and shared by the phone app and the backend
  • ML-KEM-768FIPS 203 post-quantum KEM, built from source

One language from screen to server: the phone, the portal, the kiosk, and the relay are all Dart. The crypto stays native - bound over FFI, not rewritten. That native layer is bound once and reused - the same binding that runs on the phone runs inside the backend too.

the hard parts

The three hardest problems in the build.

01

Three key exchanges, one secret

the problem

Quantum-safe messaging cannot rest on a single key exchange. The client's DSKE ships as a closed native SDK, ML-KEM is a C library, and both had to run inside a Flutter app without blocking it.

what we did
Every conversation derives its secret from three exchanges - ECDH, DSKE, and ML-KEM-768 - combined so that breaking one breaks nothing. The native SDKs are bound over FFI and kept off the main isolate, and the exchange lifecycle - setup, initial exchange, rotation - is written down as a formal spec, not tribal knowledge.
crypto_secret_service.dart
final secret = fuse(
  await ecdh.exchange(peer),   // classical
  await dske.quantumSecret(),  // client SDK, over FFI
  await mlkem.decapsulate(ct), // FIPS 203, post-quantum
);
Black Phone group conversation with encrypted message bubbles and voice and video call buttons in the top bar

three exchanges · one secret · breaking one breaks nothing

02

Calls on the same key material

the problem

End-to-end encryption that covers text but not voice is a half-claim. Calls had to use the same key material as messages - and still ring like phone calls.

what we did
WebRTC voice, encrypted at the frame level with keys derived from the same triple exchange. CallKit and VoIP push are wired through generated FFI bridges instead of off-the-shelf plugins, so an encrypted call lights up the lock screen like a native one.
Black Phone outgoing call: Dana Smith, Calling, with end-call, video and mute buttons on a dark starfield
Black Phone incoming call from Martin Randolph with decline and answer buttons

webrtc voice, frame-encrypted · the relay cannot listen

03

A backend that deploys on premises

the problem

Security-hub customers do not put their keys in someone else's cloud. The whole system had to deploy on premises and keep running without a dedicated ops team.

what we did
The relay server is Dart - same models, same repo as the apps - compiled to a self-contained binary in a container built from scratch. Supabase, Caddy, and the TURN server self-host from one compose stack, and the Tower kiosk provisions security hubs on site.
Distribution Tower kiosk screen: connect instructions telling the operator to scan the tower's QR code, then each Security Hub's code, with a Connect button

the distribution tower · security hubs provisioned on site

the design

The design system.

Black Phone design specimen: Montserrat type on a literal-black canvas, teal primary with a purple accent ramp
A dark-only system for all four apps: a literal-black canvas at #000000, one teal accent - #079880 - doing primary, call, and sent-message duty, and Montserrat carrying every surface from the phone to the Tower kiosk.
still shipping

Three years in, version 4.x, still shipping.

Black Phone is on its 4.x line, with the portal, the Tower, and the on-site backend shipping from the same workspace. The repository carries its own agent layer - five agents, eight project skills, enforcement hooks - built on the open-source plugin marketplace we publish. Two years after v1 shipped, the client came back to build the rest.
talk to us

Building something security-critical?

The engineers who built this system answer the contact form.