atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: crates/matrix-sdk-qrcode/src/lib.rs

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
// Copyright 2021 The Matrix.org Foundation C.I.C.
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
// Licensed under the Apache License, Version 2.0 (the "License");
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
// you may not use this file except in compliance with the License.
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
// You may obtain a copy of the License at
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
//     http://www.apache.org/licenses/LICENSE-2.0
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
// Unless required by applicable law or agreed to in writing, software
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
// distributed under the License is distributed on an "AS IS" BASIS,
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
// See the License for the specific language governing permissions and
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
// limitations under the License.
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
#![doc = include_str!("../README.md")]
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
#![cfg_attr(docsrs, feature(doc_cfg))]
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
#![warn(missing_debug_implementations, missing_docs)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
mod error;
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
mod types;
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
mod utils;
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
pub use error::{DecodingError, EncodingError};
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
pub use qrcode;
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
pub use types::{
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
    QrVerificationData, SelfVerificationData, SelfVerificationNoMasterKey, VerificationData,
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
};
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
#[cfg(test)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
mod tests {
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
    use crate::{DecodingError, QrVerificationData};
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
    #[test]
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
    fn decode_invalid_header() {
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
        let data = b"NonMatrixCode";
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
        let result = QrVerificationData::from_bytes(data);
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
        assert!(matches!(result, Err(DecodingError::Header)))
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
    #[test]
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
    fn decode_invalid_mode() {
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
        let data = b"MATRIX\x02\x03";
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
        let result = QrVerificationData::from_bytes(data);
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
        assert!(matches!(result, Err(DecodingError::Mode(3))))
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
    #[test]
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
    fn decode_invalid_version() {
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
        let data = b"MATRIX\x01\x03";
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
        let result = QrVerificationData::from_bytes(data);
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
        assert!(matches!(result, Err(DecodingError::Version(1))))
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
    #[test]
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
    fn decode_missing_data() {
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
        let data = b"MATRIX\x02\x02";
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
        let result = QrVerificationData::from_bytes(data);
7ff8adafe9e4atagen2026-10-22 12:30 UTC58
        assert!(matches!(result, Err(DecodingError::Read(_))))
7ff8adafe9e4atagen2026-10-22 12:30 UTC59
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC60
7ff8adafe9e4atagen2026-10-22 12:30 UTC61
    #[test]
7ff8adafe9e4atagen2026-10-22 12:30 UTC62
    fn decode_short_secret() {
7ff8adafe9e4atagen2026-10-22 12:30 UTC63
        let data = b"MATRIX\
7ff8adafe9e4atagen2026-10-22 12:30 UTC64
                   \x02\x02\x00\x07\
7ff8adafe9e4atagen2026-10-22 12:30 UTC65
                   FLOW_ID\
7ff8adafe9e4atagen2026-10-22 12:30 UTC66
                   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
7ff8adafe9e4atagen2026-10-22 12:30 UTC67
                   BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
7ff8adafe9e4atagen2026-10-22 12:30 UTC68
                   SECRET";
7ff8adafe9e4atagen2026-10-22 12:30 UTC69
7ff8adafe9e4atagen2026-10-22 12:30 UTC70
        let result = QrVerificationData::from_bytes(data);
7ff8adafe9e4atagen2026-10-22 12:30 UTC71
        assert!(matches!(result, Err(DecodingError::SharedSecret(_))))
7ff8adafe9e4atagen2026-10-22 12:30 UTC72
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC73
7ff8adafe9e4atagen2026-10-22 12:30 UTC74
    #[test]
7ff8adafe9e4atagen2026-10-22 12:30 UTC75
    fn decode_invalid_keys() {
7ff8adafe9e4atagen2026-10-22 12:30 UTC76
        let data = b"MATRIX\
7ff8adafe9e4atagen2026-10-22 12:30 UTC77
                   \x02\x00\x00\x0f\
7ff8adafe9e4atagen2026-10-22 12:30 UTC78
                   !test:localhost\
7ff8adafe9e4atagen2026-10-22 12:30 UTC79
                   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
7ff8adafe9e4atagen2026-10-22 12:30 UTC80
                   BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
7ff8adafe9e4atagen2026-10-22 12:30 UTC81
                   SECRETISLONGENOUGH";
7ff8adafe9e4atagen2026-10-22 12:30 UTC82
        let result = QrVerificationData::from_bytes(data);
7ff8adafe9e4atagen2026-10-22 12:30 UTC83
        assert!(matches!(result, Err(DecodingError::Keys(_))))
7ff8adafe9e4atagen2026-10-22 12:30 UTC84
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC85
}