Commit Graph
20081 Commits
Author SHA1 Message Date
DenozordecandClaude Opus 5.5 5f6726f173 android: drop reui palette, align splash/window/system bars with Compose surface
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 23:39:35 +07:00
DenozordecandClaude Opus 5.5 fda3ec158c android: expressive theme, tonal palette, ShxSpacing/ShxShapes tokens
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 23:35:59 +07:00
DenozordecandClaude Opus 5.5 c872246b8c android: compose BOM 2026.06.01 + material3 1.5.0-alpha18 (expressive API)
Drop unused navigation-compose and material3-window-size-class.
alpha19+/beta01 need AGP 9.1 + compileSdk 37, so alpha18 is pinned.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 23:35:59 +07:00
DenozordecandClaude Opus 5.5 e9a239e419 android: 2.14.6 - reroute long-dead direct hosts through the tunnel
Android / pre-check (push) Failing after 7s
CIFuzz / pre-check (push) Failing after 5s
CodeQL / pre-check (push) Failing after 4s
CodeQL / analyze (python) (push) Skipped
CodeQL / analyze (ruby) (push) Skipped
CodeQL / analyze-cpp (push) Skipped
FreeBSD / pre-check (push) Failing after 3s
FreeBSD / freebsd (14.4) (push) Skipped
FreeBSD / freebsd (15.0) (push) Skipped
Linux / pre-check (push) Failing after 3s
Linux / latest (apidoc) (push) Skipped
Linux / latest (clang, no, default) (push) Skipped
Linux / latest (clang, no-dbg) (push) Skipped
Linux / latest (clang, no-testable-ke) (push) Skipped
Linux / latest (clang, yes, all) (push) Skipped
Linux / latest (clang, yes, default) (push) Skipped
Linux / latest (clang, yes, fuzzing) (push) Skipped
Linux / latest (dist) (push) Skipped
Linux / latest (gcc, no, all) (push) Skipped
Linux / latest (gcc, no, default) (push) Skipped
Linux / latest (gcc, yes, default) (push) Skipped
Linux / latest (nm) (push) Skipped
Linux / latest (no-dbg) (push) Skipped
Linux / latest (no-testable-ke) (push) Skipped
Linux / latest (yes, ld) (push) Skipped
Linux / crypto (ubuntu-latest, botan) (push) Skipped
Linux / older (clang, ubuntu-22.04, all) (push) Skipped
Linux / older (gcc, ubuntu-22.04, nm) (push) Skipped
Linux / alpine (push) Skipped
macOS / pre-check (push) Failing after 3s
macOS / macos (macos-14) (push) Skipped
macOS / macos (macos-latest) (push) Skipped
SonarCloud / pre-check (push) Failing after 4s
SonarCloud / sonarcloud (push) Skipped
TKM / pre-check (push) Failing after 3s
TKM / tkm (push) Skipped
Windows / pre-check (push) Failing after 3s
Windows / cross-compile (win32) (push) Skipped
Windows / cross-compile (win64) (push) Skipped
Windows / native (x86_64, mingw64, win64) (push) Skipped
Android / android (push) Skipped
CIFuzz / fuzzing (address) (push) Skipped
CIFuzz / fuzzing (undefined) (push) Skipped
Linux / latest (clang, no, all) (push) Skipped
Linux / latest (clang, no, printf-builtin) (push) Skipped
Linux / latest (coverage) (push) Skipped
Linux / latest (gcc, no, printf-builtin) (push) Skipped
Linux / latest (gcc, yes, all) (push) Skipped
Linux / crypto (ubuntu-22.04, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-3) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-4) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-awslc) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, wolfssl) (push) Skipped
Linux / older (gcc, ubuntu-22.04, all) (push) Skipped
Windows / native (i686, mingw32, win32) (push) Skipped
Direct destinations that stay unreachable past the cooldown are now
routed through the VPN tunnel until the network changes. The Home
availability card marks such hosts "via tunnel" and offers a one-tap
"Via VPN" action for the rest.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 23:28:03 +07:00
Denozordec bc256ad369 android: 2.14.2 - fix network label showing cellular while on Wi-Fi
underlyingNetworkLabel() returned the first non-VPN network from
allNetworks, whose order is unspecified - Android keeps the cellular
network agent alive in parallel with Wi-Fi, so on Wi-Fi the details
sheet could show "Сотовая сеть".  Wi-Fi now wins when present (same
precedence as NetworkMonitor's trust decision); cellular is only
reported when no Wi-Fi network exists.
2026-10-05 01:56:46 +07:00
Denozordec 7185aa4ba5 android: 2.14.1 - traffic split, exit IP, dead-host visibility (UX phase 1)
- ConnectionDetailsSheet: session traffic split "via VPN / direct (RU)"
  from the native engine counters (userspace mode only; system-routes
  mode shows no split - the engine never sees that traffic), public exit
  IP + country via cloudflare cdn-cgi/trace through the tunnel, current
  underlying network (Wi-Fi + SSID / cellular)
- ConnectionCard: one-glance "N% direct" caption when the RU split moves
  traffic directly
- dead direct hosts surfaced in UI: native snapshot of the negative-cache
  table via new get_dead_targets (mutex-guarded, sorted by failures) +
  JNI getDeadDirectTargets; section on the Routing tab and a badge in the
  Home availability card naming dst, failure count, remaining cooldown
  and the owning app (from the 2.13.15 owner-attribution cache)
- HomeViewModel: split/exit/deadTargets as separate hot flows; exit
  refreshed with the probe round (60s cache), dead targets every round
2026-10-05 00:56:47 +07:00
Denozordec de5b093d62 android: keep jniLibs compressed after the minSdk 23 bump
minSdk 23 flipped AGP's useLegacyPackaging default to false (uncompressed
.so, extractNativeLibs=false): the APK grew 12 -> 23 MB.  Updates are
downloaded over cellular, so pin useLegacyPackaging = true; APK is back
to ~12 MB (2.14.0 re-published with the same versionCode, sha updated in
the manifest before any device fetched it).
2026-10-05 00:41:51 +07:00
Denozordec 2c69cbe775 android: 2.14.0 - minSdk 23 + adaptive navigation (Stage 3)
- minSdkVersion 21 -> 23 (device is Android 17, no other users); jni
  Application.mk: APP_PLATFORM android-23 + -DHAVE_SIGWAITINFO (the NDK
  sysroot declares sigwaitinfo since API 23, conflicting with strongSwan's
  fallback prototype; the system implementation is used now)
- replace the bottom NavigationBar with NavigationSuiteScaffold (bottom bar
  on phones, navigation rail in landscape/on tablets); item colors keep the
  brand palette via NavigationSuiteItemColors(bar/rail/drawer)
- HomeScreen applies statusBarsPadding itself (the adaptive scaffold no
  longer pads the content area)
- predictive back was already enabled (android:enableOnBackInvokedCallback)
2026-10-05 00:39:09 +07:00
Denozordec 285d14e996 android: 2.13.15 - exponential direct-dst cooldown, double-start guard, flap-aware auto-connect
Log-driven fixes from the 10-04 diag/charon analysis:
- direct_tcp: negative-cache window now escalates 45s x2 up to 5 min
  (Telegram was opening ~3000 connects/h to each of two dead hosts,
  waking the radio for every leaked 45s probe); skip the unconditional
  fresh-socket retry on ECONNREFUSED (a refusal is deterministic on the
  network the socket is bound to; roam-time sockets are already aborted
  by reprotect)
- new dead-destination diag line (dst, fail count, cooldown) via JNI
  callback when the window escalates or hits every 100th failure
- VpnStateService: double-start guard - a second connect() for the same
  profile while a healthy attempt is in flight is ignored (four starters
  raced through here within 20 s after the 2.13.14 self-update)
- NetworkMonitor/AutoConnectManager: flap detection (>=2 kind changes in
  5 min stretches the auto-connect delay to 10 s; a Wi-Fi flap produced
  a 7-second-lived session and a wasted IKE handshake)
- hardcode diag TAGs obfuscated by R8 ("a: update: up to date" ->
  "UpdateManager: ..."), same for UpdateInstaller/VpnShortcutManager
2026-10-04 23:04:01 +07:00
Denozordec 3c73eb5a27 android: 2.13.14 - fix owner attribution protocol, log update events, ESP replay window context 2026-10-04 01:15:25 +07:00
Denozordec 95d88709f9 android: 2.13.11-2.13.13 release snapshot (battery backoff, direct-flow cooldown, owner attribution, rule-set editor) 2026-10-04 01:07:04 +07:00
Denozordec 56f5a00417 android: Ignore Kotlin build scratch dir
Android / pre-check (push) Failing after 3s
CIFuzz / pre-check (push) Failing after 3s
CodeQL / pre-check (push) Failing after 3s
CodeQL / analyze (python) (push) Skipped
CodeQL / analyze (ruby) (push) Skipped
CodeQL / analyze-cpp (push) Skipped
FreeBSD / pre-check (push) Failing after 4s
FreeBSD / freebsd (14.4) (push) Skipped
FreeBSD / freebsd (15.0) (push) Skipped
Linux / pre-check (push) Failing after 3s
Linux / latest (apidoc) (push) Skipped
Linux / latest (clang, no, default) (push) Skipped
Linux / latest (clang, no-dbg) (push) Skipped
Linux / latest (clang, no-testable-ke) (push) Skipped
Linux / latest (clang, yes, all) (push) Skipped
Linux / latest (clang, yes, default) (push) Skipped
Linux / latest (clang, yes, fuzzing) (push) Skipped
Linux / latest (dist) (push) Skipped
Linux / latest (gcc, no, all) (push) Skipped
Linux / latest (gcc, no, default) (push) Skipped
Linux / latest (gcc, yes, default) (push) Skipped
Linux / latest (nm) (push) Skipped
Linux / latest (no-dbg) (push) Skipped
Linux / latest (no-testable-ke) (push) Skipped
Linux / latest (yes, ld) (push) Skipped
Linux / crypto (ubuntu-latest, botan) (push) Skipped
Linux / older (clang, ubuntu-22.04, all) (push) Skipped
Linux / older (gcc, ubuntu-22.04, nm) (push) Skipped
Linux / alpine (push) Skipped
macOS / pre-check (push) Failing after 3s
macOS / macos (macos-14) (push) Skipped
macOS / macos (macos-latest) (push) Skipped
SonarCloud / pre-check (push) Failing after 4s
SonarCloud / sonarcloud (push) Skipped
TKM / pre-check (push) Failing after 4s
TKM / tkm (push) Skipped
Windows / pre-check (push) Failing after 4s
Windows / cross-compile (win32) (push) Skipped
Windows / cross-compile (win64) (push) Skipped
Windows / native (x86_64, mingw64, win64) (push) Skipped
Android / android (push) Skipped
CIFuzz / fuzzing (address) (push) Skipped
CIFuzz / fuzzing (undefined) (push) Skipped
Linux / latest (clang, no, all) (push) Skipped
Linux / latest (clang, no, printf-builtin) (push) Skipped
Linux / latest (coverage) (push) Skipped
Linux / latest (gcc, no, printf-builtin) (push) Skipped
Linux / latest (gcc, yes, all) (push) Skipped
Linux / crypto (ubuntu-22.04, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-3) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-4) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-awslc) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, wolfssl) (push) Skipped
Linux / older (gcc, ubuntu-22.04, all) (push) Skipped
Windows / native (i686, mingw32, win32) (push) Skipped
2026-09-30 17:38:16 +07:00
Denozordec e9bdf60f82 android: Pin direct-flow sockets to the active network (2.13.10)
Android / pre-check (push) Failing after 6s
CIFuzz / pre-check (push) Failing after 4s
CodeQL / pre-check (push) Failing after 3s
CodeQL / analyze (python) (push) Skipped
CodeQL / analyze (ruby) (push) Skipped
CodeQL / analyze-cpp (push) Skipped
FreeBSD / pre-check (push) Failing after 3s
FreeBSD / freebsd (14.4) (push) Skipped
FreeBSD / freebsd (15.0) (push) Skipped
Linux / pre-check (push) Failing after 3s
Linux / latest (apidoc) (push) Skipped
Linux / latest (clang, no, default) (push) Skipped
Linux / latest (clang, no-dbg) (push) Skipped
Linux / latest (clang, no-testable-ke) (push) Skipped
Linux / latest (clang, yes, all) (push) Skipped
Linux / latest (clang, yes, default) (push) Skipped
Linux / latest (clang, yes, fuzzing) (push) Skipped
Linux / latest (dist) (push) Skipped
Linux / latest (gcc, no, all) (push) Skipped
Linux / latest (gcc, no, default) (push) Skipped
Linux / latest (gcc, yes, default) (push) Skipped
Linux / latest (nm) (push) Skipped
Linux / latest (no-dbg) (push) Skipped
Linux / latest (no-testable-ke) (push) Skipped
Linux / latest (yes, ld) (push) Skipped
Linux / crypto (ubuntu-latest, botan) (push) Skipped
Linux / older (clang, ubuntu-22.04, all) (push) Skipped
Linux / older (gcc, ubuntu-22.04, nm) (push) Skipped
Linux / alpine (push) Skipped
macOS / pre-check (push) Failing after 5s
macOS / macos (macos-14) (push) Skipped
macOS / macos (macos-latest) (push) Skipped
SonarCloud / pre-check (push) Canceled after 3s
SonarCloud / sonarcloud (push) Canceled after 0s
TKM / pre-check (push) Canceled after 0s
TKM / tkm (push) Canceled after 0s
Windows / pre-check (push) Canceled after 1s
Windows / cross-compile (win32) (push) Canceled after 0s
Windows / cross-compile (win64) (push) Canceled after 0s
Windows / native (x86_64, mingw64, win64) (push) Canceled after 0s
Android / android (push) Skipped
CIFuzz / fuzzing (address) (push) Skipped
CIFuzz / fuzzing (undefined) (push) Skipped
Linux / latest (clang, no, all) (push) Skipped
Linux / latest (clang, no, printf-builtin) (push) Skipped
Linux / latest (coverage) (push) Skipped
Linux / latest (gcc, no, printf-builtin) (push) Skipped
Linux / latest (gcc, yes, all) (push) Skipped
Linux / crypto (ubuntu-22.04, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-3) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-4) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-awslc) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, wolfssl) (push) Skipped
Linux / older (gcc, ubuntu-22.04, all) (push) Skipped
Windows / native (i686, mingw32, win32) (push) Canceled after 0s
Diag/charon logs from 2026-09-30 16:45 showed that after a Wi-Fi->cellular
roam every direct-TCP connect failed asynchronously with EHOSTUNREACH for
minutes, while the IKE socket worked and a Java socket explicitly bound to
the underlying network connected fine: a bare VpnService.protect() left
fresh sockets routed over the vanished network.

- CharonVpnService.protectDirect(fd): protect + Network.bindSocket to the
  active non-VPN network (API 23+, best-effort, adoptFd/detachFd)
- charonservice_protect_direct_socket() JNI wrapper; relay and UDP flow
  sockets use it at creation
- direct_tcp: one retry on a fresh socket when an async connect fails;
  reprotect aborts still-connecting relays (RST) instead of letting the
  kernel take ~90s to report the dead route; failures log dst=ip:port
- direct_udp: reprotect closes all flows; they re-open per packet with a
  fresh, network-pinned socket
- TUN reader: EBADF after a reauth re-establish is no longer logged

Published as 2.13.10 (versionCode 147).
2026-09-30 17:37:45 +07:00
Denozordec d12fb96dc2 android: Full Compose rewrite + two-mode RU split with userspace routing
Android / pre-check (push) Failing after 5s
CIFuzz / pre-check (push) Failing after 3s
CodeQL / pre-check (push) Failing after 3s
CodeQL / analyze (python) (push) Skipped
CodeQL / analyze (ruby) (push) Skipped
CodeQL / analyze-cpp (push) Skipped
FreeBSD / pre-check (push) Failing after 3s
FreeBSD / freebsd (14.4) (push) Skipped
FreeBSD / freebsd (15.0) (push) Skipped
Linux / pre-check (push) Failing after 3s
Linux / latest (apidoc) (push) Skipped
Linux / latest (clang, no, default) (push) Skipped
Linux / latest (clang, no-dbg) (push) Skipped
Linux / latest (clang, no-testable-ke) (push) Skipped
Linux / latest (clang, yes, all) (push) Skipped
Linux / latest (clang, yes, default) (push) Skipped
Linux / latest (clang, yes, fuzzing) (push) Skipped
Linux / latest (dist) (push) Skipped
Linux / latest (gcc, no, all) (push) Skipped
Linux / latest (gcc, no, default) (push) Skipped
Linux / latest (gcc, yes, default) (push) Skipped
Linux / latest (nm) (push) Skipped
Linux / latest (no-dbg) (push) Skipped
Linux / latest (no-testable-ke) (push) Skipped
Linux / latest (yes, ld) (push) Skipped
Linux / crypto (ubuntu-latest, botan) (push) Skipped
Linux / older (clang, ubuntu-22.04, all) (push) Skipped
Linux / older (gcc, ubuntu-22.04, nm) (push) Skipped
Linux / alpine (push) Skipped
macOS / pre-check (push) Failing after 3s
macOS / macos (macos-14) (push) Skipped
macOS / macos (macos-latest) (push) Skipped
SonarCloud / pre-check (push) Failing after 4s
SonarCloud / sonarcloud (push) Skipped
TKM / pre-check (push) Failing after 3s
TKM / tkm (push) Skipped
Windows / pre-check (push) Failing after 4s
Windows / cross-compile (win32) (push) Skipped
Windows / cross-compile (win64) (push) Skipped
Windows / native (x86_64, mingw64, win64) (push) Skipped
Android / android (push) Skipped
CIFuzz / fuzzing (address) (push) Skipped
CIFuzz / fuzzing (undefined) (push) Skipped
Linux / latest (clang, no, all) (push) Skipped
Linux / latest (clang, no, printf-builtin) (push) Skipped
Linux / latest (coverage) (push) Skipped
Linux / latest (gcc, no, printf-builtin) (push) Skipped
Linux / latest (gcc, yes, all) (push) Skipped
Linux / crypto (ubuntu-22.04, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-3) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-4) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-awslc) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, wolfssl) (push) Skipped
Linux / older (gcc, ubuntu-22.04, all) (push) Skipped
Windows / native (i686, mingw32, win32) (push) Skipped
Replaces the fragment-based UI with a full Jetpack Compose app
(HOME/profiles/routing/settings/trusted networks in Compose, adaptive
brand theming, notification/vector drawables), adds the SHX release
pipeline (build-local.sh, UpdateManager self-update from the S3 bucket,
DiagLog diagnostics rotated into diag.log with crash capture) and the
watchdog/auto-connect/reconnect hardening series.

RU-GeoIP split now has two modes (Routing screen):
- OS routes (default): coarsened complement of the RU list installed
  as system routes, bounded by the binder budget (2.12.x behavior)
- Userspace routing (beta): only the default routes point into the
  TUN; every packet is classified natively against the exact RU list
  (ring-buffer queue, fixed flow tables - allocation-free hot path)
  and RU TCP/UDP leaves through protected sockets. TCP is terminated
  by a vendored lwIP 2.2.0 (tun2socks model, err_t renamed to avoid
  the strongSwan typedef clash, wildcard-port listener patch, asserts
  into diag.log). IPv4 addresses are compared in Java's numeric byte
  order and ranges sorted natively; direct flows re-protect on roam;
  relay errors log errno. Route diagnostics block 12s after connect.

Also: SIM2-crash hardening, connectivity watchdog with wakeup alarm,
profile export, connectivity self-check screen, tests.

Published as 2.13.9 (versionCode 146).
2026-09-30 16:50:03 +07:00
Denozordec 9dcc56c821 Update Android project configuration and permissions
Android / pre-check (push) Failing after 7s
CIFuzz / pre-check (push) Failing after 3s
CodeQL / pre-check (push) Failing after 4s
CodeQL / analyze (python) (push) Skipped
CodeQL / analyze (ruby) (push) Skipped
CodeQL / analyze-cpp (push) Skipped
FreeBSD / pre-check (push) Failing after 3s
FreeBSD / freebsd (14.4) (push) Skipped
FreeBSD / freebsd (15.0) (push) Skipped
Linux / pre-check (push) Failing after 4s
Linux / latest (apidoc) (push) Skipped
Linux / latest (clang, no, default) (push) Skipped
macOS / pre-check (push) Failing after 4s
Linux / latest (clang, no-dbg) (push) Skipped
Linux / latest (clang, no-testable-ke) (push) Skipped
Linux / latest (clang, yes, all) (push) Skipped
Linux / latest (clang, yes, default) (push) Skipped
Linux / latest (clang, yes, fuzzing) (push) Skipped
Linux / latest (dist) (push) Skipped
Linux / latest (gcc, no, all) (push) Skipped
Linux / latest (gcc, no, default) (push) Skipped
Linux / latest (gcc, yes, default) (push) Skipped
Linux / latest (nm) (push) Skipped
Linux / latest (no-dbg) (push) Skipped
Linux / latest (no-testable-ke) (push) Skipped
Linux / latest (yes, ld) (push) Skipped
macOS / macos (macos-14) (push) Skipped
macOS / macos (macos-latest) (push) Skipped
Linux / crypto (ubuntu-latest, botan) (push) Skipped
Linux / older (clang, ubuntu-22.04, all) (push) Skipped
Linux / older (gcc, ubuntu-22.04, nm) (push) Skipped
Linux / alpine (push) Skipped
SonarCloud / pre-check (push) Failing after 4s
SonarCloud / sonarcloud (push) Skipped
TKM / pre-check (push) Failing after 4s
TKM / tkm (push) Skipped
Windows / pre-check (push) Failing after 3s
Windows / cross-compile (win32) (push) Skipped
Windows / cross-compile (win64) (push) Skipped
Windows / native (x86_64, mingw64, win64) (push) Skipped
Android / android (push) Skipped
CIFuzz / fuzzing (address) (push) Skipped
CIFuzz / fuzzing (undefined) (push) Skipped
Linux / latest (clang, no, all) (push) Skipped
Linux / latest (clang, no, printf-builtin) (push) Skipped
Linux / latest (coverage) (push) Skipped
Linux / latest (gcc, no, printf-builtin) (push) Skipped
Linux / latest (gcc, yes, all) (push) Skipped
Linux / crypto (ubuntu-22.04, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-3) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-4) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-awslc) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, wolfssl) (push) Skipped
Linux / older (gcc, ubuntu-22.04, all) (push) Skipped
Windows / native (i686, mingw32, win32) (push) Skipped
- Added new entries to .gitignore to exclude Android build artifacts and keystore files.
- Updated build.gradle files to include Kotlin Gradle plugin dependencies.
- Enhanced gradle.properties with JVM arguments for better performance.
- Modified AndroidManifest.xml to include additional permissions for network and location access.
- Refactored package names in several classes to use a new namespace.
- Removed deprecated LogActivity, SelectedApplicationsActivity, SettingsActivity, and TrustedCertificatesActivity.
- Introduced a new scheduling mechanism in the Scheduler class to handle exact alarms on Android 13+.
- Updated MainActivity to integrate new UI components.

These changes improve the overall structure and functionality of the Android application.
2026-09-01 15:38:09 +07:00
Tobias Brunner 2265fcd1b4 stroke: Avoid underflow when reporting number of SAs
Since 5.9.6, the number of half-open SAs includes queued initial IKE
messages.  So that number could be higher than the number of managed
SAs, which causes an underflow in the output.

Fixes: b866ee88bf ("ike: Track unprocessed initial IKE messages like half-open IKE_SAs")
2026-08-24 16:21:49 +02:00
Tobias Brunner 3b58c67202 charon-tkm: Pass ia and ea ids according to configured proposal mappings 2026-07-31 16:10:36 +02:00
Tobias Brunner 14fa2d45d8 proposal: Add constructor that does no checks or fixups
This allows an easier construction of invalid proposals (e.g. IKE
proposals without DH groups) than parsing tokens and using
add_algorithm() manually.
2026-07-31 16:10:36 +02:00
Tobias Brunner ac1dde042a proposal: Add lower case names for protocols 2026-07-31 16:10:36 +02:00
Tobias Brunner 5011838b32 windows: Avoid potential races with canceling threads
The previous code did not synchronize some of the flags, so it was
possible that `cancel()` did not work properly (e.g. no APC queued).

This change uses atomics to set/read the flags, it also avoids using
the global thread lock for synchronization as getting the condvar before
queuing the APC avoids having to sync with `docancel()`.  However, to
make sure we don't use a stale and potentially already freed condvar
when the thread is canceled a new lock is added and held until the
condvar has been signaled (using atomics for that member doesn't work as
the ordering rules enforced by atomics can not avoid that the thread in
`cancel()` potentially reads a stale value, or the race between reading
and signaling it).
2026-07-31 16:07:52 +02:00
Tobias Brunner 3934089415 atomics: Add helpers to atomically load/store bools 2026-07-31 16:07:52 +02:00
Tobias Brunner bf438cb182 vici: Make IKEv2 the default IKE version
We don't want to accept IKEv1 clients anymore by default, so we also
warn them about it in the log.
2026-07-31 16:07:52 +02:00
Tobias Brunner e0fd0f51ea configure: Disable IKEv1 support by default
The protocol has long been replaced by IKEv2 and is officially deprecated
since several years (RFC 9395).  As a first step to removing support for
it completely, this makes the configure option disabled by default and
warns users about its use.
2026-07-28 08:39:47 +02:00
Tobias Brunner 2f9b52bd1b tnccs-dynamic: Remove unused plugin
With only TNCCS-2.0 supported, there is no need for this plugin.
2026-07-27 08:09:39 +02:00
Tobias Brunner ec2a501d8e tnccs-11: Remove legacy TNCCS-1.1 implementation
There is no reason to keep this around anymore (has been superseded by
TNCCS-2.0 a long time ago).  Removed the corresponding test scenarios.

Since this is the last user of libxml, also removed those references.
2026-07-27 08:09:39 +02:00
Tobias Brunner 1fa33a0631 tnc-ifmap: Remove prototypical IF-MAP plugin
This was primarily used in our labs to visualize some TNC aspects but
the third-party daemon and frontend we used have not seen any development
in a decade.  There never was any industry interest in this protocol
anyway, so just remove it.
2026-07-27 08:09:39 +02:00
Tobias Brunner 3a23a56b29 soup: Remove limited fetcher plugin
Besides the relatively recent update to libsoup-3, this has not seen
much development and lacks several features.  There does not seem to be
any advantage over using the curl plugin.  So just remove it to reduce
the maintenance burden.
2026-07-27 08:09:39 +02:00
Tobias Brunner 7d122d5a98 gcrypt: Remove limited crypto plugin
This has not seen any significant changes for years.  So it lacks support
for modern algorithms and would require quite some work for an overhaul.
Given that we support several other crypto backends, let's just remove
this to reduce the maintenance burden.

The test scenarios and other references are also removed.
2026-07-27 08:09:39 +02:00
Tobias Brunner 248c915593 af-alg: Remove plugin for deprecated AF_ALG interface
The 7.2 kernel has officially deprecated the interface and it will soon
be removed (support for hardware crypto offload has already been removed).

Also removed the corresponding test scenarios.
2026-07-27 08:09:39 +02:00
Tobias Brunner 10beab8bcd padlock: Remove legacy hardware crypto plugin
Unlikely there is even still hardware that would support this.

Also removed the CPU feature detection for these chips.
2026-07-24 15:44:44 +02:00
Tobias Brunner 9f6273786e led: Remove unused plugin
This was originally developed for a custom device.  No known users for
years.
2026-07-24 15:20:24 +02:00
Tobias Brunner 8b2e60b62b duplicheck: Remove confusing plugin
This plugin was developed for a customer who had very specific
requirements.  It never did anything useful for regular users and
usually caused confusing errors if they enabled it by mistake.  So
just remove it.
2026-07-24 15:20:24 +02:00
Tobias Brunner 67327e9074 blowfish: Remove legacy Blowfish implementation
There is no reason to use Blowfish nowadays.  Given that there are some
other plugins that still provide it, there is especially no reason to
maintain this custom implementation.  Also removed the two test scenarios
that used the plugin to avoid promoting the use of this algorithm.
2026-07-24 15:20:24 +02:00
Tobias Brunner e535ba99ac android-dns: Remove legacy Android DNS plugin
This was written for the original native Android port.  It was never used
by the later Android app.
2026-07-24 14:59:55 +02:00
Tobias Brunner eb50fd9d15 keychain: Remove unused macOS KeyChain plugin
The macOS frontend was the only user of this plugin.
2026-07-24 14:59:55 +02:00
Tobias Brunner ceae73cb04 charon-xpc: Remove prototypical macOS application
This has been deprecated for years.  As there are several potential
(security) issues, just remove the code.
2026-07-24 14:59:55 +02:00
Tobias Brunner 60846f24bf libfast: Remove FastCGI application server library
The two users (manager, medsrv) are gone, so there is no reason to keep
this around.
2026-07-24 14:59:51 +02:00
Tobias Brunner ac690f1a5e medsrv/medcli: Remove prototypical medsrv web application and plugins
This was from a student project that has never been developed further.
And similar to the manager web application it lacks all sorts of modern
standards.  So just remove it and the two plugins it relied on.

The test scenario is renamed to avoid confusion (neither of the two
p2pnat scenarios uses medsrv/medcli).
2026-07-24 14:45:27 +02:00
Tobias Brunner 96b0011d30 smp: Remove legacy configuration/control interface
This has been replaced by VICI years ago, the only remaining user was
the manager.  So remove this as well.
2026-07-24 14:44:54 +02:00
Tobias Brunner f55bb2b384 manager: Remove legacy PoC manager web application
This has not been developed for years and as far as web applications
go it has some serious (security) issues.  So just remove it.
2026-07-24 14:17:47 +02:00
Tobias Brunner ea7a721dd8 file-logger: Prevent potential race when opening log files and change permission
This fixes a potential TOCTOU issue with opening log files.  The use of
`chown()` instead of `fchown()` could theoretically allow modifying the
ownership of an unintended file.

The log file now also is not world-readable anymore.

Also, the patch fixes the log groups for the two `(f)chown()` errors.

Fixes: d35d669180 ("Make syslog and file loggers configurable at runtime")
2026-07-24 13:55:04 +02:00
Tobias Brunner 50ac563292 tpm-tss-trousers: Add missing log argument if AIK private key is not found 2026-07-24 08:47:39 +02:00
Tobias Brunner 2092fe6722 Revert "Recognize critical IssuingDistributionPoint CRL extension"
It might not be a good idea to blindly accept such extensions.  A scoped
CRL could be accepted for the wrong scope.  So just reject them again.

This reverts commit 126778679f.
2026-07-24 08:47:39 +02:00
Tobias Brunner 6971249758 auth-cfg: Avoid overflow when checking key strength compliance
The enumerator strictly handles pointers to pointers, so passing a
`u_int` is incorrect on 64-bit platforms.

Fixes: 918e92c4c9 ("Support multiple different public key strength types in constraints")
2026-07-24 08:47:39 +02:00
Tobias Brunner eb6fd8a8f7 signature-params: Only modify passed params if parsing succeeded
This avoids issues if a caller doesn't expect e.g. the scheme to get
modified on failure.
2026-07-24 08:47:39 +02:00
Tobias Brunner 459fcabd9e chunk: Improve constant time comparison for chunks with unequal length
While for most uses the length is fixed and public (e.g. PRF/MAC outputs),
there are a few (e.g. in xauth-generic) that compare variable length
data.

The previous code directly leaked a differing length by short-circuiting
before comparing anything.  While we could limit the comparison by the
minimum length (and call `memeq_const()`), that could still leak the
length because the time will plateau once the secret's length is reached.
Similarly, if the comparison was bound by the longer chunk (would prevent
the use of `memeq_const()`), the length could also be revealed once the
input gets longer than the secret and the time increases.

This changes the semantics of the function by declaring the first
argument the expected/reference secret and the second the variable input.
This strictly makes the function constant-time, bound by the secret's
length.  So the length can't be guessed by providing different input (but
if an attacker can trigger the comparison against different secrets, of
potentially known lengths, it might still be possible).  If the chunks
are known to have the same length, the order doesn't matter.

Callers of this function have been updated accordingly.
2026-07-24 08:47:39 +02:00
Tobias Brunner 11241a8379 encrypted-payload: Do basic decryption check only once
The check only references the original chunk, so for each parsed payload
it checks the same thing.  The length of each individual payload is
checked by the parser anyway.  So I think this was primarily added for
the IKEv1 "wrong PSK" use case.  Let's keep it for now.

Fixes: dd5c3787dc ("Give a hint that decryption failed if payload length invalid")
2026-07-24 08:47:39 +02:00
Tobias Brunner 52b689c4f8 pem: Avoid integer underflow when verifying padding after decryption
If the padding was larger than the whole blob, all available bytes were
checked for a match and the blob's length was eventually adjusted and
SUCCESS returned.  Due to the underflow this could result in a huge size
that would then get copied.  Zero-length padding was also incorrectly
accepted as was padding larger than the block size.

Fixes: 160f4c225d ("moved PEM parsing functionality to its own plugin")
2026-07-24 08:47:39 +02:00
Tobias Brunner 94e97eb183 eap-ttls: Fix memory leaks in error cases related to EAP-Identity handling
Should be rare that the eap-identity plugin is not loaded when
authenticating clients with EAP.  And the second error path will
currently never get used as `process()` always succeeds.

Fixes: 79f2102cb4 ("implemented server side support for EAP-TTLS")
2026-07-24 08:47:39 +02:00
Tobias Brunner f95c6a2e03 printf-hook-builtin: Avoid leaking stack contents when printing very long strings
Because `builtin_vsnprintf()` returns the length of the (theoretically)
produced string even if the buffer is too small, the `fwrite()` calls
would read past the buffer.  While it rarely happens that log messages
are even close to the current buffer size, it might get triggered by an
overlong IKE/EAP identity or similar.

For `vasprintf()`, the allocation for the complete required length is
now correctly handled (capped at `INT_MAX` as that's what
`builtin_vsnprintf()` can technically return).

Also fixed is an incorrect mapping of the return value of `fwrite()` in
case of an error.  While the latter returns the elements written so far,
the expected return value from `vfprintf()` is negative.

Fixes: cabe5c0ff4 ("printf-hook-builtin: Add a new "builtin" backend using its own printf() routines")
2026-07-24 08:47:39 +02:00