Documentation
#[cfg_attr(not(target_arch = "wasm32"), allow(unused_imports))]
#[cfg(test)]
mod aes_tests {
    use std::io::Read;

    use bsv::{encryption::AESAlgorithms, hash::Hash, AES};
    use rand_core::{OsRng, RngCore};

    #[test]
    fn encrypt_aes_128_cbc() {
        let key = &Hash::sha_256(hex::encode("Key Please").as_bytes()).to_bytes()[0..16];
        let iv = &Hash::sha_256(hex::encode("IV Please").as_bytes()).to_bytes()[0..16];

        let message = b"Hello world!";

        let encrypted = AES::encrypt(key, iv, message, AESAlgorithms::AES128_CBC).unwrap();

        assert_eq!(encrypted, [92, 179, 8, 184, 112, 133, 174, 231, 150, 247, 104, 190, 12, 208, 117, 210]);

        let decrypted = AES::decrypt(key, iv, &encrypted, AESAlgorithms::AES128_CBC).unwrap();
        assert_eq!(decrypted, message)
    }

    #[test]
    fn encrypt_aes_256_cbc() {
        let key = &Hash::sha_256(hex::encode("Key Please").as_bytes()).to_bytes()[0..32];
        let iv = &Hash::sha_256(hex::encode("IV Please").as_bytes()).to_bytes()[0..16];

        let message = b"Hello world!";

        let encrypted = AES::encrypt(key, iv, message, AESAlgorithms::AES256_CBC).unwrap();

        assert_eq!(encrypted, [39, 197, 167, 70, 112, 186, 22, 36, 107, 166, 185, 246, 5, 88, 8, 119]);

        let decrypted = AES::decrypt(key, iv, &encrypted, AESAlgorithms::AES256_CBC).unwrap();
        assert_eq!(decrypted, message)
    }

    #[test]
    fn encrypt_aes_128_ctr() {
        let key = &Hash::sha_256(hex::encode("Key Please").as_bytes()).to_bytes()[0..16];
        let iv = &Hash::sha_256(hex::encode("IV Please").as_bytes()).to_bytes()[0..16];

        let message = b"Hello world!";

        let encrypted = AES::encrypt(key, iv, message, AESAlgorithms::AES128_CTR).unwrap();

        assert_eq!(encrypted, [225, 100, 196, 107, 4, 133, 109, 174, 65, 202, 145, 203], "Encrypted message doesnt match");

        let decrypted = AES::decrypt(key, iv, &encrypted, AESAlgorithms::AES128_CTR).unwrap();
        assert_eq!(decrypted, message)
    }

    #[test]
    fn encrypt_aes_256_ctr() {
        let key = &Hash::sha_256(hex::encode("Key Please").as_bytes()).to_bytes()[0..32];
        let iv = &Hash::sha_256(hex::encode("IV Please").as_bytes()).to_bytes()[0..16];

        let message = b"Hello world!";

        let encrypted = AES::encrypt(key, iv, message, AESAlgorithms::AES256_CTR).unwrap();

        assert_eq!(encrypted, [32, 173, 59, 177, 23, 255, 144, 247, 130, 230, 95, 215], "Encrypted message doesnt match");

        let decrypted = AES::decrypt(key, iv, &encrypted, AESAlgorithms::AES256_CTR).unwrap();
        assert_eq!(decrypted, message)
    }
}