Skip to main content

bare64/
lib.rs

1mod decode;
2mod encode;
3mod error;
4pub mod pem;
5mod tables;
6
7pub use decode::{decode, decode_url_safe};
8pub use encode::{encode, encode_url_safe};
9pub use error::DecodeError;
10pub use pem::PemError;
11
12#[cfg(test)]
13mod tests {
14    use super::*;
15
16    #[test]
17    fn round_trip_empty() {
18        let encoded = encode(b"");
19        assert_eq!(decode(&encoded).unwrap(), b"");
20    }
21
22    #[test]
23    fn round_trip_hello_world() {
24        let input = b"Hello, world!";
25        let encoded = encode(input);
26        assert_eq!(decode(&encoded).unwrap(), input);
27    }
28
29    #[test]
30    fn round_trip_all_byte_values() {
31        let input: Vec<u8> = (0..=255).collect();
32        let encoded = encode(&input);
33        assert_eq!(decode(&encoded).unwrap(), input);
34    }
35
36    #[test]
37    fn round_trip_lengths_0_to_259() {
38        for len in 0..=259 {
39            let input: Vec<u8> = (0..len).map(|i| (i % 256) as u8).collect();
40            let encoded = encode(&input);
41            let decoded = decode(&encoded).unwrap();
42            assert_eq!(decoded, input, "failed round-trip for length {len}");
43        }
44    }
45
46    #[test]
47    fn encode_accepts_string() {
48        let s = String::from("hello");
49        let encoded = encode(&s);
50        assert_eq!(encoded, encode(s.as_bytes()));
51    }
52
53    #[test]
54    fn url_safe_round_trip_all_byte_values() {
55        let input: Vec<u8> = (0..=255).collect();
56        let encoded = encode_url_safe(&input);
57        assert_eq!(decode_url_safe(&encoded).unwrap(), input);
58    }
59
60    #[test]
61    fn pem_round_trip() {
62        let der: Vec<u8> = (0..=255).collect();
63        let pem_str = pem::encode(&der, "CERTIFICATE");
64        let decoded = pem::decode(&pem_str, "CERTIFICATE").unwrap();
65        assert_eq!(decoded, der);
66    }
67}