64
64
}
65
65
66
66
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
+ """
67
79
68
80
_config_class = MasterKeyProviderConfig
69
81
provider_id = "aws-test-vectors-multi-master-key-provider"
70
82
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
-
78
83
def __init__ (self ):
79
84
self .key_provider_for_key_id = {}
80
85
@@ -84,76 +89,6 @@ def add_key(self, key_provider):
84
89
def _new_master_key (self , key_id ):
85
90
raise InvalidKeyIdError ()
86
91
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
-
157
92
@attr .s
158
93
class MasterKeySpec (object ): # pylint: disable=too-many-instance-attributes
159
94
"""AWS Encryption SDK master key specification utilities.
@@ -287,7 +222,6 @@ def _raw_master_key_from_spec(self, keys):
287
222
288
223
key_spec = keys .key (self .key_name )
289
224
wrapping_key = self ._wrapping_key (key_spec )
290
- print (f"_raw_master_key_from_spec { self .key_name = } { key_spec = } " )
291
225
return RawMasterKey (provider_id = self .provider_id , key_id = key_spec .key_id , wrapping_key = wrapping_key )
292
226
293
227
def _kms_master_key_from_spec (self , keys ):
@@ -395,7 +329,6 @@ def master_key_provider_from_master_key_specs(keys, master_key_specs):
395
329
"""
396
330
master_keys = []
397
331
for spec in master_key_specs :
398
- print (f"{ spec = } " )
399
332
try :
400
333
master_keys .append (spec .master_key (keys ))
401
334
# If spec is not a valid master key
@@ -405,14 +338,8 @@ def master_key_provider_from_master_key_specs(keys, master_key_specs):
405
338
pass
406
339
if len (master_keys ) == 0 :
407
340
return None
408
- print (master_keys )
409
341
# master_key_ids = [master_key.key_id for master_key in master_keys]
410
342
mkp = TestVectorsMultiMasterKeyProvider ()
411
343
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 )
418
345
return mkp
0 commit comments