Added support for Python 3.14. Dropped support for Python 3.9.

This commit is contained in:
Joe Testa
2026-06-13 09:08:15 -04:00
parent 4f9a630de4
commit 2573235f6a
4 changed files with 15 additions and 17 deletions
+3 -3
View File
@@ -7,12 +7,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: 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: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5 uses: actions/setup-python@v6
with: with:
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
- name: Install dependencies - name: Install dependencies
+2 -1
View File
@@ -35,7 +35,7 @@
- historical information from OpenSSH, Dropbear SSH and libssh; - historical information from OpenSSH, Dropbear SSH and libssh;
- policy scans to ensure adherence to a hardened/standard configuration; - policy scans to ensure adherence to a hardened/standard configuration;
- runs on Linux and Windows; - runs on Linux and Windows;
- supports Python 3.9 - 3.13; - supports Python 3.10 - 3.14;
- no dependencies - no dependencies
## Usage ## 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 ### v3.4.0-dev
- BIG THANKS to [realmiwi](https://github.com/realmiwi) for being the project's *very first sponsor!!* - 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.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). - 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). - 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 <https://ssh-audit.com/hardening_guides.html>, but now they are built-in for convenience; partial credit [oam7575](https://github.com/oam7575). - Added hardening guides (see `--list-hardening-guides` and `--get-hardening-guide`). Previously, they were only available at <https://ssh-audit.com/hardening_guides.html>, but now they are built-in for convenience; partial credit [oam7575](https://github.com/oam7575).
+2 -4
View File
@@ -19,13 +19,11 @@ classifiers =
License :: OSI Approved :: MIT License License :: OSI Approved :: MIT License
Operating System :: OS Independent Operating System :: OS Independent
Programming Language :: Python :: 3 Programming Language :: Python :: 3
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.11
Programming Language :: Python :: 3.12 Programming Language :: Python :: 3.12
Programming Language :: Python :: 3.13 Programming Language :: Python :: 3.13
Programming Language :: Python :: Implementation :: CPython Programming Language :: Python :: 3.14
Programming Language :: Python :: Implementation :: PyPy
Topic :: Security Topic :: Security
Topic :: Security :: Cryptography Topic :: Security :: Cryptography
@@ -33,7 +31,7 @@ classifiers =
packages = find: packages = find:
package_dir = package_dir =
= src = src
python_requires = >=3.9,<4 python_requires = >=3.10,<4
[options.packages.find] [options.packages.find]
where = src where = src
+8 -9
View File
@@ -1,7 +1,6 @@
[tox] [tox]
envlist = envlist =
py{py3}-{test,pylint,flake8} py{310,311,312,313,314}-{test,mypy,pylint,flake8}
py{38,39,310,311,312,313}-{test,mypy,pylint,flake8}
cov cov
skip_missing_interpreters = true skip_missing_interpreters = true
@@ -9,10 +8,10 @@ skip_missing_interpreters = true
deps = deps =
test: pytest test: pytest
test,cov: {[testenv:cov]deps} test,cov: {[testenv:cov]deps}
test,py{38,39,310,311,312,313}-{type,mypy}: colorama test,py{310,311,312,313,314}-{type,mypy}: colorama
py{38,39,310,311,312,313}-{type,mypy}: {[testenv:mypy]deps} py{310,311,312,313,314}-{type,mypy}: {[testenv:mypy]deps}
py{py3,38,39,310,311,312,313}-{lint,pylint},lint: {[testenv:pylint]deps} py{310,311,312,313,314}-{lint,pylint},lint: {[testenv:pylint]deps}
py{py3,38,39,310,311,312,313}-{lint,flake8},lint: {[testenv:flake8]deps} py{310,311,312,313,314}-{lint,flake8},lint: {[testenv:flake8]deps}
setenv = setenv =
SSHAUDIT = {toxinidir}/src SSHAUDIT = {toxinidir}/src
test: COVERAGE_FILE = {toxinidir}/.coverage.{envname} test: COVERAGE_FILE = {toxinidir}/.coverage.{envname}
@@ -24,9 +23,9 @@ commands =
test: coverage combine test: coverage combine
test: coverage report --show-missing test: coverage report --show-missing
test: coverage html -d {toxinidir}/reports/html/coverage.{envname} test: coverage html -d {toxinidir}/reports/html/coverage.{envname}
py{38,39,310,311,312,313}-{type,mypy}: {[testenv:mypy]commands} py{310,311,312,313,314}-{type,mypy}: {[testenv:mypy]commands}
py{py3,38,39,310,311,312,313}-{lint,pylint},lint: {[testenv:pylint]commands} py{310,311,312,313,314}-{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}-{lint,flake8},lint: {[testenv:flake8]commands}
#ignore_outcome = #ignore_outcome =
# type: true # type: true