6464}
6565
6666class 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
15893class 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