27
27
from aws_encryption_sdk .internal .formatting .encryption_context import serialize_encryption_context
28
28
from aws_encryption_sdk .key_providers .base import MasterKeyProvider , MasterKeyProviderConfig
29
29
from aws_encryption_sdk .key_providers .raw import RawMasterKeyProvider
30
+ from aws_encryption_sdk .keyrings .base import Keyring
30
31
from aws_encryption_sdk .keyrings .raw import RawRSAKeyring
31
32
from aws_encryption_sdk .materials_managers import DecryptionMaterialsRequest , EncryptionMaterialsRequest
32
33
@@ -314,23 +315,27 @@ def test_encrypt_ciphertext_message(frame_length, algorithm, encryption_context)
314
315
assert len (ciphertext ) == results_length
315
316
316
317
317
- def _raw_aes ():
318
+ def _raw_aes (include_mkp = True ):
318
319
for symmetric_algorithm in (
319
320
WrappingAlgorithm .AES_128_GCM_IV12_TAG16_NO_PADDING ,
320
321
WrappingAlgorithm .AES_192_GCM_IV12_TAG16_NO_PADDING ,
321
322
WrappingAlgorithm .AES_256_GCM_IV12_TAG16_NO_PADDING ,
322
323
):
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
+
323
332
yield pytest .param (
324
333
"key_provider" ,
325
334
build_fake_raw_key_provider (symmetric_algorithm , EncryptionKeyType .SYMMETRIC ),
326
335
"key_provider" ,
327
336
build_fake_raw_key_provider (symmetric_algorithm , EncryptionKeyType .SYMMETRIC ),
328
337
id = "raw AES master key provider -- {}" .format (symmetric_algorithm .name ),
329
338
)
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
- )
334
339
335
340
mkp = ephemeral_raw_aes_master_key (wrapping_algorithm = symmetric_algorithm , key = keyring ._wrapping_key )
336
341
yield pytest .param (
@@ -349,7 +354,7 @@ def _raw_aes():
349
354
)
350
355
351
356
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 ):
353
358
wrapping_algorithms = []
354
359
if include_pre_sha2 :
355
360
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):
362
367
]
363
368
)
364
369
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
-
380
370
private_keyring = ephemeral_raw_rsa_keyring (wrapping_algorithm = wrapping_algorithm )
381
371
public_keyring = RawRSAKeyring (
382
372
key_namespace = private_keyring .key_namespace ,
@@ -398,8 +388,27 @@ def _raw_rsa(include_pre_sha2=True, include_sha2=True):
398
388
private_keyring ,
399
389
id = "raw RSA keyring -- public encrypt, private decrypt -- {}" .format (wrapping_algorithm .name ),
400
390
)
391
+
392
+ if not include_mkp :
393
+ continue
394
+
401
395
private_mkp , public_mkp = raw_rsa_mkps_from_keyring (private_keyring )
402
396
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
+
403
412
yield pytest .param (
404
413
"key_provider" ,
405
414
private_mkp ,
@@ -452,17 +461,39 @@ def run_raw_provider_check(
452
461
encrypt_kwargs = {encrypt_param_name : encrypting_provider }
453
462
decrypt_kwargs = {decrypt_param_name : decrypting_provider }
454
463
455
- ciphertext , _ = aws_encryption_sdk .encrypt (
464
+ encrypt_result = aws_encryption_sdk .encrypt (
456
465
source = VALUES ["plaintext_128" ],
457
466
encryption_context = VALUES ["encryption_context" ],
458
467
frame_length = 0 ,
459
468
** encrypt_kwargs
460
469
)
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
462
482
463
- assert plaintext == VALUES ["plaintext_128" ]
483
+ assert decrypt_result . result == VALUES ["plaintext_128" ]
464
484
assert_key_not_logged (encrypting_provider , log_capturer .text )
465
485
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
+
466
497
467
498
@pytest .mark .parametrize (
468
499
"encrypt_param_name, encrypting_provider, decrypt_param_name, decrypting_provider" ,
0 commit comments