deadbolt-crypto 0.1.1

Cryptography wrapper for deadbolt
Documentation
use rand::{Rng, RngCore};

pub struct Random {}

const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
                        abcdefghijklmnopqrstuvwxyz\
                        0123456789";

const CHARSET_WITH_PUNCTUATION: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
                        abcdefghijklmnopqrstuvwxyz\
                        0123456789\
                        ~!@#$%^&*()-_=+[]{};':,./<>?";

impl Random {
    pub fn get_rand_bytes() -> Vec<u8> {
        let mut b: [u8; 32] = [0u8; 32];
        let mut rng = rand::thread_rng();
        rng.fill(&mut b);

        b.to_vec()
    }

    pub fn get_rand_chars(len: usize, punctuation: bool) -> String {
        let mut rng = rand::thread_rng();

        let mut charset = CHARSET;
        if punctuation {
            charset = CHARSET_WITH_PUNCTUATION;
        }

        let password: String = (0..len)
            .map(|_| {
                let idx = rng.gen_range(0..charset.len());
                charset[idx] as char
            })
            .collect();

        password
    }
}