From 2573235f6a6cf102f3404c5fa18ecbae7bad7377 Mon Sep 17 00:00:00 2001 From: Joe Testa Date: Sat, 13 Jun 2026 09:08:15 -0400 Subject: [PATCH] Added support for Python 3.14. Dropped support for Python 3.9. --- .github/workflows/tox.yaml | 6 +++--- README.md | 3 ++- setup.cfg | 6 ++---- tox.ini | 17 ++++++++--------- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/.github/workflows/tox.yaml b/.github/workflows/tox.yaml index 9cbdedb..ddbb993 100644 --- a/.github/workflows/tox.yaml +++ b/.github/workflows/tox.yaml @@ -7,12 +7,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/README.md b/README.md index 6b2d9d2..67e2155 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ - historical information from OpenSSH, Dropbear SSH and libssh; - policy scans to ensure adherence to a hardened/standard configuration; - runs on Linux and Windows; -- supports Python 3.9 - 3.13; +- supports Python 3.10 - 3.14; - no dependencies ## Usage @@ -252,6 +252,7 @@ For convenience, a web front-end on top of the command-line tool is available at ### v3.4.0-dev - BIG THANKS to [realmiwi](https://github.com/realmiwi) for being the project's *very first sponsor!!* - Dropped support for Python 3.8, as it reached end-of-life in October 2024. + - Dropped support for Python 3.9, as it reached end-of-life in October 2025. - Added warning to all key exchanges that do not include protections against quantum attacks due to the Harvest Now, Decrypt Later strategy (see https://en.wikipedia.org/wiki/Harvest_now,_decrypt_later). - Removed SSHv1 support (rationale is documented in: https://github.com/jtesta/ssh-audit/issues/298). - Added hardening guides (see `--list-hardening-guides` and `--get-hardening-guide`). Previously, they were only available at , but now they are built-in for convenience; partial credit [oam7575](https://github.com/oam7575). diff --git a/setup.cfg b/setup.cfg index f48317a..b983afa 100644 --- a/setup.cfg +++ b/setup.cfg @@ -19,13 +19,11 @@ classifiers = License :: OSI Approved :: MIT License Operating System :: OS Independent Programming Language :: Python :: 3 - Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 Programming Language :: Python :: 3.13 - Programming Language :: Python :: Implementation :: CPython - Programming Language :: Python :: Implementation :: PyPy + Programming Language :: Python :: 3.14 Topic :: Security Topic :: Security :: Cryptography @@ -33,7 +31,7 @@ classifiers = packages = find: package_dir = = src -python_requires = >=3.9,<4 +python_requires = >=3.10,<4 [options.packages.find] where = src diff --git a/tox.ini b/tox.ini index 4b05c79..7765efd 100644 --- a/tox.ini +++ b/tox.ini @@ -1,7 +1,6 @@ [tox] envlist = - py{py3}-{test,pylint,flake8} - py{38,39,310,311,312,313}-{test,mypy,pylint,flake8} + py{310,311,312,313,314}-{test,mypy,pylint,flake8} cov skip_missing_interpreters = true @@ -9,10 +8,10 @@ skip_missing_interpreters = true deps = test: pytest test,cov: {[testenv:cov]deps} - test,py{38,39,310,311,312,313}-{type,mypy}: colorama - py{38,39,310,311,312,313}-{type,mypy}: {[testenv:mypy]deps} - py{py3,38,39,310,311,312,313}-{lint,pylint},lint: {[testenv:pylint]deps} - py{py3,38,39,310,311,312,313}-{lint,flake8},lint: {[testenv:flake8]deps} + test,py{310,311,312,313,314}-{type,mypy}: colorama + py{310,311,312,313,314}-{type,mypy}: {[testenv:mypy]deps} + py{310,311,312,313,314}-{lint,pylint},lint: {[testenv:pylint]deps} + py{310,311,312,313,314}-{lint,flake8},lint: {[testenv:flake8]deps} setenv = SSHAUDIT = {toxinidir}/src test: COVERAGE_FILE = {toxinidir}/.coverage.{envname} @@ -24,9 +23,9 @@ commands = test: coverage combine test: coverage report --show-missing test: coverage html -d {toxinidir}/reports/html/coverage.{envname} - py{38,39,310,311,312,313}-{type,mypy}: {[testenv:mypy]commands} - py{py3,38,39,310,311,312,313}-{lint,pylint},lint: {[testenv:pylint]commands} - py{py3,38,39,310,311,312,313}-{lint,flake8},lint: {[testenv:flake8]commands} + py{310,311,312,313,314}-{type,mypy}: {[testenv:mypy]commands} + py{310,311,312,313,314}-{lint,pylint},lint: {[testenv:pylint]commands} + py{310,311,312,313,314}-{lint,flake8},lint: {[testenv:flake8]commands} #ignore_outcome = # type: true