You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fixes
Routing: IPv4 destination was byte-reversed in AllowedIpRouter
(used IPAddress(long) with the octets in the wrong order). Broke
split-tunnel / multi-peer routing; masked in single-peer configs by the
one-peer fallback. Now uses the network-order byte[] constructor.
WireGuardNT split-tunnel with /32 AllowedIPs never handshook. The
wake-up ping targeted network+1, i.e. the neighbor of a /32 host
(192.168.1.2/32 -> pinged .3), which had no tunnel route. A /32 is now
its own target, and the wake-up sweeps all candidates instead of stopping
at the first non-throwing send.
DNS server not covered by AllowedIPs now works on WireGuardNT. It's
injected as a hidden /32 into the driver's cryptokey routing (not just an
OS route, which the driver was dropping).
Manifest / startup crashes fixed along the way (invalid -- inside an
XML comment broke SxS activation; a modal dialog in the constructor forced
early handle creation -> NRE in the tray-menu pre-warm).
Security / architecture
GUI manifest is now asInvoker — no UAC prompt at launch.
WgSharpSvc becomes an always-running manager (start= auto);
activate/deactivate are pipe commands that validate synchronously and run
the bring-up on a worker thread (no held-open pipe, no SCM start/stop from
the GUI).
Pipe control commands are admin-gated against the client's UAC linked
token (PipeClientAuth); read-only queries stay open.
One-time --elevated-setup (single UAC prompt) registers + starts the
service and pre-authorizes the firewall; ConfigWriter falls back to the
service for admin-owned config files.
Portable hybrid: portable mode never uses/installs the service; runs
in-process and requires elevation. Launched unelevated it stays read-only
(Connect disabled) and prompts to run as administrator. Portable and
service modes are mutually exclusive.
WireGuardNT download hardening: whole-chain revocation check (tolerant
of offline machines) and a stricter publisher match (cert Organization must
be "WireGuard LLC", not a loose substring). Session.Encrypt also fails
closed at the message-counter ceiling.
Session encrypts straight into the outgoing message and decrypts into a
reusable buffer; tunnel loops reuse receive/plaintext buffers; UDP moves to
a raw Socket with a reusable buffer and larger SO_RCVBUF/SO_SNDBUF; AWG
transport translation is in-place.
Build
Optional Authenticode signing of the exe and MSI (SIGN_CERT, default SMCE), self-disabling when no cert/signtool is present.
Update check:
Background check against the GitHub releases API at startup; shows a
clickable tray balloon opening the release tag page when a newer version
exists. Informational only (never auto-downloads), failure-safe, TLS 1.2,
no JSON dependency. Opt out via Settings -> Check for updates.
Portable mode:
Unelevated portable launch now offers relaunch-as-administrator or exits,
instead of staying open read-only.
Auto-start options (login GUI, background service) forced off and greyed
out in portable mode.
Remove the now-dead _portableReadOnly field / RefreshActivateEnabled /
ActivateTunnel guard (fixes CS0649). No behavior change.