8
8
preferably in a hardware security module (HSM) or key management system. Use a Raw AES keyring
9
9
when you need to provide the wrapping key and encrypt the data keys locally or offline.
10
10
11
- This example defines classes for Raw AES Keyring and Raw AES MKP and
11
+ This example creates a Raw AES Keyring and Raw AES MKP and
12
12
then encrypts a custom input EXAMPLE_DATA with an encryption context using both
13
13
the keyring and MKP. The example then decrypts the ciphertext using both keyring and MKPs.
14
14
This example also includes some sanity checks for demonstration:
54
54
DEFAULT_KEY_NAME = "My 256-bit AES wrapping key"
55
55
56
56
57
- class RawAesKeyring ():
58
- """Class for creating a Raw AES Keyring and using it for encryption and decryption"""
57
+ def create_keyring ():
58
+ """Demonstrate how to create a Raw AES keyring.
59
59
60
- @staticmethod
61
- def create_keyring ():
62
- """Demonstrate how to create a Raw AES keyring.
60
+ Usage: create_keyring()
61
+ """
62
+ # We fix the static key in order to make the test deterministic
63
+ static_key = DEFAULT_AES_256_STATIC_KEY
63
64
64
- Usage: create_keyring()
65
- """
66
- # We fix the static key in order to make the test deterministic
67
- static_key = DEFAULT_AES_256_STATIC_KEY
65
+ mat_prov : AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders (
66
+ config = MaterialProvidersConfig ()
67
+ )
68
68
69
- mat_prov : AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders (
70
- config = MaterialProvidersConfig ()
71
- )
69
+ keyring_input : CreateRawAesKeyringInput = CreateRawAesKeyringInput (
70
+ key_namespace = DEFAULT_KEY_NAME_SPACE ,
71
+ key_name = DEFAULT_KEY_NAME ,
72
+ wrapping_key = static_key ,
73
+ wrapping_alg = AesWrappingAlg .ALG_AES256_GCM_IV12_TAG16
74
+ )
72
75
73
- keyring_input : CreateRawAesKeyringInput = CreateRawAesKeyringInput (
74
- key_namespace = DEFAULT_KEY_NAME_SPACE ,
75
- key_name = DEFAULT_KEY_NAME ,
76
- wrapping_key = static_key ,
77
- wrapping_alg = AesWrappingAlg .ALG_AES256_GCM_IV12_TAG16
78
- )
76
+ keyring : IKeyring = mat_prov .create_raw_aes_keyring (
77
+ input = keyring_input
78
+ )
79
79
80
- keyring : IKeyring = mat_prov .create_raw_aes_keyring (
81
- input = keyring_input
82
- )
80
+ return keyring
83
81
84
- return keyring
85
82
86
- @staticmethod
87
- def encrypt_using_keyring (
88
- plaintext_data : bytes ,
89
- keyring : IKeyring
90
- ):
91
- """Demonstrate how to encrypt plaintext data using a Raw AES keyring.
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.
92
88
93
- Usage: encrypt_using_keyring(plaintext_data, keyring)
94
- :param plaintext_data: plaintext data you want to encrypt
95
- :type: bytes
96
- :param keyring: Keyring to use for encryption.
97
- :type keyring: IKeyring
98
- """
99
- client = aws_encryption_sdk .EncryptionSDKClient ()
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 ()
100
96
101
- ciphertext_data , _ = client .encrypt (
102
- source = plaintext_data ,
103
- keyring = keyring ,
104
- encryption_context = DEFAULT_ENCRYPTION_CONTEXT
105
- )
97
+ ciphertext_data , _ = client .encrypt (
98
+ source = plaintext_data ,
99
+ keyring = keyring ,
100
+ encryption_context = DEFAULT_ENCRYPTION_CONTEXT
101
+ )
106
102
107
- return ciphertext_data
103
+ return ciphertext_data
108
104
109
- @staticmethod
110
- def decrypt_using_keyring (
111
- ciphertext_data : bytes ,
112
- keyring : IKeyring
113
- ):
114
- """Demonstrate how to decrypt ciphertext data using a Raw AES keyring.
115
105
116
- Usage: decrypt_using_keyring(ciphertext_data, keyring)
117
- :param ciphertext_data: ciphertext data you want to decrypt
118
- :type: bytes
119
- :param keyring: Keyring to use for decryption.
120
- :type keyring: IKeyring
121
- """
122
- client = aws_encryption_sdk .EncryptionSDKClient ()
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.
123
111
124
- decrypted_plaintext_data , _ = client .decrypt (
125
- source = ciphertext_data ,
126
- keyring = keyring
127
- )
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 ()
128
119
129
- return decrypted_plaintext_data
120
+ decrypted_plaintext_data , _ = client .decrypt (
121
+ source = ciphertext_data ,
122
+ keyring = keyring
123
+ )
124
+
125
+ return decrypted_plaintext_data
130
126
131
127
132
128
# This is a helper class necessary for the Raw AES master key provider
@@ -162,89 +158,85 @@ def _get_raw_key(self, key_id):
162
158
)
163
159
164
160
165
- class RawAesMasterKeyProvider ():
166
- """Class for creating a Raw AES MKP and using it for encryption and decryption"""
161
+ def create_key_provider ():
162
+ """Demonstrate how to create a Raw AES master key provider.
167
163
168
- @ staticmethod
169
- def create_key_provider ():
170
- """Demonstrate how to create a Raw AES master key provider.
164
+ Usage: create_key_provider()
165
+ """
166
+ # Create a Raw AES master key provider.
171
167
172
- Usage: create_key_provider()
173
- """
174
- # Create a Raw AES master key provider.
175
-
176
- # The Key ID field in the JceMasterKey and RawMasterKey is equivalent to key name in the Raw keyrings
177
- key_id = DEFAULT_KEY_NAME
178
- key_provider = StaticRandomMasterKeyProvider ()
179
- key_provider .add_master_key (key_id )
180
-
181
- return key_provider
182
-
183
- @staticmethod
184
- def encrypt_using_key_provider (
185
- plaintext_data : bytes ,
186
- key_provider : aws_encryption_sdk .key_providers .base .MasterKeyProvider
187
- ):
188
- """Demonstrate how to encrypt plaintext data using a Raw AES master key provider.
189
-
190
- Usage: encrypt_using_key_provider(plaintext_data, key_provider)
191
- :param plaintext_data: plaintext data you want to encrypt
192
- :type: bytes
193
- :param key_provider: Master key provider to use for encryption.
194
- :type key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
195
- """
196
- client = aws_encryption_sdk .EncryptionSDKClient ()
168
+ # The Key ID field in the JceMasterKey and RawMasterKey is equivalent to key name in the Raw keyrings
169
+ key_id = DEFAULT_KEY_NAME
170
+ key_provider = StaticRandomMasterKeyProvider ()
171
+ key_provider .add_master_key (key_id )
197
172
198
- ciphertext_data , _ = client .encrypt (
199
- source = plaintext_data ,
200
- key_provider = key_provider ,
201
- encryption_context = DEFAULT_ENCRYPTION_CONTEXT
202
- )
173
+ return key_provider
203
174
204
- return ciphertext_data
205
175
206
- @staticmethod
207
- def decrypt_using_key_provider (
208
- ciphertext_data : bytes ,
209
- key_provider : aws_encryption_sdk .key_providers .base .MasterKeyProvider
210
- ):
211
- """Demonstrate how to decrypt ciphertext data using a Raw AES master key provider.
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.
212
181
213
- Usage: decrypt_using_key_provider(ciphertext_data , key_provider)
214
- :param ciphertext_data: ciphertext data you want to decrypt
215
- :type: bytes
216
- :param key_provider: Master key provider to use for decryption .
217
- :type key_provider: aws_encryption_sdk.key_providers.base.MasterKeyProvider
218
- """
219
- client = aws_encryption_sdk .EncryptionSDKClient ()
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 ()
220
189
221
- decrypted_plaintext_data , _ = client .decrypt (
222
- source = ciphertext_data ,
223
- key_provider = key_provider
224
- )
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
+ )
225
217
226
- return decrypted_plaintext_data
218
+ return decrypted_plaintext_data
227
219
228
220
229
- def migration_to_raw_aes_keyring_from_raw_aes_master_key_provider ():
230
- """Demonstrate a migration example for moving from a Raw AES keyring to Raw AES MKP.
221
+ def migration_raw_aes_key ():
222
+ """Demonstrate a migration example for moving to a Raw AES keyring from Raw AES MKP.
231
223
232
- Usage: migration_to_raw_aes_keyring_from_raw_aes_master_key_provider ()
224
+ Usage: migration_raw_aes_key ()
233
225
"""
234
226
# 1a. Create a Raw AES Keyring
235
- raw_aes_keyring = RawAesKeyring . create_keyring ()
227
+ raw_aes_keyring = create_keyring ()
236
228
237
229
# 1b. Create a Raw AES Master Key Provider
238
- raw_aes_master_key_provider = RawAesMasterKeyProvider . create_key_provider ()
230
+ raw_aes_master_key_provider = create_key_provider ()
239
231
240
232
# 2a. Encrypt EXAMPLE_DATA using Raw AES Keyring
241
- ciphertext_keyring = RawAesKeyring . encrypt_using_keyring (
233
+ ciphertext_keyring = encrypt_using_keyring (
242
234
plaintext_data = EXAMPLE_DATA ,
243
235
keyring = raw_aes_keyring
244
236
)
245
237
246
238
# 2b. Encrypt EXAMPLE_DATA using Raw AES Master Key Provider
247
- ciphertext_mkp = RawAesMasterKeyProvider . encrypt_using_key_provider (
239
+ ciphertext_mkp = encrypt_using_key_provider (
248
240
plaintext_data = EXAMPLE_DATA ,
249
241
key_provider = raw_aes_master_key_provider
250
242
)
@@ -256,12 +248,12 @@ def migration_to_raw_aes_keyring_from_raw_aes_master_key_provider():
256
248
257
249
# 3. Decrypt the ciphertext_keyring using both the keyring and MKP and ensure the
258
250
# resulting plaintext is the same and also equal to EXAMPLE_DATA
259
- decrypted_ciphertext_keyring_using_keyring = RawAesKeyring . decrypt_using_keyring (
251
+ decrypted_ciphertext_keyring_using_keyring = decrypt_using_keyring (
260
252
ciphertext_data = ciphertext_keyring ,
261
253
keyring = raw_aes_keyring
262
254
)
263
255
264
- decrypted_ciphertext_keyring_using_mkp = RawAesMasterKeyProvider . decrypt_using_key_provider (
256
+ decrypted_ciphertext_keyring_using_mkp = decrypt_using_key_provider (
265
257
ciphertext_data = ciphertext_keyring ,
266
258
key_provider = raw_aes_master_key_provider
267
259
)
@@ -272,12 +264,12 @@ def migration_to_raw_aes_keyring_from_raw_aes_master_key_provider():
272
264
273
265
# 4. Decrypt the ciphertext_mkp using both the keyring and MKP and ensure the
274
266
# resulting plaintext is the same and also equal to EXAMPLE_DATA
275
- decrypted_ciphertext_mkp_using_keyring = RawAesKeyring . decrypt_using_keyring (
267
+ decrypted_ciphertext_mkp_using_keyring = decrypt_using_keyring (
276
268
ciphertext_data = ciphertext_mkp ,
277
269
keyring = raw_aes_keyring
278
270
)
279
271
280
- decrypted_ciphertext_mkp_using_mkp = RawAesMasterKeyProvider . decrypt_using_key_provider (
272
+ decrypted_ciphertext_mkp_using_mkp = decrypt_using_key_provider (
281
273
ciphertext_data = ciphertext_mkp ,
282
274
key_provider = raw_aes_master_key_provider
283
275
)
0 commit comments