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.
Files changed (76) hide show
  1. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/PKG-INFO +4 -4
  2. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/README.md +1 -1
  3. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/pyproject.toml +3 -3
  4. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/__init__.py +2 -0
  5. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/__init__.py +1 -1
  6. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/imports.py +1 -0
  7. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/models.py +16 -4
  8. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/imports.py +1 -0
  9. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/server.py +3 -2
  10. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/signatures.py +17 -5
  11. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security.egg-info/PKG-INFO +4 -4
  12. tigrcorn_security-0.3.18.dev3/src/tigrcorn_security.egg-info/requires.txt +5 -0
  13. tigrcorn_security-0.3.18.dev1/src/tigrcorn_security.egg-info/requires.txt +0 -5
  14. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/LICENSE +0 -0
  15. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/setup.cfg +0 -0
  16. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/__init__.py +0 -0
  17. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/alpn.py +0 -0
  18. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/certs.py +0 -0
  19. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/policies.py +0 -0
  20. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/py.typed +0 -0
  21. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/__init__.py +0 -0
  22. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/certificates.py +0 -0
  23. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/connection.py +0 -0
  24. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/context.py +0 -0
  25. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/imports.py +0 -0
  26. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/models.py +0 -0
  27. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/records.py +0 -0
  28. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/ssl_object.py +0 -0
  29. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls/wrapping.py +0 -0
  30. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/cipher_suites.py +0 -0
  31. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/common.py +0 -0
  32. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/key_share.py +0 -0
  33. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/psk.py +0 -0
  34. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/quic.py +0 -0
  35. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/registry.py +0 -0
  36. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/extensions/vectors.py +0 -0
  37. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/__init__.py +0 -0
  38. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/alerts.py +0 -0
  39. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/base.py +0 -0
  40. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/certificates.py +0 -0
  41. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/client.py +0 -0
  42. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/driver.py +0 -0
  43. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/io.py +0 -0
  44. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/key_exchange.py +0 -0
  45. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/models.py +0 -0
  46. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/replay.py +0 -0
  47. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/state_table.py +0 -0
  48. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/tickets.py +0 -0
  49. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/handshake/utils.py +0 -0
  50. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/key_schedule.py +0 -0
  51. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/__init__.py +0 -0
  52. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/base.py +0 -0
  53. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/certificates.py +0 -0
  54. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/decode.py +0 -0
  55. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/finished.py +0 -0
  56. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/hello.py +0 -0
  57. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/imports.py +0 -0
  58. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/types.py +0 -0
  59. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/messages/vectors.py +0 -0
  60. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls13/transcript.py +0 -0
  61. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/tls_cipher_policy.py +0 -0
  62. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/__init__.py +0 -0
  63. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/__init__.py +0 -0
  64. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/chain.py +0 -0
  65. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/constraints.py +0 -0
  66. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/hostname.py +0 -0
  67. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/imports.py +0 -0
  68. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/loading.py +0 -0
  69. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/models.py +0 -0
  70. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/revocation_fetch.py +0 -0
  71. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/revocation_material.py +0 -0
  72. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/revocation_policy.py +0 -0
  73. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security/x509/path/time.py +0 -0
  74. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security.egg-info/SOURCES.txt +0 -0
  75. {tigrcorn_security-0.3.18.dev1 → tigrcorn_security-0.3.18.dev3}/src/tigrcorn_security.egg-info/dependency_links.txt +0 -0
  76. {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.dev1
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.dev1
191
- Requires-Dist: tigrcorn-config==0.3.18.dev1
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.dev1"
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.dev1",
34
- "tigrcorn-config==0.3.18.dev1",
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('__')]
@@ -18,6 +18,7 @@ GROUP_X25519 = 0x001D
18
18
 
19
19
  SIG_RSA_PKCS1_SHA256 = 0x0401
20
20
  SIG_ECDSA_SECP256R1_SHA256 = 0x0403
21
+ SIG_ECDSA_SECP384R1_SHA384 = 0x0503
21
22
  SIG_RSA_PSS_RSAE_SHA256 = 0x0804
22
23
  SIG_ED25519 = 0x0807
23
24
  SIG_RSA_PSS_PSS_SHA256 = 0x0809
@@ -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 = 65536
70
- max_stream_data_bidi_local: int = 65536
71
- max_stream_data_bidi_remote: int = 65536
72
- max_stream_data_uni: int = 65536
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 = (
@@ -52,6 +52,7 @@ from tigrcorn_security.tls13.extensions import (
52
52
  PSK_MODE_DHE_KE,
53
53
  QUIC_EARLY_DATA_SENTINEL,
54
54
  SIG_ECDSA_SECP256R1_SHA256,
55
+ SIG_ECDSA_SECP384R1_SHA384,
55
56
  SIG_ED25519,
56
57
  SIG_RSA_PSS_PSS_SHA256,
57
58
  SIG_RSA_PSS_RSAE_SHA256,
@@ -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, message.encode())
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 = message.encode()
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
- return (SIG_ECDSA_SECP256R1_SHA256,)
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.dev1
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.dev1
191
- Requires-Dist: tigrcorn-config==0.3.18.dev1
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
 
@@ -0,0 +1,5 @@
1
+ tigrcorn-core==0.3.18.dev3
2
+ tigrcorn-config==0.3.18.dev3
3
+
4
+ [x509]
5
+ cryptography>=46.0.0
@@ -1,5 +0,0 @@
1
- tigrcorn-core==0.3.18.dev1
2
- tigrcorn-config==0.3.18.dev1
3
-
4
- [x509]
5
- cryptography>=46.0.0