[INFO] updating cached repository FGlazov/CryptoPals-Rust [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/FGlazov/CryptoPals-Rust [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/FGlazov/CryptoPals-Rust" "work/ex/clippy-test-run/sources/stable/gh/FGlazov/CryptoPals-Rust"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/FGlazov/CryptoPals-Rust'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/FGlazov/CryptoPals-Rust" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/FGlazov/CryptoPals-Rust"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/FGlazov/CryptoPals-Rust'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 4349868675c55b883b32d32bb2b681b63b134351 [INFO] sha for GitHub repo FGlazov/CryptoPals-Rust: 4349868675c55b883b32d32bb2b681b63b134351 [INFO] validating manifest of FGlazov/CryptoPals-Rust on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of FGlazov/CryptoPals-Rust on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing FGlazov/CryptoPals-Rust [INFO] finished frobbing FGlazov/CryptoPals-Rust [INFO] frobbed toml for FGlazov/CryptoPals-Rust written to work/ex/clippy-test-run/sources/stable/gh/FGlazov/CryptoPals-Rust/Cargo.toml [INFO] started frobbing FGlazov/CryptoPals-Rust [INFO] finished frobbing FGlazov/CryptoPals-Rust [INFO] frobbed toml for FGlazov/CryptoPals-Rust written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/FGlazov/CryptoPals-Rust/Cargo.toml [INFO] crate FGlazov/CryptoPals-Rust has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting FGlazov/CryptoPals-Rust against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/FGlazov/CryptoPals-Rust:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 1255559f93ef43fdd16af3d77da930236d895a2665ff902d8efeb0cebcdbe266 [INFO] running `"docker" "start" "-a" "1255559f93ef43fdd16af3d77da930236d895a2665ff902d8efeb0cebcdbe266"` [INFO] [stderr] Checking itertools v0.7.3 [INFO] [stderr] Checking base64 v0.8.0 [INFO] [stderr] Checking CryptoPals v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `super::repeating_key_xor` [INFO] [stderr] --> src/byte_util.rs:48:9 [INFO] [stderr] | [INFO] [stderr] 48 | use super::repeating_key_xor; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::hamming_distance` [INFO] [stderr] --> src/byte_util.rs:49:9 [INFO] [stderr] | [INFO] [stderr] 49 | use super::hamming_distance; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/byte_util.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_util.rs:28:22 [INFO] [stderr] | [INFO] [stderr] 28 | Ok(s) => return s, [INFO] [stderr] | ^^^^^^^^ help: remove `return` as shown: `s` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_util.rs:65:18 [INFO] [stderr] | [INFO] [stderr] 65 | Ok(v) => return v, [INFO] [stderr] | ^^^^^^^^ help: remove `return` as shown: `v` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::sub_bytes` [INFO] [stderr] --> src/aes/sub_bytes.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | use super::sub_bytes; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::inv_sub_bytes` [INFO] [stderr] --> src/aes/sub_bytes.rs:54:9 [INFO] [stderr] | [INFO] [stderr] 54 | use super::inv_sub_bytes; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/aes/sub_bytes.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `byte_util` [INFO] [stderr] --> src/aes/sub_bytes.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | use byte_util; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::shift_rows` [INFO] [stderr] --> src/aes/shift_rows.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | use super::shift_rows; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::inv_shift_rows` [INFO] [stderr] --> src/aes/shift_rows.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | use super::inv_shift_rows; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/aes/shift_rows.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `byte_util` [INFO] [stderr] --> src/aes/shift_rows.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | use byte_util; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::g2` [INFO] [stderr] --> src/aes/mix_columns.rs:89:9 [INFO] [stderr] | [INFO] [stderr] 89 | use super::g2; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::gf_mult` [INFO] [stderr] --> src/aes/mix_columns.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | use super::gf_mult; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::mix_columns` [INFO] [stderr] --> src/aes/mix_columns.rs:91:9 [INFO] [stderr] | [INFO] [stderr] 91 | use super::mix_columns; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::inv_mix_columns` [INFO] [stderr] --> src/aes/mix_columns.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | use super::inv_mix_columns; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `byte_util` [INFO] [stderr] --> src/aes/mix_columns.rs:93:9 [INFO] [stderr] | [INFO] [stderr] 93 | use byte_util; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/aes/mix_columns.rs:94:9 [INFO] [stderr] | [INFO] [stderr] 94 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::add_round_key` [INFO] [stderr] --> src/aes/add_round_key.rs:8:9 [INFO] [stderr] | [INFO] [stderr] 8 | use super::add_round_key; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/aes/add_round_key.rs:9:9 [INFO] [stderr] | [INFO] [stderr] 9 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `byte_util` [INFO] [stderr] --> src/aes/add_round_key.rs:10:9 [INFO] [stderr] | [INFO] [stderr] 10 | use byte_util; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/aes/key_expansion.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | bytes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/aes/key_expansion.rs:80:17 [INFO] [stderr] | [INFO] [stderr] 80 | let bytes = [ [INFO] [stderr] | _________________^ [INFO] [stderr] 81 | | ((word >> 24) & 0xFF) as u8, [INFO] [stderr] 82 | | ((word >> 16) & 0xFF) as u8, [INFO] [stderr] 83 | | ((word >> 8) & 0xFF) as u8, [INFO] [stderr] 84 | | (word & 0xFF) as u8, [INFO] [stderr] 85 | | ]; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/aes/key_expansion.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::pad_to_16` [INFO] [stderr] --> src/aes/pkcs_7_padding.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | use super::pad_to_16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::depad_from_16` [INFO] [stderr] --> src/aes/pkcs_7_padding.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | use super::depad_from_16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/aes/pkcs_7_padding.rs:23:9 [INFO] [stderr] | [INFO] [stderr] 23 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/aes/mod.rs:131:9 [INFO] [stderr] | [INFO] [stderr] 131 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufRead` [INFO] [stderr] --> src/aes/mod.rs:132:9 [INFO] [stderr] | [INFO] [stderr] 132 | use std::io::BufRead; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufReader` [INFO] [stderr] --> src/aes/mod.rs:133:9 [INFO] [stderr] | [INFO] [stderr] 133 | use std::io::BufReader; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::fs::File` [INFO] [stderr] --> src/aes/mod.rs:134:9 [INFO] [stderr] | [INFO] [stderr] 134 | use std::fs::File; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::path::PathBuf` [INFO] [stderr] --> src/aes/mod.rs:135:9 [INFO] [stderr] | [INFO] [stderr] 135 | use std::path::PathBuf; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `base64` [INFO] [stderr] --> src/aes/mod.rs:136:9 [INFO] [stderr] | [INFO] [stderr] 136 | use base64; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `xor_cracker::rating_creator` [INFO] [stderr] --> src/aes/mod.rs:137:9 [INFO] [stderr] | [INFO] [stderr] 137 | use xor_cracker::rating_creator; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::is_ecb_aes_ciphertext` [INFO] [stderr] --> src/aes_cracker/mod.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | use super::is_ecb_aes_ciphertext; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufRead` [INFO] [stderr] --> src/aes_cracker/mod.rs:25:9 [INFO] [stderr] | [INFO] [stderr] 25 | use std::io::BufRead; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufReader` [INFO] [stderr] --> src/aes_cracker/mod.rs:26:9 [INFO] [stderr] | [INFO] [stderr] 26 | use std::io::BufReader; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::fs::File` [INFO] [stderr] --> src/aes_cracker/mod.rs:27:9 [INFO] [stderr] | [INFO] [stderr] 27 | use std::fs::File; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::path::PathBuf` [INFO] [stderr] --> src/aes_cracker/mod.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | use std::path::PathBuf; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::crack_single_byte_xor_encryption` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:60:9 [INFO] [stderr] | [INFO] [stderr] 60 | use super::crack_single_byte_xor_encryption; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::deref` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:61:9 [INFO] [stderr] | [INFO] [stderr] 61 | use super::deref; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::detect_single_byte_xor_encryption` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:62:9 [INFO] [stderr] | [INFO] [stderr] 62 | use super::detect_single_byte_xor_encryption; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::SingleByteXorDecryptionResult` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | use super::SingleByteXorDecryptionResult; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `string_util::StringUtil` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:64:9 [INFO] [stderr] | [INFO] [stderr] 64 | use string_util::StringUtil; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufRead` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | use std::io::BufRead; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufReader` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | use std::io::BufReader; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::fs::File` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:67:9 [INFO] [stderr] | [INFO] [stderr] 67 | use std::fs::File; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::path::PathBuf` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | use std::path::PathBuf; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `base64` [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:99:9 [INFO] [stderr] | [INFO] [stderr] 99 | use base64; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufRead` [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:100:9 [INFO] [stderr] | [INFO] [stderr] 100 | use std::io::BufRead; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::BufReader` [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | use std::io::BufReader; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::fs::File` [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | use std::fs::File; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::path::PathBuf` [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | use std::path::PathBuf; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_util.rs:28:22 [INFO] [stderr] | [INFO] [stderr] 28 | Ok(s) => return s, [INFO] [stderr] | ^^^^^^^^ help: remove `return` as shown: `s` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_util.rs:65:18 [INFO] [stderr] | [INFO] [stderr] 65 | Ok(v) => return v, [INFO] [stderr] | ^^^^^^^^ help: remove `return` as shown: `v` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/aes/key_expansion.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | bytes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/aes/key_expansion.rs:80:17 [INFO] [stderr] | [INFO] [stderr] 80 | let bytes = [ [INFO] [stderr] | _________________^ [INFO] [stderr] 81 | | ((word >> 24) & 0xFF) as u8, [INFO] [stderr] 82 | | ((word >> 16) & 0xFF) as u8, [INFO] [stderr] 83 | | ((word >> 8) & 0xFF) as u8, [INFO] [stderr] 84 | | (word & 0xFF) as u8, [INFO] [stderr] 85 | | ]; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: function is never used: `from_slice` [INFO] [stderr] --> src/byte_util.rs:26:1 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn from_slice(bytes: &[u8]) -> [u8; 16] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `from_slice_4` [INFO] [stderr] --> src/byte_util.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn from_slice_4(bytes: &[u8]) -> [u8; 4] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `to_u32` [INFO] [stderr] --> src/byte_util.rs:43:1 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn to_u32(b1: u8, b2: u8, b3: u8, b4: u8) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `LOOKUP_TABLE` [INFO] [stderr] --> src/aes/sub_bytes.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | / const LOOKUP_TABLE: [u8; 256] = [ [INFO] [stderr] 3 | | 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, [INFO] [stderr] 4 | | 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, [INFO] [stderr] 5 | | 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, [INFO] [stderr] ... | [INFO] [stderr] 18 | | 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 [INFO] [stderr] 19 | | ]; [INFO] [stderr] | |__^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `INV_LOOKUP_TABLE` [INFO] [stderr] --> src/aes/sub_bytes.rs:21:1 [INFO] [stderr] | [INFO] [stderr] 21 | / const INV_LOOKUP_TABLE: [u8; 256] = [ [INFO] [stderr] 22 | | 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, [INFO] [stderr] 23 | | 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, [INFO] [stderr] 24 | | 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, [INFO] [stderr] ... | [INFO] [stderr] 37 | | 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D [INFO] [stderr] 38 | | ]; [INFO] [stderr] | |__^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `sub_bytes` [INFO] [stderr] --> src/aes/sub_bytes.rs:40:1 [INFO] [stderr] | [INFO] [stderr] 40 | pub fn sub_bytes(state: &mut [u8]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `inv_sub_bytes` [INFO] [stderr] --> src/aes/sub_bytes.rs:46:1 [INFO] [stderr] | [INFO] [stderr] 46 | pub fn inv_sub_bytes(state: &mut [u8]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `AesWrapper` [INFO] [stderr] --> src/aes/wrapper.rs:5:1 [INFO] [stderr] | [INFO] [stderr] 5 | pub struct AesWrapper { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `encrypt` [INFO] [stderr] --> src/aes/wrapper.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | pub fn encrypt(&self, plaintext: Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/aes/wrapper.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn new() -> AesWrapper { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `shift_rows` [INFO] [stderr] --> src/aes/shift_rows.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn shift_rows(state: &mut [u8]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `inv_shift_rows` [INFO] [stderr] --> src/aes/shift_rows.rs:7:1 [INFO] [stderr] | [INFO] [stderr] 7 | pub fn inv_shift_rows(state: &mut [u8]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `shift_rows_helper` [INFO] [stderr] --> src/aes/shift_rows.rs:11:1 [INFO] [stderr] | [INFO] [stderr] 11 | fn shift_rows_helper(state: &mut [u8], inverted: bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `g2` [INFO] [stderr] --> src/aes/mix_columns.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | fn g2(byte: u8) -> u8 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `gf_mult` [INFO] [stderr] --> src/aes/mix_columns.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | fn gf_mult(factor: u8, byte: u8) -> u8 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `mix_columns` [INFO] [stderr] --> src/aes/mix_columns.rs:30:1 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn mix_columns(state: &mut [u8]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `inv_mix_columns` [INFO] [stderr] --> src/aes/mix_columns.rs:59:1 [INFO] [stderr] | [INFO] [stderr] 59 | pub fn inv_mix_columns(state: &mut [u8]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `add_round_key` [INFO] [stderr] --> src/aes/add_round_key.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | pub fn add_round_key(state: &mut [u8], words: &[u8]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `RCON_TABLE` [INFO] [stderr] --> src/aes/key_expansion.rs:4:1 [INFO] [stderr] | [INFO] [stderr] 4 | / const RCON_TABLE: [u8; 256] = [ [INFO] [stderr] 5 | | 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, [INFO] [stderr] 6 | | 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, [INFO] [stderr] 7 | | 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, [INFO] [stderr] ... | [INFO] [stderr] 20 | | 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d [INFO] [stderr] 21 | | ]; [INFO] [stderr] | |__^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `key_expansion` [INFO] [stderr] --> src/aes/key_expansion.rs:23:1 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn key_expansion(key: &[u8]) -> [u8; 176] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `rot_word` [INFO] [stderr] --> src/aes/key_expansion.rs:66:1 [INFO] [stderr] | [INFO] [stderr] 66 | fn rot_word(word: u32) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `sub_word` [INFO] [stderr] --> src/aes/key_expansion.rs:70:1 [INFO] [stderr] | [INFO] [stderr] 70 | fn sub_word(word: u32) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `bytes` [INFO] [stderr] --> src/aes/key_expansion.rs:79:1 [INFO] [stderr] | [INFO] [stderr] 79 | fn bytes(word: u32) -> [u8; 4] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `pad_to_16` [INFO] [stderr] --> src/aes/pkcs_7_padding.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | pub fn pad_to_16(text: &mut Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `depad_from_16` [INFO] [stderr] --> src/aes/pkcs_7_padding.rs:8:1 [INFO] [stderr] | [INFO] [stderr] 8 | pub fn depad_from_16(text: &mut Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `encrypt_exact` [INFO] [stderr] --> src/aes/mod.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | pub fn encrypt_exact(plaintext: &[u8], key: &[u8]) -> [u8; 16] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `decrypt_exact` [INFO] [stderr] --> src/aes/mod.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn decrypt_exact(ciphertext: &[u8], key: &[u8]) -> [u8; 16] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `encrypt_ecb` [INFO] [stderr] --> src/aes/mod.rs:55:1 [INFO] [stderr] | [INFO] [stderr] 55 | pub fn encrypt_ecb(plaintext: Vec, key: &[u8]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `decrypt_ecb` [INFO] [stderr] --> src/aes/mod.rs:68:1 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn decrypt_ecb(ciphertext: Vec, key: &[u8]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `encrypt_cbc` [INFO] [stderr] --> src/aes/mod.rs:80:1 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn encrypt_cbc(plaintext: Vec, key: &[u8], iv: &[u8]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `decrypt_cbc` [INFO] [stderr] --> src/aes/mod.rs:105:1 [INFO] [stderr] | [INFO] [stderr] 105 | pub fn decrypt_cbc(ciphertext: Vec, key: &[u8], iv: &[u8]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `xor` [INFO] [stderr] --> src/aes/mod.rs:122:1 [INFO] [stderr] | [INFO] [stderr] 122 | fn xor(a: &[u8], b: &[u8]) -> [u8; 16] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `is_ecb_aes_ciphertext` [INFO] [stderr] --> src/aes_cracker/mod.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn is_ecb_aes_ciphertext(bytes: &Vec) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `get_block_cipher_detect_string` [INFO] [stderr] --> src/aes_cracker/mod.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | pub fn get_block_cipher_detect_string() -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `encrypt_with_ecb_or_cbc` [INFO] [stderr] --> src/aes_cracker/mod.rs:58:5 [INFO] [stderr] | [INFO] [stderr] 58 | pub fn encrypt_with_ecb_or_cbc(plaintext: &Vec) -> (Vec, bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `detect_single_byte_xor_encryption` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:12:1 [INFO] [stderr] | [INFO] [stderr] 12 | / pub fn detect_single_byte_xor_encryption(candidates_hex: I) -> Vec [INFO] [stderr] 13 | | where I: Iterator [INFO] [stderr] 14 | | { [INFO] [stderr] 15 | | candidates_hex [INFO] [stderr] ... | [INFO] [stderr] 18 | | .collect() [INFO] [stderr] 19 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `deref` [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:21:1 [INFO] [stderr] | [INFO] [stderr] 21 | fn deref(refed : &Vec) -> Vec<&u8> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: crate `CryptoPals` should have a snake case name such as `crypto_pals` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/byte_util.rs:3:39 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn xor_all_bytes(key: &u8, bytes: &Vec<&u8>) -> Vec { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[&u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/byte_util.rs:3:27 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn xor_all_bytes(key: &u8, bytes: &Vec<&u8>) -> Vec { [INFO] [stderr] | ^^^ help: consider passing by value instead: `u8` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/byte_util.rs:28:14 [INFO] [stderr] | [INFO] [stderr] 28 | for i in 0..result.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try replacing the loop by: `result.clone_from_slice(&bytes[..result.len()])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/byte_util.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for i in 0..result.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try replacing the loop by: `result.clone_from_slice(&bytes[..result.len()])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:5 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b4)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:20 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b3)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:41 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:63 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/string_util.rs:70:17 [INFO] [stderr] | [INFO] [stderr] 70 | fn to_hex(byte: &u8) -> String { [INFO] [stderr] | ^^^ help: consider passing by value instead: `u8` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string_util.rs:76:37 [INFO] [stderr] | [INFO] [stderr] 76 | let string_upper_half = numbers[upper_half as usize..upper_half as usize + 1].to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `upper_half as usize..=upper_half as usize` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string_util.rs:77:37 [INFO] [stderr] | [INFO] [stderr] 77 | let string_lower_half = numbers[lower_half as usize..lower_half as usize + 1].to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `lower_half as usize..=lower_half as usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/aes/shift_rows.rs:16:28 [INFO] [stderr] | [INFO] [stderr] 16 | let rotated: u32 = match inverted { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 17 | | true => ith_row.rotate_right((i * 8) as u32), [INFO] [stderr] 18 | | false => ith_row.rotate_left((i * 8) as u32) [INFO] [stderr] 19 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if inverted { ith_row.rotate_right((i * 8) as u32) } else { ith_row.rotate_left((i * 8) as u32) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/aes/mix_columns.rs:4:19 [INFO] [stderr] | [INFO] [stderr] 4 | let shifted = (byte as u16) << 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(byte)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/mix_columns.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | result = result ^ byte; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `result ^= byte` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/mix_columns.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | result = result ^ current_factor; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `result ^= current_factor` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/add_round_key.rs:3:9 [INFO] [stderr] | [INFO] [stderr] 3 | state[i] = state[i] ^ words[i]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `state[i] ^= words[i]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/key_expansion.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/aes/key_expansion.rs:48:24 [INFO] [stderr] | [INFO] [stderr] 48 | let rcon = (RCON_TABLE[i / 4] as u32) << 24; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(RCON_TABLE[i / 4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/key_expansion.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | temp = temp ^ rcon; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `temp ^= rcon` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/key_expansion.rs:60:9 [INFO] [stderr] | [INFO] [stderr] 60 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/aes_cracker/mod.rs:3:37 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn is_ecb_aes_ciphertext(bytes: &Vec) -> bool { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/aes_cracker/mod.rs:58:47 [INFO] [stderr] | [INFO] [stderr] 58 | pub fn encrypt_with_ecb_or_cbc(plaintext: &Vec) -> (Vec, bool) { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/aes_cracker/mod.rs:90:26 [INFO] [stderr] | [INFO] [stderr] 90 | let ciphertext = match use_ecb { [INFO] [stderr] | __________________________^ [INFO] [stderr] 91 | | true => aes::encrypt_ecb(mod_plaintext, &key), [INFO] [stderr] 92 | | false => aes::encrypt_cbc(mod_plaintext, &key, &nonce) [INFO] [stderr] 93 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if use_ecb { aes::encrypt_ecb(mod_plaintext, &key) } else { aes::encrypt_cbc(mod_plaintext, &key, &nonce) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:21:18 [INFO] [stderr] | [INFO] [stderr] 21 | fn deref(refed : &Vec) -> Vec<&u8> { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:27:53 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn crack_single_byte_xor_encryption(ciphertext: &Vec<&u8>) -> SingleByteXorDecryptionResult { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[&u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:15:51 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn crack_repeating_xor_encryption(ciphertext: &Vec) -> RepeatingXorDecryptionResult { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:47:5 [INFO] [stderr] | [INFO] [stderr] 47 | key_size_results.get(0).unwrap().clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&key_size_results[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:50:26 [INFO] [stderr] | [INFO] [stderr] 50 | fn guess_key_size(bytes: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:55:31 [INFO] [stderr] | [INFO] [stderr] 55 | .map(|&(key_size, _)| key_size.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `key_size` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:60:37 [INFO] [stderr] | [INFO] [stderr] 60 | fn averaged_hamming_distance(bytes: &Vec, n: u8) -> f64 { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | compares = compares + 1.0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `compares += 1.0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:81:23 [INFO] [stderr] | [INFO] [stderr] 81 | result += byte_util::hamming_distance(ith_bytes.iter(), jth_bytes.iter()) as f64 / n as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(byte_util::hamming_distance(ith_bytes.iter(), jth_bytes.iter()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:81:96 [INFO] [stderr] | [INFO] [stderr] 81 | result += byte_util::hamming_distance(ith_bytes.iter(), jth_bytes.iter()) as f64 / n as f64; [INFO] [stderr] | ^^^^^^^^ help: try: `f64::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:88:38 [INFO] [stderr] | [INFO] [stderr] 88 | fn n_bytes(n: u8, offset: u8, bytes: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:89:41 [INFO] [stderr] | [INFO] [stderr] 89 | let result_ref = bytes.iter().skip(((offset as u32) * (n as u32)) as usize).take(n as usize); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u32::from(offset)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:89:59 [INFO] [stderr] | [INFO] [stderr] 89 | let result_ref = bytes.iter().skip(((offset as u32) * (n as u32)) as usize).take(n as usize); [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/xor_cracker/rating_creator.rs:3:46 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn create_rating(candidate_decoded_text: &String) -> i32 { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `AesWrapper` [INFO] [stderr] --> src/aes/wrapper.rs:5:1 [INFO] [stderr] | [INFO] [stderr] 5 | pub struct AesWrapper { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `encrypt` [INFO] [stderr] --> src/aes/wrapper.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | pub fn encrypt(&self, plaintext: Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/aes/wrapper.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn new() -> AesWrapper { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: crate `CryptoPals` should have a snake case name such as `crypto_pals` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/byte_util.rs:3:39 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn xor_all_bytes(key: &u8, bytes: &Vec<&u8>) -> Vec { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[&u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/byte_util.rs:3:27 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn xor_all_bytes(key: &u8, bytes: &Vec<&u8>) -> Vec { [INFO] [stderr] | ^^^ help: consider passing by value instead: `u8` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/byte_util.rs:28:14 [INFO] [stderr] | [INFO] [stderr] 28 | for i in 0..result.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try replacing the loop by: `result.clone_from_slice(&bytes[..result.len()])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/byte_util.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for i in 0..result.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try replacing the loop by: `result.clone_from_slice(&bytes[..result.len()])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:5 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b4)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:20 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b3)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:41 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/byte_util.rs:44:63 [INFO] [stderr] | [INFO] [stderr] 44 | (b4 as u32) + ((b3 as u32) << 8) + ((b2 as u32) << 16) + ((b1 as u32) << 24) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(b1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/string_util.rs:70:17 [INFO] [stderr] | [INFO] [stderr] 70 | fn to_hex(byte: &u8) -> String { [INFO] [stderr] | ^^^ help: consider passing by value instead: `u8` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string_util.rs:76:37 [INFO] [stderr] | [INFO] [stderr] 76 | let string_upper_half = numbers[upper_half as usize..upper_half as usize + 1].to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `upper_half as usize..=upper_half as usize` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string_util.rs:77:37 [INFO] [stderr] | [INFO] [stderr] 77 | let string_lower_half = numbers[lower_half as usize..lower_half as usize + 1].to_string(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `lower_half as usize..=lower_half as usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/aes/shift_rows.rs:16:28 [INFO] [stderr] | [INFO] [stderr] 16 | let rotated: u32 = match inverted { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 17 | | true => ith_row.rotate_right((i * 8) as u32), [INFO] [stderr] 18 | | false => ith_row.rotate_left((i * 8) as u32) [INFO] [stderr] 19 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if inverted { ith_row.rotate_right((i * 8) as u32) } else { ith_row.rotate_left((i * 8) as u32) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/aes/mix_columns.rs:4:19 [INFO] [stderr] | [INFO] [stderr] 4 | let shifted = (byte as u16) << 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(byte)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/mix_columns.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | result = result ^ byte; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `result ^= byte` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/mix_columns.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | result = result ^ current_factor; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `result ^= current_factor` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/add_round_key.rs:3:9 [INFO] [stderr] | [INFO] [stderr] 3 | state[i] = state[i] ^ words[i]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `state[i] ^= words[i]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/key_expansion.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/aes/key_expansion.rs:48:24 [INFO] [stderr] | [INFO] [stderr] 48 | let rcon = (RCON_TABLE[i / 4] as u32) << 24; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(RCON_TABLE[i / 4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/key_expansion.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | temp = temp ^ rcon; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `temp ^= rcon` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/aes/key_expansion.rs:60:9 [INFO] [stderr] | [INFO] [stderr] 60 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/aes/mod.rs:162:19 [INFO] [stderr] | [INFO] [stderr] 162 | let key = "YELLOW SUBMARINE".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"YELLOW SUBMARINE"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/aes/mod.rs:172:21 [INFO] [stderr] | [INFO] [stderr] 172 | let input = "The quick brown fox jumps over the lazy dog".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"The quick brown fox jumps over the lazy dog"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/aes/mod.rs:173:19 [INFO] [stderr] | [INFO] [stderr] 173 | let key = "NATURAL FIZZLING".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"NATURAL FIZZLING"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/aes/mod.rs:174:18 [INFO] [stderr] | [INFO] [stderr] 174 | let iv = "YELLOW SUBMARINE".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"YELLOW SUBMARINE"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/aes/mod.rs:193:53 [INFO] [stderr] | [INFO] [stderr] 193 | let actual = super::decrypt_ecb(ciphertext, "YELLOW SUBMARINE".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"YELLOW SUBMARINE"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/aes/mod.rs:213:53 [INFO] [stderr] | [INFO] [stderr] 213 | let actual = super::decrypt_cbc(ciphertext, "YELLOW SUBMARINE".as_bytes(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"YELLOW SUBMARINE"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/aes_cracker/mod.rs:3:37 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn is_ecb_aes_ciphertext(bytes: &Vec) -> bool { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/aes_cracker/mod.rs:58:47 [INFO] [stderr] | [INFO] [stderr] 58 | pub fn encrypt_with_ecb_or_cbc(plaintext: &Vec) -> (Vec, bool) { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/aes_cracker/mod.rs:90:26 [INFO] [stderr] | [INFO] [stderr] 90 | let ciphertext = match use_ecb { [INFO] [stderr] | __________________________^ [INFO] [stderr] 91 | | true => aes::encrypt_ecb(mod_plaintext, &key), [INFO] [stderr] 92 | | false => aes::encrypt_cbc(mod_plaintext, &key, &nonce) [INFO] [stderr] 93 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if use_ecb { aes::encrypt_ecb(mod_plaintext, &key) } else { aes::encrypt_cbc(mod_plaintext, &key, &nonce) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:21:18 [INFO] [stderr] | [INFO] [stderr] 21 | fn deref(refed : &Vec) -> Vec<&u8> { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:27:53 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn crack_single_byte_xor_encryption(ciphertext: &Vec<&u8>) -> SingleByteXorDecryptionResult { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[&u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/xor_cracker/single_byte_xor_cracker.rs:97:54 [INFO] [stderr] | [INFO] [stderr] 97 | let result: &SingleByteXorDecryptionResult = decrypted_results.get(0).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&decrypted_results[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:15:51 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn crack_repeating_xor_encryption(ciphertext: &Vec) -> RepeatingXorDecryptionResult { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:47:5 [INFO] [stderr] | [INFO] [stderr] 47 | key_size_results.get(0).unwrap().clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&key_size_results[0]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:50:26 [INFO] [stderr] | [INFO] [stderr] 50 | fn guess_key_size(bytes: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:55:31 [INFO] [stderr] | [INFO] [stderr] 55 | .map(|&(key_size, _)| key_size.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `key_size` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:60:37 [INFO] [stderr] | [INFO] [stderr] 60 | fn averaged_hamming_distance(bytes: &Vec, n: u8) -> f64 { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | compares = compares + 1.0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `compares += 1.0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:81:23 [INFO] [stderr] | [INFO] [stderr] 81 | result += byte_util::hamming_distance(ith_bytes.iter(), jth_bytes.iter()) as f64 / n as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(byte_util::hamming_distance(ith_bytes.iter(), jth_bytes.iter()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:81:96 [INFO] [stderr] | [INFO] [stderr] 81 | result += byte_util::hamming_distance(ith_bytes.iter(), jth_bytes.iter()) as f64 / n as f64; [INFO] [stderr] | ^^^^^^^^ help: try: `f64::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:88:38 [INFO] [stderr] | [INFO] [stderr] 88 | fn n_bytes(n: u8, offset: u8, bytes: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:89:41 [INFO] [stderr] | [INFO] [stderr] 89 | let result_ref = bytes.iter().skip(((offset as u32) * (n as u32)) as usize).take(n as usize); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u32::from(offset)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/xor_cracker/repeating_xor_cracker.rs:89:59 [INFO] [stderr] | [INFO] [stderr] 89 | let result_ref = bytes.iter().skip(((offset as u32) * (n as u32)) as usize).take(n as usize); [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/xor_cracker/rating_creator.rs:3:46 [INFO] [stderr] | [INFO] [stderr] 3 | pub fn create_rating(candidate_decoded_text: &String) -> i32 { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 5.21s [INFO] running `"docker" "inspect" "1255559f93ef43fdd16af3d77da930236d895a2665ff902d8efeb0cebcdbe266"` [INFO] running `"docker" "rm" "-f" "1255559f93ef43fdd16af3d77da930236d895a2665ff902d8efeb0cebcdbe266"` [INFO] [stdout] 1255559f93ef43fdd16af3d77da930236d895a2665ff902d8efeb0cebcdbe266