Skip to content

Latest commit

 

History

History
64 lines (46 loc) · 2.43 KB

File metadata and controls

64 lines (46 loc) · 2.43 KB

CipherLite Agent Notes

CipherLite is a lightweight local password manager built with C++20, Qt6 Widgets, CMake, SQLite, and libsodium.

Build and Test

Use the build helper for the usual configure, build, runtime dependency deployment, and test flow:

.\scripts\build.ps1

Useful options:

.\scripts\build.ps1 -Clean
.\scripts\build.ps1 -Config Release
.\scripts\build.ps1 -BuildDir build-release -Config Release -Parallel 8
.\scripts\build.ps1 -Target cipherlite -NoTests
.\scripts\build.ps1 -Generator "Ninja"

The script defaults to build, Debug, and runs tests unless -NoTests is provided. If .tools\msys64\ucrt64\bin exists, it is added to PATH, Ninja is selected by default, and local runtime DLLs are copied next to cipherlite.exe.

Manual CMake flow:

cmake -S . -B build
cmake --build build
ctest --test-dir build --output-on-failure

Development Rules

  • Keep the UI in Qt Widgets.
  • Keep core vault, crypto, and database code independent from Qt.
  • Do not write plaintext vault contents to disk.
  • Do not log master passwords, derived keys, plaintext entries, salts, nonces, or ciphertext.
  • Treat vault file headers as authenticated data when encrypting/decrypting.
  • Prefer small, testable core classes over UI-driven business logic.
  • Keep source files ASCII unless a file already uses another character set.

Commit Message Guidelines

Use a lightweight Conventional Commits style:

<type>: <summary>

Allowed types: feat, fix, docs, test, refactor, build, ci, and chore.

  • Write the summary in English as an imperative phrase or short verb phrase.
  • Start the summary with a lowercase letter and do not end it with a period.
  • Prefer a single-line message and keep it to 72 characters or fewer when practical.
  • Add a body after a blank line only when the commit needs extra context.
  • Describe one main intent per commit; avoid mixing unrelated changes.
  • For security, crypto, database migration, or vault format changes, explain the impact and compatibility in the body.

Security Notes

  • The first implementation uses libsodium Argon2id for key derivation and authenticated encryption.
  • The app must prefer AES-256-GCM when crypto_aead_aes256gcm_is_available() succeeds and fall back to XChaCha20-Poly1305 when AES-GCM is unavailable on the current CPU/platform.
  • Sensitive buffers should be wiped with sodium_memzero before being released when practical.