# Chameleon-PQ — configuratiebestand
# Genereer sleutels met: chameleon-pq keygen

[identity]
# Eigen Ed25519 seed (32 bytes hex) — GEHEIM houden.
ed25519_seed_hex      = "0101010101010101010101010101010101010101010101010101010101010101"
# Voorgedeelde publieke sleutel van de peer — uit 'keygen' van de andere kant.
peer_ed25519_pub_hex  = "0909090909090909090909090909090909090909090909090909090909090909"

# ── Hybride post-quantum peer-auth (AANBEVOLEN) ─────────────────────────────
# Vul deze twee in voor hybride Ed25519 + ML-DSA-65 authenticatie. De sleutels
# zijn groot; genereer ze met `chameleon-pq keygen` en plak de hex hier.
# Zet ze aan BEIDE kanten, of laat ze aan beide kanten weg voor Ed25519-only.
#   mldsa_secret_hex    = "…eigen ML-DSA secret key (geheim)…"
#   peer_mldsa_pub_hex  = "…ML-DSA publieke sleutel van de peer…"

[network]
# Server luistert hier op; client verbindt hierheen (overschrijfbaar via --bind / --server).
bind_addr   = "0.0.0.0:51820"
server_addr = "1.2.3.4:51820"   # alleen nodig in client-modus

[tun]
name    = "chameleon0"           # interface-naam (Linux/macOS: vrije keuze; Windows: ook)
address = "10.99.0.1"           # IP-adres van deze kant van de tunnel
netmask = "255.255.255.0"
mtu     = 1200                  # MTU-veilig voor het geobf. datapad (max 1232);
                                # groter fragmenteert IP en verraadt/breekt de obf

[engine]
# Maximale wachttijd (µs) voor een batch voordat die geflusht wordt.
# 200 µs is veilig voor gaming; verhoog voor hogere throughput.
# Het datapad draait volledig op de CPU (constant-time, low-latency).
batch_linger_us = 200
# Aantal crypto-worker-threads (parallelle seal/open over cores). 0 = auto = alle
# cores. Alleen van invloed op het SNELLE pad (traffic.enabled = false); met
# timing-shaping aan capt de rate de doorvoer, dus dan is dit niet de bottleneck.
workers = 0

[obfuscation]
# Verkeersanalyse-weerstand op het DATApad (QUIC-stijl header-protection):
# geen zichtbaar type-byte, session_id of counter, en padding tegen grootte-
# lekkage. Standaard AAN — dit maakt het datapad incompatibel met 0.1.0-peers
# (beide kanten moeten deze build draaien). Zet op false voor het klassieke,
# niet-geobfusceerde frame (bv. voor debugging).
enabled = true
# Padding-beleid: "off" | "bucketed" | "full".
#   off      — geen padding (grootte lekt de plaintext-lengte)
#   bucketed — pad naar grootteklassen (verbergt exacte lengte; aanbevolen)
#   full     — pad elk pakket naar de MTU-veilige max (beste obfuscatie, duurst)
padding = "bucketed"
# Obfusceer óók de HANDSHAKE-envelope (geen zichtbaar type-byte/fragment-header,
# wisselend-grote fragmenten). Standaard AAN — beide kanten moeten dit gelijk
# hebben (incompatibel met 0.1.x-peers). Zet op false voor de klassieke handshake.
handshake = true
# Optioneel: gedeeld obfuscatie-geheim (hex, >= 16 bytes) voor de handshake.
# Zonder dit wordt de handshake-obfuscatiesleutel afgeleid uit de voorgedeelde
# Ed25519-pubkeys (nul config). Mét dit kan een tegenstander die alleen de
# pubkeys heeft de handshake niet de-obfusceren. Zet op BEIDE kanten hetzelfde.
#   psk_hex = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"

[traffic]
# Timing-/cover-traffic-obfuscatie: verstuur op een VAST tempo en vul lege slots
# met dummy-pakketten, zodat burst-/idle-patronen verdwijnen (de laatste dimensie
# van verkeersanalyse). Vereist obfuscation.enabled = true.
#
# LET OP — dit kost bandbreedte en doorvoer. De rate (rate_pps × burst) is je
# doorvoerplafond (verkeer daarboven wordt gedropt) én, in CBR, je constante
# bandbreedte. Bij de defaults: 256 × 2 = 512 pakketten/s × ~1232 B ≈ ~5 Mbps.
# In ADAPTIVE (standaard) stroomt dit alleen tijdens activiteit + cooldown; in
# rust is er geen cover-verkeer. In CBR stroomt het 24/7 (≈ 1,6 TB/maand/richting).
# Stem rate_pps/burst af op je link; verlaag voor minder kost (lager plafond),
# verhoog voor meer doorvoer. Zet enabled=false om timing-shaping uit te zetten.
enabled  = true
# "adaptive" — STANDAARD: pace tijdens activiteit + cooldown, stil in rust
#              (geen bandbreedte idle, wél burst-verberging tijdens verkeer)
# "cbr"      — constant bit-rate (altijd op tempo, ook idle; sterkst, duurst)
mode     = "adaptive"
rate_pps = 256      # emissie-slots per seconde
burst    = 2        # pakketten per slot (rate = rate_pps × burst)
cooldown_ms = 500   # adaptive: cover blijft zo lang na het laatste echte pakket
