Files
profiled/third_party/openssl-android
oxmc 3007839721 Add Android Binder dispatch, platform/linux+platform/android split, and PawletOS content-cache support
- VesperProfileBinderService + main_android.cpp: real Android AIDL Binder
  service backing IVesperProfileService, wired into Android.bp's srcs
  (previously declared but never implemented).
- SignatureVerifier: real CMS verification on Android too, via a vendored
  static OpenSSL (see third_party/openssl-android/README.md) since
  BoringSSL has no CMS/PKCS#7 support.
- ProfileStore: Android-appropriate data paths.
- Every payload handler split into src/platform/<Name>.h (shared contract)
  + src/platform/linux/<Name>.cpp + src/platform/android/<Name>.cpp, so the
  build system picks the platform instead of #ifdef. Android side is an
  honest "not implemented yet" stub per handler, logged rather than silent.
- content-cache payload + handler: PawletOS-fork-specific, talks to
  PawletCache/pawletcache-server. Not part of vesperprofiled's own
  upstream default.
2026-07-25 00:05:38 -07:00
..

Vendored OpenSSL (Android, static, vesperprofiled-only)

AOSP's system libcrypto/libssl is BoringSSL, which has no CMS/PKCS#7 support. Rather than touch the platform's crypto stack (used by Keystore, the TLS stack, other HALs — swapping it breaks far more than it fixes), vesperprofiled statically links its own copy of real OpenSSL, scoped to just this one binary. Nothing else on the system links against it or even knows it's there.

This directory holds the prebuilt static libs + headers and the Soong modules that expose them. The lib/*/ and include/ directories are empty placeholders — populate them by cross-compiling OpenSSL yourself (steps below) before m vesperprofiled will link on Android. Nothing here fabricates or ships a prebuilt binary sight-unseen.


Building OpenSSL for Android

Needs the Android NDK (r26+) on your PATH as $ANDROID_NDK_ROOT, and OpenSSL source (3.x recommended — CMS support is stable there).

git clone --branch openssl-3.2 --depth 1 https://github.com/openssl/openssl.git
cd openssl

export ANDROID_NDK_ROOT=/path/to/android-ndk
export PATH="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH"

# Repeat per ABI. android-arm64 shown; swap target/API for the others.
for target in android-arm64 android-arm android-x86_64 android-x86; do
  case $target in
    android-arm64)  abi=arm64-v8a ;;
    android-arm)    abi=armeabi-v7a ;;
    android-x86_64) abi=x86_64 ;;
    android-x86)    abi=x86 ;;
  esac

  ./Configure "$target" -D__ANDROID_API__=26 no-shared no-tests \
    --prefix="$(pwd)/build-$abi"
  make clean
  make -j"$(nproc)"
  make install_sw

  mkdir -p "../lib/$abi"
  cp "build-$abi/lib/libcrypto.a" "../lib/$abi/"
  cp "build-$abi/lib/libssl.a"    "../lib/$abi/"
done

# Headers are identical across ABIs — copy from any one build.
cp -r build-arm64-v8a/include/openssl ../include/

no-shared is what makes these static (.a) — deliberate, so nothing depends on an OpenSSL .so being present on-device at runtime. no-tests just skips building OpenSSL's own test suite to save time.

Verifying

third_party/openssl-android/
├── include/openssl/*.h      (same for every ABI)
└── lib/
    ├── arm64-v8a/{libcrypto,libssl}.a
    ├── armeabi-v7a/{libcrypto,libssl}.a
    ├── x86_64/{libcrypto,libssl}.a
    └── x86/{libcrypto,libssl}.a

Once populated, m vesperprofiled picks these up via Android.bp in this directory — see libcrypto_vesper_static / libssl_vesper_static / vesperprofiled_openssl_headers, referenced from vesperprofiled/Android.bp's Android static_libs.

Updating

OpenSSL ships security fixes regularly — treat these .a files as a dependency you're responsible for rebuilding on new releases, same as any other vendored library. Nothing here auto-updates them.