Skip to content

Commit a45dbb4

Browse files
m
1 parent d95a695 commit a45dbb4

File tree

2 files changed

+16
-89
lines changed
  • src/aws_encryption_sdk/key_providers
  • test_vector_handlers/src/awses_test_vectors/manifests

2 files changed

+16
-89
lines changed

src/aws_encryption_sdk/key_providers/base.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ def decrypt_data_key(self, encrypted_data_key, algorithm, encryption_context):
256256
# //# input encryption context.
257257

258258
data_key = master_key.decrypt_data_key(encrypted_data_key, algorithm, encryption_context)
259-
except (IncorrectMasterKeyError, DecryptKeyError) as error:
259+
except (IncorrectMasterKeyError, DecryptKeyError, InvalidDataKeyError) as error:
260260
_LOGGER.debug(
261261
"%s raised when attempting to decrypt data key with master key %s",
262262
repr(error),
@@ -304,8 +304,8 @@ def decrypt_data_key_from_list(self, encrypted_data_keys, algorithm, encryption_
304304
try:
305305
data_key = self.decrypt_data_key(encrypted_data_key, algorithm, encryption_context)
306306
# MasterKeyProvider.decrypt_data_key throws DecryptKeyError
307-
# but MasterKey.decrypt_data_key throws IncorrectMasterKeyError
308-
except (DecryptKeyError, IncorrectMasterKeyError):
307+
# but MasterKey.decrypt_data_key throws IncorrectMasterKeyError and InvalidDataKeyError
308+
except (DecryptKeyError, IncorrectMasterKeyError, InvalidDataKeyError):
309309
continue
310310
else:
311311
break

test_vector_handlers/src/awses_test_vectors/manifests/master_key.py

+13-86
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,22 @@
6464
}
6565

6666
class TestVectorsMultiMasterKeyProvider(MasterKeyProvider):
67+
"""
68+
Provider for other MasterKeyProviders.
69+
Allows a "multi" MasterKeyProvider for use in test vectors.
70+
71+
In Python ESDK, MasterKey extends MasterKeyProvider.
72+
However, MasterKey overrides MasterKeyProvider's `decrypt_data_key` method.
73+
From AWS ESDK specification:
74+
"A master key MUST supply itself and MUST NOT supply any other master keys."
75+
https://github.com/awslabs/aws-encryption-sdk-specification/blob/master/framework/master-key-interface.md#get-master-key
76+
77+
78+
"""
6779

6880
_config_class = MasterKeyProviderConfig
6981
provider_id = "aws-test-vectors-multi-master-key-provider"
7082

71-
# @attr.s
72-
# class _MultiMasterKeyProviderConfig(MasterKeyProviderConfig):
73-
# key_provider_for_key_id = {}
74-
75-
# provider_id = "aws-test-vectors"
76-
# _config_class = _RawMultiMKPConfig
77-
7883
def __init__(self):
7984
self.key_provider_for_key_id = {}
8085

@@ -84,76 +89,6 @@ def add_key(self, key_provider):
8489
def _new_master_key(self, key_id):
8590
raise InvalidKeyIdError()
8691

87-
88-
# class StaticRawMasterKeyProvider(RawMasterKeyProvider):
89-
# """Provides a primary master key and others."""
90-
91-
# def __init__(self, raw_master_key): # pylint: disable=unused-argument
92-
# """Initialize empty map of keys."""
93-
# self.raw_master_key = raw_master_key
94-
95-
# def add_primary_key(self, primary_key):
96-
# self._primary_key = primary_key
97-
# self.add_master_key(primary_key)
98-
99-
# def add_other_key(self, other_key):
100-
# self._other_keys.append(other_key)
101-
# self.add_master_key(other_key)
102-
103-
# def _get_raw_key(self, key_id):
104-
# """Returns a static, randomly-generated symmetric key for the specified key ID.
105-
106-
# :param str key_id: Key ID
107-
# :returns: Wrapping key that contains the specified static key
108-
# :rtype: :class:`aws_encryption_sdk.internal.crypto.WrappingKey`
109-
# """
110-
# try:
111-
# static_key = self._static_keys[key_id]
112-
# except KeyError:
113-
# raise IncorrectMasterKeyError(f"StaticMasterKeyProvider does not have key_id={key_id}")
114-
# return WrappingKey(
115-
# wrapping_algorithm=WrappingAlgorithm.AES_256_GCM_IV12_TAG16_NO_PADDING,
116-
# wrapping_key=static_key,
117-
# wrapping_key_type=EncryptionKeyType.SYMMETRIC,
118-
# )
119-
120-
# This is a helper class necessary for the Raw AES master key provider
121-
# In the StaticMasterKeyProvider, we fix the static key to
122-
# DEFAULT_AES_256_STATIC_KEY in order to make the test deterministic.
123-
# Thus, both the Raw AES keyring and Raw AES MKP have the same key
124-
# and we are able to encrypt data using keyrings and decrypt using MKP and vice versa
125-
# In practice, users should generate a new random key for each key id.
126-
# class StaticMasterKeyProvider(RawMasterKeyProvider):
127-
# """Generates 256-bit keys for each unique key ID."""
128-
129-
# # The key namespace in the Raw keyrings is equivalent to Provider ID (or Provider) field
130-
# # in the Raw Master Key Providers
131-
# provider_id = DEFAULT_KEY_NAME_SPACE
132-
133-
# def __init__(self, **kwargs): # pylint: disable=unused-argument
134-
# """Initialize empty map of keys."""
135-
# self._static_keys = {}
136-
137-
# def add_key(self, key):
138-
# self._static_keys[key_id]
139-
140-
# def _get_raw_key(self, key_id):
141-
# """Returns a static, symmetric key for the specified key ID.
142-
143-
# :param str key_id: Key ID
144-
# :returns: Wrapping key that contains the specified static key
145-
# :rtype: :class:`aws_encryption_sdk.internal.crypto.WrappingKey`
146-
# """
147-
# try:
148-
# static_key = self._static_keys[key_id]
149-
# except KeyError:
150-
# raise IncorrectMasterKeyError(f"StaticMasterKeyProvider does not have key_id={key_id}")
151-
# return WrappingKey(
152-
# wrapping_algorithm=WrappingAlgorithm.AES_256_GCM_IV12_TAG16_NO_PADDING,
153-
# wrapping_key=static_key,
154-
# wrapping_key_type=EncryptionKeyType.SYMMETRIC,
155-
# )
156-
15792
@attr.s
15893
class MasterKeySpec(object): # pylint: disable=too-many-instance-attributes
15994
"""AWS Encryption SDK master key specification utilities.
@@ -287,7 +222,6 @@ def _raw_master_key_from_spec(self, keys):
287222

288223
key_spec = keys.key(self.key_name)
289224
wrapping_key = self._wrapping_key(key_spec)
290-
print(f"_raw_master_key_from_spec {self.key_name=} {key_spec=}")
291225
return RawMasterKey(provider_id=self.provider_id, key_id=key_spec.key_id, wrapping_key=wrapping_key)
292226

293227
def _kms_master_key_from_spec(self, keys):
@@ -395,7 +329,6 @@ def master_key_provider_from_master_key_specs(keys, master_key_specs):
395329
"""
396330
master_keys = []
397331
for spec in master_key_specs:
398-
print(f"{spec=}")
399332
try:
400333
master_keys.append(spec.master_key(keys))
401334
# If spec is not a valid master key
@@ -405,14 +338,8 @@ def master_key_provider_from_master_key_specs(keys, master_key_specs):
405338
pass
406339
if len(master_keys) == 0:
407340
return None
408-
print(master_keys)
409341
# master_key_ids = [master_key.key_id for master_key in master_keys]
410342
mkp = TestVectorsMultiMasterKeyProvider()
411343
for master_key in master_keys:
412-
mkp.add_key(master_key)
413-
# primary = master_keys[0]
414-
# mkp.add_key(primary.key_id, primary)
415-
# others = master_keys[1:]
416-
# for master_key in others:
417-
# mkp.add_key(master_key.key_id, master_key)
344+
mkp.add_key(master_key.key_id, master_key)
418345
return mkp

0 commit comments

Comments
 (0)