Convenience function for random AES keys
This commit is contained in:
parent
f806cfec45
commit
5a53f1da6c
|
@ -1,4 +1,5 @@
|
||||||
use crate::bytes::Bytes;
|
use crate::bytes::Bytes;
|
||||||
|
use rand::Rng;
|
||||||
|
|
||||||
pub use openssl::symm::{Cipher, Crypter, Mode};
|
pub use openssl::symm::{Cipher, Crypter, Mode};
|
||||||
|
|
||||||
|
@ -21,6 +22,14 @@ impl Aes {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn new_random_128(pad: bool) -> Aes {
|
||||||
|
let key: Vec<u8> = rand::thread_rng()
|
||||||
|
.sample_iter(rand::distributions::Standard)
|
||||||
|
.take(16)
|
||||||
|
.collect();
|
||||||
|
Self::new(&key, pad).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn cbc(&self, data: Vec<u8>, iv: &[u8], mode: Mode) -> Option<Vec<u8>> {
|
pub fn cbc(&self, data: Vec<u8>, iv: &[u8], mode: Mode) -> Option<Vec<u8>> {
|
||||||
if (!self.pad) && (data.len() % Self::BLOCK_SIZE != 0) {
|
if (!self.pad) && (data.len() % Self::BLOCK_SIZE != 0) {
|
||||||
return None;
|
return None;
|
||||||
|
@ -106,7 +115,6 @@ impl Aes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn update(crypter: &mut Crypter, chunk: &[u8], output: &mut [u8]) {
|
fn update(crypter: &mut Crypter, chunk: &[u8], output: &mut [u8]) {
|
||||||
assert!(
|
assert!(
|
||||||
Self::BLOCK_SIZE
|
Self::BLOCK_SIZE
|
||||||
|
|
23
src/main.rs
23
src/main.rs
|
@ -165,9 +165,8 @@ fn q11() {
|
||||||
let black_box = |mut data: Vec<u8>| -> (bool, Vec<u8>) {
|
let black_box = |mut data: Vec<u8>| -> (bool, Vec<u8>) {
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
let dist = rand::distributions::Standard;
|
let dist = rand::distributions::Standard;
|
||||||
let key: Vec<u8> = rng.sample_iter(&dist).take(16).collect();
|
|
||||||
let iv: Vec<u8> = rng.sample_iter(&dist).take(16).collect();
|
let iv: Vec<u8> = rng.sample_iter(&dist).take(16).collect();
|
||||||
let aes = crypto::Aes::new(&key, true).unwrap();
|
let aes = crypto::Aes::new_random_128(true);
|
||||||
let mut start: Vec<u8> = rng.sample_iter(&dist).take(rng.gen_range(5, 11)).collect();
|
let mut start: Vec<u8> = rng.sample_iter(&dist).take(rng.gen_range(5, 11)).collect();
|
||||||
let mut end: Vec<u8> = rng.sample_iter(&dist).take(rng.gen_range(5, 11)).collect();
|
let mut end: Vec<u8> = rng.sample_iter(&dist).take(rng.gen_range(5, 11)).collect();
|
||||||
|
|
||||||
|
@ -191,12 +190,8 @@ fn q11() {
|
||||||
|
|
||||||
fn q12() {
|
fn q12() {
|
||||||
println!("Running q12");
|
println!("Running q12");
|
||||||
let key: Vec<u8> = rand::thread_rng()
|
|
||||||
.sample_iter(rand::distributions::Standard)
|
|
||||||
.take(16)
|
|
||||||
.collect();
|
|
||||||
let plaintext: Vec<u8> = Bytes::from_base64("Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkgaGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBqdXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUgYnkK").into();
|
let plaintext: Vec<u8> = Bytes::from_base64("Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkgaGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBqdXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUgYnkK").into();
|
||||||
let aes = crate::crypto::Aes::new(&key, true).unwrap();
|
let aes = crate::crypto::Aes::new_random_128(true);
|
||||||
|
|
||||||
let blackbox = |mut data: Vec<u8>| -> Vec<u8> {
|
let blackbox = |mut data: Vec<u8>| -> Vec<u8> {
|
||||||
data.append(&mut plaintext.clone());
|
data.append(&mut plaintext.clone());
|
||||||
|
@ -252,11 +247,6 @@ fn q12() {
|
||||||
|
|
||||||
fn q13() {
|
fn q13() {
|
||||||
println!("Running q13");
|
println!("Running q13");
|
||||||
let key: Vec<u8> = rand::thread_rng()
|
|
||||||
.sample_iter(rand::distributions::Standard)
|
|
||||||
.take(16)
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
let parse = |x: &str| -> std::collections::HashMap<String, String> {
|
let parse = |x: &str| -> std::collections::HashMap<String, String> {
|
||||||
let mut out = std::collections::HashMap::new();
|
let mut out = std::collections::HashMap::new();
|
||||||
for pair in x.split(|y| y == '&') {
|
for pair in x.split(|y| y == '&') {
|
||||||
|
@ -275,14 +265,13 @@ fn q13() {
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let aes = crypto::Aes::new_random_128(true);
|
||||||
let encrypt = |profile: &str| -> Vec<u8> {
|
let encrypt = |profile: &str| -> Vec<u8> {
|
||||||
let profile: Vec<u8> = profile.bytes().collect();
|
let profile: Vec<u8> = profile.bytes().collect();
|
||||||
let aes = crypto::Aes::new(&key, true).unwrap();
|
|
||||||
aes.ecb(profile, Mode::Encrypt).unwrap()
|
aes.ecb(profile, Mode::Encrypt).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
let is_admin = |profile: Vec<u8>| -> bool {
|
let is_admin = |profile: Vec<u8>| -> bool {
|
||||||
let aes = crypto::Aes::new(&key, true).unwrap();
|
|
||||||
let profile = aes.ecb(profile, Mode::Decrypt).unwrap();
|
let profile = aes.ecb(profile, Mode::Decrypt).unwrap();
|
||||||
let profile = String::from_utf8(profile).unwrap();
|
let profile = String::from_utf8(profile).unwrap();
|
||||||
parse(&profile)["role"] == "admin"
|
parse(&profile)["role"] == "admin"
|
||||||
|
@ -306,12 +295,8 @@ fn q13() {
|
||||||
|
|
||||||
fn q14() {
|
fn q14() {
|
||||||
println!("Running q14");
|
println!("Running q14");
|
||||||
let key: Vec<u8> = rand::thread_rng()
|
|
||||||
.sample_iter(rand::distributions::Standard)
|
|
||||||
.take(16)
|
|
||||||
.collect();
|
|
||||||
let plaintext: Vec<u8> = Bytes::from_base64("Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkgaGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBqdXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUgYnkK").into();
|
let plaintext: Vec<u8> = Bytes::from_base64("Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkgaGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBqdXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUgYnkK").into();
|
||||||
let aes = crate::crypto::Aes::new(&key, true).unwrap();
|
let aes = crate::crypto::Aes::new_random_128(true);
|
||||||
let prefix: Vec<u8> = rand::thread_rng()
|
let prefix: Vec<u8> = rand::thread_rng()
|
||||||
.sample_iter(rand::distributions::Standard)
|
.sample_iter(rand::distributions::Standard)
|
||||||
.take(rand::thread_rng().gen_range(5, 11))
|
.take(rand::thread_rng().gen_range(5, 11))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user