Commit graph

13 commits

Author SHA1 Message Date
Niko Marmeladkov
78fdd36db8
Relay media over QUIC uni streams instead of datagrams 2026-07-02 10:31:05 +03:00
Niko Marmeladkov
366386bade Various fixes: cert auth lookup by number, debug logging, mobile client
- handleAuthCert: find identity by cert CommonName instead of pubkey

- Add debug log to HandleDial

- mobile: AuthenticateB64, NewClientWithKey, recover guards

- go mod tidy
2026-07-01 17:15:09 +03:00
Niko Marmeladkov
50344a350a handleAuthCert: look up identity by cert CommonName, not pubkey
Use cert's Subject.CommonName (the phone number) to find identity instead of extracting pubkey and iterating DB. Each cert is bound to a number; the cert tells us which number directly. Also verify cert pubkey matches stored identity pubkey.
2026-07-01 15:41:54 +03:00
Niko Marmeladkov
8726dcc01e Add debug log to HandleDial, remove OpRegister
Log original and normalized target number to debug 'target offline'. Remove unused OpRegister opcode and handler.
2026-07-01 15:08:23 +03:00
Niko Marmeladkov
07814e5014 Add OpRegister: cert-only registration without PoW
New flow: register -> OpRegister(pubKey) -> OpIdentity(number+cert). Reconnect: OpGetChallenge -> OpAuthCert(cert+sig). PoW eliminated from client flow.
2026-07-01 15:02:58 +03:00
Niko Marmeladkov
12f38ecb68 handleAuthCert: reject cert-auth when number differs from session
If session already has a number (from PoW), cert auth must match that number. Prevents identity theft via cert-sharing.
2026-07-01 14:59:39 +03:00
Niko Marmeladkov
b7597e1335 handleAuthCert: unregister old number before changing identity
If session already has a different number (e.g. from PoW), unregister it before re-auth to prevent stale entries in sessions map.
2026-07-01 14:51:52 +03:00
Niko Marmeladkov
ba79f81721 Register: kick out old session when number is taken
When a new session registers with an already-taken number, close the old connection. Prevents two devices from sharing the same number simultaneously.
2026-07-01 14:51:04 +03:00
Niko Marmeladkov
73f09c29ab Add cert-based re-authentication (OpAuthCert)
New flow: connect -> OpGetChallenge -> OpAuthCert (signature + certDER) -> server verifies cert chain + Ed25519 signature over challenge data -> reuses existing identity. No re-registration on reconnect.
2026-06-30 14:56:29 +03:00
Niko Marmeladkov
0ed9d18b27 Fix nil interface trap in GetByNumber
Map lookup returns typed nil *Session for missing keys, which wraps into CallSession interface as non-nil typed nil. Nil check silently passes, causing nil dereference.
2026-06-30 14:33:41 +03:00
Niko Marmeladkov
4f6310c2bb
Fix PoW auth bypass: verify against issued challenge, not new one
Store challenge from handleGetChallenge in session, then verify
against it in handleSolve. Previously a fresh challenge was
generated for verification, making auth trivially bypassable.
2026-06-30 13:47:17 +03:00
Niko Marmeladkov
dbb2782dd7
Fix missing ALPN NextProtos for QUIC handshake
Add 'qcc' ALPN protocol to both ACME and insecure TLS configs.
Bump golang.org/x/crypto and transitive x/ deps.
Add golang.org/x/mobile for mobile client bindings.
2026-06-30 13:43:54 +03:00
Niko Marmeladkov
4f88a7eab1
Initial commit: QuiC Call server 2026-06-30 12:52:09 +03:00