Skip to content

Commit 67d866f

Browse files
committed
inline encrypt and decrypt
1 parent 1ba28ef commit 67d866f

File tree

4 files changed

+56
-337
lines changed

4 files changed

+56
-337
lines changed

examples/src/migration/README.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Migration Examples
33
##################
44

5-
The native Python ESDK now uses the `AWS Cryptographic Material Providers Library`_,
5+
The `Encryption SDK for Python`_ now uses the `AWS Cryptographic Material Providers Library`_,
66
which introduces keyrings in place of Master Key Providers. The MPL abstracts lower
77
level cryptographic materials management of encryption and decryption materials.
88

@@ -15,4 +15,5 @@ of the ESDK. Here is the list of examples:
1515
3. Migration example for Raw RSA keys
1616
4. Setting a 'CommitmentPolicy' during migration
1717

18-
.. _AWS Cryptographic Material Providers Library: https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html
18+
.. _AWS Cryptographic Material Providers Library: https://github.com/aws/aws-cryptographic-material-providers-library
19+
.. _Encryption SDK for Python: https://github.com/aws/aws-encryption-sdk-python/tree/9c34aad60fc918c1a9186ec5215a451e8bfd0f65

examples/src/migration/migration_aws_kms_key_example.py

Lines changed: 21 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,9 @@
4040
}
4141

4242

43-
def create_kms_client(aws_region="us-west-2"):
44-
"""Create an AWS KMS client.
45-
46-
Usage: create_kms_client(aws_region)
47-
:param aws_region: AWS region to use for KMS client.
48-
:type aws_region: string
49-
"""
50-
# Create a boto3 client for KMS.
51-
kms_client = boto3.client('kms', region_name=aws_region)
52-
53-
return kms_client
54-
55-
5643
def create_keyring(
57-
kms_key_id: str
44+
kms_key_id: str,
45+
aws_region="us-west-2"
5846
):
5947
"""Demonstrate how to create an AWS KMS keyring.
6048
@@ -66,7 +54,7 @@ def create_keyring(
6654
https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id
6755
"""
6856
# Create a boto3 client for KMS.
69-
kms_client = create_kms_client()
57+
kms_client = boto3.client('kms', region_name=aws_region)
7058

7159
# Create a KMS keyring
7260
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
@@ -85,53 +73,6 @@ def create_keyring(
8573
return keyring
8674

8775

88-
def encrypt_using_keyring(
89-
plaintext_data: bytes,
90-
keyring: IKeyring,
91-
client: aws_encryption_sdk.EncryptionSDKClient
92-
):
93-
"""Demonstrate how to encrypt plaintext data using an AWS KMS keyring.
94-
95-
Usage: encrypt_using_keyring(plaintext_data, keyring)
96-
:param plaintext_data: plaintext data you want to encrypt
97-
:type: bytes
98-
:param keyring: Keyring to use for encryption.
99-
:type keyring: IKeyring
100-
:param client: AWS Encryption SDK client.
101-
:type client: aws_encryption_sdk.EncryptionSDKClient
102-
"""
103-
ciphertext_data, _ = client.encrypt(
104-
source=plaintext_data,
105-
keyring=keyring,
106-
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
107-
)
108-
109-
return ciphertext_data
110-
111-
112-
def decrypt_using_keyring(
113-
ciphertext_data: bytes,
114-
keyring: IKeyring,
115-
client: aws_encryption_sdk.EncryptionSDKClient
116-
):
117-
"""Demonstrate how to decrypt ciphertext data using an AWS KMS keyring.
118-
119-
Usage: decrypt_using_keyring(ciphertext_data, keyring)
120-
:param ciphertext_data: ciphertext data you want to decrypt
121-
:type: bytes
122-
:param keyring: Keyring to use for decryption.
123-
:type keyring: IKeyring
124-
:param client: AWS Encryption SDK client.
125-
:type client: aws_encryption_sdk.EncryptionSDKClient
126-
"""
127-
decrypted_plaintext_data, _ = client.decrypt(
128-
source=ciphertext_data,
129-
keyring=keyring
130-
)
131-
132-
return decrypted_plaintext_data
133-
134-
13576
def create_key_provider(
13677
kms_key_id: str
13778
):
@@ -152,53 +93,6 @@ def create_key_provider(
15293
return key_provider
15394

15495

155-
def encrypt_using_key_provider(
156-
plaintext_data: bytes,
157-
key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider,
158-
client: aws_encryption_sdk.EncryptionSDKClient
159-
):
160-
"""Demonstrate how to encrypt plaintext data using an AWS KMS master key provider.
161-
162-
Usage: encrypt_using_key_provider(plaintext_data, key_provider)
163-
:param plaintext_data: plaintext data you want to encrypt
164-
:type: bytes
165-
:param key_provider: Master key provider to use for encryption.
166-
:type key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
167-
:param client: AWS Encryption SDK client.
168-
:type client: aws_encryption_sdk.EncryptionSDKClient
169-
"""
170-
ciphertext_data, _ = client.encrypt(
171-
source=plaintext_data,
172-
key_provider=key_provider,
173-
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
174-
)
175-
176-
return ciphertext_data
177-
178-
179-
def decrypt_using_key_provider(
180-
ciphertext_data: bytes,
181-
key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider,
182-
client: aws_encryption_sdk.EncryptionSDKClient
183-
):
184-
"""Demonstrate how to decrypt ciphertext data using an AWS KMS master key provider.
185-
186-
Usage: decrypt_using_key_provider(ciphertext_data, key_provider)
187-
:param ciphertext_data: ciphertext data you want to decrypt
188-
:type: bytes
189-
:param key_provider: Master key provider to use for decryption.
190-
:type key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
191-
:param client: AWS Encryption SDK client.
192-
:type client: aws_encryption_sdk.EncryptionSDKClient
193-
"""
194-
decrypted_plaintext_data, _ = client.decrypt(
195-
source=ciphertext_data,
196-
key_provider=key_provider
197-
)
198-
199-
return decrypted_plaintext_data
200-
201-
20296
def migration_aws_kms_key(
20397
kms_key_id: str
20498
):
@@ -221,17 +115,17 @@ def migration_aws_kms_key(
221115
aws_kms_master_key_provider = create_key_provider(kms_key_id=kms_key_id)
222116

223117
# 2a. Encrypt EXAMPLE_DATA using AWS KMS Keyring
224-
ciphertext_keyring = encrypt_using_keyring(
225-
plaintext_data=EXAMPLE_DATA,
118+
ciphertext_keyring, _ = client.encrypt(
119+
source=EXAMPLE_DATA,
226120
keyring=aws_kms_keyring,
227-
client=client
121+
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
228122
)
229123

230124
# 2b. Encrypt EXAMPLE_DATA using AWS KMS Master Key Provider
231-
ciphertext_mkp = encrypt_using_key_provider(
232-
plaintext_data=EXAMPLE_DATA,
125+
ciphertext_mkp, _ = client.encrypt(
126+
source=EXAMPLE_DATA,
233127
key_provider=aws_kms_master_key_provider,
234-
client=client
128+
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
235129
)
236130

237131
# Note: The ciphertexts obtained by encrypting EXAMPLE_DATA using keyring and MKP
@@ -241,16 +135,14 @@ def migration_aws_kms_key(
241135

242136
# 3. Decrypt the ciphertext_keyring using both the keyring and MKP and ensure the
243137
# resulting plaintext is the same and also equal to EXAMPLE_DATA
244-
decrypted_ciphertext_keyring_using_keyring = decrypt_using_keyring(
245-
ciphertext_data=ciphertext_keyring,
246-
keyring=aws_kms_keyring,
247-
client=client
138+
decrypted_ciphertext_keyring_using_keyring, _ = client.decrypt(
139+
source=ciphertext_keyring,
140+
keyring=aws_kms_keyring
248141
)
249142

250-
decrypted_ciphertext_keyring_using_mkp = decrypt_using_key_provider(
251-
ciphertext_data=ciphertext_keyring,
252-
key_provider=aws_kms_master_key_provider,
253-
client=client
143+
decrypted_ciphertext_keyring_using_mkp, _ = client.decrypt(
144+
source=ciphertext_keyring,
145+
key_provider=aws_kms_master_key_provider
254146
)
255147

256148
assert decrypted_ciphertext_keyring_using_keyring == decrypted_ciphertext_keyring_using_mkp \
@@ -259,16 +151,14 @@ def migration_aws_kms_key(
259151

260152
# 4. Decrypt the ciphertext_mkp using both the keyring and MKP and ensure the
261153
# resulting plaintext is the same and also equal to EXAMPLE_DATA
262-
decrypted_ciphertext_mkp_using_keyring = decrypt_using_keyring(
263-
ciphertext_data=ciphertext_mkp,
264-
keyring=aws_kms_keyring,
265-
client=client
154+
decrypted_ciphertext_mkp_using_keyring, _ = client.decrypt(
155+
source=ciphertext_mkp,
156+
keyring=aws_kms_keyring
266157
)
267158

268-
decrypted_ciphertext_mkp_using_mkp = decrypt_using_key_provider(
269-
ciphertext_data=ciphertext_mkp,
270-
key_provider=aws_kms_master_key_provider,
271-
client=client
159+
decrypted_ciphertext_mkp_using_mkp, _ = client.decrypt(
160+
source=ciphertext_mkp,
161+
key_provider=aws_kms_master_key_provider
272162
)
273163

274164
assert decrypted_ciphertext_mkp_using_keyring == decrypted_ciphertext_mkp_using_mkp \

examples/src/migration/migration_raw_aes_key_example.py

Lines changed: 14 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -80,51 +80,6 @@ def create_keyring():
8080
return keyring
8181

8282

83-
def encrypt_using_keyring(
84-
plaintext_data: bytes,
85-
keyring: IKeyring
86-
):
87-
"""Demonstrate how to encrypt plaintext data using a Raw AES keyring.
88-
89-
Usage: encrypt_using_keyring(plaintext_data, keyring)
90-
:param plaintext_data: plaintext data you want to encrypt
91-
:type: bytes
92-
:param keyring: Keyring to use for encryption.
93-
:type keyring: IKeyring
94-
"""
95-
client = aws_encryption_sdk.EncryptionSDKClient()
96-
97-
ciphertext_data, _ = client.encrypt(
98-
source=plaintext_data,
99-
keyring=keyring,
100-
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
101-
)
102-
103-
return ciphertext_data
104-
105-
106-
def decrypt_using_keyring(
107-
ciphertext_data: bytes,
108-
keyring: IKeyring
109-
):
110-
"""Demonstrate how to decrypt ciphertext data using a Raw AES keyring.
111-
112-
Usage: decrypt_using_keyring(ciphertext_data, keyring)
113-
:param ciphertext_data: ciphertext data you want to decrypt
114-
:type: bytes
115-
:param keyring: Keyring to use for decryption.
116-
:type keyring: IKeyring
117-
"""
118-
client = aws_encryption_sdk.EncryptionSDKClient()
119-
120-
decrypted_plaintext_data, _ = client.decrypt(
121-
source=ciphertext_data,
122-
keyring=keyring
123-
)
124-
125-
return decrypted_plaintext_data
126-
127-
12883
# This is a helper class necessary for the Raw AES master key provider
12984
class StaticRandomMasterKeyProvider(RawMasterKeyProvider):
13085
"""Generates 256-bit keys for each unique key ID."""
@@ -173,72 +128,31 @@ def create_key_provider():
173128
return key_provider
174129

175130

176-
def encrypt_using_key_provider(
177-
plaintext_data: bytes,
178-
key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
179-
):
180-
"""Demonstrate how to encrypt plaintext data using a Raw AES master key provider.
181-
182-
Usage: encrypt_using_key_provider(plaintext_data, key_provider)
183-
:param plaintext_data: plaintext data you want to encrypt
184-
:type: bytes
185-
:param key_provider: Master key provider to use for encryption.
186-
:type key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
187-
"""
188-
client = aws_encryption_sdk.EncryptionSDKClient()
189-
190-
ciphertext_data, _ = client.encrypt(
191-
source=plaintext_data,
192-
key_provider=key_provider,
193-
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
194-
)
195-
196-
return ciphertext_data
197-
198-
199-
def decrypt_using_key_provider(
200-
ciphertext_data: bytes,
201-
key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
202-
):
203-
"""Demonstrate how to decrypt ciphertext data using a Raw AES master key provider.
204-
205-
Usage: decrypt_using_key_provider(ciphertext_data, key_provider)
206-
:param ciphertext_data: ciphertext data you want to decrypt
207-
:type: bytes
208-
:param key_provider: Master key provider to use for decryption.
209-
:type key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
210-
"""
211-
client = aws_encryption_sdk.EncryptionSDKClient()
212-
213-
decrypted_plaintext_data, _ = client.decrypt(
214-
source=ciphertext_data,
215-
key_provider=key_provider
216-
)
217-
218-
return decrypted_plaintext_data
219-
220-
221131
def migration_raw_aes_key():
222132
"""Demonstrate a migration example for moving to a Raw AES keyring from Raw AES MKP.
223133
224134
Usage: migration_raw_aes_key()
225135
"""
136+
client = aws_encryption_sdk.EncryptionSDKClient()
137+
226138
# 1a. Create a Raw AES Keyring
227139
raw_aes_keyring = create_keyring()
228140

229141
# 1b. Create a Raw AES Master Key Provider
230142
raw_aes_master_key_provider = create_key_provider()
231143

232144
# 2a. Encrypt EXAMPLE_DATA using Raw AES Keyring
233-
ciphertext_keyring = encrypt_using_keyring(
234-
plaintext_data=EXAMPLE_DATA,
235-
keyring=raw_aes_keyring
145+
ciphertext_keyring, _ = client.encrypt(
146+
source=EXAMPLE_DATA,
147+
keyring=raw_aes_keyring,
148+
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
236149
)
237150

238151
# 2b. Encrypt EXAMPLE_DATA using Raw AES Master Key Provider
239-
ciphertext_mkp = encrypt_using_key_provider(
240-
plaintext_data=EXAMPLE_DATA,
241-
key_provider=raw_aes_master_key_provider
152+
ciphertext_mkp, _ = client.encrypt(
153+
source=EXAMPLE_DATA,
154+
key_provider=raw_aes_master_key_provider,
155+
encryption_context=DEFAULT_ENCRYPTION_CONTEXT
242156
)
243157

244158
# Note: The ciphertexts obtained by encrypting EXAMPLE_DATA using keyring and MKP
@@ -248,13 +162,13 @@ def migration_raw_aes_key():
248162

249163
# 3. Decrypt the ciphertext_keyring using both the keyring and MKP and ensure the
250164
# resulting plaintext is the same and also equal to EXAMPLE_DATA
251-
decrypted_ciphertext_keyring_using_keyring = decrypt_using_keyring(
252-
ciphertext_data=ciphertext_keyring,
165+
decrypted_ciphertext_keyring_using_keyring, _ = client.decrypt(
166+
source=ciphertext_keyring,
253167
keyring=raw_aes_keyring
254168
)
255169

256-
decrypted_ciphertext_keyring_using_mkp = decrypt_using_key_provider(
257-
ciphertext_data=ciphertext_keyring,
170+
decrypted_ciphertext_keyring_using_mkp, _ = client.decrypt(
171+
source=ciphertext_keyring,
258172
key_provider=raw_aes_master_key_provider
259173
)
260174

0 commit comments

Comments
 (0)