1#![doc = include_str!("../README.md")]
16#![cfg_attr(docsrs, feature(doc_auto_cfg))]
17#![warn(missing_debug_implementations, missing_docs)]
18
19mod error;
20mod types;
21mod utils;
22
23pub use error::{DecodingError, EncodingError};
24pub use qrcode;
25pub use types::{
26 QrVerificationData, SelfVerificationData, SelfVerificationNoMasterKey, VerificationData,
27};
28
29#[cfg(test)]
30mod tests {
31 use crate::{DecodingError, QrVerificationData};
32
33 #[test]
34 fn decode_invalid_header() {
35 let data = b"NonMatrixCode";
36 let result = QrVerificationData::from_bytes(data);
37 assert!(matches!(result, Err(DecodingError::Header)))
38 }
39
40 #[test]
41 fn decode_invalid_mode() {
42 let data = b"MATRIX\x02\x03";
43 let result = QrVerificationData::from_bytes(data);
44 assert!(matches!(result, Err(DecodingError::Mode(3))))
45 }
46
47 #[test]
48 fn decode_invalid_version() {
49 let data = b"MATRIX\x01\x03";
50 let result = QrVerificationData::from_bytes(data);
51 assert!(matches!(result, Err(DecodingError::Version(1))))
52 }
53
54 #[test]
55 fn decode_missing_data() {
56 let data = b"MATRIX\x02\x02";
57 let result = QrVerificationData::from_bytes(data);
58 assert!(matches!(result, Err(DecodingError::Read(_))))
59 }
60
61 #[test]
62 fn decode_short_secret() {
63 let data = b"MATRIX\
64 \x02\x02\x00\x07\
65 FLOW_ID\
66 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
67 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
68 SECRET";
69
70 let result = QrVerificationData::from_bytes(data);
71 assert!(matches!(result, Err(DecodingError::SharedSecret(_))))
72 }
73
74 #[test]
75 fn decode_invalid_keys() {
76 let data = b"MATRIX\
77 \x02\x00\x00\x0f\
78 !test:localhost\
79 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
80 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
81 SECRETISLONGENOUGH";
82 let result = QrVerificationData::from_bytes(data);
83 assert!(matches!(result, Err(DecodingError::Keys(_))))
84 }
85}