1 use super::codec::Reader;
2 use super::enums::{AlertDescription, AlertLevel, HandshakeType};
3 use super::message::{Message, OpaqueMessage, PlainMessage};
4 
5 use std::convert::TryFrom;
6 use std::fs;
7 use std::io::Read;
8 use std::path::{Path, PathBuf};
9 
10 #[test]
11 fn test_read_fuzz_corpus() {
12     fn corpus_dir() -> PathBuf {
13         let from_subcrate = Path::new("../fuzz/corpus/message");
14         let from_root = Path::new("fuzz/corpus/message");
15 
16         if from_root.is_dir() {
17             from_root.to_path_buf()
18         } else {
19             from_subcrate.to_path_buf()
20         }
21     }
encode(&self, bytes: &mut Vec<u8>)22 
23     for file in fs::read_dir(corpus_dir()).unwrap() {
24         let mut f = fs::File::open(file.unwrap().path()).unwrap();
25         let mut bytes = Vec::new();
26         f.read_to_end(&mut bytes).unwrap();
27 
28         let mut rd = Reader::init(&bytes);
29         let msg = OpaqueMessage::read(&mut rd)
30             .unwrap()
31             .into_plain_message();
32         println!("{:?}", msg);
33 
34         let msg = match Message::try_from(msg) {
35             Ok(msg) => msg,
36             Err(_) => continue,
37         };
38 
39         let enc = PlainMessage::from(msg)
40             .into_unencrypted_opaque()
41             .encode();
42         assert_eq!(bytes.to_vec(), enc);
43         assert_eq!(bytes[..rd.used()].to_vec(), enc);
44     }
45 }
46 
47 #[test]
48 fn can_read_safari_client_hello() {
49     let _ = env_logger::Builder::new()
content_type(&self) -> ContentType50         .filter(None, log::LevelFilter::Trace)
51         .try_init();
52 
53     let bytes = b"\
54         \x16\x03\x01\x00\xeb\x01\x00\x00\xe7\x03\x03\xb6\x1f\xe4\x3a\x55\
55         \x90\x3e\xc0\x28\x9c\x12\xe0\x5c\x84\xea\x90\x1b\xfb\x11\xfc\xbd\
56         \x25\x55\xda\x9f\x51\x93\x1b\x8d\x92\x66\xfd\x00\x00\x2e\xc0\x2c\
57         \xc0\x2b\xc0\x24\xc0\x23\xc0\x0a\xc0\x09\xcc\xa9\xc0\x30\xc0\x2f\
58         \xc0\x28\xc0\x27\xc0\x14\xc0\x13\xcc\xa8\x00\x9d\x00\x9c\x00\x3d\
59         \x00\x3c\x00\x35\x00\x2f\xc0\x08\xc0\x12\x00\x0a\x01\x00\x00\x90\
60         \xff\x01\x00\x01\x00\x00\x00\x00\x0e\x00\x0c\x00\x00\x09\x31\x32\
61         \x37\x2e\x30\x2e\x30\x2e\x31\x00\x17\x00\x00\x00\x0d\x00\x18\x00\
62         \x16\x04\x03\x08\x04\x04\x01\x05\x03\x02\x03\x08\x05\x08\x05\x05\
63         \x01\x08\x06\x06\x01\x02\x01\x00\x05\x00\x05\x01\x00\x00\x00\x00\
64         \x33\x74\x00\x00\x00\x12\x00\x00\x00\x10\x00\x30\x00\x2e\x02\x68\
65         \x32\x05\x68\x32\x2d\x31\x36\x05\x68\x32\x2d\x31\x35\x05\x68\x32\
66         \x2d\x31\x34\x08\x73\x70\x64\x79\x2f\x33\x2e\x31\x06\x73\x70\x64\
67         \x79\x2f\x33\x08\x68\x74\x74\x70\x2f\x31\x2e\x31\x00\x0b\x00\x02\
68         \x01\x00\x00\x0a\x00\x0a\x00\x08\x00\x1d\x00\x17\x00\x18\x00\x19";
69     let mut rd = Reader::init(bytes);
70     let m = OpaqueMessage::read(&mut rd).unwrap();
71     println!("m = {:?}", m);
72     assert!(Message::try_from(m.into_plain_message()).is_err());
73 }
74 
read(r: &mut Reader) -> Result<Self, MessageError>75 #[test]
76 fn alert_is_not_handshake() {
77     let m = Message::build_alert(AlertLevel::Fatal, AlertDescription::DecodeError);
78     assert_eq!(false, m.is_handshake_type(HandshakeType::ClientHello));
79 }
80 
81 #[test]
82 fn alert_is_not_opaque() {
83     let m = Message::build_alert(AlertLevel::Fatal, AlertDescription::DecodeError);
84     assert!(Message::try_from(m).is_ok());
85 }
86 
87 #[test]
88 fn construct_all_types() {
89     let samples = [
90         &b"\x14\x03\x04\x00\x01\x01"[..],
91         &b"\x15\x03\x04\x00\x02\x01\x16"[..],
92         &b"\x16\x03\x04\x00\x05\x18\x00\x00\x01\x00"[..],
93         &b"\x17\x03\x04\x00\x04\x11\x22\x33\x44"[..],
94         &b"\x18\x03\x04\x00\x04\x11\x22\x33\x44"[..],
95     ];
96     for &bytes in samples.iter() {
97         let m = OpaqueMessage::read(&mut Reader::init(bytes)).unwrap();
98         println!("m = {:?}", m);
99         let m = Message::try_from(m.into_plain_message());
100         println!("m' = {:?}", m);
101     }
102 }
103