Skip to content

Commit 9afe87e

Browse files
Post 2.0.0 fixes (#303)
* Various fixes/cleanup after release of 2.0 - Update decrypt_oracle and test_vector_handlers to use new constructs - Update changelog with correct commit hashes - Update _ClientConfig docstring to include commitment_policy - Fix oracle CI - Update the release tox environments to reduce risk of releasing to the wrong repo
1 parent f03b50b commit 9afe87e

File tree

18 files changed

+85
-49
lines changed

18 files changed

+85
-49
lines changed

.travis.yml

+10-10
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ matrix:
5656
- python: 2.7
5757
env:
5858
TEST_VECTOR_HANDLERS=1
59-
TOXENV=py27-awses_1.3.3
59+
TOXENV=py27-awses_1.7.1
6060
stage: Test Vector Handler Tests
6161
- python: 2.7
6262
env:
6363
TEST_VECTOR_HANDLERS=1
64-
TOXENV=py27-awses_1.3.max
64+
TOXENV=py27-awses_2.0.0
6565
stage: Test Vector Handler Tests
6666
- python: 2.7
6767
env:
@@ -72,12 +72,12 @@ matrix:
7272
- python: 3.5
7373
env:
7474
TEST_VECTOR_HANDLERS=1
75-
TOXENV=py35-awses_1.3.3
75+
TOXENV=py35-awses_1.7.1
7676
stage: Test Vector Handler Tests
7777
- python: 3.5
7878
env:
7979
TEST_VECTOR_HANDLERS=1
80-
TOXENV=py35-awses_1.3.max
80+
TOXENV=py35-awses_2.0.0
8181
stage: Test Vector Handler Tests
8282
- python: 3.5
8383
env:
@@ -88,12 +88,12 @@ matrix:
8888
- python: 3.6
8989
env:
9090
TEST_VECTOR_HANDLERS=1
91-
TOXENV=py36-awses_1.3.3
91+
TOXENV=py36-awses_1.7.1
9292
stage: Test Vector Handler Tests
9393
- python: 3.6
9494
env:
9595
TEST_VECTOR_HANDLERS=1
96-
TOXENV=py36-awses_1.3.max
96+
TOXENV=py36-awses_2.0.0
9797
stage: Test Vector Handler Tests
9898
- python: 3.6
9999
env:
@@ -104,14 +104,14 @@ matrix:
104104
- python: 3.7
105105
env:
106106
TEST_VECTOR_HANDLERS=1
107-
TOXENV=py37-awses_1.3.3
107+
TOXENV=py37-awses_1.7.1
108108
dist: xenial
109109
sudo: true
110110
stage: Test Vector Handler Tests
111111
- python: 3.7
112112
env:
113113
TEST_VECTOR_HANDLERS=1
114-
TOXENV=py37-awses_1.3.max
114+
TOXENV=py37-awses_2.0.0
115115
dist: xenial
116116
sudo: true
117117
stage: Test Vector Handler Tests
@@ -126,14 +126,14 @@ matrix:
126126
- python: 3.8
127127
env:
128128
TEST_VECTOR_HANDLERS=1
129-
TOXENV=py38-awses_1.3.3
129+
TOXENV=py38-awses_1.7.1
130130
dist: xenial
131131
sudo: true
132132
stage: Test Vector Handler Tests
133133
- python: 3.8
134134
env:
135135
TEST_VECTOR_HANDLERS=1
136-
TOXENV=py38-awses_1.3.max
136+
TOXENV=py38-awses_2.0.0
137137
dist: xenial
138138
sudo: true
139139
stage: Test Vector Handler Tests

CHANGELOG.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Changelog
77

88
Features
99
--------
10-
* Updates to the AWS Encryption SDK. 1cceceb
10+
* Updates to the AWS Encryption SDK. 73cce71
1111

1212
Breaking Changes
1313
^^^^^^^^^^^^^^^^
@@ -26,7 +26,7 @@ for more details.
2626

2727
Features
2828
--------
29-
* Updates to the AWS Encryption SDK. bdbf00c
29+
* Updates to the AWS Encryption SDK. ef90351
3030

3131
Deprecations
3232
^^^^^^^^^^^^

decrypt_oracle/src/aws_encryption_sdk_decrypt_oracle/app.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import os
1717

1818
import aws_encryption_sdk
19-
from aws_encryption_sdk.key_providers.kms import KMSMasterKeyProvider
19+
from aws_encryption_sdk.key_providers.kms import DiscoveryAwsKmsMasterKeyProvider
2020
from chalice import Chalice, Response
2121

2222
from .key_providers.counting import CountingMasterKey
@@ -27,9 +27,9 @@
2727
APP.log.setLevel(logging.DEBUG)
2828

2929

30-
def _master_key_provider() -> KMSMasterKeyProvider:
30+
def _master_key_provider() -> DiscoveryAwsKmsMasterKeyProvider:
3131
"""Build the V0 master key provider."""
32-
master_key_provider = KMSMasterKeyProvider()
32+
master_key_provider = DiscoveryAwsKmsMasterKeyProvider()
3333
master_key_provider.add_master_key_provider(NullMasterKey())
3434
master_key_provider.add_master_key_provider(CountingMasterKey())
3535
return master_key_provider
@@ -59,8 +59,9 @@ def basic_decrypt() -> Response:
5959
APP.log.debug(APP.current_request.raw_body)
6060

6161
try:
62+
client = aws_encryption_sdk.EncryptionSDKClient()
6263
ciphertext = APP.current_request.raw_body
63-
plaintext, _header = aws_encryption_sdk.decrypt(source=ciphertext, key_provider=_master_key_provider())
64+
plaintext, _header = client.decrypt(source=ciphertext, key_provider=_master_key_provider())
6465
APP.log.debug("Plaintext:")
6566
APP.log.debug(plaintext)
6667
response = Response(body=plaintext, headers={"Content-Type": "application/octet-stream"}, status_code=200)

decrypt_oracle/test/integration/integration_test_utils.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
from collections import namedtuple
1818
from typing import Any, Callable, Iterable, Optional, Text
1919

20+
import aws_encryption_sdk
2021
import pytest
21-
from aws_encryption_sdk.key_providers.kms import KMSMasterKeyProvider
22+
from aws_encryption_sdk.identifiers import CommitmentPolicy
23+
from aws_encryption_sdk.key_providers.kms import StrictAwsKmsMasterKeyProvider
2224

2325
HERE = os.path.abspath(os.path.dirname(__file__))
2426
DEPLOYMENT_REGION = "AWS_ENCRYPTION_SDK_PYTHON_DECRYPT_ORACLE_REGION"
@@ -27,6 +29,8 @@
2729
_KMS_MKP = None
2830
_ENDPOINT = None
2931

32+
CLIENT = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
33+
3034

3135
def decrypt_endpoint() -> Text:
3236
"""Build the API endpoint based on environment variables."""
@@ -77,7 +81,7 @@ def kms_master_key_provider(cache: Optional[bool] = True):
7781
return _KMS_MKP
7882

7983
cmk_arn = get_cmk_arn()
80-
_kms_master_key_provider = KMSMasterKeyProvider(key_ids=[cmk_arn])
84+
_kms_master_key_provider = StrictAwsKmsMasterKeyProvider(key_ids=[cmk_arn])
8185

8286
if cache:
8387
_KMS_MKP = _kms_master_key_provider

decrypt_oracle/test/unit/key_providers/test_u_counting.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
# ANY KIND, either express or implied. See the License for the specific
1212
# language governing permissions and limitations under the License.
1313
"""Unit test for ``aws_encryption_sdk_decrypt_oracle.key_providers.counting``."""
14-
import aws_encryption_sdk
1514
import pytest
1615
from aws_encryption_sdk_decrypt_oracle.key_providers.counting import CountingMasterKey
1716

18-
from ...integration.integration_test_utils import filtered_test_vectors
17+
from ...integration.integration_test_utils import CLIENT, filtered_test_vectors
1918

2019
pytestmark = [pytest.mark.unit, pytest.mark.local]
2120

@@ -24,7 +23,7 @@
2423
def test_counting_master_key_decrypt_vectors(vector):
2524
master_key = CountingMasterKey()
2625

27-
plaintext, _header = aws_encryption_sdk.decrypt(source=vector.ciphertext, key_provider=master_key)
26+
plaintext, _header = CLIENT.decrypt(source=vector.ciphertext, key_provider=master_key)
2827

2928
assert plaintext == vector.plaintext
3029

@@ -33,8 +32,8 @@ def test_counting_master_key_cycle():
3332
plaintext = b"some super secret plaintext"
3433
master_key = CountingMasterKey()
3534

36-
ciphertext, _header = aws_encryption_sdk.encrypt(source=plaintext, key_provider=master_key)
37-
decrypted, _header = aws_encryption_sdk.decrypt(source=ciphertext, key_provider=master_key)
35+
ciphertext, _header = CLIENT.encrypt(source=plaintext, key_provider=master_key)
36+
decrypted, _header = CLIENT.decrypt(source=ciphertext, key_provider=master_key)
3837

3938
assert plaintext != ciphertext
4039
assert plaintext == decrypted

decrypt_oracle/test/unit/key_providers/test_u_null.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,18 @@
1111
# ANY KIND, either express or implied. See the License for the specific
1212
# language governing permissions and limitations under the License.
1313
"""Unit test for ``aws_encryption_sdk_decrypt_oracle.key_providers.null``."""
14-
import aws_encryption_sdk
1514
import pytest
1615
from aws_encryption_sdk_decrypt_oracle.key_providers.null import NullMasterKey
1716

18-
from ...integration.integration_test_utils import filtered_test_vectors
17+
from ...integration.integration_test_utils import CLIENT, filtered_test_vectors
1918

2019
pytestmark = [pytest.mark.unit, pytest.mark.local]
2120

2221

2322
@pytest.mark.parametrize("vector", filtered_test_vectors(lambda x: x.key_type == "null"))
2423
def test_null_master_key_decrypt_vectors(vector):
2524
master_key = NullMasterKey()
26-
27-
plaintext, _header = aws_encryption_sdk.decrypt(source=vector.ciphertext, key_provider=master_key)
25+
plaintext, _header = CLIENT.decrypt(source=vector.ciphertext, key_provider=master_key)
2826

2927
assert plaintext == vector.plaintext
3028

@@ -33,8 +31,8 @@ def test_null_master_key_cycle():
3331
plaintext = b"some super secret plaintext"
3432
master_key = NullMasterKey()
3533

36-
ciphertext, _header = aws_encryption_sdk.encrypt(source=plaintext, key_provider=master_key)
37-
decrypted, _header = aws_encryption_sdk.decrypt(source=ciphertext, key_provider=master_key)
34+
ciphertext, _header = CLIENT.encrypt(source=plaintext, key_provider=master_key)
35+
decrypted, _header = CLIENT.decrypt(source=ciphertext, key_provider=master_key)
3836

3937
assert plaintext != ciphertext
4038
assert plaintext == decrypted

src/aws_encryption_sdk/streaming_client.py

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ class _ClientConfig(object):
7575
7676
:param source: Source data to encrypt or decrypt
7777
:type source: str, bytes, io.IOBase, or file
78+
:param commitment_policy: The commitment policy to use during encryption and decryption
79+
:type commitment_policy: aws_encryption_sdk.identifiers.CommitmentPolicy
7880
:param materials_manager: `CryptoMaterialsManager` from which to obtain cryptographic materials
7981
(either `materials_manager` or `key_provider` required)
8082
:type materials_manager: aws_encryption_sdk.materials_manager.base.CryptoMaterialsManager
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
aws-encryption-sdk==1.7.1
2+
attrs<19.2.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
aws-encryption-sdk==2.0.0
2+
attrs<19.2.0

test_vector_handlers/src/awses_test_vectors/internal/aws_kms.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
from aws_encryption_sdk.identifiers import AlgorithmSuite
1616
except ImportError:
1717
from aws_encryption_sdk.identifiers import Algorithm as AlgorithmSuite
18-
from aws_encryption_sdk.key_providers.kms import KMSMasterKeyProvider
18+
from aws_encryption_sdk.key_providers.kms import DiscoveryAwsKmsMasterKeyProvider, StrictAwsKmsMasterKeyProvider
1919

2020
from awses_test_vectors.internal.defaults import ENCODING
2121

2222
# This lets us easily use a single boto3 client per region for all KMS master keys.
23-
KMS_MASTER_KEY_PROVIDER = KMSMasterKeyProvider()
23+
KMS_MASTER_KEY_PROVIDER = DiscoveryAwsKmsMasterKeyProvider()
2424

2525

2626
def arn_from_key_id(key_id):
@@ -34,7 +34,8 @@ def arn_from_key_id(key_id):
3434
:returns: Full Arn for KMS CMK that key ID identifies
3535
:rtype: str
3636
"""
37-
encrypted_data_key = KMS_MASTER_KEY_PROVIDER.master_key(key_id.encode(ENCODING)).generate_data_key(
37+
provider = StrictAwsKmsMasterKeyProvider(key_ids=[key_id])
38+
encrypted_data_key = provider.master_key(key_id.encode(ENCODING)).generate_data_key(
3839
algorithm=AlgorithmSuite.AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384, encryption_context={}
3940
)
4041
return encrypted_data_key.key_provider.key_info.decode(ENCODING)

test_vector_handlers/src/awses_test_vectors/internal/mypy_types.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515

1616
try: # Python 3.5.0 and 3.5.1 have incompatible typing modules
1717
from typing import ( # noqa pylint: disable=unused-import
18+
IO,
1819
Any,
1920
Callable,
2021
Dict,
21-
IO,
2222
Iterable,
2323
Optional,
2424
Tuple,

test_vector_handlers/src/awses_test_vectors/internal/util.py

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
try: # Python 3.5.0 and 3.5.1 have incompatible typing modules
2727
from typing import Any, Callable, Dict, Iterable, Type # noqa pylint: disable=unused-import
28+
2829
from awses_test_vectors.internal.mypy_types import ( # noqa pylint: disable=unused-import
2930
ISINSTANCE,
3031
MANIFEST_VERSION,

test_vector_handlers/src/awses_test_vectors/manifests/full_message/decrypt.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import attr
2222
import aws_encryption_sdk
2323
import six
24+
from aws_encryption_sdk.identifiers import CommitmentPolicy
2425
from aws_encryption_sdk.key_providers.base import MasterKeyProvider
2526

2627
from awses_test_vectors.internal.defaults import ENCODING
@@ -34,7 +35,8 @@
3435
from awses_test_vectors.manifests.master_key import MasterKeySpec, master_key_provider_from_master_key_specs
3536

3637
try: # Python 3.5.0 and 3.5.1 have incompatible typing modules
37-
from typing import Callable, Dict, IO, Iterable, Optional # noqa pylint: disable=unused-import
38+
from typing import IO, Callable, Dict, Iterable, Optional # noqa pylint: disable=unused-import
39+
3840
from awses_test_vectors.internal.mypy_types import ( # noqa pylint: disable=unused-import
3941
DECRYPT_SCENARIO_SPEC,
4042
FULL_MESSAGE_DECRYPT_MANIFEST,
@@ -155,7 +157,8 @@ def run(self, name):
155157
156158
:param str name: Descriptive name for this scenario to use in any logging or errors
157159
"""
158-
plaintext, _header = aws_encryption_sdk.decrypt(source=self.ciphertext, key_provider=self.master_key_provider)
160+
client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)
161+
plaintext, _header = client.decrypt(source=self.ciphertext, key_provider=self.master_key_provider)
159162
if plaintext != self.plaintext:
160163
raise ValueError("Decrypted plaintext does not match expected value for scenario '{}'".format(name))
161164

test_vector_handlers/src/awses_test_vectors/manifests/full_message/encrypt.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@
4040
from awses_test_vectors.manifests.master_key import MasterKeySpec, master_key_provider_from_master_key_specs
4141

4242
try:
43-
from aws_encryption_sdk.identifiers import AlgorithmSuite
43+
from aws_encryption_sdk.identifiers import AlgorithmSuite, CommitmentPolicy
4444
except ImportError:
4545
from aws_encryption_sdk.identifiers import Algorithm as AlgorithmSuite
4646

4747

4848
try: # Python 3.5.0 and 3.5.1 have incompatible typing modules
49-
from typing import Callable, Dict, IO, Iterable, Optional # noqa pylint: disable=unused-import
49+
from typing import IO, Callable, Dict, Iterable, Optional # noqa pylint: disable=unused-import
50+
5051
from awses_test_vectors.internal.mypy_types import ( # noqa pylint: disable=unused-import
5152
ENCRYPT_SCENARIO_SPEC,
5253
PLAINTEXTS_SPEC,
@@ -133,7 +134,8 @@ def run(self, ciphertext_writer, plaintext_uri):
133134
:return: Decrypt test scenario that describes the generated scenario
134135
:rtype: MessageDecryptionTestScenario
135136
"""
136-
ciphertext, _header = aws_encryption_sdk.encrypt(
137+
client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)
138+
ciphertext, _header = client.encrypt(
137139
source=self.plaintext,
138140
algorithm=self.algorithm,
139141
frame_length=self.frame_size,

test_vector_handlers/src/awses_test_vectors/manifests/keys.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@
2525
from awses_test_vectors.internal.util import dictionary_validator, membership_validator, validate_manifest_type
2626

2727
try: # Python 3.5.0 and 3.5.1 have incompatible typing modules
28-
from typing import cast, Dict, Iterable, Optional # noqa pylint: disable=unused-import
28+
from typing import Dict, Iterable, Optional, cast # noqa pylint: disable=unused-import
29+
2930
from awses_test_vectors.internal.mypy_types import ( # noqa pylint: disable=unused-import
3031
AWS_KMS_KEY_SPEC,
31-
MANUAL_KEY_SPEC,
3232
KEY_SPEC,
3333
KEYS_MANIFEST,
3434
MANIFEST_VERSION,
35+
MANUAL_KEY_SPEC,
3536
)
3637
except ImportError: # pragma: no cover
3738
# We only actually need these imports when running the mypy checks

test_vector_handlers/src/awses_test_vectors/manifests/master_key.py

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
try: # Python 3.5.0 and 3.5.1 have incompatible typing modules
3636
from typing import Iterable # noqa pylint: disable=unused-import
37+
3738
from awses_test_vectors.internal.mypy_types import MASTER_KEY_SPEC # noqa pylint: disable=unused-import
3839
except ImportError: # pragma: no cover
3940
# We only actually need these imports when running the mypy checks

test_vector_handlers/tox.ini

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tox]
22
envlist =
3-
py{27,34,35,36,37}-awses_{1.3.3,1.3.max,latest},
3+
py{27,34,35,36,37}-awses_{1.7.1,2.0.0,latest},
44
# 1.2.0 and 1.2.max are being difficult because of attrs
55
bandit, doc8, readme, docs,
66
{flake8,pylint}{,-tests},
@@ -48,6 +48,8 @@ deps =
4848
-rtest/requirements.txt
4949
awses_1.3.3: -rcompatibility-requirements/1.3.3
5050
awses_1.3.max: -rcompatibility-requirements/1.3.max
51+
awses_1.7.1: -rcompatibility-requirements/1.7.1
52+
awses_2.0.0: -rcompatibility-requirements/2.0.0
5153
awses_latest: -rcompatibility-requirements/latest
5254
commands = {[testenv:base-command]commands}
5355

0 commit comments

Comments
 (0)