Skip to content

Commit 4705fa5

Browse files
fix(raw-keyrings): Raise when passed a key_namespace of "aws-kms" (#286)
* fix(raw-keyrings): Raise when passed a invalid key_namespace * chore: run autoformet
1 parent 19e08bd commit 4705fa5

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

src/aws_encryption_sdk/keyrings/raw.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ class RawAESKeyring(Keyring):
7474
.. versionadded:: 1.5.0
7575
7676
:param str key_namespace: String defining the keyring.
77+
78+
.. note::
79+
key_namespace MUST NOT equal "aws-kms".
80+
7781
:param bytes key_name: Key ID
7882
:param bytes wrapping_key: Encryption key with which to wrap plaintext data key.
7983
@@ -98,6 +102,9 @@ def __attrs_post_init__(self):
98102
)
99103
}
100104

105+
if self.key_namespace == "aws-kms":
106+
raise ValueError('Key namespace MUST NOT be "aws-kms"')
107+
101108
try:
102109
self._wrapping_algorithm = key_size_to_wrapping_algorithm[len(self._wrapping_key)]
103110
except KeyError:
@@ -245,6 +252,10 @@ class RawRSAKeyring(Keyring):
245252
.. versionadded:: 1.5.0
246253
247254
:param str key_namespace: String defining the keyring ID
255+
256+
.. note::
257+
key_namespace MUST NOT equal "aws-kms".
258+
248259
:param bytes key_name: Key ID
249260
:param cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey private_wrapping_key:
250261
Private encryption key with which to wrap plaintext data key (optional)
@@ -280,6 +291,9 @@ def __attrs_post_init__(self):
280291
"""Prepares initial values not handled by attrs."""
281292
self._key_provider = MasterKeyInfo(provider_id=self.key_namespace, key_info=self.key_name)
282293

294+
if self.key_namespace == "aws-kms":
295+
raise ValueError('Key namespace MUST NOT be "aws-kms"')
296+
283297
if self._public_wrapping_key is None and self._private_wrapping_key is None:
284298
raise TypeError("At least one of public key or private key must be provided.")
285299

test/functional/keyrings/raw/test_raw_aes.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,19 @@ def test_key_info_prefix_vectors(wrapping_algorithm):
179179
)
180180
== _KEY_ID + b"\x00\x00\x00\x80\x00\x00\x00\x0c"
181181
)
182+
183+
184+
def test_must_not_accept_aws_kms():
185+
186+
# Initializing attributes
187+
key_namespace = "aws-kms"
188+
key_name = _KEY_ID
189+
190+
# Attempt to instantiate a raw AES keyring
191+
with pytest.raises(ValueError) as excinfo:
192+
RawAESKeyring(
193+
key_namespace=key_namespace, key_name=key_name, wrapping_key=_WRAPPING_KEY,
194+
)
195+
196+
# Check the error message
197+
excinfo.match('Key namespace MUST NOT be "aws-kms"')

test/functional/keyrings/raw/test_raw_rsa.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,3 +371,18 @@ def test_keypair_must_match():
371371
)
372372

373373
excinfo.match("Private and public wrapping keys MUST be from the same keypair.")
374+
375+
376+
def test_must_not_accept_aws_kms():
377+
bad_key_namespace = "aws-kms"
378+
379+
with pytest.raises(ValueError) as excinfo:
380+
RawRSAKeyring(
381+
key_namespace=bad_key_namespace,
382+
key_name=_KEY_ID,
383+
wrapping_algorithm=_WRAPPING_ALGORITHM,
384+
private_wrapping_key=_PRIVATE_WRAPPING_KEY,
385+
public_wrapping_key=_PUBLIC_WRAPPING_KEY,
386+
)
387+
388+
excinfo.match('Key namespace MUST NOT be "aws-kms"')

0 commit comments

Comments
 (0)