Marco Ricci commited on 2024-10-10 12:36:24
Zeige 1 geänderte Dateien mit 28 Einfügungen und 0 Löschungen.
So far, we haven't been explicitly testing for whether the master and session keys decrytion routines correctly reject payloads with invalid MAC values, and with the correct error type. Surely the `cryptography` primitive is implemented correctly, but there was no test whether *we* were using the primitive correctly. So, add one.
... | ... |
@@ -9,7 +9,9 @@ import json |
9 | 9 |
from typing import TYPE_CHECKING |
10 | 10 |
|
11 | 11 |
import click.testing |
12 |
+import hypothesis |
|
12 | 13 |
import pytest |
14 |
+from hypothesis import strategies |
|
13 | 15 |
|
14 | 16 |
import tests |
15 | 17 |
from derivepassphrase import cli |
... | ... |
@@ -382,6 +384,32 @@ class TestStoreroom: |
382 | 384 |
}, |
383 | 385 |
) |
384 | 386 |
|
387 |
+ @tests.hypothesis_settings_coverage_compatible |
|
388 |
+ @hypothesis.given( |
|
389 |
+ data=strategies.binary( |
|
390 |
+ min_size=storeroom.MAC_SIZE, max_size=storeroom.MAC_SIZE |
|
391 |
+ ), |
|
392 |
+ ) |
|
393 |
+ def test_405_decrypt_keys_invalid_signature(self, data: bytes) -> None: |
|
394 |
+ key = b'DEADBEEFdeadbeefDeAdBeEfdEaDbEeF' |
|
395 |
+ # Guessing a correct payload plus MAC would be a pre-image |
|
396 |
+ # attack on the underlying hash function (SHA-256), i.e. is |
|
397 |
+ # computationally infeasible, and the chance of finding one by |
|
398 |
+ # such random sampling is astronomically tiny. |
|
399 |
+ with pytest.raises(cryptography.exceptions.InvalidSignature): |
|
400 |
+ storeroom.decrypt_master_keys_data( |
|
401 |
+ data, {'encryption_key': key, 'signing_key': key} |
|
402 |
+ ) |
|
403 |
+ with pytest.raises(cryptography.exceptions.InvalidSignature): |
|
404 |
+ storeroom.decrypt_session_keys( |
|
405 |
+ data, |
|
406 |
+ { |
|
407 |
+ 'hashing_key': key, |
|
408 |
+ 'encryption_key': key, |
|
409 |
+ 'signing_key': key, |
|
410 |
+ }, |
|
411 |
+ ) |
|
412 |
+ |
|
385 | 413 |
|
386 | 414 |
class TestVaultNativeConfig: |
387 | 415 |
@pytest.mark.parametrize( |
388 | 416 |