PassFortress is a CLI toolkit that evaluates password strength across 13 distinct security dimensions, returning a detailed per-criterion breakdown, a numeric score (0β100), estimated entropy in bits, and actionable improvement suggestions all from a single command.
- About the Project
- Architecture
- Installation
- Verify Installation
- Usage
- Development
- Contributing
- License
- Disclaimer
SecureArmor was built around the idea that password feedback should be specific, honest, and actionable not just a colour-coded "weak / strong" bar. Under the hood it combines multiple heuristics into a single 0β100 score, with each criterion carrying independent weight:
- Multi-dimensional scoring 13 criteria covering length, character class presence, variety, uniqueness, entropy, common-password detection, and keyboard-pattern recognition.
- Entropy estimation a blended pool-size / Shannon model that quantifies true unpredictability, not just rule compliance.
- Leet-speak normalisation common substitutions (
@βa,0βo,$βs, β¦) are decoded before the common-password check, soP@$$w0rdis flagged just likePassword. - Safe by default the raw password is never stored or logged; only a masked form (
M*******!) is kept in the result object. - Machine-readable output every command supports
--jsonfor NDJSON-compatible output suitable for scripting, CI pipelines, and downstream tooling. - Batch support pipe a newline-delimited list of passwords to
passcheck batchfor bulk analysis.
SecureArmor/
βββ assets/ # Banner images and static assets
βββ passcheck/
β βββ __init__.py # Public API surface
β βββ analyzer.py # Core PasswordAnalyzer β all 13 criterion checks
β βββ cli.py # Click-based CLI (check / batch sub-commands)
β βββ constants.py # Score weights, thresholds, pattern lists
β βββ display.py # Coloured terminal rendering (human-readable)
β βββ main.py # python -m passcheck entry point
β βββ models.py # Immutable dataclasses: CriterionResult, PasswordAnalysis
β βββ scoring.py # score_bar(), criteria_summary(), AnalysisSummary
β βββ utils.py # is_utf_terminal(), masked_password()
βββ tests/
β βββ test_analyzer.py # Test suite (unittest / pytest compatible)
βββ LICENSE.txt
βββ pyproject.toml # Build metadata, tool configuration
βββ README.mdRequirements: Python β₯ 3.10, click >= 8.0, colorama >= 0.4
# 1. Clone the repository
git clone https://github.com/RakkaEvandra06/SecureArmor.git
cd SecureArmor
# 2. Install runtime dependencies
pip install click colorama
# 3. Install the package in editable mode (recommended for development)
pip install -e . --no-build-isolationpasscheck --helpIf you don't want to install the package, run it directly:
python3 -m passcheck check
# or
python3 -c "from passcheck.cli import main; main()" checkpasscheck
# or explicitly:
passcheck checkpasscheck check -p "MyP@ssw0rd!"
passcheck check --password "MyP@ssw0rd!"passcheck check -p "MyP@ssw0rd!" --json
echo "hunter2" | passcheck batch --jsonSample JSON output:
{
"score": 72,
"strength": "Strong",
"entropy_bits": 54.3,
"passed": 9,
"total": 12,
"suggestions": ["Add special characters such as: ! @ # $ % ^ & *"],
"criteria": [
{ "name": "Minimum length", "passed": true, "skipped": false, "score": 10, "max_score": 10, "detail": "Length is 11 characters (minimum 8)" },
{ "name": "Not a common password", "passed": true, "skipped": false, "score": 10, "max_score": 10, "detail": "Not found in common password lists" }
]
}cat passwords.txt | passcheck batch
cat passwords.txt | passcheck batch --json
echo "hunter2" | passcheck batchpasscheck --help
passcheck check --help
passcheck batch --help# Without pytest
python3 tests/test_analyzer.py
# With pytest (recommended, enables coverage reporting)
pytest tests/ -v# Install dev extras
pip install -e ".[dev]"
# Format
black passcheck/
isort passcheck/
# Lint
flake8 passcheck/
mypy passcheck/python -m build
twine check dist/*
twine upload dist/*Contributions are welcome! Here's how to get started:
- Fork the repository and create your branch from
main. - Install dev dependencies:
pip install -e ".[dev]". - Make your changes β add or update tests to cover new behaviour.
- Run the full suite and confirm coverage stays β₯ 80 %:
pytest tests/ -v. - Lint your code:
black . && isort . && flake8 . && mypy passcheck/. - Open a Pull Request with a clear description of what changed and why.
Please keep pull request focused on a single concern. For larger changes, open an issue first to discuss the approach.
Distributed under the MIT License. See LICENSE.txt for the full text.
SecureArmor is developed for educational and research purposes. While it applies established heuristics to estimate password strength, no tool can guarantee that a password is secure in every context. Always pair strong passwords with multi-factor authentication and a reputable password manager.
