Skip to content

Commit e46b757

Browse files
refactor!: change raw keyring key_name type to str (#292)
* refactor!: change raw keyring key name type to str * refactor!: change raw keyring key name type to str * refactor: Update missed lines in enxamples * refactor(tests): Change _KEY_ID and _PROVIDER_ID var names to _KEY_NAME and _KEY_NAMESPACE
1 parent 0d21816 commit e46b757

File tree

13 files changed

+146
-133
lines changed

13 files changed

+146
-133
lines changed

examples/src/keyring/multi/aws_kms_with_escrow.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def run(aws_kms_cmk, source_plaintext):
6969
#
7070
# https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/choose-keyring.html#use-raw-rsa-keyring
7171
key_namespace="some managed raw keys",
72-
key_name=b"my RSA wrapping key",
72+
key_name="my RSA wrapping key",
7373
public_wrapping_key=public_key,
7474
# The wrapping algorithm tells the raw RSA keyring
7575
# how to use your wrapping key to encrypt data keys.
@@ -83,7 +83,7 @@ def run(aws_kms_cmk, source_plaintext):
8383
escrow_decrypt_keyring = RawRSAKeyring(
8484
# The key namespace and key name MUST match the encrypt keyring.
8585
key_namespace="some managed raw keys",
86-
key_name=b"my RSA wrapping key",
86+
key_name="my RSA wrapping key",
8787
private_wrapping_key=private_key,
8888
# The wrapping algorithm MUST match the encrypt keyring.
8989
wrapping_algorithm=WrappingAlgorithm.RSA_OAEP_SHA256_MGF1,

examples/src/keyring/raw_aes/raw_aes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def run(source_plaintext):
4444
#
4545
# https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/choose-keyring.html#use-raw-aes-keyring
4646
key_namespace="some managed raw keys",
47-
key_name=b"my AES wrapping key",
47+
key_name="my AES wrapping key",
4848
wrapping_key=key,
4949
)
5050

examples/src/keyring/raw_rsa/keypair.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def run(source_plaintext):
5454
#
5555
# https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/choose-keyring.html#use-raw-rsa-keyring
5656
key_namespace="some managed raw keys",
57-
key_name=b"my RSA wrapping key",
57+
key_name="my RSA wrapping key",
5858
private_wrapping_key=private_key,
5959
public_wrapping_key=private_key.public_key(),
6060
# The wrapping algorithm tells the raw RSA keyring

examples/src/keyring/raw_rsa/keypair_from_pem.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def run(source_plaintext):
7070
#
7171
# https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/choose-keyring.html#use-raw-rsa-keyring
7272
key_namespace="some managed raw keys",
73-
key_name=b"my RSA wrapping key",
73+
key_name="my RSA wrapping key",
7474
private_encoded_key=private_key_pem,
7575
public_encoded_key=public_key_pem,
7676
# The wrapping algorithm tells the raw RSA keyring

examples/src/keyring/raw_rsa/public_private_key_separate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def run(source_plaintext):
6969
#
7070
# https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/choose-keyring.html#use-raw-rsa-keyring
7171
key_namespace="some managed raw keys",
72-
key_name=b"my RSA wrapping key",
72+
key_name="my RSA wrapping key",
7373
public_wrapping_key=public_key,
7474
# The wrapping algorithm tells the raw RSA keyring
7575
# how to use your wrapping key to encrypt data keys.
@@ -83,7 +83,7 @@ def run(source_plaintext):
8383
private_key_keyring = RawRSAKeyring(
8484
# The key namespace and key name MUST match the encrypt keyring.
8585
key_namespace="some managed raw keys",
86-
key_name=b"my RSA wrapping key",
86+
key_name="my RSA wrapping key",
8787
private_wrapping_key=private_key,
8888
# The wrapping algorithm MUST match the encrypt keyring.
8989
wrapping_algorithm=WrappingAlgorithm.RSA_OAEP_SHA256_MGF1,

src/aws_encryption_sdk/keyrings/raw.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
33
"""Resources required for Raw Keyrings."""
4+
import codecs
45
import logging
56
import os
67

@@ -14,6 +15,7 @@
1415
from aws_encryption_sdk.exceptions import EncryptKeyError, GenerateKeyError
1516
from aws_encryption_sdk.identifiers import EncryptionKeyType, WrappingAlgorithm
1617
from aws_encryption_sdk.internal.crypto.wrapping_keys import EncryptedData, WrappingKey
18+
from aws_encryption_sdk.internal.defaults import ENCODING
1719
from aws_encryption_sdk.internal.formatting.deserialize import deserialize_wrapped_key
1820
from aws_encryption_sdk.internal.formatting.serialize import serialize_raw_master_key_prefix, serialize_wrapped_key
1921
from aws_encryption_sdk.key_providers.raw import RawMasterKey
@@ -73,7 +75,7 @@ class RawAESKeyring(Keyring):
7375
.. note::
7476
key_namespace MUST NOT equal "aws-kms".
7577
76-
:param bytes key_name: Key ID
78+
:param str key_name: Key ID
7779
:param bytes wrapping_key: Encryption key with which to wrap plaintext data key.
7880
7981
.. note::
@@ -82,7 +84,7 @@ class RawAESKeyring(Keyring):
8284
"""
8385

8486
key_namespace = attr.ib(validator=instance_of(six.string_types))
85-
key_name = attr.ib(validator=instance_of(six.binary_type))
87+
key_name = attr.ib(validator=instance_of(six.string_types))
8688
_wrapping_key = attr.ib(repr=False, validator=instance_of(six.binary_type))
8789

8890
def __attrs_post_init__(self):
@@ -197,9 +199,11 @@ def on_decrypt(self, decryption_materials, encrypted_data_keys):
197199
):
198200
continue
199201

202+
encoded_key_name = codecs.encode(self.key_name, ENCODING)
203+
200204
# Wrapped EncryptedDataKey to deserialized EncryptedData
201205
encrypted_wrapped_key = deserialize_wrapped_key(
202-
wrapping_algorithm=self._wrapping_algorithm, wrapping_key_id=self.key_name, wrapped_encrypted_key=key
206+
wrapping_algorithm=self._wrapping_algorithm, wrapping_key_id=encoded_key_name, wrapped_encrypted_key=key
203207
)
204208

205209
# EncryptedData to raw key string
@@ -237,7 +241,7 @@ class RawRSAKeyring(Keyring):
237241
.. note::
238242
key_namespace MUST NOT equal "aws-kms".
239243
240-
:param bytes key_name: Key ID
244+
:param str key_name: Key ID
241245
:param cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey private_wrapping_key:
242246
Private encryption key with which to wrap plaintext data key (optional)
243247
:param cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey public_wrapping_key:
@@ -251,7 +255,7 @@ class RawRSAKeyring(Keyring):
251255
"""
252256

253257
key_namespace = attr.ib(validator=instance_of(six.string_types))
254-
key_name = attr.ib(validator=instance_of(six.binary_type))
258+
key_name = attr.ib(validator=instance_of(six.string_types))
255259
_wrapping_algorithm = attr.ib(
256260
repr=False,
257261
validator=in_(
@@ -428,9 +432,11 @@ def on_decrypt(self, decryption_materials, encrypted_data_keys):
428432
if key.key_provider != self._key_provider:
429433
continue
430434

435+
encoded_key_name = codecs.encode(self.key_name, ENCODING)
436+
431437
# Wrapped EncryptedDataKey to deserialized EncryptedData
432438
encrypted_wrapped_key = deserialize_wrapped_key(
433-
wrapping_algorithm=self._wrapping_algorithm, wrapping_key_id=self.key_name, wrapped_encrypted_key=key
439+
wrapping_algorithm=self._wrapping_algorithm, wrapping_key_id=encoded_key_name, wrapped_encrypted_key=key
434440
)
435441
try:
436442
plaintext_data_key = self._private_wrapping_key.decrypt(

test/functional/keyrings/raw/test_raw_aes.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
pytestmark = [pytest.mark.functional, pytest.mark.local]
2626

2727
_ENCRYPTION_CONTEXT = {"encryption": "context", "values": "here"}
28-
_PROVIDER_ID = "Random Raw Keys"
29-
_KEY_ID = b"5325b043-5843-4629-869c-64794af77ada"
28+
_KEY_NAMESPACE = "Random Raw Keys"
29+
_KEY_NAME = "5325b043-5843-4629-869c-64794af77ada"
3030
_WRAPPING_KEY = b"12345678901234567890123456789012"
3131
_SIGNING_KEY = b"aws-crypto-public-key"
3232

@@ -43,7 +43,7 @@ def sample_encryption_materials():
4343
EncryptionMaterials(
4444
algorithm=Algorithm.AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384,
4545
data_encryption_key=RawDataKey(
46-
key_provider=MasterKeyInfo(provider_id=_PROVIDER_ID, key_info=_KEY_ID),
46+
key_provider=MasterKeyInfo(provider_id=_KEY_NAMESPACE, key_info=_KEY_NAME),
4747
data_key=b'*!\xa1"^-(\xf3\x105\x05i@B\xc2\xa2\xb7\xdd\xd5\xd5\xa9\xddm\xfae\xa8\\$\xf9d\x1e(',
4848
),
4949
encryption_context=_ENCRYPTION_CONTEXT,
@@ -56,8 +56,8 @@ def sample_encryption_materials():
5656
def test_raw_aes_encryption_decryption(encryption_materials_samples):
5757

5858
# Initializing attributes
59-
key_namespace = _PROVIDER_ID
60-
key_name = _KEY_ID
59+
key_namespace = _KEY_NAMESPACE
60+
key_name = _KEY_NAME
6161

6262
# Creating an instance of a raw AES keyring
6363
test_raw_aes_keyring = RawAESKeyring(key_namespace=key_namespace, key_name=key_name, wrapping_key=_WRAPPING_KEY,)
@@ -85,8 +85,8 @@ def test_raw_aes_encryption_decryption(encryption_materials_samples):
8585
def test_raw_master_key_decrypts_what_raw_keyring_encrypts(encryption_materials_samples):
8686

8787
# Initializing attributes
88-
key_namespace = _PROVIDER_ID
89-
key_name = _KEY_ID
88+
key_namespace = _KEY_NAMESPACE
89+
key_name = _KEY_NAME
9090

9191
# Creating an instance of a raw AES keyring
9292
test_raw_aes_keyring = RawAESKeyring(key_namespace=key_namespace, key_name=key_name, wrapping_key=_WRAPPING_KEY,)
@@ -116,8 +116,8 @@ def test_raw_master_key_decrypts_what_raw_keyring_encrypts(encryption_materials_
116116
def test_raw_keyring_decrypts_what_raw_master_key_encrypts(encryption_materials_samples):
117117

118118
# Initializing attributes
119-
key_namespace = _PROVIDER_ID
120-
key_name = _KEY_ID
119+
key_namespace = _KEY_NAMESPACE
120+
key_name = _KEY_NAME
121121

122122
# Creating an instance of a raw AES keyring
123123
test_raw_aes_keyring = RawAESKeyring(key_namespace=key_namespace, key_name=key_name, wrapping_key=_WRAPPING_KEY,)
@@ -153,27 +153,28 @@ def test_raw_keyring_decrypts_what_raw_master_key_encrypts(encryption_materials_
153153

154154
@pytest.mark.parametrize("wrapping_algorithm", _WRAPPING_ALGORITHM)
155155
def test_key_info_prefix_vectors(wrapping_algorithm):
156+
expected_prefix = _KEY_NAME.encode() + b"\x00\x00\x00\x80\x00\x00\x00\x0c"
156157
assert (
157158
serialize_raw_master_key_prefix(
158159
raw_master_key=RawMasterKey(
159-
provider_id=_PROVIDER_ID,
160-
key_id=_KEY_ID,
160+
provider_id=_KEY_NAMESPACE,
161+
key_id=_KEY_NAME,
161162
wrapping_key=WrappingKey(
162163
wrapping_algorithm=wrapping_algorithm,
163164
wrapping_key=_WRAPPING_KEY,
164165
wrapping_key_type=EncryptionKeyType.SYMMETRIC,
165166
),
166167
)
167168
)
168-
== _KEY_ID + b"\x00\x00\x00\x80\x00\x00\x00\x0c"
169+
== expected_prefix
169170
)
170171

171172

172173
def test_must_not_accept_aws_kms():
173174

174175
# Initializing attributes
175176
key_namespace = "aws-kms"
176-
key_name = _KEY_ID
177+
key_name = _KEY_NAME
177178

178179
# Attempt to instantiate a raw AES keyring
179180
with pytest.raises(ValueError) as excinfo:

0 commit comments

Comments
 (0)