17
17
from cryptography .hazmat .primitives import serialization
18
18
from cryptography .hazmat .primitives .asymmetric import rsa
19
19
20
- from aws_encryption_sdk .exceptions import EncryptKeyError
21
20
from aws_encryption_sdk .identifiers import (
22
21
Algorithm ,
23
22
EncryptionKeyType ,
43
42
_BACKEND = default_backend ()
44
43
45
44
_PRIVATE_WRAPPING_KEY = rsa .generate_private_key (public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND )
46
- _PUBLIC_WRAPPING_KEY = _PRIVATE_WRAPPING_KEY .public_key ()
47
45
48
- _PRIVATE_WRAPPING_KEY_PEM = _PRIVATE_WRAPPING_KEY .private_bytes (
46
+ _PRIVATE_WRAPPING_KEY_PEM = (
47
+ b"-----BEGIN RSA PRIVATE KEY-----\n "
48
+ b"MIIEowIBAAKCAQEAo8uCyhiO4JUGZV+rtNq5DBA9Lm4xkw5kTA3v6EPybs8bVXL2\n "
49
+ b"ZE6jkbo+xT4Jg/bKzUpnp1fE+T1ruGPtsPdoEmhY/P64LDNIs3sRq5U4QV9IETU1\n "
50
+ b"vIcbNNkgGhRjV8J87YNY0tV0H7tuWuZRpqnS+gjV6V9lUMkbvjMCc5IBqQc3heut\n "
51
+ b"/+fH4JwpGlGxOVXI8QAapnSy1XpCr3+PT29kydVJnIMuAoFrurojRpOQbOuVvhtA\n "
52
+ b"gARhst1Ji4nfROGYkj6eZhvkz2Bkud4/+3lGvVU5LO1vD8oY7WoGtpin3h50VcWe\n "
53
+ b"aBT4kejx4s9/G9C4R24lTH09J9HO2UUsuCqZYQIDAQABAoIBAQCfC90bCk+qaWqF\n "
54
+ b"gymC+qOWwCn4bM28gswHQb1D5r6AtKBRD8mKywVvWs7azguFVV3Fi8sspkBA2FBC\n "
55
+ b"At5p6ULoJOTL/TauzLl6djVJTCMM701WUDm2r+ZOIctXJ5bzP4n5Q4I7b0NMEL7u\n "
56
+ b"ixib4elYGr5D1vrVQAKtZHCr8gmkqyx8Mz7wkJepzBP9EeVzETCHsmiQDd5WYlO1\n "
57
+ b"C2IQYgw6MJzgM4entJ0V/GPytkodblGY95ORVK7ZhyNtda+r5BZ6/jeMW+hA3VoK\n "
58
+ b"tHSWjHt06ueVCCieZIATmYzBNt+zEz5UA2l7ksg3eWfVORJQS7a6Ef4VvbJLM9Ca\n "
59
+ b"m1kdsjelAoGBANKgvRf39i3bSuvm5VoyJuqinSb/23IH3Zo7XOZ5G164vh49E9Cq\n "
60
+ b"dOXXVxox74ppj/kbGUoOk+AvaB48zzfzNvac0a7lRHExykPH2kVrI/NwH/1OcT/x\n "
61
+ b"2e2DnFYocXcb4gbdZQ+m6X3zkxOYcONRzPVW1uMrFTWHcJveMUm4PGx7AoGBAMcU\n "
62
+ b"IRvrT6ye5se0s27gHnPweV+3xjsNtXZcK82N7duXyHmNjxrwOAv0SOhUmTkRXArM\n "
63
+ b"6aN5D8vyZBSWma2TgUKwpQYFTI+4Sp7sdkkyojGAEixJ+c5TZJNxZFrUe0FwAoic\n "
64
+ b"c2kb7ntaiEj5G+qHvykJJro5hy6uLnjiMVbAiJDTAoGAKb67241EmHAXGEwp9sdr\n "
65
+ b"2SMjnIAnQSF39UKAthkYqJxa6elXDQtLoeYdGE7/V+J2K3wIdhoPiuY6b4vD0iX9\n "
66
+ b"JcGM+WntN7YTjX2FsC588JmvbWfnoDHR7HYiPR1E58N597xXdFOzgUgORVr4PMWQ\n "
67
+ b"pqtwaZO3X2WZlvrhr+e46hMCgYBfdIdrm6jYXFjL6RkgUNZJQUTxYGzsY+ZemlNm\n "
68
+ b"fGdQo7a8kePMRuKY2MkcnXPaqTg49YgRmjq4z8CtHokRcWjJUWnPOTs8rmEZUshk\n "
69
+ b"0KJ0mbQdCFt/Uv0mtXgpFTkEZ3DPkDTGcV4oR4CRfOCl0/EU/A5VvL/U4i/mRo7h\n "
70
+ b"ye+xgQKBgD58b+9z+PR5LAJm1tZHIwb4tnyczP28PzwknxFd2qylR4ZNgvAUqGtU\n "
71
+ b"xvpUDpzMioz6zUH9YV43YNtt+5Xnzkqj+u9Mr27/H2v9XPwORGfwQ5XPwRJz/2oC\n "
72
+ b"EnPmP1SZoY9lXKUpQXHXSpDZ2rE2Klt3RHMUMHt8Zpy36E8Vwx8o\n "
73
+ b"-----END RSA PRIVATE KEY-----\n "
74
+ )
75
+
76
+ _RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITHOUT_PASSWORD = rsa .generate_private_key (
77
+ public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND
78
+ ).private_bytes (
49
79
encoding = serialization .Encoding .PEM ,
50
80
format = serialization .PrivateFormat .TraditionalOpenSSL ,
51
81
encryption_algorithm = serialization .NoEncryption (),
52
82
)
53
- _PUBLIC_WRAPPING_KEY_PEM = _PUBLIC_WRAPPING_KEY .public_bytes (
54
- encoding = serialization .Encoding .PEM , format = serialization .PublicFormat .SubjectPublicKeyInfo
55
- )
56
83
57
- _RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITHOUT_PASSWORD = _PRIVATE_WRAPPING_KEY_PEM
58
-
59
- _RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITH_PASSWORD = _PRIVATE_WRAPPING_KEY .private_bytes (
84
+ _RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITH_PASSWORD = rsa . generate_private_key (
85
+ public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND
86
+ ) .private_bytes (
60
87
encoding = serialization .Encoding .PEM ,
61
88
format = serialization .PrivateFormat .PKCS8 ,
62
89
encryption_algorithm = serialization .BestAvailableEncryption (b"mypassword" ),
63
90
)
64
91
65
- _RAW_RSA_PUBLIC_KEY_PEM_ENCODED = _PUBLIC_WRAPPING_KEY_PEM
92
+ _RAW_RSA_PUBLIC_KEY_PEM_ENCODED = (
93
+ rsa .generate_private_key (public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND )
94
+ .public_key ()
95
+ .public_bytes (encoding = serialization .Encoding .PEM , format = serialization .PublicFormat .SubjectPublicKeyInfo )
96
+ )
66
97
67
- _RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITHOUT_PASSWORD = _PRIVATE_WRAPPING_KEY .private_bytes (
98
+ _RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITHOUT_PASSWORD = rsa .generate_private_key (
99
+ public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND
100
+ ).private_bytes (
68
101
encoding = serialization .Encoding .DER ,
69
102
format = serialization .PrivateFormat .TraditionalOpenSSL ,
70
103
encryption_algorithm = serialization .NoEncryption (),
71
104
)
72
105
73
- _RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITH_PASSWORD = _PRIVATE_WRAPPING_KEY .private_bytes (
106
+ _RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITH_PASSWORD = rsa .generate_private_key (
107
+ public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND
108
+ ).private_bytes (
74
109
encoding = serialization .Encoding .DER ,
75
110
format = serialization .PrivateFormat .PKCS8 ,
76
111
encryption_algorithm = serialization .BestAvailableEncryption (b"mypassword" ),
77
112
)
78
113
79
- _RAW_RSA_PUBLIC_KEY_DER_ENCODED = _PUBLIC_WRAPPING_KEY .public_bytes (
80
- encoding = serialization .Encoding .DER , format = serialization .PublicFormat .SubjectPublicKeyInfo
114
+ _RAW_RSA_PUBLIC_KEY_DER_ENCODED = (
115
+ rsa .generate_private_key (public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND )
116
+ .public_key ()
117
+ .public_bytes (encoding = serialization .Encoding .DER , format = serialization .PublicFormat .SubjectPublicKeyInfo )
81
118
)
82
119
83
120
@@ -111,21 +148,18 @@ def sample_raw_rsa_keyring_using_different_wrapping_algorithm():
111
148
key_name = _KEY_ID ,
112
149
wrapping_algorithm = alg ,
113
150
private_wrapping_key = _PRIVATE_WRAPPING_KEY ,
114
- public_wrapping_key = _PUBLIC_WRAPPING_KEY ,
115
151
)
116
152
pem_and_der_encoded_raw_rsa_keyring = [
117
153
RawRSAKeyring .from_pem_encoding (
118
154
key_namespace = _PROVIDER_ID ,
119
155
key_name = _KEY_ID ,
120
156
private_encoded_key = _RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITHOUT_PASSWORD ,
121
- public_encoded_key = _RAW_RSA_PUBLIC_KEY_PEM_ENCODED ,
122
157
wrapping_algorithm = _WRAPPING_ALGORITHM ,
123
158
),
124
159
RawRSAKeyring .from_pem_encoding (
125
160
key_namespace = _PROVIDER_ID ,
126
161
key_name = _KEY_ID ,
127
162
private_encoded_key = _RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITH_PASSWORD ,
128
- public_encoded_key = _RAW_RSA_PUBLIC_KEY_PEM_ENCODED ,
129
163
password = b"mypassword" ,
130
164
wrapping_algorithm = _WRAPPING_ALGORITHM ,
131
165
),
@@ -139,21 +173,20 @@ def sample_raw_rsa_keyring_using_different_wrapping_algorithm():
139
173
key_namespace = _PROVIDER_ID ,
140
174
key_name = _KEY_ID ,
141
175
private_encoded_key = _RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITHOUT_PASSWORD ,
142
- public_encoded_key = _RAW_RSA_PUBLIC_KEY_DER_ENCODED ,
143
176
wrapping_algorithm = _WRAPPING_ALGORITHM ,
144
177
),
145
178
RawRSAKeyring .from_der_encoding (
146
179
key_namespace = _PROVIDER_ID ,
147
180
key_name = _KEY_ID ,
148
181
private_encoded_key = _RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITH_PASSWORD ,
149
- public_encoded_key = _RAW_RSA_PUBLIC_KEY_DER_ENCODED ,
150
182
password = b"mypassword" ,
151
183
wrapping_algorithm = _WRAPPING_ALGORITHM ,
152
184
),
153
185
RawRSAKeyring .from_der_encoding (
154
186
key_namespace = _PROVIDER_ID ,
155
187
key_name = _KEY_ID ,
156
188
public_encoded_key = _RAW_RSA_PUBLIC_KEY_DER_ENCODED ,
189
+ password = b"mypassword" ,
157
190
wrapping_algorithm = _WRAPPING_ALGORITHM ,
158
191
),
159
192
]
@@ -194,7 +227,6 @@ def test_raw_master_key_decrypts_what_raw_keyring_encrypts(encryption_materials_
194
227
key_name = _KEY_ID ,
195
228
wrapping_algorithm = _WRAPPING_ALGORITHM ,
196
229
private_encoded_key = _PRIVATE_WRAPPING_KEY_PEM ,
197
- public_encoded_key = _PUBLIC_WRAPPING_KEY_PEM ,
198
230
)
199
231
200
232
# Creating an instance of a raw master key
@@ -240,7 +272,6 @@ def test_raw_keyring_decrypts_what_raw_master_key_encrypts(encryption_materials_
240
272
key_name = _KEY_ID ,
241
273
wrapping_algorithm = _WRAPPING_ALGORITHM ,
242
274
private_encoded_key = _PRIVATE_WRAPPING_KEY_PEM ,
243
- public_encoded_key = _PUBLIC_WRAPPING_KEY_PEM ,
244
275
)
245
276
246
277
raw_mkp_generated_data_key = test_raw_master_key .generate_data_key (
@@ -264,110 +295,3 @@ def test_raw_keyring_decrypts_what_raw_master_key_encrypts(encryption_materials_
264
295
)
265
296
266
297
assert raw_mkp_generated_data_key .data_key == decryption_materials .data_encryption_key .data_key
267
-
268
-
269
- def test_public_key_only_can_encrypt ():
270
- test_keyring = RawRSAKeyring (
271
- key_namespace = _PROVIDER_ID ,
272
- key_name = _KEY_ID ,
273
- wrapping_algorithm = _WRAPPING_ALGORITHM ,
274
- public_wrapping_key = _PUBLIC_WRAPPING_KEY ,
275
- )
276
- initial_materials = EncryptionMaterials (
277
- algorithm = Algorithm .AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 , encryption_context = _ENCRYPTION_CONTEXT
278
- )
279
-
280
- test_materials = test_keyring .on_encrypt (initial_materials )
281
-
282
- assert test_materials is not initial_materials
283
- assert test_materials .data_encryption_key is not None
284
- assert test_materials .encrypted_data_keys
285
-
286
-
287
- def test_public_key_only_cannot_decrypt ():
288
- test_keyring = RawRSAKeyring (
289
- key_namespace = _PROVIDER_ID ,
290
- key_name = _KEY_ID ,
291
- wrapping_algorithm = _WRAPPING_ALGORITHM ,
292
- public_wrapping_key = _PUBLIC_WRAPPING_KEY ,
293
- )
294
- initial_materials = EncryptionMaterials (
295
- algorithm = Algorithm .AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 , encryption_context = _ENCRYPTION_CONTEXT
296
- )
297
-
298
- encryption_materials = test_keyring .on_encrypt (initial_materials )
299
-
300
- initial_decryption_materials = DecryptionMaterials (
301
- algorithm = Algorithm .AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 , encryption_context = _ENCRYPTION_CONTEXT
302
- )
303
-
304
- test_materials = test_keyring .on_decrypt (
305
- decryption_materials = initial_decryption_materials , encrypted_data_keys = encryption_materials .encrypted_data_keys
306
- )
307
-
308
- assert test_materials is initial_decryption_materials
309
-
310
-
311
- def test_private_key_can_decrypt ():
312
- complete_keyring = RawRSAKeyring (
313
- key_namespace = _PROVIDER_ID ,
314
- key_name = _KEY_ID ,
315
- wrapping_algorithm = _WRAPPING_ALGORITHM ,
316
- private_wrapping_key = _PRIVATE_WRAPPING_KEY ,
317
- public_wrapping_key = _PUBLIC_WRAPPING_KEY ,
318
- )
319
- test_keyring = RawRSAKeyring (
320
- key_namespace = _PROVIDER_ID ,
321
- key_name = _KEY_ID ,
322
- wrapping_algorithm = _WRAPPING_ALGORITHM ,
323
- private_wrapping_key = _PRIVATE_WRAPPING_KEY ,
324
- )
325
- initial_materials = EncryptionMaterials (
326
- algorithm = Algorithm .AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 , encryption_context = _ENCRYPTION_CONTEXT
327
- )
328
-
329
- encryption_materials = complete_keyring .on_encrypt (initial_materials )
330
-
331
- initial_decryption_materials = DecryptionMaterials (
332
- algorithm = Algorithm .AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 , encryption_context = _ENCRYPTION_CONTEXT
333
- )
334
-
335
- test_materials = test_keyring .on_decrypt (
336
- decryption_materials = initial_decryption_materials , encrypted_data_keys = encryption_materials .encrypted_data_keys
337
- )
338
-
339
- assert test_materials is not initial_decryption_materials
340
- assert test_materials .data_encryption_key is not None
341
-
342
-
343
- def test_private_key_cannot_encrypt ():
344
- test_keyring = RawRSAKeyring (
345
- key_namespace = _PROVIDER_ID ,
346
- key_name = _KEY_ID ,
347
- wrapping_algorithm = _WRAPPING_ALGORITHM ,
348
- private_wrapping_key = _PRIVATE_WRAPPING_KEY ,
349
- )
350
- initial_materials = EncryptionMaterials (
351
- algorithm = Algorithm .AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 , encryption_context = _ENCRYPTION_CONTEXT
352
- )
353
-
354
- with pytest .raises (EncryptKeyError ) as excinfo :
355
- test_keyring .on_encrypt (initial_materials )
356
-
357
- excinfo .match ("A public key is required to encrypt" )
358
-
359
-
360
- def test_keypair_must_match ():
361
- wrapping_key_a = rsa .generate_private_key (public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND )
362
- wrapping_key_b = rsa .generate_private_key (public_exponent = _PUBLIC_EXPONENT , key_size = _KEY_SIZE , backend = _BACKEND )
363
-
364
- with pytest .raises (ValueError ) as excinfo :
365
- RawRSAKeyring (
366
- key_namespace = _PROVIDER_ID ,
367
- key_name = _KEY_ID ,
368
- wrapping_algorithm = _WRAPPING_ALGORITHM ,
369
- private_wrapping_key = wrapping_key_a ,
370
- public_wrapping_key = wrapping_key_b .public_key (),
371
- )
372
-
373
- excinfo .match ("Private and public wrapping keys MUST be from the same keypair." )
0 commit comments