Skip to content

Commit 6c9aaed

Browse files
authored
Merge pull request #108 from mattsb42-aws/dev-103a
Expand imports to improve readability
2 parents 7771f51 + 0af0e53 commit 6c9aaed

File tree

4 files changed

+51
-104
lines changed

4 files changed

+51
-104
lines changed

src/aws_encryption_sdk/internal/formatting/deserialize.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -316,25 +316,6 @@ def deserialize_tag(stream, header, verifier=None):
316316
return data_tag
317317

318318

319-
def update_verifier_with_tag(stream, header, verifier):
320-
"""Updates verifier with data for authentication tag.
321-
322-
.. note::
323-
This is meant to be used in conjunction with deserialize_non_framed_values
324-
to update the verifier over information which has already been retrieved.
325-
326-
:param stream: Source data stream
327-
:type stream: io.BytesIO
328-
:param header: Deserialized header
329-
:type header: aws_encryption_sdk.structures.MessageHeader
330-
:param verifier: Signature verifier object
331-
:type verifier: aws_encryption_sdk.internal.crypto.Verifier
332-
:returns: Data authentication tag value
333-
:rtype: bytes
334-
"""
335-
return unpack_values(">{auth_len}s".format(auth_len=header.algorithm.auth_len), stream, verifier)
336-
337-
338319
def deserialize_frame(stream, header, verifier=None):
339320
"""Deserializes a frame from a body.
340321

src/aws_encryption_sdk/streaming_client.py

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@
2121
import attr
2222
import six
2323

24-
import aws_encryption_sdk.internal.formatting.deserialize
25-
import aws_encryption_sdk.internal.formatting.encryption_context
26-
import aws_encryption_sdk.internal.formatting.serialize
2724
import aws_encryption_sdk.internal.utils
2825
from aws_encryption_sdk.exceptions import (
2926
ActionNotAllowedError,
@@ -38,6 +35,24 @@
3835
from aws_encryption_sdk.internal.crypto.encryption import Decryptor, Encryptor, decrypt
3936
from aws_encryption_sdk.internal.crypto.iv import non_framed_body_iv
4037
from aws_encryption_sdk.internal.defaults import FRAME_LENGTH, LINE_LENGTH, MAX_NON_FRAMED_SIZE, TYPE, VERSION
38+
from aws_encryption_sdk.internal.formatting.deserialize import (
39+
deserialize_footer,
40+
deserialize_frame,
41+
deserialize_header,
42+
deserialize_header_auth,
43+
deserialize_non_framed_values,
44+
deserialize_tag,
45+
validate_header,
46+
)
47+
from aws_encryption_sdk.internal.formatting.encryption_context import assemble_content_aad
48+
from aws_encryption_sdk.internal.formatting.serialize import (
49+
serialize_footer,
50+
serialize_frame,
51+
serialize_header,
52+
serialize_header_auth,
53+
serialize_non_framed_close,
54+
serialize_non_framed_open,
55+
)
4156
from aws_encryption_sdk.key_providers.base import MasterKeyProvider
4257
from aws_encryption_sdk.materials_managers import DecryptionMaterialsRequest, EncryptionMaterialsRequest
4358
from aws_encryption_sdk.materials_managers.base import CryptoMaterialsManager
@@ -461,10 +476,8 @@ def _prep_message(self):
461476

462477
def _write_header(self):
463478
"""Builds the message header and writes it to the output stream."""
464-
self.output_buffer += aws_encryption_sdk.internal.formatting.serialize.serialize_header(
465-
header=self._header, signer=self.signer
466-
)
467-
self.output_buffer += aws_encryption_sdk.internal.formatting.serialize.serialize_header_auth(
479+
self.output_buffer += serialize_header(header=self._header, signer=self.signer)
480+
self.output_buffer += serialize_header_auth(
468481
algorithm=self._encryption_materials.algorithm,
469482
header=self.output_buffer,
470483
data_encryption_key=self._derived_data_key,
@@ -476,7 +489,7 @@ def _prep_non_framed(self):
476489
aad_content_string = aws_encryption_sdk.internal.utils.get_aad_content_string(
477490
content_type=self.content_type, is_final_frame=True
478491
)
479-
associated_data = aws_encryption_sdk.internal.formatting.encryption_context.assemble_content_aad(
492+
associated_data = assemble_content_aad(
480493
message_id=self._header.message_id,
481494
aad_content_string=aad_content_string,
482495
seq_num=1,
@@ -488,7 +501,7 @@ def _prep_non_framed(self):
488501
associated_data=associated_data,
489502
iv=non_framed_body_iv(self._encryption_materials.algorithm),
490503
)
491-
self.output_buffer += aws_encryption_sdk.internal.formatting.serialize.serialize_non_framed_open(
504+
self.output_buffer += serialize_non_framed_open(
492505
algorithm=self._encryption_materials.algorithm,
493506
iv=self.encryptor.iv,
494507
plaintext_length=self.stream_length,
@@ -521,12 +534,10 @@ def _read_bytes_to_non_framed_body(self, b):
521534
if self.signer is not None:
522535
self.signer.update(closing)
523536

524-
closing += aws_encryption_sdk.internal.formatting.serialize.serialize_non_framed_close(
525-
tag=self.encryptor.tag, signer=self.signer
526-
)
537+
closing += serialize_non_framed_close(tag=self.encryptor.tag, signer=self.signer)
527538

528539
if self.signer is not None:
529-
closing += aws_encryption_sdk.internal.formatting.serialize.serialize_footer(self.signer)
540+
closing += serialize_footer(self.signer)
530541
return ciphertext + closing
531542

532543
return ciphertext
@@ -575,7 +586,7 @@ def _read_bytes_to_framed_body(self, b):
575586
self.sequence_number,
576587
)
577588
self._bytes_encrypted += bytes_in_frame
578-
ciphertext, plaintext = aws_encryption_sdk.internal.formatting.serialize.serialize_frame(
589+
ciphertext, plaintext = serialize_frame(
579590
algorithm=self._encryption_materials.algorithm,
580591
plaintext=plaintext,
581592
message_id=self._header.message_id,
@@ -592,7 +603,7 @@ def _read_bytes_to_framed_body(self, b):
592603
if finalize:
593604
_LOGGER.debug("Writing footer")
594605
if self.signer is not None:
595-
output += aws_encryption_sdk.internal.formatting.serialize.serialize_footer(self.signer)
606+
output += serialize_footer(self.signer)
596607
self.source_stream.close()
597608
return output
598609

@@ -713,7 +724,7 @@ def _read_header(self):
713724
and aws_encryption_sdk.internal.structures.MessageHeaderAuthentication
714725
:raises CustomMaximumValueExceeded: if frame length is greater than the custom max value
715726
"""
716-
header, raw_header = aws_encryption_sdk.internal.formatting.deserialize.deserialize_header(self.source_stream)
727+
header, raw_header = deserialize_header(self.source_stream)
717728
self.__unframed_bytes_read += len(raw_header)
718729

719730
if (
@@ -742,15 +753,13 @@ def _read_header(self):
742753
if self.verifier is not None:
743754
self.verifier.update(raw_header)
744755

745-
header_auth = aws_encryption_sdk.internal.formatting.deserialize.deserialize_header_auth(
756+
header_auth = deserialize_header_auth(
746757
stream=self.source_stream, algorithm=header.algorithm, verifier=self.verifier
747758
)
748759
self._derived_data_key = derive_data_encryption_key(
749760
source_key=decryption_materials.data_key.data_key, algorithm=header.algorithm, message_id=header.message_id
750761
)
751-
aws_encryption_sdk.internal.formatting.deserialize.validate_header(
752-
header=header, header_auth=header_auth, raw_header=raw_header, data_key=self._derived_data_key
753-
)
762+
validate_header(header=header, header_auth=header_auth, raw_header=raw_header, data_key=self._derived_data_key)
754763
return header, header_auth
755764

756765
@property
@@ -767,7 +776,7 @@ def body_end(self):
767776

768777
def _prep_non_framed(self):
769778
"""Prepare the opening data for a non-framed message."""
770-
self._unframed_body_iv, self.body_length = aws_encryption_sdk.internal.formatting.deserialize.deserialize_non_framed_values( # noqa # pylint: disable=line-too-long
779+
self._unframed_body_iv, self.body_length = deserialize_non_framed_values(
771780
stream=self.source_stream, header=self._header, verifier=self.verifier
772781
)
773782

@@ -803,14 +812,12 @@ def _read_bytes_from_non_framed_body(self, b):
803812
if self.verifier is not None:
804813
self.verifier.update(ciphertext)
805814

806-
tag = aws_encryption_sdk.internal.formatting.deserialize.deserialize_tag(
807-
stream=self.source_stream, header=self._header, verifier=self.verifier
808-
)
815+
tag = deserialize_tag(stream=self.source_stream, header=self._header, verifier=self.verifier)
809816

810817
aad_content_string = aws_encryption_sdk.internal.utils.get_aad_content_string(
811818
content_type=self._header.content_type, is_final_frame=True
812819
)
813-
associated_data = aws_encryption_sdk.internal.formatting.encryption_context.assemble_content_aad(
820+
associated_data = assemble_content_aad(
814821
message_id=self._header.message_id,
815822
aad_content_string=aad_content_string,
816823
seq_num=1,
@@ -827,9 +834,7 @@ def _read_bytes_from_non_framed_body(self, b):
827834
plaintext = self.decryptor.update(ciphertext)
828835
plaintext += self.decryptor.finalize()
829836

830-
self.footer = aws_encryption_sdk.internal.formatting.deserialize.deserialize_footer(
831-
stream=self.source_stream, verifier=self.verifier
832-
)
837+
self.footer = deserialize_footer(stream=self.source_stream, verifier=self.verifier)
833838
self.source_stream.close()
834839
return plaintext
835840

@@ -845,7 +850,7 @@ def _read_bytes_from_framed_body(self, b):
845850
_LOGGER.debug("collecting %d bytes", b)
846851
while len(plaintext) < b and not final_frame:
847852
_LOGGER.debug("Reading frame")
848-
frame_data, final_frame = aws_encryption_sdk.internal.formatting.deserialize.deserialize_frame(
853+
frame_data, final_frame = deserialize_frame(
849854
stream=self.source_stream, header=self._header, verifier=self.verifier
850855
)
851856
_LOGGER.debug("Read complete for frame %d", frame_data.sequence_number)
@@ -855,7 +860,7 @@ def _read_bytes_from_framed_body(self, b):
855860
aad_content_string = aws_encryption_sdk.internal.utils.get_aad_content_string(
856861
content_type=self._header.content_type, is_final_frame=frame_data.final_frame
857862
)
858-
associated_data = aws_encryption_sdk.internal.formatting.encryption_context.assemble_content_aad(
863+
associated_data = assemble_content_aad(
859864
message_id=self._header.message_id,
860865
aad_content_string=aad_content_string,
861866
seq_num=frame_data.sequence_number,
@@ -871,9 +876,7 @@ def _read_bytes_from_framed_body(self, b):
871876
_LOGGER.debug("bytes collected: %d", plaintext_length)
872877
if final_frame:
873878
_LOGGER.debug("Reading footer")
874-
self.footer = aws_encryption_sdk.internal.formatting.deserialize.deserialize_footer(
875-
stream=self.source_stream, verifier=self.verifier
876-
)
879+
self.footer = deserialize_footer(stream=self.source_stream, verifier=self.verifier)
877880
self.source_stream.close()
878881
return plaintext
879882

test/unit/test_streaming_client_stream_decryptor.py

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -48,34 +48,24 @@ def setUp(self):
4848
self.mock_input_stream.tell.side_effect = (0, 500)
4949

5050
# Set up deserialize_header patch
51-
self.mock_deserialize_header_patcher = patch(
52-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.deserialize.deserialize_header"
53-
)
51+
self.mock_deserialize_header_patcher = patch("aws_encryption_sdk.streaming_client.deserialize_header")
5452
self.mock_deserialize_header = self.mock_deserialize_header_patcher.start()
5553
self.mock_deserialize_header.return_value = self.mock_header, self.mock_raw_header
5654
# Set up deserialize_header_auth patch
57-
self.mock_deserialize_header_auth_patcher = patch(
58-
"aws_encryption_sdk.streaming_client"
59-
".aws_encryption_sdk.internal.formatting.deserialize.deserialize_header_auth"
60-
)
55+
self.mock_deserialize_header_auth_patcher = patch("aws_encryption_sdk.streaming_client.deserialize_header_auth")
6156
self.mock_deserialize_header_auth = self.mock_deserialize_header_auth_patcher.start()
6257
self.mock_deserialize_header_auth.return_value = sentinel.header_auth
6358
# Set up validate_header patch
64-
self.mock_validate_header_patcher = patch(
65-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.deserialize.validate_header"
66-
)
59+
self.mock_validate_header_patcher = patch("aws_encryption_sdk.streaming_client.validate_header")
6760
self.mock_validate_header = self.mock_validate_header_patcher.start()
6861
# Set up deserialize_non_framed_values patch
6962
self.mock_deserialize_non_framed_values_patcher = patch(
70-
"aws_encryption_sdk.streaming_client"
71-
".aws_encryption_sdk.internal.formatting.deserialize.deserialize_non_framed_values"
63+
"aws_encryption_sdk.streaming_client.deserialize_non_framed_values"
7264
)
7365
self.mock_deserialize_non_framed_values = self.mock_deserialize_non_framed_values_patcher.start()
7466
self.mock_deserialize_non_framed_values.return_value = (sentinel.iv, len(VALUES["data_128"]))
7567
# Set up deserialize_tag_value patch
76-
self.mock_deserialize_tag_patcher = patch(
77-
"aws_encryption_sdk.streaming_client" ".aws_encryption_sdk.internal.formatting.deserialize.deserialize_tag"
78-
)
68+
self.mock_deserialize_tag_patcher = patch("aws_encryption_sdk.streaming_client.deserialize_tag")
7969
self.mock_deserialize_tag = self.mock_deserialize_tag_patcher.start()
8070
self.mock_deserialize_tag.return_value = sentinel.tag
8171
# Set up get_aad_content_string patch
@@ -85,32 +75,19 @@ def setUp(self):
8575
self.mock_get_aad_content_string = self.mock_get_aad_content_string_patcher.start()
8676
self.mock_get_aad_content_string.return_value = sentinel.aad_content_string
8777
# Set up assemble_content_aad patch
88-
self.mock_assemble_content_aad_patcher = patch(
89-
"aws_encryption_sdk.streaming_client"
90-
".aws_encryption_sdk.internal.formatting.encryption_context.assemble_content_aad"
91-
)
78+
self.mock_assemble_content_aad_patcher = patch("aws_encryption_sdk.streaming_client.assemble_content_aad")
9279
self.mock_assemble_content_aad = self.mock_assemble_content_aad_patcher.start()
9380
self.mock_assemble_content_aad.return_value = sentinel.associated_data
9481
# Set up Decryptor patch
9582
self.mock_decryptor_patcher = patch("aws_encryption_sdk.streaming_client.Decryptor")
9683
self.mock_decryptor = self.mock_decryptor_patcher.start()
9784
self.mock_decryptor_instance = MagicMock()
9885
self.mock_decryptor.return_value = self.mock_decryptor_instance
99-
# Set up update_verifier_with_tag patch
100-
self.mock_update_verifier_with_tag_patcher = patch(
101-
"aws_encryption_sdk.streaming_client"
102-
".aws_encryption_sdk.internal.formatting.deserialize.update_verifier_with_tag"
103-
)
104-
self.mock_update_verifier_with_tag = self.mock_update_verifier_with_tag_patcher.start()
10586
# Set up deserialize_footer patch
106-
self.mock_deserialize_footer_patcher = patch(
107-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.deserialize.deserialize_footer"
108-
)
87+
self.mock_deserialize_footer_patcher = patch("aws_encryption_sdk.streaming_client.deserialize_footer")
10988
self.mock_deserialize_footer = self.mock_deserialize_footer_patcher.start()
11089
# Set up deserialize_frame patch
111-
self.mock_deserialize_frame_patcher = patch(
112-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.deserialize.deserialize_frame"
113-
)
90+
self.mock_deserialize_frame_patcher = patch("aws_encryption_sdk.streaming_client.deserialize_frame")
11491
self.mock_deserialize_frame = self.mock_deserialize_frame_patcher.start()
11592
# Set up decrypt patch
11693
self.mock_decrypt_patcher = patch("aws_encryption_sdk.streaming_client.decrypt")
@@ -125,7 +102,6 @@ def tearDown(self):
125102
self.mock_get_aad_content_string_patcher.stop()
126103
self.mock_assemble_content_aad_patcher.stop()
127104
self.mock_decryptor_patcher.stop()
128-
self.mock_update_verifier_with_tag_patcher.stop()
129105
self.mock_deserialize_footer_patcher.stop()
130106
self.mock_deserialize_frame_patcher.stop()
131107
self.mock_decrypt_patcher.stop()

test/unit/test_streaming_client_stream_encryptor.py

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,10 @@ def setUp(self):
107107
self.mock_data_encryption_key = VALUES["data_key_obj"]
108108
self.mock_prepare_data_keys.return_value = (self.mock_data_encryption_key, self.mock_encrypted_data_keys)
109109
# Set up serialize_header patch
110-
self.mock_serialize_header_patcher = patch(
111-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.serialize.serialize_header"
112-
)
110+
self.mock_serialize_header_patcher = patch("aws_encryption_sdk.streaming_client.serialize_header")
113111
self.mock_serialize_header = self.mock_serialize_header_patcher.start()
114112
# Set up serialize_header_auth patch
115-
self.mock_serialize_header_auth_patcher = patch(
116-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.serialize.serialize_header_auth"
117-
)
113+
self.mock_serialize_header_auth_patcher = patch("aws_encryption_sdk.streaming_client.serialize_header_auth")
118114
self.mock_serialize_header_auth = self.mock_serialize_header_auth_patcher.start()
119115
# Set up get_aad_content_string patch
120116
self.mock_get_aad_content_string_patcher = patch(
@@ -123,10 +119,7 @@ def setUp(self):
123119
self.mock_get_aad_content_string = self.mock_get_aad_content_string_patcher.start()
124120
self.mock_get_aad_content_string.return_value = sentinel.aad_content_string
125121
# Set up assemble_content_aad patch
126-
self.mock_assemble_content_aad_patcher = patch(
127-
"aws_encryption_sdk.streaming_client"
128-
".aws_encryption_sdk.internal.formatting.encryption_context.assemble_content_aad"
129-
)
122+
self.mock_assemble_content_aad_patcher = patch("aws_encryption_sdk.streaming_client.assemble_content_aad")
130123
self.mock_assemble_content_aad = self.mock_assemble_content_aad_patcher.start()
131124
self.mock_assemble_content_aad.return_value = sentinel.associated_data
132125
# Set up encryptor patch
@@ -137,25 +130,19 @@ def setUp(self):
137130
self.mock_encryptor.return_value = self.mock_encryptor_instance
138131
# Set up serialize_non_framed_open patch
139132
self.mock_serialize_non_framed_open_patcher = patch(
140-
"aws_encryption_sdk.streaming_client"
141-
".aws_encryption_sdk.internal.formatting.serialize.serialize_non_framed_open"
133+
"aws_encryption_sdk.streaming_client.serialize_non_framed_open"
142134
)
143135
self.mock_serialize_non_framed_open = self.mock_serialize_non_framed_open_patcher.start()
144136
# Set up serialize_non_framed_close patch
145137
self.mock_serialize_non_framed_close_patcher = patch(
146-
"aws_encryption_sdk.streaming_client"
147-
".aws_encryption_sdk.internal.formatting.serialize.serialize_non_framed_close"
138+
"aws_encryption_sdk.streaming_client.serialize_non_framed_close"
148139
)
149140
self.mock_serialize_non_framed_close = self.mock_serialize_non_framed_close_patcher.start()
150141
# Set up serialize_footer patch
151-
self.mock_serialize_footer_patcher = patch(
152-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.serialize.serialize_footer"
153-
)
142+
self.mock_serialize_footer_patcher = patch("aws_encryption_sdk.streaming_client.serialize_footer")
154143
self.mock_serialize_footer = self.mock_serialize_footer_patcher.start()
155144
# Set up serialize_frame patch
156-
self.mock_serialize_frame_patcher = patch(
157-
"aws_encryption_sdk.streaming_client.aws_encryption_sdk.internal.formatting.serialize.serialize_frame"
158-
)
145+
self.mock_serialize_frame_patcher = patch("aws_encryption_sdk.streaming_client.serialize_frame")
159146
self.mock_serialize_frame = self.mock_serialize_frame_patcher.start()
160147

161148
def tearDown(self):

0 commit comments

Comments
 (0)