Skip to content

Commit 54a59ae

Browse files
committed
* padding algorithm is not required for raw AES keys: we only allow AES-GCM
* properly ignore test cases that require master keys that have not yet been implemented
1 parent 816e36b commit 54a59ae

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

test_vector_handlers/src/awses_test_vectors/manifests/full_message/encrypt.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,12 @@ def from_file(cls, input_file):
202202
raw_keys_manifest = json.loads(reader(raw_manifest["keys"]).decode(ENCODING))
203203
keys = KeysManifest.from_manifest_spec(raw_keys_manifest)
204204
plaintexts = cls._generate_plaintexts(raw_manifest["plaintexts"])
205-
tests = {
206-
name: MessageEncryptionTestScenario.from_scenario(scenario=scenario, keys=keys, plaintexts=plaintexts)
207-
for name, scenario in raw_manifest["tests"].items()
208-
}
205+
tests = {}
206+
for name, scenario in raw_manifest["tests"].items():
207+
try:
208+
tests[name] = MessageEncryptionTestScenario.from_scenario(scenario=scenario, keys=keys, plaintexts=plaintexts)
209+
except NotImplementedError:
210+
continue
209211
return cls(version=raw_manifest["manifest"]["version"], keys=keys, plaintexts=plaintexts, tests=tests)
210212

211213
def run_and_write_to_dir(self, target_directory, json_indent=None):

test_vector_handlers/src/awses_test_vectors/manifests/master_key.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
# 'rsa/oaep-mgf1/sha384': WrappingAlgorithm.RSA_OAEP_SHA384_MGF1,
5555
# 'rsa/oaep-mgf1/sha512': WrappingAlgorithm.RSA_OAEP_SHA512_MGF1,
5656
}
57+
_NOT_YET_IMPLEMENTED = {'rsa/oaep-mgf1/sha384', 'rsa/oaep-mgf1/sha512'}
5758
_RAW_ENCRYPTION_KEY_TYPE = {
5859
"symmetric": EncryptionKeyType.SYMMETRIC,
5960
"private": EncryptionKeyType.PRIVATE,
@@ -91,9 +92,14 @@ def __attrs_post_init__(self):
9192
raise NotImplementedError("Gap found between known master key types and available master key loaders.")
9293

9394
if self.type_name == "raw":
94-
if None in (self.provider_id, self.encryption_algorithm, self.padding_algorithm):
95+
if None in (self.provider_id, self.encryption_algorithm):
9596
raise ValueError(
96-
"Provider ID, encryption algorithm, and padding algorithm are all required for raw keys"
97+
"Provider ID and encryption algorithm are both required for raw keys"
98+
)
99+
100+
if self.encryption_algorithm == "rsa" and self.padding_algorithm is None:
101+
raise ValueError(
102+
"Padding algorithm is required for raw RSA keys"
97103
)
98104

99105
if self.padding_algorithm == "oaep-mgf1" and self.padding_hash is None:
@@ -140,7 +146,12 @@ def _wrapping_algorithm(self, key_bits):
140146
if self.padding_hash is not None:
141147
key_spec_values.append(self.padding_hash)
142148

143-
return _RAW_WRAPPING_KEY_ALGORITHMS["/".join(key_spec_values)]
149+
key_spec_name = "/".join(key_spec_values)
150+
151+
if key_spec_name in _NOT_YET_IMPLEMENTED:
152+
raise NotImplementedError("Key spec \"{}\" is not yet available.")
153+
154+
return _RAW_WRAPPING_KEY_ALGORITHMS[key_spec_name]
144155

145156
def _wrapping_key(self, key_spec):
146157
# type: (KeySpec) -> WrappingKey

0 commit comments

Comments
 (0)