Sigil banner

Sigil

4 devlogs
32h 9m 17s

Sigil is an app that aims to provide multi-layered text encryption for Android with a modern Material 3 interface. I intend to convert it into a complete privacy and cryptography suite until the initial v1.0.0 stable release (Current release: v0.5…

Sigil is an app that aims to provide multi-layered text encryption for Android with a modern Material 3 interface. I intend to convert it into a complete privacy and cryptography suite until the initial v1.0.0 stable release (Current release: v0.5.0-dev3)

This project uses AI

Used Gemini 3 Pro Preview for most of the boilerplate and initial implementation.

Demo Repository

Loading README...

animesh_varma

Shipped this project!

Hours: 4.1
Cookies: 🍪 74
Multiplier: 17.99 cookies/hr

Sigil v0.5.0-dev3 — The “Zero-Trust Screen Shield” Update!

[The iOS build is also planned and pretty much guaranteed to come, please do not repete that it is’t on iOS in the feedbacks, thankyouu :D]
As promised, the bleeding-edge dev builds keep coming! This update tackles Roadmap an Issue and fundamentally overhauls how Sigil defends your data while you’re looking at it.

What did I make?
I built a “Zero-Trust Screen Shield” to defend against tapjacking, unauthorized snapshots, and display mirroring.

Anti-Hooking: Instead of relying just on Android’s native FLAG_SECURE (which can be bypassed by Xposed/LSPosed frameworks), Sigil now aggressively re-applies the secure flag whenever window focus is regained.

Visual Defense: A reactive Compose blur protects data when the notification shade is pulled down, and a native FrameLayout overlay blocks the OS Recents menu from capturing app state.

Hardware Defense: The app now actively detects screen recording and hardware capture attempts, clearing the clipboard and notifying the user. It also enforces filterTouchesWhenObscured to automatically drop input events from invisible malicious overlays (Anti-Tapjacking).

(Meta note: Sorry for the tag confusion last time! Just to reassure everyone, all dev builds post-0.4.5 are properly using the 0.5.0-devX base! This build bumps the versionName to 0.5.0-dev3 and versionCode to 453.)

What was challenging?
Dialog rendering was my biggest enemy. The new shielding mechanism conflicted profusely with legitimate in-app dialogs, causing the screen to lock up or render black. I wasted a ton of time trying to fix it by pushing back features and attempting to treat the shield screen itself as a high-precedence dialog. It was incredibly unreliable. I eventually had to rewrite how Sigil handles dialogs globally, creating new SecureAlertDialog wrappers that keep the app safe without breaking the UI.

🔗 Download Link: https://drive.google.com/file/d/15Najuf76L5rUdvZOnmXmAEjW5lk6DSmX/view?usp=sharing

animesh_varma

First off, a quick apology and clarification! 😅 I know there was some confusion regarding the version tags in my last devlog. To clear things up: I reassure you that all dev versions following v0.4.5 are correctly labeled with the 0.5.0-devX base in the dev branch. The math schema holds strong!

Now, onto the fun stuff. I just merged a massive PR for v0.5.0-dev3, and this one was an absolute beast to build. Remember that “Zero-Trust Screen Shield” I mentioned was breaking native dialogs in dev2? I finally beat it into submission!

The “Zero-Trust” Screen Shield Architecture:
Standard FLAG_SECURE is great, but it’s easily stripped by Xposed/LSPosed modules or malicious root apps. I built a custom, highly resilient alternative to aggressively protect the UI state:

Reactive UI Blur & Native Recents Defense: When the app loses window focus (like pulling down the notification shade), it triggers a Compose blur. For the OS Recents menu, I implemented a synchronous native FrameLayout shield during onPause to block snapshots entirely, defeating OS-level FLAG_SECURE strippers.

Capture Detection & Anti-Tapjacking: Added DETECT_SCREEN_CAPTURE to actively log hardware screenshot attempts (and clear the clipboard if it detects one!). More importantly, I enforced filterTouchesWhenObscured on the root view. If an invisible or malicious overlay tries to hijack your taps, Sigil drops the input entirely.

The Current Struggle (Why this took so long):
The challenges on this one were endless. The shield conflicted profusely with in-app dialogs. I initially tried engineering a system that treated the shield screen itself as a dialog with the highest precedence. Spoiler: It was a disaster. It was incredibly unreliable, completely messed up the Android lifecycle, and wasted a lot of my time.

I ended up scrapping that approach and building SecureAlertDialog and SecureDialog wrappers globally via SigilUiElements.kt. This whitelists legitimate in-app dialogs safely without compromising the underlying shield layer.

I’m packing up the APK now. The dev build is dropping right after this!

1

Comments

animesh_varma
animesh_varma 7 days ago

[Note: most of the time is unlogged as I started sigil 3+ months ago and did’t know about hackclub]

animesh_varma

Shipped this project!

Hours: 28.05
Cookies: 🍪 460
Multiplier: 25.35 cookies/hr

Sigil v0.4.5-dev2 — The Crypto Expansion & Bleeding-Edge APKs!

As promised in my devlog, I am officially shipping bleeding-edge dev builds here on HackClub! To test this specific build, you’ll need to grab the APK from my Google Drive (link in the review instructions). It’s an alpha build, but it is fully signed!

What did I make?
I merged two massive PRs to kickstart the road to the v0.5.0 release:

The Crypto Expansion: I implemented a reusable Bouncy Castle wrapper to bring GCM (AEAD) support to major 128-bit block ciphers. You can now encrypt text using Camellia-GCM, Serpent-GCM, Twofish-GCM, and SM4-GCM!

The “Sigil Chain” Upgrade: The default 4-layer auto-encryption profile is now a 100% authenticated stack (XChaCha20-Poly1305 -> Serpent-GCM -> Twofish-GCM -> AES-GCM).

Legacy Theme Fixes: Fixed a critical bug on older devices (Android 11 and below) where custom seed colors caused invisible white-on-white text.

What was challenging?
Honestly, figuring out a versioning system that doesn’t break Google Play Console if I need to backport a hotfix! I ended up adopting a brand-new mathematical schema for version codes:

Positional logic: Major10000 + Minor100 + Patch (e.g., v1.0.0 = 10000).

Dev Schema: Tens place >= 5 designates alpha/dev builds. Dev builds use the last production base to ensure incremental ordering.

So, this build is v0.4.5-dev2, which equals versionCode 452 (400 for the prior v0.4.x base + 50 dev offset + 2). By basing both the name and code on the old base, it perfectly reserves 406–449 for any emergency v0.4.x production hotfixes, while incrementing smoothly toward the final v0.5.0 (which will be 500)!

What are you proud of?
I’m super proud of how fast I was able to implement a community feature request (Issue #15) right after coming back from my exam hiatus. Building out the dynamic contrast math for the legacy UI fixes was also super satisfying.

🔗 Download Link: https://drive.google.com/file/d/1I3Gx5KAPirKcIPwWHBICz3sDTFHbpFtE/view?usp=sharing

animesh_varma

I had to pause development for my Class 11 finals, but I’m officially back with MASSIVE news!

(Meta note: I actually had to use Gemini to shorten this log because my original draft somehow ballooned to over 3,000 characters!)

I just received an Emergent Ventures Grant! This is funding the huge v0.5.0 Steganography update and a Native iOS Port (just got an M5 Mac & iPhone 15 for it!). iOS dev starts in a new repo soon.

The New Plan: Bleeding-Edge APKs & Atropos
Going forward, I’m shipping every single dev build right here! I’ll link signed APKs so you can test features (and catch bugs) early. I’ll also be dropping updates for my other project, Atropos, alongside Sigil soon! 👀

What’s in the dev branch:

  • Crypto Expansion (PR #18): @marek22k requested Camellia-GCM (Issue #15). I expanded our AEAD support and upgraded the “Sigil Chain” to a 100% authenticated 4-layer stack (XChaCha20-Poly1305 -> Serpent-GCM -> Twofish-GCM -> AES-GCM) using a Bouncy Castle wrapper!

  • Legacy Theme Fixes (PR #17): Fixed a critical UI bug on Android 11 & below where custom colors caused invisible text. Added smart auto-contrast calculations.

  • The Current Struggle (dev3): I’m building a “Zero-Trust Screen Shield” to block screenshots & tapjacking. It’s breaking native dialog rendering, so the PR is currently a Draft while I rethink it. (Check the attached screenshot to see the shield I’m working on in action!)

Community & Stats:

Issue #10: A cross-device decryption bug turned out to just be a KDF mismatch! Resulted in a great new UI feature request.

Stats: 38 Stars (Doubled again with zero marketing?!), 2 Watchers, 1 Fork.

The official public GitHub Project Board is finally live with 16 issues scheduled.

[I will be shipping v0.4.5-dev2 immediately after this post since the build is already 100% completed!]

Attachment
Attachment
0
animesh_varma

Shipped this project!

Hours: 16.41
Cookies: 🍪 247
Multiplier: 15.07 cookies/hr

Sigil v0.4.5 - Encryption Profiles & The “Raw Mode” Update!

I just shipped v0.4.5, a massive overhaul focused on flexibility! Sigil is an Android app for multi-layered text encryption, and this update moves it from a strict tool to a customizable platform.

What did I make?
I built Encryption Profiles and Raw Mode. Previously, users were locked into my specific “Sigil Chain.” Now, you can save your own cipher configurations via the custom tab or use a Raw Mode profile to output standard, header-less ciphertext compatible with generic tools (like OpenSSL). I also finally ripped out the numeric-only restriction to support full alphanumeric passwords for the app lock!

What was challenging?
The hardest part was definitely fighting the Android Lifecycle and GitHub Actions simultaneously.

  1. State Management: Swapping between Numpad (for PINs) and QWERTY (for Passwords) dynamically without breaking the secure input flow was trickier than expected.
  2. CI/CD: autobuild kept failing on Android, so I had to rewrite the workflows to use manual Gradle modes to keep CodeQL and Linting functional.

What are you proud of?
I’m super proud of the community growth! Since the last update, the star count doubled (Even though i did’t market it anywhere!), and I received my first legitimate bug report (Issue #10) regarding cross-device decryption.

v1.0.0 is getting closer!!

animesh_varma

Okay, I know I said in the last log that “each merge into the dev branch will be followed by a devlog.” Clearly, I lied. I am absolutely terrible at keeping that promise.

I’ve been heads-down working towards v0.4.5. This covers roughly 16h 12m of work, mostly fighting state management and GitHub Actions.

Here is what I’ve been busy doing (shortened caus the 2000-character limit):

I) The Auth Overhaul (Passwords are here!)
I ripped out the old logic for a system supporting full alphanumeric Passwords.

  • Dynamic UI: The Lock Screen detects PIN vs. Password and swaps keyboards (Numpad vs. QWERTY) automatically.
  • Security: Still backed by TEE and Salted Argon2id.

II) Encryption Profiles
The biggest change. Not everyone wants the paranoid “Quad-Layer Cascade.”

  • Raw Mode: Output standard AES-GCM (no metadata) for OpenSSL compatibility.
  • Custom Chains: Save algo configs as “Profiles” with custom KDF overrides to switch instantly.

III) CI/CD & Infrastructure
Spent ages fixing GitHub Actions. autobuild failed on Android, so I switched to manual Gradle with JDK 17 to restore CodeQL and Linting.

The Bug Report (Issue #10)
First real bug report! @hulkspec noted cross-device decryption failed.

  • The Cause: Likely a feature working too well. Differing Argon2 settings (e.g., 64MB vs 128MB RAM) mean derived keys won’t match. Waiting on confirmation.
  • The Fix: Manual syncing for now. Future: embed KDF params or add Profile sharing.

Project Status:

  • Stars: 15 (Doubled since last devlog despite no marketing!)
  • Watchers: 2
  • Issues: 1 (Investigating KDF sync UX)

Polishing final docs now; v0.4.5 is imminent. After that, I’ll be setting up a public GitHub Project Board so you can actually see the roadmap instead of me just rambling about it here.

Attachment
0
animesh_varma

Shipped this project!

Hours: 0.28
Cookies: 🍪 4
Multiplier: 15.07 cookies/hr

My first ship! Honestly, I have no idea what I’m doing here (yet), but I’m excited to finally share what I’ve been working on for the last two months!

What is Sigil?
It’s an Android app designed for multi-layered text encryption. I wanted to build something that uses high-level cryptography but actually looks good with a modern Material 3 interface. I plan to expand it into a complete cryptography app, a one-stop shop for all your mobile cryptography needs!

What I did for v0.4.1

This update was all about “Transparency.” I worked on stripping out Google metadata blobs to make the app compliant with IzzyOnDroid and F-Droid standards.

What I learned

Android security is hard. Integrating biometrics (especially ones that expire when a new one is added!) and custom pins that are separate from the system lock taught me a lot about how sensitive data is actually handled in memory (and how to handle Sigil’s own data as well!).

It’s still technically a pre-release, but it’s functional and very stable (with no known crashes) and live on Google Play and IzzyOnDroid. Looking forward to learning the ropes here :D

animesh_varma

This first devlog will cover what I have already done for Sigil, as I have been working on it for well over two months (Before I joined HackClub yesterday).
Till now, I have managed to:

  1. Keep a very high security standard across the app
  2. Pass numuras varifcations [Displayed in README as badges]
  3. Set up a CI/CD pipeline along with PR checks
  4. Publish the app on IzzyOnDroid and Google Play
  5. Implement 15+ algorithms
  6. Make an Auto and Custom tab for different levels of users
  7. Create a comprehensive onboarding
  8. Add TEE and hardware integration with a Keystore tab for keystoreage
  9. Implement a release tab
  10. Create a settings tab allowing tweaking of encryption parameters and other parameters
  11. Add applock with biometrics and custom pin separate from screen lock
  12. Allow changing of appearance
  13. Screen shield and Clipboard auto wipe

And that about winds it up. This was until v0.4.1 whcih is a Pre-release (Though not marked as such because of IzzyOnDroid publishing guideline, this will be fixed with the release of v1.0.0)

The next release will be v0.5.0 with the following updates:

  1. Implement Steganography tab: The Steganography tab will be implemented.
  2. Biometric Upgrade: Transitioning authentication keys to AES-GCM.
  3. Custom Chains: The “Auto Mode” encryption chain (currently fixed at 4 layers) will become fully configurable. Users will be able to define their own custom cascades of ciphers for quick access.
  4. New Algorithms: Implementation of XChaCha20-Poly1305 and Aegis-256 (Addressing issues #3).

I am keeping this dev log just to keep track of changes I made, each merge into the dev branch will be followed by a devlog documenting everything (At least I hope so, as I am the worst at keeping consistent :( )
Sigil currently has: 7 Stargazers, 1 Watchers (Me), and 1 issues open (Add encryption algorithm)

Attachment
1

Comments

animesh_varma
animesh_varma 7 days ago

[Note: most of the time is unlogged as I started sigil 3+ months ago and did’t know about hackclub]