Skip to main content

binary_codec/bitstream/
mod.rs

1pub mod reader;
2pub mod writer;
3
4/// Crypto Stream
5pub trait CryptoStream {
6    /// Applies the keystream byte to the given byte and returns the result.
7    fn apply_keystream_byte(&mut self, b: u8) -> u8;
8    /// Applies the keystream to the given slice and returns the result.
9    fn apply_keystream(&mut self, slice: &[u8]) -> &[u8];
10    /// Get the underlying plaintext buffer
11    fn get_plaintext(&self) -> &[u8];
12}
13
14#[cfg(test)]
15mod tests {
16    use crate::bitstream::{reader::BitStreamReader, writer::BitStreamWriter};
17
18    #[test]
19    fn can_serialize_and_deserialize_using_bitstream() {
20        let mut buffer = Vec::new();
21        let mut writer = BitStreamWriter::new(&mut buffer);
22
23        writer.write_bit(true);
24        writer.write_bit(false);
25        writer.write_bit(true);
26        writer.write_byte(12);
27        writer.write_bytes(&[34, 56]);
28
29        assert_eq!(writer.byte_pos(), 4);
30
31        let mut reader = BitStreamReader::new(&buffer);
32        assert_eq!(reader.read_bit().unwrap(), true);
33        assert_eq!(reader.read_bit().unwrap(), false);
34        assert_eq!(reader.read_bit().unwrap(), true);
35        assert_eq!(reader.read_byte().unwrap(), 12);
36        assert_eq!(reader.read_byte().unwrap(), 34);
37        assert_eq!(reader.read_byte().unwrap(), 56);
38
39        assert_eq!(buffer, [0b00000101, 12, 34, 56]);
40    }
41}