cryptoparser 1.0.0__tar.gz → 1.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cryptoparser-1.0.2/.coveragerc +11 -0
- cryptoparser-1.0.2/.flake8 +2 -0
- cryptoparser-1.0.2/.gitignore +17 -0
- cryptoparser-1.0.2/.gitlab-ci.yml +101 -0
- cryptoparser-1.0.2/.gitmodules +3 -0
- cryptoparser-1.0.2/.pylintrc +20 -0
- cryptoparser-1.0.2/.readthedocs.yaml +17 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/CHANGELOG.rst +22 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2/CryptoParser.egg-info}/PKG-INFO +5 -5
- cryptoparser-1.0.2/CryptoParser.egg-info/SOURCES.txt +105 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/CryptoParser.egg-info/requires.txt +1 -2
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/CryptoParser.egg-info/top_level.txt +1 -0
- cryptoparser-1.0.2/MANIFEST.in +2 -0
- {cryptoparser-1.0.0/CryptoParser.egg-info → cryptoparser-1.0.2}/PKG-INFO +5 -5
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/parse.py +10 -8
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/subprotocol.py +2 -2
- cryptoparser-1.0.2/docs/.gitignore +2 -0
- cryptoparser-1.0.2/docs/changelog.rst +1 -0
- cryptoparser-1.0.2/docs/development.rst +11 -0
- cryptoparser-1.0.2/docs/features.rst +132 -0
- cryptoparser-1.0.2/docs/index.rst +54 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/pyproject.toml +4 -7
- cryptoparser-1.0.2/test/common/certs/ecc256.badssl.com.pem +26 -0
- cryptoparser-1.0.2/test/common/certs/rsa8192.badssl.com.pem +51 -0
- cryptoparser-1.0.2/test/common/certs/rsa8192.badssl.com_certificate.crt +51 -0
- cryptoparser-1.0.2/test/common/certs/rsa8192.badssl.com_root_ca.crt +22 -0
- cryptoparser-1.0.2/test/common/certs/snakeoil_cert.pem +23 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/classes.py +1 -2
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_field.py +3 -4
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_parse.py +10 -12
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/dnsrec/test_record.py +4 -6
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/httpx/test_header.py +4 -5
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/ssh/test_key.py +12 -14
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_extension.py +1 -3
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_handshake.py +3 -3
- cryptoparser-1.0.0/CryptoParser.egg-info/SOURCES.txt +0 -183
- cryptoparser-1.0.0/MANIFEST.in +0 -1
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/__setup__.py +0 -14
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/algorithm.py +0 -163
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/entity.py +0 -111
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/exception.py +0 -27
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/grade.py +0 -199
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/key.py +0 -567
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/parameter.py +0 -149
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/stores.py +0 -317
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/types.py +0 -520
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/common/utils.py +0 -111
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/dnsrec/algorithm.py +0 -86
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/ssh/algorithm.py +0 -193
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/tls/algorithm.py +0 -323
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/tls/client.py +0 -217
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/tls/version.py +0 -17
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/docs/conf.py +0 -78
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/classes.py +0 -252
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_algorithm.py +0 -77
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_entity.py +0 -26
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_exception.py +0 -27
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_grade.py +0 -88
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_key.py +0 -563
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_parameter.py +0 -69
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_stores.py +0 -332
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_types.py +0 -565
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/common/test_utils.py +0 -105
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/dnssec/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/dnssec/test_algorithm.py +0 -32
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/ssh/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/ssh/test_algorithm.py +0 -52
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/tls/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/tls/test_algorithm.py +0 -154
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/tls/test_client.py +0 -21
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/tls/test_version.py +0 -11
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/updaters/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/updaters/test_common.py +0 -53
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/updaters/test_ct_log.py +0 -95
- cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test/updaters/test_trust_stores.py +0 -342
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/__setup__.py +0 -14
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/algorithm.py +0 -163
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/entity.py +0 -111
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/exception.py +0 -27
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/grade.py +0 -199
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/key.py +0 -567
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/parameter.py +0 -149
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/stores.py +0 -317
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/types.py +0 -520
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/common/utils.py +0 -111
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/dnsrec/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/dnsrec/algorithm.py +0 -86
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/ssh/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/ssh/algorithm.py +0 -193
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/tls/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/tls/algorithm.py +0 -323
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/tls/client.py +0 -217
- cryptoparser-1.0.0/submodules/cryptodatahub/cryptodatahub/tls/version.py +0 -17
- cryptoparser-1.0.0/submodules/cryptodatahub/docs/conf.py +0 -78
- cryptoparser-1.0.0/submodules/cryptodatahub/setup.py +0 -5
- cryptoparser-1.0.0/submodules/cryptodatahub/test/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/classes.py +0 -252
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_algorithm.py +0 -77
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_entity.py +0 -26
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_exception.py +0 -27
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_grade.py +0 -88
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_key.py +0 -563
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_parameter.py +0 -69
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_stores.py +0 -332
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_types.py +0 -565
- cryptoparser-1.0.0/submodules/cryptodatahub/test/common/test_utils.py +0 -105
- cryptoparser-1.0.0/submodules/cryptodatahub/test/dnssec/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/test/dnssec/test_algorithm.py +0 -32
- cryptoparser-1.0.0/submodules/cryptodatahub/test/ssh/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/test/ssh/test_algorithm.py +0 -52
- cryptoparser-1.0.0/submodules/cryptodatahub/test/tls/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/test/tls/test_algorithm.py +0 -154
- cryptoparser-1.0.0/submodules/cryptodatahub/test/tls/test_client.py +0 -21
- cryptoparser-1.0.0/submodules/cryptodatahub/test/tls/test_version.py +0 -11
- cryptoparser-1.0.0/submodules/cryptodatahub/test/updaters/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/test/updaters/test_common.py +0 -53
- cryptoparser-1.0.0/submodules/cryptodatahub/test/updaters/test_ct_log.py +0 -95
- cryptoparser-1.0.0/submodules/cryptodatahub/test/updaters/test_trust_stores.py +0 -342
- cryptoparser-1.0.0/submodules/cryptodatahub/updaters/__init__.py +0 -0
- cryptoparser-1.0.0/submodules/cryptodatahub/updaters/common.py +0 -120
- cryptoparser-1.0.0/submodules/cryptodatahub/updaters/ct_log.py +0 -72
- cryptoparser-1.0.0/submodules/cryptodatahub/updaters/trust_stores.py +0 -234
- cryptoparser-1.0.0/test/__init__.py +0 -0
- cryptoparser-1.0.0/test/common/__init__.py +0 -0
- cryptoparser-1.0.0/test/dnsrec/__init__.py +0 -0
- cryptoparser-1.0.0/test/httpx/__init__.py +0 -0
- cryptoparser-1.0.0/test/ssh/__init__.py +0 -0
- cryptoparser-1.0.0/test/tls/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/CONTRIBUTING.rst +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/CryptoParser.egg-info/dependency_links.txt +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/LICENSE.txt +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/README.rst +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/__setup__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/base.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/classes.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/exception.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/field.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/utils.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/common/x509.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/dnsrec/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/dnsrec/record.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/dnsrec/txt.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/httpx/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/httpx/header.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/httpx/parse.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/httpx/version.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/ssh/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/ssh/key.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/ssh/record.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/ssh/subprotocol.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/ssh/version.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/algorithm.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/ciphersuite.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/extension.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/grease.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/ldap.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/mysql.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/openvpn.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/postgresql.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/rdp.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/record.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/cryptoparser/tls/version.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/docs/conf.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/setup.cfg +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/setup.py +0 -0
- {cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub → cryptoparser-1.0.2/test}/__init__.py +0 -0
- {cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub → cryptoparser-1.0.2/test}/common/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_algorithm.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_base.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_classes.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_exception.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_utils.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/common/test_x509.py +0 -0
- {cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub → cryptoparser-1.0.2/test}/dnsrec/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/dnsrec/test_txt.py +0 -0
- {cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/ssh → cryptoparser-1.0.2/test/httpx}/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/httpx/classes.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/httpx/test_version.py +0 -0
- {cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/cryptodatahub/tls → cryptoparser-1.0.2/test/ssh}/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/ssh/test_ciphersuites.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/ssh/test_record.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/ssh/test_subprotocol.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/ssh/test_version.py +0 -0
- {cryptoparser-1.0.0/submodules/cryptodatahub/build/lib/test → cryptoparser-1.0.2/test/tls}/__init__.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/classes.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_alert.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_application_data.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_change_cipher_spec.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_ciphersuite.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_grease.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_ldap.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_mysql.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_openvpn.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_postgresql.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_rdp.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_record.py +0 -0
- {cryptoparser-1.0.0 → cryptoparser-1.0.2}/test/tls/test_version.py +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
image: python
|
|
2
|
+
|
|
3
|
+
stages:
|
|
4
|
+
- earlytest
|
|
5
|
+
- fulltest
|
|
6
|
+
- deploy
|
|
7
|
+
|
|
8
|
+
before_script:
|
|
9
|
+
- pip install tox .[tests]
|
|
10
|
+
|
|
11
|
+
variables:
|
|
12
|
+
GIT_SUBMODULE_DEPTH: 1
|
|
13
|
+
GIT_SUBMODULE_STRATEGY: recursive
|
|
14
|
+
PYTHONPATH: "submodules/cryptodatahub"
|
|
15
|
+
|
|
16
|
+
pylint:
|
|
17
|
+
image: python:3.14-slim
|
|
18
|
+
stage: earlytest
|
|
19
|
+
script: tox -e pylint
|
|
20
|
+
|
|
21
|
+
pep8:
|
|
22
|
+
image: python:3.14-slim
|
|
23
|
+
stage: earlytest
|
|
24
|
+
script: tox -e pep8
|
|
25
|
+
|
|
26
|
+
python314:
|
|
27
|
+
image: python:3.14-slim
|
|
28
|
+
stage: earlytest
|
|
29
|
+
script: tox -e py314
|
|
30
|
+
|
|
31
|
+
python39:
|
|
32
|
+
image: python:3.9-slim
|
|
33
|
+
stage: fulltest
|
|
34
|
+
script: tox -e py39
|
|
35
|
+
|
|
36
|
+
python310:
|
|
37
|
+
image: python:3.10-slim
|
|
38
|
+
stage: fulltest
|
|
39
|
+
script: tox -e py310
|
|
40
|
+
|
|
41
|
+
python311:
|
|
42
|
+
image: python:3.11-slim
|
|
43
|
+
stage: fulltest
|
|
44
|
+
script: tox -e py311
|
|
45
|
+
|
|
46
|
+
python312:
|
|
47
|
+
image: python:3.12-slim
|
|
48
|
+
stage: fulltest
|
|
49
|
+
script: tox -e py312
|
|
50
|
+
|
|
51
|
+
python313:
|
|
52
|
+
image: python:3.13-slim
|
|
53
|
+
stage: fulltest
|
|
54
|
+
script: tox -e py313
|
|
55
|
+
|
|
56
|
+
pythonrc:
|
|
57
|
+
image: python:3.15-rc-slim
|
|
58
|
+
stage: fulltest
|
|
59
|
+
script: tox -e py315
|
|
60
|
+
|
|
61
|
+
pypy3:
|
|
62
|
+
image: pypy:3-slim
|
|
63
|
+
stage: fulltest
|
|
64
|
+
script: tox -e pypy3
|
|
65
|
+
|
|
66
|
+
coveralls:
|
|
67
|
+
image: python:3.12-slim
|
|
68
|
+
variables:
|
|
69
|
+
CI_NAME: gitlab
|
|
70
|
+
CI_BUILD_NUMBER: "${CI_JOB_ID}"
|
|
71
|
+
CI_BUILD_URL: "${CI_JOB_URL}"
|
|
72
|
+
CI_BRANCH: "${CI_COMMIT_REF_NAME}"
|
|
73
|
+
GIT_SUBMODULE_DEPTH: 1
|
|
74
|
+
GIT_SUBMODULE_STRATEGY: recursive
|
|
75
|
+
PYTHONPATH: "submodules/cryptodatahub"
|
|
76
|
+
stage: deploy
|
|
77
|
+
script:
|
|
78
|
+
- pip install coveralls
|
|
79
|
+
- pip install .
|
|
80
|
+
- pip install .[tests]
|
|
81
|
+
- coverage run -m unittest -v -f
|
|
82
|
+
- coveralls
|
|
83
|
+
only:
|
|
84
|
+
refs:
|
|
85
|
+
- master
|
|
86
|
+
|
|
87
|
+
obs:
|
|
88
|
+
image:
|
|
89
|
+
name: coroner/python_obs:1.0.0
|
|
90
|
+
pull_policy: always
|
|
91
|
+
stage: deploy
|
|
92
|
+
variables:
|
|
93
|
+
GIT_SUBMODULE_DEPTH: 1
|
|
94
|
+
GIT_SUBMODULE_STRATEGY: recursive
|
|
95
|
+
before_script: []
|
|
96
|
+
script:
|
|
97
|
+
- obs.sh
|
|
98
|
+
only:
|
|
99
|
+
refs:
|
|
100
|
+
- master
|
|
101
|
+
- tags
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[MAIN]
|
|
2
|
+
|
|
3
|
+
jobs=0
|
|
4
|
+
|
|
5
|
+
[MASTER]
|
|
6
|
+
|
|
7
|
+
load-plugins = pylint.extensions.no_self_use
|
|
8
|
+
|
|
9
|
+
[FORMAT]
|
|
10
|
+
|
|
11
|
+
max-line-length=120
|
|
12
|
+
|
|
13
|
+
[MESSAGES CONTROL]
|
|
14
|
+
|
|
15
|
+
disable=
|
|
16
|
+
missing-docstring,
|
|
17
|
+
too-few-public-methods,
|
|
18
|
+
too-many-function-args,
|
|
19
|
+
too-many-ancestors,
|
|
20
|
+
duplicate-code,
|
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
Changelog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
-------------------
|
|
6
|
+
1.0.2 - 2025-12-30
|
|
7
|
+
-------------------
|
|
8
|
+
|
|
9
|
+
Notable fixes
|
|
10
|
+
=============
|
|
11
|
+
|
|
12
|
+
- Generic
|
|
13
|
+
|
|
14
|
+
- Purge submodules directory from distribution (#90)
|
|
15
|
+
|
|
16
|
+
-------------------
|
|
17
|
+
1.0.1 - 2025-12-07
|
|
18
|
+
-------------------
|
|
19
|
+
|
|
20
|
+
Refactor
|
|
21
|
+
========
|
|
22
|
+
|
|
23
|
+
- Generic
|
|
24
|
+
|
|
25
|
+
- Remove unnecessary dateutil dependency (#89)
|
|
26
|
+
|
|
5
27
|
-------------------
|
|
6
28
|
1.0.0 - 2025-01-05
|
|
7
29
|
-------------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: CryptoParser
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: An analysis oriented security protocol parser and generator
|
|
5
5
|
Author-email: Szilárd Pfeiffer <coroner@pfeifferszilard.hu>
|
|
6
6
|
Maintainer-email: Szilárd Pfeiffer <coroner@pfeifferszilard.hu>
|
|
@@ -17,7 +17,6 @@ Classifier: Framework :: tox
|
|
|
17
17
|
Classifier: Intended Audience :: Information Technology
|
|
18
18
|
Classifier: Intended Audience :: Science/Research
|
|
19
19
|
Classifier: Intended Audience :: System Administrators
|
|
20
|
-
Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
|
|
21
20
|
Classifier: Natural Language :: English
|
|
22
21
|
Classifier: Operating System :: MacOS
|
|
23
22
|
Classifier: Operating System :: Microsoft :: Windows
|
|
@@ -27,6 +26,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
27
|
Classifier: Programming Language :: Python :: 3.12
|
|
29
28
|
Classifier: Programming Language :: Python :: 3.13
|
|
29
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
30
30
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
31
31
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
32
32
|
Classifier: Programming Language :: Python
|
|
@@ -40,14 +40,14 @@ Description-Content-Type: text/x-rst
|
|
|
40
40
|
License-File: LICENSE.txt
|
|
41
41
|
Requires-Dist: asn1crypto
|
|
42
42
|
Requires-Dist: attrs
|
|
43
|
-
Requires-Dist: cryptodatahub==1.0.
|
|
44
|
-
Requires-Dist: python-dateutil
|
|
43
|
+
Requires-Dist: cryptodatahub==1.0.2
|
|
45
44
|
Requires-Dist: urllib3
|
|
46
45
|
Provides-Extra: tests
|
|
47
46
|
Requires-Dist: pyfakefs; extra == "tests"
|
|
48
47
|
Provides-Extra: docs
|
|
49
48
|
Requires-Dist: sphinx; extra == "docs"
|
|
50
49
|
Requires-Dist: sphinx-sitemap; extra == "docs"
|
|
50
|
+
Dynamic: license-file
|
|
51
51
|
|
|
52
52
|
.. image:: https://gitlab.com/coroner/cryptoparser/badges/master/pipeline.svg
|
|
53
53
|
:alt: Pipeline
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
.coveragerc
|
|
2
|
+
.flake8
|
|
3
|
+
.gitignore
|
|
4
|
+
.gitlab-ci.yml
|
|
5
|
+
.gitmodules
|
|
6
|
+
.pylintrc
|
|
7
|
+
.readthedocs.yaml
|
|
8
|
+
CHANGELOG.rst
|
|
9
|
+
CONTRIBUTING.rst
|
|
10
|
+
LICENSE.txt
|
|
11
|
+
MANIFEST.in
|
|
12
|
+
README.rst
|
|
13
|
+
pyproject.toml
|
|
14
|
+
setup.py
|
|
15
|
+
CryptoParser.egg-info/PKG-INFO
|
|
16
|
+
CryptoParser.egg-info/SOURCES.txt
|
|
17
|
+
CryptoParser.egg-info/dependency_links.txt
|
|
18
|
+
CryptoParser.egg-info/requires.txt
|
|
19
|
+
CryptoParser.egg-info/top_level.txt
|
|
20
|
+
cryptoparser/__init__.py
|
|
21
|
+
cryptoparser/__setup__.py
|
|
22
|
+
cryptoparser/common/__init__.py
|
|
23
|
+
cryptoparser/common/base.py
|
|
24
|
+
cryptoparser/common/classes.py
|
|
25
|
+
cryptoparser/common/exception.py
|
|
26
|
+
cryptoparser/common/field.py
|
|
27
|
+
cryptoparser/common/parse.py
|
|
28
|
+
cryptoparser/common/utils.py
|
|
29
|
+
cryptoparser/common/x509.py
|
|
30
|
+
cryptoparser/dnsrec/__init__.py
|
|
31
|
+
cryptoparser/dnsrec/record.py
|
|
32
|
+
cryptoparser/dnsrec/txt.py
|
|
33
|
+
cryptoparser/httpx/__init__.py
|
|
34
|
+
cryptoparser/httpx/header.py
|
|
35
|
+
cryptoparser/httpx/parse.py
|
|
36
|
+
cryptoparser/httpx/version.py
|
|
37
|
+
cryptoparser/ssh/__init__.py
|
|
38
|
+
cryptoparser/ssh/key.py
|
|
39
|
+
cryptoparser/ssh/record.py
|
|
40
|
+
cryptoparser/ssh/subprotocol.py
|
|
41
|
+
cryptoparser/ssh/version.py
|
|
42
|
+
cryptoparser/tls/__init__.py
|
|
43
|
+
cryptoparser/tls/algorithm.py
|
|
44
|
+
cryptoparser/tls/ciphersuite.py
|
|
45
|
+
cryptoparser/tls/extension.py
|
|
46
|
+
cryptoparser/tls/grease.py
|
|
47
|
+
cryptoparser/tls/ldap.py
|
|
48
|
+
cryptoparser/tls/mysql.py
|
|
49
|
+
cryptoparser/tls/openvpn.py
|
|
50
|
+
cryptoparser/tls/postgresql.py
|
|
51
|
+
cryptoparser/tls/rdp.py
|
|
52
|
+
cryptoparser/tls/record.py
|
|
53
|
+
cryptoparser/tls/subprotocol.py
|
|
54
|
+
cryptoparser/tls/version.py
|
|
55
|
+
docs/.gitignore
|
|
56
|
+
docs/changelog.rst
|
|
57
|
+
docs/conf.py
|
|
58
|
+
docs/development.rst
|
|
59
|
+
docs/features.rst
|
|
60
|
+
docs/index.rst
|
|
61
|
+
test/__init__.py
|
|
62
|
+
test/common/__init__.py
|
|
63
|
+
test/common/classes.py
|
|
64
|
+
test/common/test_algorithm.py
|
|
65
|
+
test/common/test_base.py
|
|
66
|
+
test/common/test_classes.py
|
|
67
|
+
test/common/test_exception.py
|
|
68
|
+
test/common/test_field.py
|
|
69
|
+
test/common/test_parse.py
|
|
70
|
+
test/common/test_utils.py
|
|
71
|
+
test/common/test_x509.py
|
|
72
|
+
test/common/certs/ecc256.badssl.com.pem
|
|
73
|
+
test/common/certs/rsa8192.badssl.com.pem
|
|
74
|
+
test/common/certs/rsa8192.badssl.com_certificate.crt
|
|
75
|
+
test/common/certs/rsa8192.badssl.com_root_ca.crt
|
|
76
|
+
test/common/certs/snakeoil_cert.pem
|
|
77
|
+
test/dnsrec/__init__.py
|
|
78
|
+
test/dnsrec/test_record.py
|
|
79
|
+
test/dnsrec/test_txt.py
|
|
80
|
+
test/httpx/__init__.py
|
|
81
|
+
test/httpx/classes.py
|
|
82
|
+
test/httpx/test_header.py
|
|
83
|
+
test/httpx/test_version.py
|
|
84
|
+
test/ssh/__init__.py
|
|
85
|
+
test/ssh/test_ciphersuites.py
|
|
86
|
+
test/ssh/test_key.py
|
|
87
|
+
test/ssh/test_record.py
|
|
88
|
+
test/ssh/test_subprotocol.py
|
|
89
|
+
test/ssh/test_version.py
|
|
90
|
+
test/tls/__init__.py
|
|
91
|
+
test/tls/classes.py
|
|
92
|
+
test/tls/test_alert.py
|
|
93
|
+
test/tls/test_application_data.py
|
|
94
|
+
test/tls/test_change_cipher_spec.py
|
|
95
|
+
test/tls/test_ciphersuite.py
|
|
96
|
+
test/tls/test_extension.py
|
|
97
|
+
test/tls/test_grease.py
|
|
98
|
+
test/tls/test_handshake.py
|
|
99
|
+
test/tls/test_ldap.py
|
|
100
|
+
test/tls/test_mysql.py
|
|
101
|
+
test/tls/test_openvpn.py
|
|
102
|
+
test/tls/test_postgresql.py
|
|
103
|
+
test/tls/test_rdp.py
|
|
104
|
+
test/tls/test_record.py
|
|
105
|
+
test/tls/test_version.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: CryptoParser
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: An analysis oriented security protocol parser and generator
|
|
5
5
|
Author-email: Szilárd Pfeiffer <coroner@pfeifferszilard.hu>
|
|
6
6
|
Maintainer-email: Szilárd Pfeiffer <coroner@pfeifferszilard.hu>
|
|
@@ -17,7 +17,6 @@ Classifier: Framework :: tox
|
|
|
17
17
|
Classifier: Intended Audience :: Information Technology
|
|
18
18
|
Classifier: Intended Audience :: Science/Research
|
|
19
19
|
Classifier: Intended Audience :: System Administrators
|
|
20
|
-
Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
|
|
21
20
|
Classifier: Natural Language :: English
|
|
22
21
|
Classifier: Operating System :: MacOS
|
|
23
22
|
Classifier: Operating System :: Microsoft :: Windows
|
|
@@ -27,6 +26,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
27
|
Classifier: Programming Language :: Python :: 3.12
|
|
29
28
|
Classifier: Programming Language :: Python :: 3.13
|
|
29
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
30
30
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
31
31
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
32
32
|
Classifier: Programming Language :: Python
|
|
@@ -40,14 +40,14 @@ Description-Content-Type: text/x-rst
|
|
|
40
40
|
License-File: LICENSE.txt
|
|
41
41
|
Requires-Dist: asn1crypto
|
|
42
42
|
Requires-Dist: attrs
|
|
43
|
-
Requires-Dist: cryptodatahub==1.0.
|
|
44
|
-
Requires-Dist: python-dateutil
|
|
43
|
+
Requires-Dist: cryptodatahub==1.0.2
|
|
45
44
|
Requires-Dist: urllib3
|
|
46
45
|
Provides-Extra: tests
|
|
47
46
|
Requires-Dist: pyfakefs; extra == "tests"
|
|
48
47
|
Provides-Extra: docs
|
|
49
48
|
Requires-Dist: sphinx; extra == "docs"
|
|
50
49
|
Requires-Dist: sphinx-sitemap; extra == "docs"
|
|
50
|
+
Dynamic: license-file
|
|
51
51
|
|
|
52
52
|
.. image:: https://gitlab.com/coroner/cryptoparser/badges/master/pipeline.svg
|
|
53
53
|
:alt: Pipeline
|
|
@@ -9,10 +9,6 @@ import time
|
|
|
9
9
|
|
|
10
10
|
import attr
|
|
11
11
|
|
|
12
|
-
import dateutil
|
|
13
|
-
import dateutil.parser
|
|
14
|
-
import dateutil.tz
|
|
15
|
-
|
|
16
12
|
from cryptodatahub.common.exception import InvalidValue
|
|
17
13
|
from cryptodatahub.common.types import CryptoDataEnumBase, CryptoDataEnumCodedBase
|
|
18
14
|
|
|
@@ -466,9 +462,15 @@ class ParserText(ParserBase):
|
|
|
466
462
|
def parse_date_time(self, name):
|
|
467
463
|
try:
|
|
468
464
|
value = self._parsable[self._parsed_length:]
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
465
|
+
value_str = value.decode(self._encoding)
|
|
466
|
+
|
|
467
|
+
date_time = datetime.datetime.strptime(value_str, '%a, %d %b %Y %H:%M:%S %z')
|
|
468
|
+
except ValueError:
|
|
469
|
+
try:
|
|
470
|
+
date_time = datetime.datetime.strptime(value_str, '%a, %d %b %Y %H:%M:%S GMT')
|
|
471
|
+
date_time = date_time.replace(tzinfo=datetime.timezone.utc)
|
|
472
|
+
except ValueError as e:
|
|
473
|
+
raise InvalidValue(value, type(self), 'value') from e
|
|
472
474
|
|
|
473
475
|
self._parsed_values[name] = date_time
|
|
474
476
|
self._parsed_length = len(self._parsable)
|
|
@@ -500,7 +502,7 @@ class ParserBinary(ParserBase):
|
|
|
500
502
|
if milliseconds:
|
|
501
503
|
millis = value % 1000
|
|
502
504
|
value //= 1000
|
|
503
|
-
value = datetime.datetime.fromtimestamp(0x00000000ffffffff & value,
|
|
505
|
+
value = datetime.datetime.fromtimestamp(0x00000000ffffffff & value, datetime.timezone.utc)
|
|
504
506
|
if milliseconds:
|
|
505
507
|
value += datetime.timedelta(milliseconds=millis)
|
|
506
508
|
self._parsed_values[name] = value
|
|
@@ -293,7 +293,7 @@ class TlsHandshakeHelloRandom(ParsableBase):
|
|
|
293
293
|
|
|
294
294
|
@time.default
|
|
295
295
|
def _default_time(self): # pylint: disable=no-self-use
|
|
296
|
-
return datetime.datetime.
|
|
296
|
+
return datetime.datetime.now(datetime.timezone.utc)
|
|
297
297
|
|
|
298
298
|
@random.default
|
|
299
299
|
def _default_random(self): # pylint: disable=no-self-use
|
|
@@ -305,7 +305,7 @@ class TlsHandshakeHelloRandom(ParsableBase):
|
|
|
305
305
|
def _parse(cls, parsable):
|
|
306
306
|
parser = ParserBinary(parsable)
|
|
307
307
|
|
|
308
|
-
parser.
|
|
308
|
+
parser.parse_timestamp('time', item_size=4)
|
|
309
309
|
parser.parse_parsable('random', TlsHandshakeHelloRandomBytes)
|
|
310
310
|
|
|
311
311
|
return TlsHandshakeHelloRandom(parser['time'], parser['random']), parser.parsed_length
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.. include:: ../CHANGELOG.rst
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
--------
|
|
2
|
+
Features
|
|
3
|
+
--------
|
|
4
|
+
|
|
5
|
+
Supported Protocols
|
|
6
|
+
===================
|
|
7
|
+
|
|
8
|
+
Secure Shell (SSH)
|
|
9
|
+
------------------
|
|
10
|
+
|
|
11
|
+
- `SSH 2.0 <https://tools.ietf.org/html/rfc4253>`__
|
|
12
|
+
|
|
13
|
+
Secure Socket Layer (SSL)
|
|
14
|
+
-------------------------
|
|
15
|
+
|
|
16
|
+
- `SSL 2.0 <https://tools.ietf.org/html/draft-hickman-netscape-ssl-00>`__
|
|
17
|
+
- `SSL 3.0 <https://tools.ietf.org/html/rfc6101>`__
|
|
18
|
+
|
|
19
|
+
Transport Layer Security (TLS)
|
|
20
|
+
------------------------------
|
|
21
|
+
|
|
22
|
+
- `TLS 1.0 <https://tools.ietf.org/html/rfc2246>`__
|
|
23
|
+
- `TLS 1.1 <https://tools.ietf.org/html/rfc4346>`__
|
|
24
|
+
- `TLS 1.2 <https://tools.ietf.org/html/rfc5246>`__
|
|
25
|
+
- `TLS 1.3 <https://tools.ietf.org/html/rfc8446>`__
|
|
26
|
+
|
|
27
|
+
Domain Name System (DNS)
|
|
28
|
+
------------------------
|
|
29
|
+
|
|
30
|
+
- `DNSSEC <https://www.rfc-editor.org/rfc/rfc4034>`__ (Domain Name System Security Extensions)
|
|
31
|
+
|
|
32
|
+
Protocol Specific Features
|
|
33
|
+
==========================
|
|
34
|
+
|
|
35
|
+
Hypertext Transfer Protocol (HTTP)
|
|
36
|
+
----------------------------------
|
|
37
|
+
|
|
38
|
+
1. supports header wire format parsing
|
|
39
|
+
2. supports detailed parsing of generic headers
|
|
40
|
+
(`Content-Type <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type>`__,
|
|
41
|
+
`NEL <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/NEL>`__ (Network Error Logging),
|
|
42
|
+
`Server <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server>`__,
|
|
43
|
+
`Set-Cookie <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie>`__)
|
|
44
|
+
3. supports detailed parsing of caching headers
|
|
45
|
+
(`Age <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Age>`__,
|
|
46
|
+
`Cache-Control <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control>`__,
|
|
47
|
+
`Date <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date>`__,
|
|
48
|
+
`ETag <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag>`__,
|
|
49
|
+
`Expires <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires>`__,
|
|
50
|
+
`Last-Modified <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified>`__,
|
|
51
|
+
`Pragma <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Pragma>`__)
|
|
52
|
+
4. supports detailed parsing of security headers
|
|
53
|
+
(`Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP>`__ (CSP),
|
|
54
|
+
`Content-Security-Policy-Report-Only <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only>`__,
|
|
55
|
+
`Expect-CT <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT>`__,
|
|
56
|
+
`Expect-Staple <https://scotthelme.co.uk/designing-a-new-security-header-expect-staple>`__,
|
|
57
|
+
`HTTP Public Key Pinning <https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning>`__ (HPKP),
|
|
58
|
+
`Referrer-Policy <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy>`__,
|
|
59
|
+
`Strict-Transport-Security <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security>`__,
|
|
60
|
+
`X-Content-Type-Options <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options>`__,
|
|
61
|
+
`X-Frame-Options <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options>`__,
|
|
62
|
+
`X-XSS-Protection <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection>`__)
|
|
63
|
+
|
|
64
|
+
Transport Layer Security (TLS)
|
|
65
|
+
------------------------------
|
|
66
|
+
|
|
67
|
+
Only features that cannot be or difficultly implemented by some of the most popular SSL/TLS implementations (eg:
|
|
68
|
+
`GnuTls <https://www.gnutls.org/>`__, `LibreSSL <https://www.libressl.org/>`__, `OpenSSL <https://www.openssl.org/>`__,
|
|
69
|
+
`wolfSSL <https://www.wolfssl.com/>`__, ...) are listed.
|
|
70
|
+
|
|
71
|
+
- generic
|
|
72
|
+
|
|
73
|
+
1. supports
|
|
74
|
+
`Generate Random Extensions And Sustain Extensibility <https://tools.ietf.org/html/draft-ietf-tls-grease-04>`__
|
|
75
|
+
(GREASE) values for
|
|
76
|
+
|
|
77
|
+
- protocol version
|
|
78
|
+
- extension type
|
|
79
|
+
- ciphers suite
|
|
80
|
+
- signature algorithms
|
|
81
|
+
- named group
|
|
82
|
+
|
|
83
|
+
2. supports easy
|
|
84
|
+
`JA3 fingerprint <https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967>`__
|
|
85
|
+
generation
|
|
86
|
+
|
|
87
|
+
- protocol versions
|
|
88
|
+
|
|
89
|
+
1. support not only the final, but also draft versions
|
|
90
|
+
|
|
91
|
+
- cipher suites
|
|
92
|
+
|
|
93
|
+
1. supports each cipher suites discussed on `ciphersuite.info <https://ciphersuite.info>`__
|
|
94
|
+
2. supports `GOST <https://en.wikipedia.org/wiki/GOST>`__ (national standards of the Russian Federation and CIS
|
|
95
|
+
countries) cipher suites
|
|
96
|
+
|
|
97
|
+
- application layer
|
|
98
|
+
|
|
99
|
+
- supports TLS handshake-related `MySQL <https://en.wikipedia.org/wiki/MySQL>`__ messages
|
|
100
|
+
- supports TLS handshake-related `OpenVPN <https://en.wikipedia.org/wiki/OpenVPN>`__ messages
|
|
101
|
+
- supports TLS handshake-related `PostgreSQL <https://en.wikipedia.org/wiki/PostgreSQL>`__ messages
|
|
102
|
+
- supports TLS handshake-related `RDP <https://en.wikipedia.org/wiki/Remote_Desktop_Protocol`__ messages
|
|
103
|
+
|
|
104
|
+
Secure Shell (SSH)
|
|
105
|
+
------------------
|
|
106
|
+
|
|
107
|
+
- cipher suites
|
|
108
|
+
|
|
109
|
+
1. identifies as much encryption algorithms as possible (more than 200, compared to 70+ currently supported by
|
|
110
|
+
OpenSSH)
|
|
111
|
+
2. supports `HASSH fingerprint <https://engineering.salesforce.com/open-sourcing-hassh-abed3ae5044c/>`__ calculation
|
|
112
|
+
|
|
113
|
+
- public keys
|
|
114
|
+
|
|
115
|
+
1. supports host keys, cretificates (both ``V00`` and ``V01``), X.509 certificates and chains
|
|
116
|
+
|
|
117
|
+
Domain Name System (DNS)
|
|
118
|
+
------------------------
|
|
119
|
+
|
|
120
|
+
- e-mail authentication, reporting
|
|
121
|
+
|
|
122
|
+
- `Domain-based Message Authentication, Reporting, and Conformance <https://www.rfc-editor.org/rfc/rfc7489>`__
|
|
123
|
+
(DMARC)
|
|
124
|
+
- `Sender Policy Framework <https://www.rfc-editor.org/rfc/rfc7208>`__ (SPF)
|
|
125
|
+
- `SMTP MTA Strict Transport Security <https://www.rfc-editor.org/rfc/rfc8461>`__ (MTA-STS)
|
|
126
|
+
- `SMTP TLS Reporting <https://www.rfc-editor.org/rfc/rfc8460>`__ (TLSRPT)
|
|
127
|
+
|
|
128
|
+
- DNSSEC (Domain Name System Security Extensions)
|
|
129
|
+
|
|
130
|
+
- `DNSKEY <https://www.rfc-editor.org/rfc/rfc4034#section-2>`__
|
|
131
|
+
- `DS <https://www.rfc-editor.org/rfc/rfc4034#section-5>`__
|
|
132
|
+
- `RRSIG <https://www.rfc-editor.org/rfc/rfc4034#section-3>`__
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
.. meta::
|
|
2
|
+
:google-site-verification:
|
|
3
|
+
2AAgZNptPaMHxDeXJegA8i8aW1jURVBpQseacnHQr8Q
|
|
4
|
+
|
|
5
|
+
.. meta::
|
|
6
|
+
:description:
|
|
7
|
+
An analysis oriented security protocol parser and generator
|
|
8
|
+
|
|
9
|
+
.. meta::
|
|
10
|
+
:keywords:
|
|
11
|
+
cryptoparser,cryptolyzer,cryptography,cryptographic algorithms,tls handdhake,ssl handdhake,ssh handdhake,
|
|
12
|
+
starttls,opportunistic tls,ssh host keys,ssh host certificates,http caching headers,http security header,
|
|
13
|
+
dnssec records,email authentication
|
|
14
|
+
|
|
15
|
+
.. meta::
|
|
16
|
+
:author:
|
|
17
|
+
Szilárd Pfeiffer
|
|
18
|
+
|
|
19
|
+
=======
|
|
20
|
+
Summary
|
|
21
|
+
=======
|
|
22
|
+
|
|
23
|
+
.. include:: ../README.rst
|
|
24
|
+
|
|
25
|
+
=======
|
|
26
|
+
Details
|
|
27
|
+
=======
|
|
28
|
+
|
|
29
|
+
The main purpose of creating this library is the fact, that cryptography protocol analysis differs in many aspect from
|
|
30
|
+
establishing a connection using a cryptographic protocol. Analysis is mostly testing where we trigger special and corner
|
|
31
|
+
cases of the protocol and we also trying to establish connection with hardly supported, experimental, obsoleted or even
|
|
32
|
+
deprecated mechanisms or algorithms which are may or may not supported by the latest or any version of an implementation
|
|
33
|
+
of the cryptographic protocol.
|
|
34
|
+
|
|
35
|
+
One the one hand it is neither a comprehensive nor a secure implementation of any cryptographic protocol. On the one
|
|
36
|
+
hand library implements only the absolutely necessary parts of the protocol. On the other it contains completely insecure
|
|
37
|
+
algorithms and mechanisms. It is not designed and contraindicated to use this library establishing secure connections.
|
|
38
|
+
If you are searching for cryptographic protocol implementation, there are several existing wrappers and native
|
|
39
|
+
implementations for Python (eg: M2Crypto, pyOpenSSL, Paramiko, ...).
|
|
40
|
+
|
|
41
|
+
.. toctree::
|
|
42
|
+
:maxdepth: 3
|
|
43
|
+
|
|
44
|
+
features
|
|
45
|
+
development
|
|
46
|
+
|
|
47
|
+
=======
|
|
48
|
+
History
|
|
49
|
+
=======
|
|
50
|
+
|
|
51
|
+
.. toctree::
|
|
52
|
+
:maxdepth: 2
|
|
53
|
+
|
|
54
|
+
changelog
|