Don't trust. Verify.
VibecodΓ© une main dans le calbard π€
An Android app that verifies the integrity and authenticity of APK files downloaded from GitHub Releases, F-Droid, or any third-party source.
You download an APK from GitHub. The dev provides a SHA256SUM.asc, a .sign file, maybe a public key. Now what? Open a terminal? Install GPG? Nah.
Drop everything into TrustMeBro. One tap. Done.
Real hash computation using java.security.MessageDigest. Streams large files (100MB+ APKs) in chunks without eating your RAM. Supports SHA-256.
- Auto-parses
SHA256SUMS,.sha256, and anyhash filenameformat - Handles PGP cleartext signed checksum files (extracts the body)
- Manual hash input β paste directly from GitHub
- Clear MATCH / MISMATCH verdict
Powered by Bouncy Castle (bcpg-jdk18on). No GPG installation needed.
- Verifies cleartext signed messages (like
SHA256SUM.asc) - Verifies detached signatures (
.sig,.sign,.asc) - Displays signer identity, key ID, fingerprint, algorithm, date
- RSA, DSA, ECDSA, EdDSA support
Parses the APK ZIP structure and extracts signing certificate info.
- Extracts
META-INF/*.RSAcertificates (v1 JAR signatures) - Detects APK Signing Block (v2/v3 signatures)
- Parses X.509 certificate: subject, issuer, algorithm, validity
- Computes SHA-256, SHA-1, MD5 fingerprints of the signing cert
- Compare with fingerprints published by the developer
Drop all your files at once β TrustMeBro figures out what each one is:
| You drop... | TrustMeBro sees... |
|---|---|
app-v2.5.9.apk |
π± APK |
SHA256SUM.asc |
π PGP-signed checksums |
DETACHED_SIGN.sign |
π Detached signature |
hexa_public.asc |
π PGP public key |
checksums.sha256 |
#οΈβ£ Checksum file |
Detection works by filename and content analysis β a .asc file containing -----BEGIN PGP PUBLIC KEY BLOCK----- is correctly identified as a key, not a signature.
Real-world scenario using Bitcoin Keeper v2.5.9:
- Download:
Bitcoin_Keeper_v2.5.9.apk+SHA256SUM.asc+KEEPER_DETACHED_SIGN.sign - Get Hexa Team's public key from
keys.openpgp.orgFingerprint: 389F 4CAD A078 5AC0 E28A 0C18 1BEB DE26 1DC3 CF62 - Open TrustMeBro β select all 4 files
- Tap "Lancer la vΓ©rification"
- Results:
- β SHA-256 checksum MATCH
- β
PGP signature valid β signed by
Hexa Team <hexa@bithyve.com> - π¦ APK cert fingerprint:
77:82:54:70:5D:C4:DA:83:...
| Component | Choice |
|---|---|
| Language | Kotlin 2.2 (AGP built-in) |
| UI | Jetpack Compose + Material 3 |
| Hashes | java.security.MessageDigest (native) |
| PGP | Bouncy Castle bcpg-jdk18on 1.79 |
| File access | Storage Access Framework (zero permissions) |
| Architecture | MVVM + StateFlow + Coroutines |
| Min SDK | 26 (Android 8.0) |
| Build | AGP 9.1.0 + Gradle 9.3.1 |
git clone https://github.com/Vagalam88/TrustMeBro.git
cd TrustMeBro
./gradlew assembleDebugOr open in Android Studio Panda 2 (2025.3.2+) and hit
app/src/main/java/com/trustmebro/
βββ MainActivity.kt # Entry point + splash
βββ crypto/
β βββ HashEngine.kt # Streaming hash computation
β βββ PGPEngine.kt # Bouncy Castle PGP verification
β βββ APKParser.kt # APK ZIP parsing + cert extraction
βββ utils/
β βββ FileClassifier.kt # Smart file type detection
βββ ui/
βββ MainViewModel.kt # MVVM state management
βββ theme/
β βββ Theme.kt # Dark theme
βββ components/
β βββ Components.kt # Reusable UI components
βββ screens/
βββ MainScreen.kt # Main verification screen
βββββββββββββββββββββββββββββββββββββββββββ
β User drops files β
β APK + .asc + .sign + public key β
βββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β FileClassifier β
β Detects type by name + content β
β π± APK π Sig π Key #οΈβ£ Hash β
βββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β MainViewModel β
β Determines available verifications β
β Runs everything in coroutines β
βββββ¬ββββββββββ¬βββββββββββ¬βββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββ ββββββββββ ββββββββββββ
β Hash β β PGP β β APK Cert β
β Engine β β Engine β β Parser β
ββββββββββ ββββββββββ ββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Results UI β
β β
MATCH π Valid π¦ Fingerprints β
βββββββββββββββββββββββββββββββββββββββββββ
- Everything runs locally β no data leaves your device, no network calls during verification
- No permissions required β file access through Android's Storage Access Framework
- Bouncy Castle is the same crypto library used by Signal, ProtonMail, and most PGP implementations
- Hash computation uses Android's native
java.security.MessageDigest
PRs welcome. Found a bug? Open an issue. Want to add a feature? Fork it.
Some ideas:
- π Fetch public keys from keyservers directly
- π Verification history / logs
- π Import from GitHub Release URL
- π English / multilingual UI
- π§ͺ Reproducible build verification
MIT β Do whatever you want, bro. Just verify it first.
TrustMeBro β Because "trust me bro" is not a verification method.
Built with β and questionable life choices.