1 use super::*;
2 use crate::agent::TransactionId;
3 use crate::attributes::ATTR_SOFTWARE;
4 use crate::fingerprint::FINGERPRINT;
5 use crate::textattrs::TextAttribute;
6
7 #[test]
test_message_integrity_add_to_simple() -> Result<()>8 fn test_message_integrity_add_to_simple() -> Result<()> {
9 let i = MessageIntegrity::new_long_term_integrity(
10 "user".to_owned(),
11 "realm".to_owned(),
12 "pass".to_owned(),
13 );
14 let expected = vec![
15 0x84, 0x93, 0xfb, 0xc5, 0x3b, 0xa5, 0x82, 0xfb, 0x4c, 0x04, 0x4c, 0x45, 0x6b, 0xdc, 0x40,
16 0xeb,
17 ];
18 assert_eq!(i.0, expected, "{}", Error::ErrIntegrityMismatch);
19
20 //"Check"
21 {
22 let mut m = Message::new();
23 m.write_header();
24 i.add_to(&mut m)?;
25 let a = TextAttribute {
26 attr: ATTR_SOFTWARE,
27 text: "software".to_owned(),
28 };
29 a.add_to(&mut m)?;
30 m.write_header();
31
32 let mut d_m = Message::new();
33 d_m.raw = m.raw.clone();
34 d_m.decode()?;
35 i.check(&mut d_m)?;
36
37 d_m.raw[24] += 12; // HMAC now invalid
38 d_m.decode()?;
39 let result = i.check(&mut d_m);
40 assert!(result.is_err(), "should be invalid");
41 }
42
43 Ok(())
44 }
45
46 #[test]
test_message_integrity_with_fingerprint() -> Result<()>47 fn test_message_integrity_with_fingerprint() -> Result<()> {
48 let mut m = Message::new();
49 m.transaction_id = TransactionId([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0]);
50 m.write_header();
51 let a = TextAttribute {
52 attr: ATTR_SOFTWARE,
53 text: "software".to_owned(),
54 };
55 a.add_to(&mut m)?;
56
57 let i = MessageIntegrity::new_short_term_integrity("pwd".to_owned());
58 assert_eq!(i.to_string(), "KEY: 0x[70, 77, 64]", "bad string {i}");
59 let result = i.check(&mut m);
60 assert!(result.is_err(), "should error");
61
62 i.add_to(&mut m)?;
63 FINGERPRINT.add_to(&mut m)?;
64 i.check(&mut m)?;
65 m.raw[24] = 33;
66 m.decode()?;
67 let result = i.check(&mut m);
68 assert!(result.is_err(), "mismatch expected");
69
70 Ok(())
71 }
72
73 #[test]
test_message_integrity() -> Result<()>74 fn test_message_integrity() -> Result<()> {
75 let mut m = Message::new();
76 let i = MessageIntegrity::new_short_term_integrity("password".to_owned());
77 m.write_header();
78 i.add_to(&mut m)?;
79 m.get(ATTR_MESSAGE_INTEGRITY)?;
80 Ok(())
81 }
82
83 #[test]
test_message_integrity_before_fingerprint() -> Result<()>84 fn test_message_integrity_before_fingerprint() -> Result<()> {
85 let mut m = Message::new();
86 m.write_header();
87 FINGERPRINT.add_to(&mut m)?;
88 let i = MessageIntegrity::new_short_term_integrity("password".to_owned());
89 let result = i.add_to(&mut m);
90 assert!(result.is_err(), "should error");
91
92 Ok(())
93 }
94