youros

FeaturesUnderneath

Network

Whatever forwards your traffic can't read it unless you granted it that, what is sealed today stays sealed, and a network that changes under you doesn't drop what you were doing.

Pipes↑ Why · Alex reaches the laptop at home from a café Alex gets through from any network that allows the web, and directly where the network lets it.

A pipe is a stream or a datagram channel, and only the relay WebSocket is required

Every other way through is an optimisation.

Shown when a session runs over the WebSocket alone; the core has no congestion control.

0 of 2 tests passed · 1 place in the code

  • not run a test e2e/relay/client/src/main.rs:9
  • not run a test node/tests/session.rs:3
  • code relay/src/lib.rs:3

A direct pipe's certificate hash or fingerprint arrives sealed

Whoever relays the offer must not be able to stand in the middle.

Shown when a swapped hash or fingerprint fails the direct pipe.

0 of 1 test passed · 0 places in the code

  • not run a swapped fingerprint fails the direct pipe node/tests/direct.rs:89

Where the network allows, a session moves onto a direct pipe by itself

The relay is the floor, not the way: a direct pipe is quicker, and carries nothing through anyone else.

Shown when a browser and a machine that can reach each other move their session onto a WebRTC data channel; a file read after the move puts none of the session's frames through the relay.

0 of 1 test passed · 1 place in the code

  • not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link e2e/node/pair.spec.mjs:14
  • code node/src/direct.rs:7

When no direct pipe can be made, or one drops, the relay carries on

A network that blocks UDP, or a NAT nothing gets through, costs speed and nothing else.

Shown when with no route between browser and machine, their files still work over the relay; a direct pipe closed in the middle of a read hands back to the relay, and the read completes byte for byte.

0 of 2 tests passed · 2 places in the code

  • not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link e2e/node/pair.spec.mjs:14
  • not run with no route between browser and machine, the session stays on the relay, and its files and terminal work e2e/node/pair.spec.mjs:398
  • code node/src/node.rs:146
  • code web/app/node-client.js:164

Anything that forwards sees only {to, ciphertext}↑ Why · Someone checks every claim before trusting it What a relay sees is checked byte by byte in a test anyone can run.

Relays are the part someone else may run.

Shown when a relay's capture of a session holds no plaintext, no verb, and no readable message kind or counter.

0 of 5 tests passed · 4 places in the code

  • not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link e2e/node/pair.spec.mjs:14
  • not run a test e2e/relay/client/src/main.rs:9
  • not run a test e2e/relay/client/src/main.rs:311
  • not run a test node/tests/session.rs:3
  • not run a test node/tests/session.rs:240
  • code relay/src/lib.rs:3
  • code relay/src/wire.rs:23
  • code relay/src/wire.rs:141
  • code relay/src/wire.rs:211

Sessions↑ Why · Alex loses a phone, and it opens nothing A stolen phone can't stand in for another key, or read what it recorded.

Sessions are mutually authenticated by node key

A key is the address; no certificate authority or DNS is trusted.

Shown when a peer presenting another key is refused.

0 of 4 tests passed · 3 places in the code

  • not run a peer presenting another key is refused core/tests/seal.rs:22
  • not run a test e2e/relay/client/src/main.rs:9
  • not run a test node/tests/session.rs:3
  • not run a caller not allowed gets silence node/tests/session.rs:247
  • code node/src/node.rs:158
  • code relay/src/wire.rs:108
  • code relay/src/wire.rs:185

Key exchange is hybrid X25519 + ML-KEM-768

Traffic recorded today must not open to a quantum computer later.

Shown when test vectors; a session fails if either half is wrong.

0 of 1 test passed · 0 places in the code

  • not run session keys depend on both halves core/tests/seal.rs:44

Every signed or sealed thing names its algorithm

Algorithms change without breaking old data.

Shown when an unknown algorithm id is refused, never guessed.

0 of 2 tests passed · 0 places in the code

  • not run a tampered or unknown entry is refused core/tests/log.rs:53
  • not run an unknown algorithm is refused never guessed core/tests/seal.rs:31

The chain is verified once per session, and its end ends the session

A hybrid chain is 3.5 KB and doubled call latency in the spike.

Shown when a session outliving its chain's expiry or revocation is closed.

Not built: nothing in the code or tests names this yet.

Lost packets and network changes↑ Why · Alex reaches the laptop at home from a café The café wifi drops, the hotspot takes over, and Alex's shell carries on.

A session survives a pipe change with nothing lost, nothing repeated and no handshake

Networks flap; a handshake per flap is slow and a lost keystroke is wrong.

Shown when drop the pipe mid-stream, continue on another; the stream is byte-identical.

0 of 1 test passed · 1 place in the code

  • not run a pipe change loses nothing repeats nothing and needs no handshake core/tests/sess.rs:36
  • code node/src/node.rs:103

A pipe that dies in silence is noticed within seconds, and calls in flight finish

A network that drops without closing the socket leaves it looking open, and everything sent into it is lost while the page says all is well.

Shown when the browser goes offline, or the relay's packets are dropped with no close; a list and a read issued then finish within seconds of the network returning, the page never claims the relay while it's gone, and the direct pipe comes back.

0 of 4 tests passed · 2 places in the code

  • not run a test e2e/node/pair.spec.mjs:79
  • not run a test e2e/node/pair.spec.mjs:344
  • not run a test e2e/node/pair.spec.mjs:494
  • not run a test node/tests/liveness.rs:4
  • code node/src/node.rs:325
  • code web/app/relay.js:19

Messages are numbered and sealed one by one, with a key per direction

A message must open on whichever pipe it arrives, and a nonce must never repeat.

Shown when a repeated number is refused; messages decrypt in any arrival order.

0 of 2 tests passed · 0 places in the code

  • not run numbered messages open in any arrival order and come out once in order core/tests/sess.rs:11
  • not run a key per direction and per channel core/tests/sess.rs:22

Datagrams are never resent and pass a replay window

A late video frame is worthless; a replayed one is an attack.

Shown when a dropped datagram is not resent; a replayed one is refused.

0 of 1 test passed · 0 places in the code

  • not run datagrams are never resent and pass a replay window core/tests/sess.rs:58