Skip to content

WgSharp 1.26.0704

Choose a tag to compare

@inteliboy inteliboy released this 03 Jul 22:17
· 22 commits to main since this release
d13d850

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.

Performance (managed data path)

  • ChaCha20-Poly1305 rewritten allocation-free: per-thread scratch, streaming
    Poly1305, offset-aware EncryptInto/DecryptInto (verified byte-identical
    vs. the previous implementation across 192 size/AAD combos + RFC 8439
    vector + tamper checks). CNG backend gains pinned-pointer in/out paths.
  • 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.