Marco Ricci commited on 2024-11-26 14:03:34
Zeige 2 geänderte Dateien mit 10 Einfügungen und 4 Löschungen.
So far, the test suite was silently passing for me, because it requires either a patched version or a not-yet-released version of PuTTY to actually run the tests against Pageant (which is the main beneficiary of deterministic signature detection). Actually plugging in a suitable patched Pageant version revealed a couple of key places where we silently assume that the key type alone determines its suitability for `derivepassphrase`. This commit rectifies that.
... | ... |
@@ -511,6 +511,7 @@ def _get_suitable_ssh_keys( |
511 | 511 |
|
512 | 512 |
""" |
513 | 513 |
with ssh_agent.SSHAgentClient.ensure_agent_subcontext(conn) as client: |
514 |
+ has_deterministic_signatures = client.has_deterministic_signatures() |
|
514 | 515 |
try: |
515 | 516 |
all_key_comment_pairs = list(client.list_keys()) |
516 | 517 |
except EOFError as e: # pragma: no cover |
... | ... |
@@ -518,7 +519,10 @@ def _get_suitable_ssh_keys( |
518 | 519 |
suitable_keys = copy.copy(all_key_comment_pairs) |
519 | 520 |
for pair in all_key_comment_pairs: |
520 | 521 |
key, _comment = pair |
521 |
- if vault.Vault._is_suitable_ssh_key(key): # noqa: SLF001 |
|
522 |
+ if ( |
|
523 |
+ has_deterministic_signatures |
|
524 |
+ or vault.Vault._is_suitable_ssh_key(key) # noqa: SLF001 |
|
525 |
+ ): |
|
522 | 526 |
yield pair |
523 | 527 |
if not suitable_keys: # pragma: no cover |
524 | 528 |
raise LookupError(_NO_USABLE_KEYS) |
... | ... |
@@ -275,6 +275,8 @@ class TestAgentInteraction: |
275 | 275 |
_ = data_dict['expected_signature'] |
276 | 276 |
if public_key_data not in key_comment_pairs: # pragma: no cover |
277 | 277 |
pytest.skip('prerequisite SSH key not loaded') |
278 |
+ if client.has_deterministic_signatures(): |
|
279 |
+ pytest.skip('agent ensures all keys are suitable') |
|
278 | 280 |
with pytest.raises(ValueError, match='unsuitable SSH key'): |
279 | 281 |
vault.Vault.phrase_from_key(public_key_data) |
280 | 282 |
|
... | ... |
@@ -289,14 +291,14 @@ class TestAgentInteraction: |
289 | 291 |
def test_210_ssh_key_selector( |
290 | 292 |
self, |
291 | 293 |
monkeypatch: pytest.MonkeyPatch, |
292 |
- running_ssh_agent: str, |
|
294 |
+ ssh_agent_client_with_test_keys_loaded: ssh_agent.SSHAgentClient, |
|
293 | 295 |
key: bytes, |
294 | 296 |
single: bool, |
295 | 297 |
) -> None: |
296 |
- del running_ssh_agent |
|
298 |
+ client = ssh_agent_client_with_test_keys_loaded |
|
297 | 299 |
|
298 | 300 |
def key_is_suitable(key: bytes) -> bool: |
299 |
- return key in { |
|
301 |
+ return client.has_deterministic_signatures() or key in { |
|
300 | 302 |
v['public_key_data'] for v in tests.SUPPORTED_KEYS.values() |
301 | 303 |
} |
302 | 304 |
|
303 | 305 |