27 lines
1.2 KiB
Rust
27 lines
1.2 KiB
Rust
pub mod cipher;
|
|
use cipher::{qmc1_transform, V1_KEY_SIZE};
|
|
|
|
const V1_STATIC_KEY: [u8; V1_KEY_SIZE] = [
|
|
0xc3, 0x4a, 0xd6, 0xca, 0x90, 0x67, 0xf7, 0x52, 0xd8, 0xa1, 0x66, 0x62, 0x9f, 0x5b, 0x09, 0x00,
|
|
0xc3, 0x5e, 0x95, 0x23, 0x9f, 0x13, 0x11, 0x7e, 0xd8, 0x92, 0x3f, 0xbc, 0x90, 0xbb, 0x74, 0x0e,
|
|
0xc3, 0x47, 0x74, 0x3d, 0x90, 0xaa, 0x3f, 0x51, 0xd8, 0xf4, 0x11, 0x84, 0x9f, 0xde, 0x95, 0x1d,
|
|
0xc3, 0xc6, 0x09, 0xd5, 0x9f, 0xfa, 0x66, 0xf9, 0xd8, 0xf0, 0xf7, 0xa0, 0x90, 0xa1, 0xd6, 0xf3,
|
|
0xc3, 0xf3, 0xd6, 0xa1, 0x90, 0xa0, 0xf7, 0xf0, 0xd8, 0xf9, 0x66, 0xfa, 0x9f, 0xd5, 0x09, 0xc6,
|
|
0xc3, 0x1d, 0x95, 0xde, 0x9f, 0x84, 0x11, 0xf4, 0xd8, 0x51, 0x3f, 0xaa, 0x90, 0x3d, 0x74, 0x47,
|
|
0xc3, 0x0e, 0x74, 0xbb, 0x90, 0xbc, 0x3f, 0x92, 0xd8, 0x7e, 0x11, 0x13, 0x9f, 0x23, 0x95, 0x5e,
|
|
0xc3, 0x00, 0x09, 0x5b, 0x9f, 0x62, 0x66, 0xa1, 0xd8, 0x52, 0xf7, 0x67, 0x90, 0xca, 0xd6, 0x4a,
|
|
];
|
|
|
|
pub fn decrypt(data: &mut [u8], offset: usize) {
|
|
for (i, datum) in data.iter_mut().enumerate() {
|
|
*datum = qmc1_transform(&V1_STATIC_KEY, *datum, offset + i);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_decryption() {
|
|
let mut data = *b"\xab\x2f\xba\xa6\xff\x47\x80\x3d\xaa\xcd\x02";
|
|
decrypt(&mut data, 0);
|
|
assert_eq!(data, *b"hello world");
|
|
}
|