50
50
"rsa/pkcs1" : WrappingAlgorithm .RSA_PKCS1 ,
51
51
"rsa/oaep-mgf1/sha1" : WrappingAlgorithm .RSA_OAEP_SHA1_MGF1 ,
52
52
"rsa/oaep-mgf1/sha256" : WrappingAlgorithm .RSA_OAEP_SHA256_MGF1 ,
53
- # \/ not yet implemented \/
54
- # 'rsa/oaep-mgf1/sha384': WrappingAlgorithm.RSA_OAEP_SHA384_MGF1,
55
- # 'rsa/oaep-mgf1/sha512': WrappingAlgorithm.RSA_OAEP_SHA512_MGF1,
56
53
}
57
- _NOT_YET_IMPLEMENTED = {"rsa/oaep-mgf1/sha384" , "rsa/oaep-mgf1/sha512" }
54
+ try :
55
+ _RAW_WRAPPING_KEY_ALGORITHMS .update ({
56
+ 'rsa/oaep-mgf1/sha384' : WrappingAlgorithm .RSA_OAEP_SHA384_MGF1 ,
57
+ 'rsa/oaep-mgf1/sha512' : WrappingAlgorithm .RSA_OAEP_SHA512_MGF1 ,
58
+ })
59
+ _NOT_YET_IMPLEMENTED = {}
60
+ except AttributeError :
61
+ _NOT_YET_IMPLEMENTED = {"rsa/oaep-mgf1/sha384" , "rsa/oaep-mgf1/sha512" }
58
62
_RAW_ENCRYPTION_KEY_TYPE = {
59
63
"symmetric" : EncryptionKeyType .SYMMETRIC ,
60
64
"private" : EncryptionKeyType .PRIVATE ,
@@ -68,18 +72,16 @@ class MasterKeySpec(object):
68
72
69
73
Described in AWS Crypto Tools Test Vector Framework features #0003 and #0004.
70
74
71
- :param str type_name:
72
- :param str key_name:
73
- :param str key_id:
74
- :param str provider_id:
75
- :param str encryption_algorithm:
76
- :param str padding_algorithm:
77
- :param str padding_hash:
75
+ :param str type_name: Master key type name
76
+ :param str key_name: Name of key in keys spec
77
+ :param str provider_id: Master key provider ID
78
+ :param str encryption_algorithm: Wrapping key encryption algorithm (required for raw master keys)
79
+ :param str padding_algorithm: Wrapping key padding algorithm (required for raw master keys)
80
+ :param str padding_hash: Wrapping key padding hash (required for raw master keys)
78
81
"""
79
82
80
83
type_name = attr .ib (validator = membership_validator (KNOWN_TYPES ))
81
84
key_name = attr .ib (validator = attr .validators .instance_of (six .string_types ))
82
- key_id = attr .ib (validator = attr .validators .optional (attr .validators .instance_of (six .string_types )))
83
85
provider_id = attr .ib (validator = attr .validators .optional (attr .validators .instance_of (six .string_types )))
84
86
encryption_algorithm = attr .ib (validator = attr .validators .optional (membership_validator (KNOWN_ALGORITHMS )))
85
87
padding_algorithm = attr .ib (validator = attr .validators .optional (membership_validator (KNOWN_PADDING )))
@@ -113,7 +115,6 @@ def from_scenario(cls, spec):
113
115
return cls (
114
116
type_name = spec ["type" ],
115
117
key_name = spec ["key" ],
116
- key_id = spec .get ("key-id" ),
117
118
provider_id = spec .get ("provider-id" ),
118
119
encryption_algorithm = spec .get ("encryption-algorithm" ),
119
120
padding_algorithm = spec .get ("padding-algorithm" ),
@@ -166,19 +167,6 @@ def _wrapping_key(self, key_spec):
166
167
key_type = _RAW_ENCRYPTION_KEY_TYPE [key_spec .type_name ]
167
168
return WrappingKey (wrapping_algorithm = algorithm , wrapping_key = material , wrapping_key_type = key_type )
168
169
169
- def _raw_key_id (self ):
170
- # type: () -> str
171
- """Determine the key ID value if this is a raw master key.
172
-
173
- :returns: Correct key ID
174
- :rtype: str
175
- :raises TypeError: if this is not a raw master key specification
176
- """
177
- if not self .type_name == "raw" :
178
- raise TypeError ("This is not a raw master key" )
179
-
180
- return self .key_id if self .key_id is not None else self .key_name
181
-
182
170
def _raw_master_key_from_spec (self , key_spec ):
183
171
# type: (KeySpec) -> RawMasterKey
184
172
"""Build a raw master key using this specification.
@@ -192,8 +180,7 @@ def _raw_master_key_from_spec(self, key_spec):
192
180
raise TypeError ("This is not a raw master key" )
193
181
194
182
wrapping_key = self ._wrapping_key (key_spec )
195
- key_id = self ._raw_key_id ()
196
- return RawMasterKey (provider_id = self .provider_id , key_id = key_id , wrapping_key = wrapping_key )
183
+ return RawMasterKey (provider_id = self .provider_id , key_id = key_spec .key_id , wrapping_key = wrapping_key )
197
184
198
185
def _kms_master_key_from_spec (self , key_spec ):
199
186
# type: (KeySpec) -> KMSMasterKey
@@ -207,9 +194,6 @@ def _kms_master_key_from_spec(self, key_spec):
207
194
if not self .type_name == "aws-kms" :
208
195
raise TypeError ("This is not an AWS KMS master key" )
209
196
210
- if self .key_id is not None and self .key_id != key_spec .key_id :
211
- raise ValueError ("AWS KMS key IDs must match between master key spec and key spec" )
212
-
213
197
return KMS_MASTER_KEY_PROVIDER .master_key (key_id = key_spec .key_id )
214
198
215
199
_MASTER_KEY_LOADERS = {"aws-kms" : _kms_master_key_from_spec , "raw" : _raw_master_key_from_spec }
@@ -237,7 +221,6 @@ def scenario_spec(self):
237
221
if self .type_name != "aws-kms" :
238
222
spec .update (
239
223
{
240
- "key-id" : self .key_id ,
241
224
"provider-id" : self .provider_id ,
242
225
"encryption-algorithm" : self .encryption_algorithm ,
243
226
"padding-algorithm" : self .padding_algorithm ,
0 commit comments