tigrcorn-security 0.3.18.dev1__tar.gz → 0.3.18.dev3__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.
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/PKG-INFO +4 -4
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/README.md +1 -1
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/pyproject.toml +3 -3
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/__init__.py +2 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/__init__.py +1 -1
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/imports.py +1 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/models.py +16 -4
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/imports.py +1 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/server.py +3 -2
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/signatures.py +17 -5
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security.egg-info/PKG-INFO +4 -4
- tigrcorn_security-0.3.18.dev3/src/tigrcorn_security.egg-info/requires.txt +5 -0
- tigrcorn_security-0.3.18.dev1/src/tigrcorn_security.egg-info/requires.txt +0 -5
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/LICENSE +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/setup.cfg +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/__init__.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/alpn.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/certs.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/policies.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/py.typed +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/__init__.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/certificates.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/connection.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/context.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/imports.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/models.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/records.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/ssl_object.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/wrapping.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/cipher_suites.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/common.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/key_share.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/psk.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/quic.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/registry.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/vectors.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/__init__.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/alerts.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/base.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/certificates.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/client.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/driver.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/io.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/key_exchange.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/models.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/replay.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/state_table.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/tickets.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/utils.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/key_schedule.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/__init__.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/base.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/certificates.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/decode.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/finished.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/hello.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/imports.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/types.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/vectors.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/transcript.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls_cipher_policy.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/__init__.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/__init__.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/chain.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/constraints.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/hostname.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/imports.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/loading.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/models.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/revocation_fetch.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/revocation_material.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/revocation_policy.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/time.py +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security.egg-info/SOURCES.txt +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security.egg-info/dependency_links.txt +0 -0
- {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tigrcorn-security
|
|
3
|
-
Version: 0.3.18.
|
|
3
|
+
Version: 0.3.18.dev3
|
|
4
4
|
Summary: TLS 1.3, mTLS, X.509, ALPN, OCSP, CRL, and certificate policy surfaces for the Tigrcorn Python web server.
|
|
5
5
|
Author-email: Jacob Stewart <jacob@swarmauri.com>
|
|
6
6
|
License: Apache License
|
|
@@ -187,8 +187,8 @@ Classifier: Typing :: Typed
|
|
|
187
187
|
Requires-Python: <3.15,>=3.10
|
|
188
188
|
Description-Content-Type: text/markdown
|
|
189
189
|
License-File: LICENSE
|
|
190
|
-
Requires-Dist: tigrcorn-core==0.3.18.
|
|
191
|
-
Requires-Dist: tigrcorn-config==0.3.18.
|
|
190
|
+
Requires-Dist: tigrcorn-core==0.3.18.dev3
|
|
191
|
+
Requires-Dist: tigrcorn-config==0.3.18.dev3
|
|
192
192
|
Provides-Extra: x509
|
|
193
193
|
Requires-Dist: cryptography>=46.0.0; extra == "x509"
|
|
194
194
|
Dynamic: license-file
|
|
@@ -280,7 +280,7 @@ The package exposes its supported public surface through the <code>tigrcorn_secu
|
|
|
280
280
|
|
|
281
281
|
## Package Graph
|
|
282
282
|
|
|
283
|
-
[tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
|
|
283
|
+
[tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-quic-cc](https://pypi.org/project/tigrcorn-quic-cc/) | [tigrcorn-quic-cc-reno](https://pypi.org/project/tigrcorn-quic-cc-reno/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
|
|
284
284
|
|
|
285
285
|
## Best Practices
|
|
286
286
|
|
|
@@ -85,7 +85,7 @@ The package exposes its supported public surface through the <code>tigrcorn_secu
|
|
|
85
85
|
|
|
86
86
|
## Package Graph
|
|
87
87
|
|
|
88
|
-
[tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
|
|
88
|
+
[tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-quic-cc](https://pypi.org/project/tigrcorn-quic-cc/) | [tigrcorn-quic-cc-reno](https://pypi.org/project/tigrcorn-quic-cc-reno/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
|
|
89
89
|
|
|
90
90
|
## Best Practices
|
|
91
91
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tigrcorn-security"
|
|
7
|
-
version = "0.3.18.
|
|
7
|
+
version = "0.3.18.dev3"
|
|
8
8
|
description = "TLS 1.3, mTLS, X.509, ALPN, OCSP, CRL, and certificate policy surfaces for the Tigrcorn Python web server."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10,<3.15"
|
|
@@ -30,8 +30,8 @@ classifiers = [
|
|
|
30
30
|
"Typing :: Typed",
|
|
31
31
|
]
|
|
32
32
|
dependencies = [
|
|
33
|
-
"tigrcorn-core==0.3.18.
|
|
34
|
-
"tigrcorn-config==0.3.18.
|
|
33
|
+
"tigrcorn-core==0.3.18.dev3",
|
|
34
|
+
"tigrcorn-config==0.3.18.dev3",
|
|
35
35
|
]
|
|
36
36
|
|
|
37
37
|
[project.optional-dependencies]
|
|
@@ -6,6 +6,7 @@ from .extensions import (
|
|
|
6
6
|
QUIC_EARLY_DATA_SENTINEL,
|
|
7
7
|
SIG_RSA_PKCS1_SHA256,
|
|
8
8
|
SIG_ECDSA_SECP256R1_SHA256,
|
|
9
|
+
SIG_ECDSA_SECP384R1_SHA384,
|
|
9
10
|
SIG_ED25519,
|
|
10
11
|
SIG_RSA_PSS_PSS_SHA256,
|
|
11
12
|
SIG_RSA_PSS_RSAE_SHA256,
|
|
@@ -36,6 +37,7 @@ __all__ = [
|
|
|
36
37
|
'QUIC_EARLY_DATA_SENTINEL',
|
|
37
38
|
'SIG_RSA_PKCS1_SHA256',
|
|
38
39
|
'SIG_ECDSA_SECP256R1_SHA256',
|
|
40
|
+
'SIG_ECDSA_SECP384R1_SHA384',
|
|
39
41
|
'SIG_ED25519',
|
|
40
42
|
'SIG_RSA_PSS_RSAE_SHA256',
|
|
41
43
|
'SIG_RSA_PSS_PSS_SHA256',
|
|
@@ -12,7 +12,7 @@ from .registry import *
|
|
|
12
12
|
|
|
13
13
|
SUPPORTED_CIPHER_SUITES = (CIPHER_TLS_AES_256_GCM_SHA384, CIPHER_TLS_AES_128_GCM_SHA256)
|
|
14
14
|
SUPPORTED_GROUPS = (GROUP_X25519, GROUP_SECP256R1)
|
|
15
|
-
SUPPORTED_SIGNATURE_SCHEMES = (SIG_ED25519, SIG_ECDSA_SECP256R1_SHA256, SIG_RSA_PSS_RSAE_SHA256, SIG_RSA_PSS_PSS_SHA256)
|
|
15
|
+
SUPPORTED_SIGNATURE_SCHEMES = (SIG_ED25519, SIG_ECDSA_SECP256R1_SHA256, SIG_ECDSA_SECP384R1_SHA384, SIG_RSA_PSS_RSAE_SHA256, SIG_RSA_PSS_PSS_SHA256)
|
|
16
16
|
SUPPORTED_CERTIFICATE_SIGNATURE_SCHEMES = SUPPORTED_SIGNATURE_SCHEMES
|
|
17
17
|
|
|
18
18
|
__all__ = [name for name in globals() if not name.startswith('__')]
|
|
@@ -62,14 +62,15 @@ _TP_ACTIVE_CONNECTION_ID_LIMIT = 0x0E
|
|
|
62
62
|
_TP_INITIAL_SOURCE_CONNECTION_ID = 0x0F
|
|
63
63
|
_TP_RETRY_SOURCE_CONNECTION_ID = 0x10
|
|
64
64
|
_TP_MAX_DATAGRAM_FRAME_SIZE = 0x20
|
|
65
|
+
_TP_RESET_STREAM_AT = 0x17F7586D2CB571
|
|
65
66
|
|
|
66
67
|
|
|
67
68
|
@dataclass(slots=True)
|
|
68
69
|
class TransportParameters:
|
|
69
|
-
max_data: int =
|
|
70
|
-
max_stream_data_bidi_local: int =
|
|
71
|
-
max_stream_data_bidi_remote: int =
|
|
72
|
-
max_stream_data_uni: int =
|
|
70
|
+
max_data: int = 16 * 1024 * 1024
|
|
71
|
+
max_stream_data_bidi_local: int = 2 * 1024 * 1024
|
|
72
|
+
max_stream_data_bidi_remote: int = 2 * 1024 * 1024
|
|
73
|
+
max_stream_data_uni: int = 2 * 1024 * 1024
|
|
73
74
|
max_streams_bidi: int = 128
|
|
74
75
|
max_streams_uni: int = 128
|
|
75
76
|
idle_timeout: int = 30000
|
|
@@ -84,6 +85,7 @@ class TransportParameters:
|
|
|
84
85
|
initial_source_connection_id: bytes | None = None
|
|
85
86
|
retry_source_connection_id: bytes | None = None
|
|
86
87
|
max_datagram_frame_size: int | None = None
|
|
88
|
+
reset_stream_at: bool = False
|
|
87
89
|
unknown_parameters: dict[int, bytes] = field(default_factory=dict)
|
|
88
90
|
|
|
89
91
|
def __post_init__(self) -> None:
|
|
@@ -138,6 +140,9 @@ class TransportParameters:
|
|
|
138
140
|
add_bytes(_TP_INITIAL_SOURCE_CONNECTION_ID, self.initial_source_connection_id)
|
|
139
141
|
add_bytes(_TP_RETRY_SOURCE_CONNECTION_ID, self.retry_source_connection_id)
|
|
140
142
|
add_int(_TP_MAX_DATAGRAM_FRAME_SIZE, self.max_datagram_frame_size)
|
|
143
|
+
if self.reset_stream_at:
|
|
144
|
+
payload.extend(encode_quic_varint(_TP_RESET_STREAM_AT))
|
|
145
|
+
payload.extend(encode_quic_varint(0))
|
|
141
146
|
for parameter_id, value in sorted(self.unknown_parameters.items()):
|
|
142
147
|
payload.extend(encode_quic_varint(parameter_id))
|
|
143
148
|
payload.extend(encode_quic_varint(len(value)))
|
|
@@ -207,6 +212,10 @@ class TransportParameters:
|
|
|
207
212
|
values['retry_source_connection_id'] = raw
|
|
208
213
|
elif parameter_id == _TP_MAX_DATAGRAM_FRAME_SIZE:
|
|
209
214
|
values['max_datagram_frame_size'] = decode_int(raw)
|
|
215
|
+
elif parameter_id == _TP_RESET_STREAM_AT:
|
|
216
|
+
if raw:
|
|
217
|
+
raise ProtocolError('reset_stream_at transport parameter must be empty')
|
|
218
|
+
values['reset_stream_at'] = True
|
|
210
219
|
else:
|
|
211
220
|
values['unknown_parameters'][parameter_id] = raw
|
|
212
221
|
return cls(**values)
|
|
@@ -231,6 +240,7 @@ class TransportParameters:
|
|
|
231
240
|
and current.ack_delay_exponent == self.ack_delay_exponent
|
|
232
241
|
and current.max_ack_delay == self.max_ack_delay
|
|
233
242
|
and current.disable_active_migration == self.disable_active_migration
|
|
243
|
+
and (not self.reset_stream_at or current.reset_stream_at)
|
|
234
244
|
)
|
|
235
245
|
|
|
236
246
|
|
|
@@ -239,12 +249,14 @@ SUPPORTED_SIGNATURE_SCHEMES = (
|
|
|
239
249
|
SIG_RSA_PSS_RSAE_SHA256,
|
|
240
250
|
SIG_RSA_PSS_PSS_SHA256,
|
|
241
251
|
SIG_ECDSA_SECP256R1_SHA256,
|
|
252
|
+
SIG_ECDSA_SECP384R1_SHA384,
|
|
242
253
|
)
|
|
243
254
|
SUPPORTED_CERTIFICATE_SIGNATURE_SCHEMES = (
|
|
244
255
|
SIG_ED25519,
|
|
245
256
|
SIG_RSA_PSS_RSAE_SHA256,
|
|
246
257
|
SIG_RSA_PSS_PSS_SHA256,
|
|
247
258
|
SIG_ECDSA_SECP256R1_SHA256,
|
|
259
|
+
SIG_ECDSA_SECP384R1_SHA384,
|
|
248
260
|
SIG_RSA_PKCS1_SHA256,
|
|
249
261
|
)
|
|
250
262
|
SUPPORTED_GROUPS = (
|
|
@@ -12,6 +12,7 @@ from .certificates import *
|
|
|
12
12
|
|
|
13
13
|
class _QuicTlsServerHandshakeMixin:
|
|
14
14
|
def _handle_client_hello(self, message: ClientHello, *, raw_message: bytes | None = None) -> bytes:
|
|
15
|
+
encoded_client_hello = raw_message if raw_message is not None else message.encode()
|
|
15
16
|
extension_types = [int(extension.extension_type) for extension in message.extensions]
|
|
16
17
|
if ExtensionType.PRE_SHARED_KEY in extension_types and extension_types[-1] != ExtensionType.PRE_SHARED_KEY:
|
|
17
18
|
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'pre_shared_key must be the final ClientHello extension')
|
|
@@ -149,7 +150,7 @@ class _QuicTlsServerHandshakeMixin:
|
|
|
149
150
|
self._selected_psk_index = index
|
|
150
151
|
self._selected_psk_ticket = ticket
|
|
151
152
|
self._early_secret = early_secret
|
|
152
|
-
self._client_early_secret = self._key_schedule.client_early_traffic_secret(early_secret,
|
|
153
|
+
self._client_early_secret = self._key_schedule.client_early_traffic_secret(early_secret, encoded_client_hello)
|
|
153
154
|
if (
|
|
154
155
|
self.transport_mode == 'quic'
|
|
155
156
|
and client_requested_early_data
|
|
@@ -169,7 +170,7 @@ class _QuicTlsServerHandshakeMixin:
|
|
|
169
170
|
self.early_data_accepted = False
|
|
170
171
|
|
|
171
172
|
self._last_client_hello = message
|
|
172
|
-
self._last_client_hello_bytes =
|
|
173
|
+
self._last_client_hello_bytes = encoded_client_hello
|
|
173
174
|
self._transcript.append(self._last_client_hello_bytes)
|
|
174
175
|
|
|
175
176
|
assert selected_group is not None
|
|
@@ -10,7 +10,10 @@ def _signature_algorithms_for_public_key(public_key: object) -> tuple[int, ...]:
|
|
|
10
10
|
if isinstance(public_key, rsa.RSAPublicKey):
|
|
11
11
|
return (SIG_RSA_PSS_RSAE_SHA256, SIG_RSA_PSS_PSS_SHA256)
|
|
12
12
|
if isinstance(public_key, ec.EllipticCurvePublicKey):
|
|
13
|
-
|
|
13
|
+
if isinstance(public_key.curve, ec.SECP256R1):
|
|
14
|
+
return (SIG_ECDSA_SECP256R1_SHA256,)
|
|
15
|
+
if isinstance(public_key.curve, ec.SECP384R1):
|
|
16
|
+
return (SIG_ECDSA_SECP384R1_SHA384,)
|
|
14
17
|
return ()
|
|
15
18
|
|
|
16
19
|
|
|
@@ -38,9 +41,13 @@ def _sign_with_scheme(private_key: object, scheme: int, payload: bytes) -> bytes
|
|
|
38
41
|
hashes.SHA256(),
|
|
39
42
|
)
|
|
40
43
|
if scheme == SIG_ECDSA_SECP256R1_SHA256:
|
|
41
|
-
if not isinstance(private_key, ec.EllipticCurvePrivateKey):
|
|
42
|
-
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'certificate key is not compatible with ECDSA')
|
|
44
|
+
if not isinstance(private_key, ec.EllipticCurvePrivateKey) or not isinstance(private_key.curve, ec.SECP256R1):
|
|
45
|
+
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'certificate key is not compatible with ECDSA P-256')
|
|
43
46
|
return private_key.sign(payload, ec.ECDSA(hashes.SHA256()))
|
|
47
|
+
if scheme == SIG_ECDSA_SECP384R1_SHA384:
|
|
48
|
+
if not isinstance(private_key, ec.EllipticCurvePrivateKey) or not isinstance(private_key.curve, ec.SECP384R1):
|
|
49
|
+
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'certificate key is not compatible with ECDSA P-384')
|
|
50
|
+
return private_key.sign(payload, ec.ECDSA(hashes.SHA384()))
|
|
44
51
|
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'unsupported certificate verify signature algorithm')
|
|
45
52
|
|
|
46
53
|
|
|
@@ -63,10 +70,15 @@ def _verify_with_scheme(public_key: object, scheme: int, signature: bytes, paylo
|
|
|
63
70
|
)
|
|
64
71
|
return
|
|
65
72
|
if scheme == SIG_ECDSA_SECP256R1_SHA256:
|
|
66
|
-
if not isinstance(public_key, ec.EllipticCurvePublicKey):
|
|
67
|
-
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'peer certificate key is not compatible with ECDSA')
|
|
73
|
+
if not isinstance(public_key, ec.EllipticCurvePublicKey) or not isinstance(public_key.curve, ec.SECP256R1):
|
|
74
|
+
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'peer certificate key is not compatible with ECDSA P-256')
|
|
68
75
|
public_key.verify(signature, payload, ec.ECDSA(hashes.SHA256()))
|
|
69
76
|
return
|
|
77
|
+
if scheme == SIG_ECDSA_SECP384R1_SHA384:
|
|
78
|
+
if not isinstance(public_key, ec.EllipticCurvePublicKey) or not isinstance(public_key.curve, ec.SECP384R1):
|
|
79
|
+
_raise_tls(AlertDescription.ILLEGAL_PARAMETER, 'peer certificate key is not compatible with ECDSA P-384')
|
|
80
|
+
public_key.verify(signature, payload, ec.ECDSA(hashes.SHA384()))
|
|
81
|
+
return
|
|
70
82
|
except TlsAlertError:
|
|
71
83
|
raise
|
|
72
84
|
except Exception as exc: # pragma: no cover - crypto backend specifics vary.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tigrcorn-security
|
|
3
|
-
Version: 0.3.18.
|
|
3
|
+
Version: 0.3.18.dev3
|
|
4
4
|
Summary: TLS 1.3, mTLS, X.509, ALPN, OCSP, CRL, and certificate policy surfaces for the Tigrcorn Python web server.
|
|
5
5
|
Author-email: Jacob Stewart <jacob@swarmauri.com>
|
|
6
6
|
License: Apache License
|
|
@@ -187,8 +187,8 @@ Classifier: Typing :: Typed
|
|
|
187
187
|
Requires-Python: <3.15,>=3.10
|
|
188
188
|
Description-Content-Type: text/markdown
|
|
189
189
|
License-File: LICENSE
|
|
190
|
-
Requires-Dist: tigrcorn-core==0.3.18.
|
|
191
|
-
Requires-Dist: tigrcorn-config==0.3.18.
|
|
190
|
+
Requires-Dist: tigrcorn-core==0.3.18.dev3
|
|
191
|
+
Requires-Dist: tigrcorn-config==0.3.18.dev3
|
|
192
192
|
Provides-Extra: x509
|
|
193
193
|
Requires-Dist: cryptography>=46.0.0; extra == "x509"
|
|
194
194
|
Dynamic: license-file
|
|
@@ -280,7 +280,7 @@ The package exposes its supported public surface through the <code>tigrcorn_secu
|
|
|
280
280
|
|
|
281
281
|
## Package Graph
|
|
282
282
|
|
|
283
|
-
[tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
|
|
283
|
+
[tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-quic-cc](https://pypi.org/project/tigrcorn-quic-cc/) | [tigrcorn-quic-cc-reno](https://pypi.org/project/tigrcorn-quic-cc-reno/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
|
|
284
284
|
|
|
285
285
|
## Best Practices
|
|
286
286
|
|
|
File without changes
|
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/__init__.py
RENAMED
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/alpn.py
RENAMED
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/certs.py
RENAMED
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/policies.py
RENAMED
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/context.py
RENAMED
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/imports.py
RENAMED
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/models.py
RENAMED
|
File without changes
|
{tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/records.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|