Hardware Signer

Zypher

The mathematical bridge between your agent and your signature.

Don't trust software. Trust physics.

32
3 optocouplers 2 IPS displays 32 lines of Rust

Every hardware wallet has a software trust boundary.

Ledger / Trezor / Keystone

  • USB/Bluetooth/QR = bidirectional data channel
  • Firmware can be exploited to exfiltrate keys
  • Trust their display, their firmware, their supply chain
  • Closed-source secure element

Zypher

  • Optocoupler = physically one-directional
  • No firmware can reverse a photon
  • Two independent displays, two MCUs
  • Open-source. Audit from silicon up.

How it's built.

Each layer assembles as you scroll. Six components. Zero trust boundaries.

PCB SUBSTRATE
RP2040 Agent MCU receives calldata
RP2040 Signing MCU holds private key
ISOLATION
6N137 DATA IN →
6N137 CLOCK →
← 6N137 SIG OUT
3.5" IPS Display
3.5" IPS Display
32 lines Rust — ASCII filter
01

PCB Substrate

Custom board. Two isolated zones. No shared traces between agent and signing side.

02

Agent MCU (RP2040)

Receives calldata from your computer. Decodes and displays the transaction. Cannot access keys.

03

Signing MCU (RP2040)

Holds private key in RAM. Signs only after local display verification. Never connected to network.

04

Optocoupler Barrier

Three 6N137 diodes. Light travels one direction. Data in, clock in, signature out. Physics, not firmware.

05

Dual Displays

Each MCU has its own 3.5" IPS. You see the transaction on both sides. Auto-compare catches any mismatch.

06

Rust ASCII Filter

The only trusted code. 32 lines. Filters to printable ASCII only. You can read every line in 5 minutes.

The only trusted element.

32 lines of Rust. Printable ASCII filter. Read it yourself.

// Zypher ASCII filter — the ONLY trusted code path
// If a byte is not printable ASCII, it is dropped.
// No exceptions. No escape sequences. No control chars.

fn filter_ascii(input: &[u8]) -> Vec<u8> {
    input
        .iter()
        .copied()
        .filter(|&b| b >= 0x20 && b <= 0x7E)
        .collect()
}

// That's it. No parsing. No state machine.
// If you can't print it, it doesn't pass.
// Verify: cargo test or read the 32 lines above.

Open-source. Auditable from silicon to firmware.

How Zypher signs.

01 Agent sends calldata to Zypher
02 Optocoupler passes data IN (light → diode)
03 Agent display shows decoded transaction
04 Signing MCU receives via isolation barrier
05 Signing display shows same TX — you compare
06 You press SIGN on the signing side
07 Signature passes OUT via optocoupler (← light)
08 Agent verifies signature matches original calldata

Verify it yourself.

Open-source. EVM-compatible. Any chain, any contract, any calldata.

In development · Hardware beta Q3 2026