mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-13 03:09:04 +01:00
50 lines
1.5 KiB
Java
50 lines
1.5 KiB
Java
package org.briarproject.transport;
|
|
|
|
import org.briarproject.api.crypto.StreamEncrypter;
|
|
import org.briarproject.util.ByteUtils;
|
|
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
|
|
import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
|
|
import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
|
|
import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_LENGTH;
|
|
import static org.briarproject.util.ByteUtils.INT_16_BYTES;
|
|
|
|
class TestStreamEncrypter implements StreamEncrypter {
|
|
|
|
private final OutputStream out;
|
|
private final byte[] tag;
|
|
|
|
private boolean writeTagAndHeader = true;
|
|
|
|
TestStreamEncrypter(OutputStream out, byte[] tag) {
|
|
this.out = out;
|
|
this.tag = tag;
|
|
}
|
|
|
|
public void writeFrame(byte[] payload, int payloadLength,
|
|
int paddingLength, boolean finalFrame) throws IOException {
|
|
if (writeTagAndHeader) writeTagAndHeader();
|
|
byte[] frameHeader = new byte[FRAME_HEADER_LENGTH];
|
|
ByteUtils.writeUint16(payloadLength, frameHeader, 0);
|
|
ByteUtils.writeUint16(paddingLength, frameHeader, INT_16_BYTES);
|
|
if (finalFrame) frameHeader[0] |= 0x80;
|
|
out.write(frameHeader);
|
|
out.write(payload, 0, payloadLength);
|
|
out.write(new byte[paddingLength]);
|
|
out.write(new byte[MAC_LENGTH]);
|
|
}
|
|
|
|
public void flush() throws IOException {
|
|
if (writeTagAndHeader) writeTagAndHeader();
|
|
out.flush();
|
|
}
|
|
|
|
private void writeTagAndHeader() throws IOException {
|
|
out.write(tag);
|
|
out.write(new byte[STREAM_HEADER_LENGTH]);
|
|
writeTagAndHeader = false;
|
|
}
|
|
}
|