v3.31.2: the SCP81 TLS-PSK Python floor, documented and guarded
release / release (push) Has been cancelled
release / release (push) Has been cancelled
ssl's TLS-PSK callbacks (PskTlsServer) exist only since Python 3.13 - the first CI run on 3.12 errored in all 20 PSK tests, and the docs confirm "Added in version 3.13". - PskTlsServer._make_context raises a clear RuntimeError naming the requirement instead of AttributeError; a source pin keeps the guard. - tests/test_scp81.py skips PskTlsServerTest where the callbacks are missing (it runs on 3.13+), so contributors on 3.9-3.12 no longer see 20 failures. - The READMEs state the requirement, and the Windows notes now strongly recommend Python 3.13: pyscard has wheels up to 3.13, and on 3.14 pyscard and some pysim dependency wheels are unavailable and build from source (MSVC). setup.bat and setup.sh print the same guidance. - Version strings + the PWA cache bumped together (simple-v457). 998 Python + 953 frontend green.
This commit is contained in:
@@ -5,6 +5,7 @@ terminal's Data available notification (TS 102 223 7.5.10).
|
||||
Synthetic PSK only; no live card data.
|
||||
"""
|
||||
|
||||
import inspect
|
||||
import socket
|
||||
import ssl
|
||||
import sys
|
||||
@@ -80,6 +81,18 @@ class HttpParseTest(unittest.TestCase):
|
||||
self.assertTrue(body.startswith(b'64\r\n'))
|
||||
|
||||
|
||||
class PskGuardTest(unittest.TestCase):
|
||||
"""On Python < 3.13 the listener must explain the requirement, not raise
|
||||
AttributeError (the PSK tests themselves are skipped there)."""
|
||||
|
||||
def test_the_context_names_the_python_requirement(self):
|
||||
src = inspect.getsource(scp81.PskTlsServer._make_context)
|
||||
self.assertIn("hasattr(ctx, 'set_psk_server_callback')", src)
|
||||
self.assertIn('Python 3.13+', src)
|
||||
|
||||
|
||||
@unittest.skipUnless(hasattr(ssl.SSLContext, 'set_psk_server_callback'),
|
||||
'TLS-PSK requires Python 3.13+')
|
||||
class PskTlsServerTest(unittest.TestCase):
|
||||
def _client_ctx(self, identity=IDENT, psk=PSK):
|
||||
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
||||
|
||||
Reference in New Issue
Block a user