mod method;
pub use method::*;
mod encrypt;
pub use encrypt::*;
mod decrypt;
pub use decrypt::*;
mod file_block;
pub use file_block::*;
mod multi_file_pack;
pub use multi_file_pack::*;
#[cfg(test)]
mod tests {
use base64::{Engine, prelude::BASE64_STANDARD};
use super::*;
#[test]
fn test_encryption_decryption_flat() {
let key: &[u8] = &[0x01; 32];
let data = "Hello world!".as_bytes();
let encrypted = encrypt(data, EncryptionMethod::Aes256Flat, key).unwrap();
let decrypted = decrypt(&encrypted, key).unwrap();
assert_eq!(decrypted.as_slice(), data);
}
#[test]
fn test_encryption_decryption_zip() {
let key: &[u8] = &[0x01; 32];
let data = "Hello world!".as_bytes();
let encrypted = encrypt(data, EncryptionMethod::Aes256Zip, key).unwrap();
let decrypted = decrypt(&encrypted, key).unwrap();
assert_eq!(decrypted.as_slice(), data);
}
fn get_big_data() -> Vec<u8> {
BASE64_STANDARD
.decode(
[
"CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNj",
"aW5nIGVsaXQuIE1vcmJpIG5vbiBtaSBlbGl0LiBQcm9pbiBzdXNjaXBpdCBsZWN0",
"dXMgc2l0IGFtZXQgc2VtIHB1bHZpbmFyIHRpbmNpZHVudC4gRG9uZWMgaW4gbWV0",
"dXMgdXQgbnVuYyBjb25kaW1lbnR1bSBwb3J0dGl0b3Igdml0YWUgZXQgbGFjdXMu",
"IFZlc3RpYnVsdW0gZWdldCBkaWFtIHNlZCBwdXJ1cyB0ZW1wb3IgcG9ydHRpdG9y",
"LiBEb25lYyBzY2VsZXJpc3F1ZSB2aXRhZSBlcm9zIGVnZXQgZ3JhdmlkYS4gQWxp",
"cXVhbSB0ZW1wb3IgbnVsbGEgc2l0IGFtZXQgdHJpc3RpcXVlIHJob25jdXMuIE51",
"bGxhbSBzY2VsZXJpc3F1ZSBudW5jIGF0IG1heGltdXMgbWF0dGlzLiBQaGFzZWxs",
"dXMgYWxpcXVldCwgb2RpbyBpZCB0ZW1wdXMgY3Vyc3VzLCB0b3J0b3IgbGVvIGlt",
"cGVyZGlldCBlc3QsIG5vbiBhY2N1bXNhbiBtYXNzYSBsZWN0dXMgZWdldCBxdWFt",
"LiBTZWQgdXQgYmxhbmRpdCBtYWduYSwgcXVpcyBlZ2VzdGFzIHB1cnVzLiBOdWxs",
"YW0gbW9sZXN0aWUgdnVscHV0YXRlIHB1bHZpbmFyLiBJbnRlZ2VyIHZpdmVycmEg",
"ZXJvcyB2dWxwdXRhdGUgaXBzdW0gcGhhcmV0cmEgZ3JhdmlkYS4gU2VkIHF1aXMg",
"ZXJvcyB1dCBvZGlvIHVsdHJpY2llcyBsYWNpbmlhIGlkIHV0IG51bmMuIFF1aXNx",
"dWUgYXQgc2VtcGVyIHVybmEsIG5lYyB0cmlzdGlxdWUgZXJhdC4gRXRpYW0gc2l0",
"IGFtZXQgY29uc2VjdGV0dXIgbWkuIEN1cmFiaXR1ciB2YXJpdXMgcXVhbSBpbiBl",
"Z2VzdGFzIHBsYWNlcmF0LgoKUHJvaW4gcGxhY2VyYXQsIG1pIGZyaW5naWxsYSB0",
"ZW1wdXMgZGFwaWJ1cywgZWxpdCBtYWduYSBzY2VsZXJpc3F1ZSBmZWxpcywgc2Vk",
"IGFsaXF1ZXQgdG9ydG9yIG5lcXVlIGV0IG9kaW8uIEN1cmFiaXR1ciB2aXRhZSBu",
"dW5jIGZyaW5naWxsYSwgaW1wZXJkaWV0IG51bGxhIGltcGVyZGlldCwgZ3Jhdmlk",
"YSB0ZWxsdXMuIENyYXMgYmliZW5kdW0gbG9ib3J0aXMgdG9ydG9yIGVnZXQgbWF0",
"dGlzLiBNYWVjZW5hcyBlZ2V0IG1heGltdXMgbWFnbmEuIE51bGxhIGZhY2lsaXNp",
"LiBEb25lYyBkdWkgbmliaCwgY29tbW9kbyBldCBsZWN0dXMgYXQsIHJob25jdXMg",
"cGxhY2VyYXQgbGliZXJvLiBQZWxsZW50ZXNxdWUgdmVoaWN1bGEsIGVsaXQgaW4g",
"YXVjdG9yIGZlcm1lbnR1bSwgYXVndWUgbWFnbmEgdWxsYW1jb3JwZXIgZGlhbSwg",
"ZWdldCB2b2x1dHBhdCB0dXJwaXMgbmVxdWUgZXQgbWV0dXMuIFF1aXNxdWUgdmVs",
"IGZpbmlidXMgc2FwaWVuLiBOdWxsYW0gZmluaWJ1cyB2ZWwgc2FwaWVuIHV0IHVs",
"dHJpY2llcy4gU2VkIGNvbnNlY3RldHVyLCBtZXR1cyBhIGltcGVyZGlldCBzZW1w",
"ZXIsIGlwc3VtIGV4IHRyaXN0aXF1ZSB2ZWxpdCwgaWQgdmFyaXVzIG9yY2kgb2Rp",
"byB0ZW1wb3IgZW5pbS4gRG9uZWMgY29uZ3VlIHVsdHJpY2VzIG5lcXVlLCB1dCBj",
"b21tb2RvIGxlbyBkaWN0dW0gZXUuIFF1aXNxdWUgZWdldCBsZW8gYmxhbmRpdCwg",
"c3VzY2lwaXQgZXJhdCBhdCwgZmV1Z2lhdCBleC4gSW50ZWdlciBzb2RhbGVzIHB1",
"cnVzIGF0IGR1aSB2aXZlcnJhIGFsaXF1ZXQuIFN1c3BlbmRpc3NlIHJob25jdXMs",
"IG51bmMgc2VkIGZhdWNpYnVzIGxhb3JlZXQsIGF1Z3VlIGRpYW0gYmliZW5kdW0g",
"dG9ydG9yLCBxdWlzIG1vbGVzdGllIHB1cnVzIG9yY2kgZXQgZXguIFBlbGxlbnRl",
"c3F1ZSBtb2xsaXMgdGVsbHVzIGV4LCBhY2N1bXNhbiBvcm5hcmUgbWkgZWdlc3Rh",
"cyBhdC4gTnVsbGEgZmFjaWxpc2kuCgpJbiBpbiBzdXNjaXBpdCBudWxsYSwgZXUg",
"ZWZmaWNpdHVyIGVuaW0uIFBoYXNlbGx1cyBzYWdpdHRpcyBhdWN0b3IgY29udmFs",
"bGlzLiBWaXZhbXVzIHNlZCBkaWduaXNzaW0gcHVydXMuIFF1aXNxdWUgaWQgaW1w",
"ZXJkaWV0IG1ldHVzLiBTdXNwZW5kaXNzZSBwdWx2aW5hciBsb3JlbSBzZW0sIGV0",
"IGNvbmd1ZSBwdXJ1cyB2b2x1dHBhdCBldC4gTnVsbGEgdXQgbWFzc2EgZXUgbnVu",
"YyBjdXJzdXMgY29uc2VxdWF0IHZlbCB2dWxwdXRhdGUgbG9yZW0uIFZpdmFtdXMg",
"ZGlhbSBtYXNzYSwgY29uc2VxdWF0IG5lYyByaXN1cyBldCwgc2VtcGVyIGZlcm1l",
"bnR1bSBmZWxpcy4gTmFtIHNlZCBkdWkgdmVsIHNhcGllbiBjb21tb2RvIGNvbmd1",
"ZSBub24gYXQgdG9ydG9yLiBOYW0gc29sbGljaXR1ZGluIHNlbSBxdWlzIGVuaW0g",
"ZmFjaWxpc2lzIGZlcm1lbnR1bS4KCkludGVnZXIgYWNjdW1zYW4gbGliZXJvIHVy",
"bmEsIHZpdGFlIGNvbmRpbWVudHVtIGRvbG9yIHRpbmNpZHVudCBldC4gTWF1cmlz",
"IGRhcGlidXMgdmVsIG1ldHVzIGluIGFsaXF1ZXQuIER1aXMgc3VzY2lwaXQgYXJj",
"dSB2ZWwgZXJvcyB2ZWhpY3VsYSBhbGlxdWFtLiBBbGlxdWFtIGVmZmljaXR1ciwg",
"YW50ZSBpbiB2b2x1dHBhdCBzZW1wZXIsIGxpZ3VsYSBudW5jIG1vbGVzdGllIGVs",
"aXQsIGEgc3VzY2lwaXQgZXJhdCBsaWd1bGEgc2l0IGFtZXQgbnVuYy4gRHVpcyBl",
"dSBsZWN0dXMgZXUgbWFzc2Egc2NlbGVyaXNxdWUgdml2ZXJyYS4gQ3VyYWJpdHVy",
"IHZhcml1cywgdXJuYSBldCBkaWN0dW0gZ3JhdmlkYSwgbWV0dXMgZHVpIGZpbmli",
"dXMgc2VtLCB1dCB2YXJpdXMgZXggbWkgaWQgdGVsbHVzLiBGdXNjZSB1bHRyaWNl",
"cyB0ZWxsdXMgcHVydXMsIHNpdCBhbWV0IHB1bHZpbmFyIGFyY3UgZmF1Y2lidXMg",
"bm9uLiBNb3JiaSBtYWxlc3VhZGEgYSBhbnRlIGlkIG1vbGxpcy4gSW50ZXJkdW0g",
"ZXQgbWFsZXN1YWRhIGZhbWVzIGFjIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNp",
"YnVzLgoKTWFlY2VuYXMgZXUgbmlzaSBlcmF0LiBJbiBuZXF1ZSBvZGlvLCBhbGlx",
"dWV0IHF1aXMgcGhhcmV0cmEgdXQsIGxhY2luaWEgbm9uIG1hdXJpcy4gVml2YW11",
"cyBzaXQgYW1ldCBlcm9zIHV0IG5pc2kgdGVtcG9yIGNvbnNlcXVhdC4gU3VzcGVu",
"ZGlzc2UgcnV0cnVtIHNlZCBleCBzaXQgYW1ldCBldWlzbW9kLiBEb25lYyBldWlz",
"bW9kLCBhbnRlIGF0IHJ1dHJ1bSBjb25zZXF1YXQsIGlwc3VtIGF1Z3VlIG1vbGVz",
"dGllIG9yY2ksIGluIHBvc3VlcmUgb3JjaSBuZXF1ZSBldSBzZW0uIEV0aWFtIGFs",
"aXF1ZXQsIGlwc3VtIGNvbmd1ZSBkaWN0dW0gcGxhY2VyYXQsIG1hdXJpcyBpcHN1",
"bSBjdXJzdXMganVzdG8sIG5vbiBwdWx2aW5hciB0ZWxsdXMgbWFzc2EgZXUgbGVj",
"dHVzLiBQcmFlc2VudCBlbGVpZmVuZCB0b3J0b3IgdG9ydG9yLCBub24gb3JuYXJl",
"IHVybmEgZmFjaWxpc2lzIHNpdCBhbWV0LiBTZWQgcG9ydHRpdG9yLCBlbmltIG9y",
"bmFyZSBlbGVtZW50dW0gcHVsdmluYXIsIGVzdCBtYXNzYSB1bGxhbWNvcnBlciBs",
"aWJlcm8sIGFjIGZhY2lsaXNpcyBhdWd1ZSBvZGlvIG5vbiBhbnRlLiAKCQ==",
]
.concat(),
)
.unwrap()
}
#[test]
fn test_encryption_decryption_flat_big() {
let key: &[u8] = &[0x01; 32];
let data = get_big_data();
let encrypted = encrypt(&data, EncryptionMethod::Aes256Flat, key).unwrap();
let decrypted = decrypt(&encrypted, key).unwrap();
assert_eq!(decrypted.as_slice(), data.as_slice());
}
#[test]
fn test_encryption_decryption_zip_big() {
let key: &[u8] = &[0x01; 32];
let data = get_big_data();
let encrypted = encrypt(&data, EncryptionMethod::Aes256Zip, key).unwrap();
let decrypted = decrypt(&encrypted, key).unwrap();
assert_eq!(decrypted.as_slice(), data.as_slice());
}
}