xref: /webrtc/stun/src/integrity/integrity_test.rs (revision 5d8fe953)
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