mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-21 15:19:53 +01:00
Merge branch '912-validate-stream-encrypter-args' into 'master'
Validate arguments to StreamEncrypter#writeFrame() Closes #912 See merge request !497
This commit is contained in:
@@ -62,6 +62,8 @@ class StreamEncrypterImpl implements StreamEncrypter {
|
|||||||
@Override
|
@Override
|
||||||
public void writeFrame(byte[] payload, int payloadLength,
|
public void writeFrame(byte[] payload, int payloadLength,
|
||||||
int paddingLength, boolean finalFrame) throws IOException {
|
int paddingLength, boolean finalFrame) throws IOException {
|
||||||
|
if (payloadLength < 0 || paddingLength < 0)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
if (payloadLength + paddingLength > MAX_PAYLOAD_LENGTH)
|
if (payloadLength + paddingLength > MAX_PAYLOAD_LENGTH)
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
// Don't allow the frame counter to wrap
|
// Don't allow the frame counter to wrap
|
||||||
|
|||||||
@@ -9,9 +9,13 @@ import java.io.ByteArrayOutputStream;
|
|||||||
|
|
||||||
import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
|
import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
|
||||||
import static org.briarproject.bramble.api.transport.TransportConstants.MAC_LENGTH;
|
import static org.briarproject.bramble.api.transport.TransportConstants.MAC_LENGTH;
|
||||||
|
import static org.briarproject.bramble.api.transport.TransportConstants.MAX_FRAME_LENGTH;
|
||||||
|
import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
|
||||||
import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
|
import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
|
||||||
|
import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_LENGTH;
|
||||||
import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
|
import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
public class StreamEncrypterImplTest extends BrambleTestCase {
|
public class StreamEncrypterImplTest extends BrambleTestCase {
|
||||||
|
|
||||||
@@ -30,6 +34,58 @@ public class StreamEncrypterImplTest extends BrambleTestCase {
|
|||||||
payload = TestUtils.getRandomBytes(payloadLength);
|
payload = TestUtils.getRandomBytes(payloadLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void testRejectsNegativePayloadLength() throws Exception {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher,
|
||||||
|
streamNumber, tag, streamHeaderIv, streamHeaderKey, frameKey);
|
||||||
|
|
||||||
|
s.writeFrame(payload, -1, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void testRejectsNegativePaddingLength() throws Exception {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher,
|
||||||
|
streamNumber, tag, streamHeaderIv, streamHeaderKey, frameKey);
|
||||||
|
|
||||||
|
s.writeFrame(payload, 0, -1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void testRejectsMaxPayloadPlusPadding() throws Exception {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher,
|
||||||
|
streamNumber, tag, streamHeaderIv, streamHeaderKey, frameKey);
|
||||||
|
|
||||||
|
byte[] bigPayload = new byte[MAX_PAYLOAD_LENGTH + 1];
|
||||||
|
s.writeFrame(bigPayload, MAX_PAYLOAD_LENGTH, 1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAcceptsMaxPayloadIncludingPadding() throws Exception {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher,
|
||||||
|
streamNumber, tag, streamHeaderIv, streamHeaderKey, frameKey);
|
||||||
|
|
||||||
|
byte[] bigPayload = new byte[MAX_PAYLOAD_LENGTH];
|
||||||
|
s.writeFrame(bigPayload, MAX_PAYLOAD_LENGTH - 1, 1, false);
|
||||||
|
assertEquals(TAG_LENGTH + STREAM_HEADER_LENGTH + MAX_FRAME_LENGTH,
|
||||||
|
out.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAcceptsMaxPayloadWithoutPadding() throws Exception {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher,
|
||||||
|
streamNumber, tag, streamHeaderIv, streamHeaderKey, frameKey);
|
||||||
|
|
||||||
|
byte[] bigPayload = new byte[MAX_PAYLOAD_LENGTH];
|
||||||
|
s.writeFrame(bigPayload, MAX_PAYLOAD_LENGTH, 0, false);
|
||||||
|
assertEquals(TAG_LENGTH + STREAM_HEADER_LENGTH + MAX_FRAME_LENGTH,
|
||||||
|
out.size());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWriteUnpaddedNonFinalFrameWithTag() throws Exception {
|
public void testWriteUnpaddedNonFinalFrameWithTag() throws Exception {
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
|||||||
Reference in New Issue
Block a user