diff --git a/secret_handshake/util.py b/secret_handshake/util.py index c5e0053..d13f99f 100644 --- a/secret_handshake/util.py +++ b/secret_handshake/util.py @@ -20,36 +20,11 @@ import struct -from io import BytesIO NONCE_SIZE = 24 MAX_NONCE = 8 * NONCE_SIZE -class AsyncBuffer(BytesIO): - """Just a BytesIO with an async read method.""" - - async def read(self, n=None): - v = super(AsyncBuffer, self).read(n) - return v - - readexactly = read - - def append(self, data): - """Append data to the buffer without changing the current position.""" - pos = self.tell() - self.write(data) - self.seek(pos) - - -async def async_comprehend(generator): - """Emulate ``[elem async for elem in generator]``.""" - results = [] - async for msg in generator: - results.append(msg) - return results - - def inc_nonce(nonce): num = bytes_to_long(nonce) + 1 if num > 2**MAX_NONCE: diff --git a/tests/helpers.py b/tests/helpers.py new file mode 100644 index 0000000..5f0420b --- /dev/null +++ b/tests/helpers.py @@ -0,0 +1,47 @@ +# Copyright (c) 2017 PySecretHandshake contributors (see AUTHORS for more details) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +"""Helper utilities for testing""" + +from io import BytesIO + + +class AsyncBuffer(BytesIO): + """Just a BytesIO with an async read method.""" + + async def read(self, n=None): + v = super(AsyncBuffer, self).read(n) + return v + + readexactly = read + + def append(self, data): + """Append data to the buffer without changing the current position.""" + pos = self.tell() + self.write(data) + self.seek(pos) + + +async def async_comprehend(generator): + """Emulate ``[elem async for elem in generator]``.""" + results = [] + async for msg in generator: + results.append(msg) + return results diff --git a/tests/test_boxstream.py b/tests/test_boxstream.py index 395d222..6605995 100644 --- a/tests/test_boxstream.py +++ b/tests/test_boxstream.py @@ -22,8 +22,8 @@ import pytest from secret_handshake.boxstream import HEADER_LENGTH, BoxStream, UnboxStream -from secret_handshake.util import AsyncBuffer, async_comprehend +from .helpers import AsyncBuffer, async_comprehend from .test_crypto import CLIENT_ENCRYPT_KEY, CLIENT_ENCRYPT_NONCE MESSAGE_1 = ( diff --git a/tests/test_network.py b/tests/test_network.py index bece634..b5bf94b 100644 --- a/tests/test_network.py +++ b/tests/test_network.py @@ -24,7 +24,7 @@ from asyncio import Event, wait_for import pytest from nacl.signing import SigningKey -from secret_handshake.util import AsyncBuffer +from .helpers import AsyncBuffer class DummyCrypto(object):