Skip to content

Commit 0d44f26

Browse files
committed
chore: adjust RawKeyring functional tests to use CryptoResult and check keyring trace
1 parent aba80d8 commit 0d44f26

File tree

1 file changed

+55
-24
lines changed

1 file changed

+55
-24
lines changed

test/functional/test_client.py

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from aws_encryption_sdk.internal.formatting.encryption_context import serialize_encryption_context
2828
from aws_encryption_sdk.key_providers.base import MasterKeyProvider, MasterKeyProviderConfig
2929
from aws_encryption_sdk.key_providers.raw import RawMasterKeyProvider
30+
from aws_encryption_sdk.keyrings.base import Keyring
3031
from aws_encryption_sdk.keyrings.raw import RawRSAKeyring
3132
from aws_encryption_sdk.materials_managers import DecryptionMaterialsRequest, EncryptionMaterialsRequest
3233

@@ -314,23 +315,27 @@ def test_encrypt_ciphertext_message(frame_length, algorithm, encryption_context)
314315
assert len(ciphertext) == results_length
315316

316317

317-
def _raw_aes():
318+
def _raw_aes(include_mkp=True):
318319
for symmetric_algorithm in (
319320
WrappingAlgorithm.AES_128_GCM_IV12_TAG16_NO_PADDING,
320321
WrappingAlgorithm.AES_192_GCM_IV12_TAG16_NO_PADDING,
321322
WrappingAlgorithm.AES_256_GCM_IV12_TAG16_NO_PADDING,
322323
):
324+
keyring = ephemeral_raw_aes_keyring(symmetric_algorithm)
325+
yield pytest.param(
326+
"keyring", keyring, "keyring", keyring, id="raw AES keyring -- {}".format(symmetric_algorithm.name)
327+
)
328+
329+
if not include_mkp:
330+
continue
331+
323332
yield pytest.param(
324333
"key_provider",
325334
build_fake_raw_key_provider(symmetric_algorithm, EncryptionKeyType.SYMMETRIC),
326335
"key_provider",
327336
build_fake_raw_key_provider(symmetric_algorithm, EncryptionKeyType.SYMMETRIC),
328337
id="raw AES master key provider -- {}".format(symmetric_algorithm.name),
329338
)
330-
keyring = ephemeral_raw_aes_keyring(symmetric_algorithm)
331-
yield pytest.param(
332-
"keyring", keyring, "keyring", keyring, id="raw AES keyring -- {}".format(symmetric_algorithm.name)
333-
)
334339

335340
mkp = ephemeral_raw_aes_master_key(wrapping_algorithm=symmetric_algorithm, key=keyring._wrapping_key)
336341
yield pytest.param(
@@ -349,7 +354,7 @@ def _raw_aes():
349354
)
350355

351356

352-
def _raw_rsa(include_pre_sha2=True, include_sha2=True):
357+
def _raw_rsa(include_pre_sha2=True, include_sha2=True, include_mkp=True):
353358
wrapping_algorithms = []
354359
if include_pre_sha2:
355360
wrapping_algorithms.extend([WrappingAlgorithm.RSA_PKCS1, WrappingAlgorithm.RSA_OAEP_SHA1_MGF1])
@@ -362,21 +367,6 @@ def _raw_rsa(include_pre_sha2=True, include_sha2=True):
362367
]
363368
)
364369
for wrapping_algorithm in wrapping_algorithms:
365-
yield pytest.param(
366-
"key_provider",
367-
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PRIVATE),
368-
"key_provider",
369-
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PRIVATE),
370-
id="raw RSA master key provider -- private encrypt, private decrypt -- {}".format(wrapping_algorithm.name),
371-
)
372-
yield pytest.param(
373-
"key_provider",
374-
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PUBLIC),
375-
"key_provider",
376-
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PRIVATE),
377-
id="raw RSA master key provider -- public encrypt, private decrypt -- {}".format(wrapping_algorithm.name),
378-
)
379-
380370
private_keyring = ephemeral_raw_rsa_keyring(wrapping_algorithm=wrapping_algorithm)
381371
public_keyring = RawRSAKeyring(
382372
key_namespace=private_keyring.key_namespace,
@@ -398,8 +388,27 @@ def _raw_rsa(include_pre_sha2=True, include_sha2=True):
398388
private_keyring,
399389
id="raw RSA keyring -- public encrypt, private decrypt -- {}".format(wrapping_algorithm.name),
400390
)
391+
392+
if not include_mkp:
393+
continue
394+
401395
private_mkp, public_mkp = raw_rsa_mkps_from_keyring(private_keyring)
402396

397+
yield pytest.param(
398+
"key_provider",
399+
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PRIVATE),
400+
"key_provider",
401+
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PRIVATE),
402+
id="raw RSA master key provider -- private encrypt, private decrypt -- {}".format(wrapping_algorithm.name),
403+
)
404+
yield pytest.param(
405+
"key_provider",
406+
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PUBLIC),
407+
"key_provider",
408+
build_fake_raw_key_provider(wrapping_algorithm, EncryptionKeyType.PRIVATE),
409+
id="raw RSA master key provider -- public encrypt, private decrypt -- {}".format(wrapping_algorithm.name),
410+
)
411+
403412
yield pytest.param(
404413
"key_provider",
405414
private_mkp,
@@ -452,17 +461,39 @@ def run_raw_provider_check(
452461
encrypt_kwargs = {encrypt_param_name: encrypting_provider}
453462
decrypt_kwargs = {decrypt_param_name: decrypting_provider}
454463

455-
ciphertext, _ = aws_encryption_sdk.encrypt(
464+
encrypt_result = aws_encryption_sdk.encrypt(
456465
source=VALUES["plaintext_128"],
457466
encryption_context=VALUES["encryption_context"],
458467
frame_length=0,
459468
**encrypt_kwargs
460469
)
461-
plaintext, _ = aws_encryption_sdk.decrypt(source=ciphertext, **decrypt_kwargs)
470+
decrypt_result = aws_encryption_sdk.decrypt(source=encrypt_result.result, **decrypt_kwargs)
471+
472+
if isinstance(encrypting_provider, Keyring):
473+
trace_entries = (
474+
entry
475+
for entry in encrypt_result.keyring_trace
476+
if (
477+
entry.wrapping_key.provider_id == encrypting_provider.key_namespace
478+
and entry.wrapping_key.key_info == encrypting_provider.key_name
479+
)
480+
)
481+
assert trace_entries
462482

463-
assert plaintext == VALUES["plaintext_128"]
483+
assert decrypt_result.result == VALUES["plaintext_128"]
464484
assert_key_not_logged(encrypting_provider, log_capturer.text)
465485

486+
if isinstance(decrypting_provider, Keyring):
487+
trace_entries = (
488+
entry
489+
for entry in decrypt_result.keyring_trace
490+
if (
491+
entry.wrapping_key.provider_id == decrypting_provider.key_namespace
492+
and entry.wrapping_key.key_info == decrypting_provider.key_name
493+
)
494+
)
495+
assert trace_entries
496+
466497

467498
@pytest.mark.parametrize(
468499
"encrypt_param_name, encrypting_provider, decrypt_param_name, decrypting_provider",

0 commit comments

Comments
 (0)