Skip to content

Commit 255b365

Browse files
committed
Revert "feat: refactor raw RSA keyrings configuration per #257 (#260)"
This reverts commit 6ffc135.
1 parent ef514ae commit 255b365

File tree

8 files changed

+105
-193
lines changed

8 files changed

+105
-193
lines changed

examples/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ We start with AWS KMS examples, then show how to use other wrapping keys.
4949
* [with keyrings](./src/keyring/raw_aes/raw_aes.py)
5050
* [with master key providers](./src/master_key_provider/raw_aes/raw_aes.py)
5151
* How to use a raw RSA wrapping key
52-
* [with keyrings](./src/keyring/raw_rsa/keypair.py)
52+
* [with keyrings](./src/keyring/raw_rsa/private_key_only.py)
5353
* How to use a raw RSA wrapping key when the key is PEM or DER encoded
54-
* [with keyrings](./src/keyring/raw_rsa/keypair_from_pem.py)
54+
* [with keyrings](./src/keyring/raw_rsa/private_key_only_from_pem.py)
5555
* [with master key providers](./src/master_key_provider/raw_rsa/private_key_only_from_pem.py)
5656
* How to encrypt with a raw RSA public key wrapping key without access to the private key
5757
* [with keyrings](./src/keyring/raw_rsa/public_private_key_separate.py)
@@ -62,9 +62,9 @@ We start with AWS KMS examples, then show how to use other wrapping keys.
6262
* How to reuse data keys across multiple messages
6363
* [with the caching cryptographic materials manager](./src/crypto_materials_manager/caching/simple_cache.py)
6464
* How to restrict algorithm suites
65-
* [with a custom cryptographic materials manager](./src/crypto_materials_manager/custom/algorithm_suite_enforcement.py)
65+
* [with a custom cryptographic materials manager](src/crypto_materials_manager/custom/algorithm_suite_enforcement.py)
6666
* How to require encryption context fields
67-
* [with a custom cryptographic materials manager](./src/crypto_materials_manager/custom/requiring_encryption_context_fields.py)
67+
* [with a custom cryptographic materials manager](src/crypto_materials_manager/custom/requiring_encryption_context_fields.py)
6868

6969
### Keyrings
7070

examples/src/keyring/raw_rsa/keypair.py renamed to examples/src/keyring/raw_rsa/private_key_only.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
33
"""
4-
This examples shows how to configure and use a raw RSA keyring using a pre-loaded RSA keypair.
4+
This examples shows how to configure and use a raw RSA keyring using a pre-loaded RSA private key.
55
66
If your RSA key is in PEM or DER format,
77
see the ``keyring/raw_rsa/private_key_only_from_pem`` example.
@@ -56,7 +56,6 @@ def run(source_plaintext):
5656
key_namespace="some managed raw keys",
5757
key_name=b"my RSA wrapping key",
5858
private_wrapping_key=private_key,
59-
public_wrapping_key=private_key.public_key(),
6059
# The wrapping algorithm tells the raw RSA keyring
6160
# how to use your wrapping key to encrypt data keys.
6261
#

examples/src/keyring/raw_rsa/keypair_from_pem.py renamed to examples/src/keyring/raw_rsa/private_key_only_from_pem.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"""
44
When you store RSA keys, you have to serialize them somehow.
55
6-
This example shows how to configure and use a raw RSA keyring using a PEM-encoded RSA keypair.
6+
This example shows how to configure and use a raw RSA keyring using a PEM-encoded RSA private key.
77
88
The most commonly used encodings for RSA keys tend to be PEM and DER.
99
The raw RSA keyring supports loading both public and private keys from these encodings.
@@ -48,16 +48,13 @@ def run(source_plaintext):
4848
# https://crypto.stanford.edu/~dabo/pubs/papers/RSA-survey.pdf
4949
private_key = rsa.generate_private_key(public_exponent=65537, key_size=4096, backend=default_backend())
5050

51-
# Serialize the RSA keypair to PEM encoding.
51+
# Serialize the RSA private key to PEM encoding.
5252
# This or DER encoding is likely to be what you get from your key management system in practice.
5353
private_key_pem = private_key.private_bytes(
5454
encoding=serialization.Encoding.PEM,
5555
format=serialization.PrivateFormat.PKCS8,
5656
encryption_algorithm=serialization.NoEncryption(),
5757
)
58-
public_key_pem = private_key.public_key().public_bytes(
59-
encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo,
60-
)
6158

6259
# Create the keyring that determines how your data keys are protected.
6360
#
@@ -72,7 +69,6 @@ def run(source_plaintext):
7269
key_namespace="some managed raw keys",
7370
key_name=b"my RSA wrapping key",
7471
private_encoded_key=private_key_pem,
75-
public_encoded_key=public_key_pem,
7672
# The wrapping algorithm tells the raw RSA keyring
7773
# how to use your wrapping key to encrypt data keys.
7874
#

src/aws_encryption_sdk/keyrings/raw.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -283,12 +283,8 @@ def __attrs_post_init__(self):
283283
if self._public_wrapping_key is None and self._private_wrapping_key is None:
284284
raise TypeError("At least one of public key or private key must be provided.")
285285

286-
if self._public_wrapping_key is not None and self._private_wrapping_key is not None:
287-
derived_public_key = self._private_wrapping_key.public_key()
288-
# We cannot compare the public key objects directly.
289-
# Instead, extract their numbers and compare those.
290-
if derived_public_key.public_numbers() != self._public_wrapping_key.public_numbers():
291-
raise ValueError("Private and public wrapping keys MUST be from the same keypair.")
286+
if self._private_wrapping_key is not None and self._public_wrapping_key is None:
287+
self._public_wrapping_key = self._private_wrapping_key.public_key()
292288

293289
@classmethod
294290
def from_pem_encoding(
@@ -379,12 +375,13 @@ def on_encrypt(self, encryption_materials):
379375
"""
380376
new_materials = encryption_materials
381377

382-
if self._public_wrapping_key is None:
383-
raise EncryptKeyError("A public key is required to encrypt")
384-
385378
if new_materials.data_encryption_key is None:
386379
new_materials = _generate_data_key(encryption_materials=new_materials, key_provider=self._key_provider)
387380

381+
if self._public_wrapping_key is None:
382+
# This should be impossible, but just in case, give a useful error message.
383+
raise EncryptKeyError("Raw RSA keyring unable to encrypt data key: no public key available")
384+
388385
try:
389386
# Encrypt data key
390387
encrypted_wrapped_key = EncryptedData(

test/functional/keyrings/raw/test_raw_rsa.py

Lines changed: 52 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from cryptography.hazmat.primitives import serialization
1818
from cryptography.hazmat.primitives.asymmetric import rsa
1919

20-
from aws_encryption_sdk.exceptions import EncryptKeyError
2120
from aws_encryption_sdk.identifiers import (
2221
Algorithm,
2322
EncryptionKeyType,
@@ -43,41 +42,79 @@
4342
_BACKEND = default_backend()
4443

4544
_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()
4745

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(
4979
encoding=serialization.Encoding.PEM,
5080
format=serialization.PrivateFormat.TraditionalOpenSSL,
5181
encryption_algorithm=serialization.NoEncryption(),
5282
)
53-
_PUBLIC_WRAPPING_KEY_PEM = _PUBLIC_WRAPPING_KEY.public_bytes(
54-
encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo
55-
)
5683

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(
6087
encoding=serialization.Encoding.PEM,
6188
format=serialization.PrivateFormat.PKCS8,
6289
encryption_algorithm=serialization.BestAvailableEncryption(b"mypassword"),
6390
)
6491

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+
)
6697

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(
68101
encoding=serialization.Encoding.DER,
69102
format=serialization.PrivateFormat.TraditionalOpenSSL,
70103
encryption_algorithm=serialization.NoEncryption(),
71104
)
72105

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(
74109
encoding=serialization.Encoding.DER,
75110
format=serialization.PrivateFormat.PKCS8,
76111
encryption_algorithm=serialization.BestAvailableEncryption(b"mypassword"),
77112
)
78113

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)
81118
)
82119

83120

@@ -111,21 +148,18 @@ def sample_raw_rsa_keyring_using_different_wrapping_algorithm():
111148
key_name=_KEY_ID,
112149
wrapping_algorithm=alg,
113150
private_wrapping_key=_PRIVATE_WRAPPING_KEY,
114-
public_wrapping_key=_PUBLIC_WRAPPING_KEY,
115151
)
116152
pem_and_der_encoded_raw_rsa_keyring = [
117153
RawRSAKeyring.from_pem_encoding(
118154
key_namespace=_PROVIDER_ID,
119155
key_name=_KEY_ID,
120156
private_encoded_key=_RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITHOUT_PASSWORD,
121-
public_encoded_key=_RAW_RSA_PUBLIC_KEY_PEM_ENCODED,
122157
wrapping_algorithm=_WRAPPING_ALGORITHM,
123158
),
124159
RawRSAKeyring.from_pem_encoding(
125160
key_namespace=_PROVIDER_ID,
126161
key_name=_KEY_ID,
127162
private_encoded_key=_RAW_RSA_PRIVATE_KEY_PEM_ENCODED_WITH_PASSWORD,
128-
public_encoded_key=_RAW_RSA_PUBLIC_KEY_PEM_ENCODED,
129163
password=b"mypassword",
130164
wrapping_algorithm=_WRAPPING_ALGORITHM,
131165
),
@@ -139,21 +173,20 @@ def sample_raw_rsa_keyring_using_different_wrapping_algorithm():
139173
key_namespace=_PROVIDER_ID,
140174
key_name=_KEY_ID,
141175
private_encoded_key=_RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITHOUT_PASSWORD,
142-
public_encoded_key=_RAW_RSA_PUBLIC_KEY_DER_ENCODED,
143176
wrapping_algorithm=_WRAPPING_ALGORITHM,
144177
),
145178
RawRSAKeyring.from_der_encoding(
146179
key_namespace=_PROVIDER_ID,
147180
key_name=_KEY_ID,
148181
private_encoded_key=_RAW_RSA_PRIVATE_KEY_DER_ENCODED_WITH_PASSWORD,
149-
public_encoded_key=_RAW_RSA_PUBLIC_KEY_DER_ENCODED,
150182
password=b"mypassword",
151183
wrapping_algorithm=_WRAPPING_ALGORITHM,
152184
),
153185
RawRSAKeyring.from_der_encoding(
154186
key_namespace=_PROVIDER_ID,
155187
key_name=_KEY_ID,
156188
public_encoded_key=_RAW_RSA_PUBLIC_KEY_DER_ENCODED,
189+
password=b"mypassword",
157190
wrapping_algorithm=_WRAPPING_ALGORITHM,
158191
),
159192
]
@@ -194,7 +227,6 @@ def test_raw_master_key_decrypts_what_raw_keyring_encrypts(encryption_materials_
194227
key_name=_KEY_ID,
195228
wrapping_algorithm=_WRAPPING_ALGORITHM,
196229
private_encoded_key=_PRIVATE_WRAPPING_KEY_PEM,
197-
public_encoded_key=_PUBLIC_WRAPPING_KEY_PEM,
198230
)
199231

200232
# Creating an instance of a raw master key
@@ -240,7 +272,6 @@ def test_raw_keyring_decrypts_what_raw_master_key_encrypts(encryption_materials_
240272
key_name=_KEY_ID,
241273
wrapping_algorithm=_WRAPPING_ALGORITHM,
242274
private_encoded_key=_PRIVATE_WRAPPING_KEY_PEM,
243-
public_encoded_key=_PUBLIC_WRAPPING_KEY_PEM,
244275
)
245276

246277
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_
264295
)
265296

266297
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

Comments
 (0)